const Function *F = dyn_cast<Function>(GV);
if (!F) return;
+ // Save function name for later type emission.
+ if (Subtarget->isTargetCygMing() && F->isDeclaration())
+ CygMingStubs.insert(Name);
+
// We don't want to decorate non-stdcall or non-fastcall functions right now
unsigned CC = F->getCallingConv();
if (CC != CallingConv::X86_StdCall && CC != CallingConv::X86_FastCall)
O << Name;
}
+ if (needCloseParen)
+ O << ')';
+
// Assemble call via PLT for externally visible symbols.
if (MO.getTargetFlags() == X86II::MO_PLT)
O << "@PLT";
- if (Subtarget->isTargetCygMing() && GV->isDeclaration())
- // Save function name for later type emission
- CygMingStubs.insert(Name);
-
printOffset(MO.getOffset());
- if (needCloseParen)
- O << ')';
return;
}
}
case MachineOperand::MO_GlobalAddress: {
bool isMemOp = Modifier && !strcmp(Modifier, "mem");
+ if (!isMemOp)
+ O << '$';
+
const GlobalValue *GV = MO.getGlobal();
std::string Name = Mang->getValueName(GV);
decorateName(Name, GV);
bool needCloseParen = false;
- if (!isMemOp)
- O << '$';
- else if (Name[0] == '$') {
+ if (Name[0] == '$') {
// The name begins with a dollar-sign. In order to avoid having it look
// like an integer immediate to the assembler, enclose it in parens.
O << '(';
MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE){
HiddenGVStubs.insert(Name);
printSuffixedName(Name, "$non_lazy_ptr");
+ } else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
+ FnStubs.insert(Name);
+ printSuffixedName(Name, "$stub");
} else {
O << Name;
}
if (needCloseParen)
O << ')';
+ // Assemble call via PLT for externally visible symbols.
+ if (MO.getTargetFlags() == X86II::MO_PLT)
+ O << "@PLT";
+
printOffset(MO.getOffset());
break;
}
void X86ATTAsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
const MachineBasicBlock *MBB,
- unsigned uid) const
-{
+ unsigned uid) const {
const char *JTEntryDirective = MJTI->getEntrySize() == 4 ?
TAI->getData32bitsDirective() : TAI->getData64bitsDirective();