#include "llvm/ADT/StringExtras.h"
#include "llvm/Assembly/Writer.h"
#include "llvm/CodeGen/DwarfWriter.h"
+#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Mangler.h"
#include "llvm/Target/TargetAsmInfo.h"
#include "llvm/Target/TargetOptions.h"
break;
default:
- assert(0 && "Unsupported DecorationStyle");
+ LLVM_UNREACHABLE("Unsupported DecorationStyle");
}
}
// Print out labels for the function.
const Function *F = MF.getFunction();
unsigned CC = F->getCallingConv();
+ unsigned FnAlign = MF.getAlignment();
// Populate function information map. Actually, We don't want to populate
// non-stdcall or non-fastcall functions' information right now.
decorateName(CurrentFnName, F);
SwitchToTextSection("_text", F);
-
- unsigned FnAlign = 4;
- if (F->hasFnAttr(Attribute::OptimizeForSize))
- FnAlign = 1;
switch (F->getLinkage()) {
- default: assert(0 && "Unsupported linkage type!");
+ default: LLVM_UNREACHABLE("Unsupported linkage type!");
case Function::PrivateLinkage:
case Function::InternalLinkage:
EmitAlignment(FnAlign);
case MachineOperand::MO_Immediate:
O << MO.getImm();
return;
- case MachineOperand::MO_MachineBasicBlock:
- printBasicBlockLabel(MO.getMBB());
- return;
case MachineOperand::MO_JumpTableIndex: {
bool isMemOp = Modifier && !strcmp(Modifier, "mem");
if (!isMemOp) O << "OFFSET ";
return;
}
case MachineOperand::MO_GlobalAddress: {
- bool isCallOp = Modifier && !strcmp(Modifier, "call");
bool isMemOp = Modifier && !strcmp(Modifier, "mem");
GlobalValue *GV = MO.getGlobal();
- std::string Name = Mang->getValueName(GV);
-
+ std::string Name = Mang->getMangledName(GV);
decorateName(Name, GV);
- if (!isMemOp && !isCallOp) O << "OFFSET ";
- if (GV->hasDLLImportLinkage()) {
- // FIXME: This should be fixed with full support of stdcall & fastcall
- // CC's
+ if (!isMemOp) O << "OFFSET ";
+
+ // Handle dllimport linkage.
+ // FIXME: This should be fixed with full support of stdcall & fastcall
+ // CC's
+ if (MO.getTargetFlags() == X86II::MO_DLLIMPORT)
O << "__imp_";
- }
+
O << Name;
printOffset(MO.getOffset());
return;
}
case MachineOperand::MO_ExternalSymbol: {
- bool isCallOp = Modifier && !strcmp(Modifier, "call");
- if (!isCallOp) O << "OFFSET ";
O << TAI->getGlobalPrefix() << MO.getSymbolName();
return;
}
}
}
+void X86IntelAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo){
+ const MachineOperand &MO = MI->getOperand(OpNo);
+ switch (MO.getType()) {
+ default: LLVM_UNREACHABLE("Unknown pcrel immediate operand");
+ case MachineOperand::MO_Immediate:
+ O << MO.getImm();
+ return;
+ case MachineOperand::MO_MachineBasicBlock:
+ printBasicBlockLabel(MO.getMBB());
+ return;
+
+ case MachineOperand::MO_GlobalAddress: {
+ GlobalValue *GV = MO.getGlobal();
+ std::string Name = Mang->getMangledName(GV);
+ decorateName(Name, GV);
+
+ // Handle dllimport linkage.
+ // FIXME: This should be fixed with full support of stdcall & fastcall
+ // CC's
+ if (MO.getTargetFlags() == X86II::MO_DLLIMPORT)
+ O << "__imp_";
+ O << Name;
+ printOffset(MO.getOffset());
+ return;
+ }
+
+ case MachineOperand::MO_ExternalSymbol:
+ O << TAI->getGlobalPrefix() << MO.getSymbolName();
+ return;
+ }
+}
+
+
void X86IntelAsmPrinter::printLeaMemReference(const MachineInstr *MI,
unsigned Op,
const char *Modifier) {
// Emit declarations for external functions.
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
if (I->isDeclaration()) {
- std::string Name = Mang->getValueName(I);
+ std::string Name = Mang->getMangledName(I);
decorateName(Name, I);
O << "\tEXTERN " ;
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
I != E; ++I) {
if (I->isDeclaration()) {
- std::string Name = Mang->getValueName(I);
+ std::string Name = Mang->getMangledName(I);
O << "\tEXTERN " ;
if (I->hasDLLImportLinkage()) {
if (EmitSpecialLLVMGlobal(I))
continue;
- std::string name = Mang->getValueName(I);
+ std::string name = Mang->getMangledName(I);
Constant *C = I->getInitializer();
unsigned Align = TD->getPreferredAlignmentLog(I);
bool bCustomSegment = false;
SwitchToSection(TAI->getDataSection());
break;
default:
- assert(0 && "Unknown linkage type!");
+ LLVM_UNREACHABLE("Unknown linkage type!");
}
if (!bCustomSegment)