rename TAI -> MAI, being careful not to make MAILJMP instructions :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79777 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-22 21:43:10 +00:00
parent 90aa1f92c1
commit 33adcfb4d2
50 changed files with 517 additions and 517 deletions

View File

@ -96,7 +96,7 @@ namespace llvm {
/// Target Asm Printer information. /// Target Asm Printer information.
/// ///
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
/// Target Register Information. /// Target Register Information.
/// ///

View File

@ -63,10 +63,10 @@ namespace llvm {
/// beginAssembly/finishAssembly - Emit module metadata as assembly code. /// beginAssembly/finishAssembly - Emit module metadata as assembly code.
virtual void beginAssembly(raw_ostream &OS, AsmPrinter &AP, virtual void beginAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI); const MCAsmInfo &MAI);
virtual void finishAssembly(raw_ostream &OS, AsmPrinter &AP, virtual void finishAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI); const MCAsmInfo &MAI);
virtual ~GCMetadataPrinter(); virtual ~GCMetadataPrinter();
}; };

View File

@ -37,7 +37,7 @@ namespace llvm {
SectionKind getKind() const { return Kind; } SectionKind getKind() const { return Kind; }
virtual void PrintSwitchToSection(const MCAsmInfo &TAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const = 0; raw_ostream &OS) const = 0;
}; };
@ -62,7 +62,7 @@ namespace llvm {
const std::string &getName() const { return Name; } const std::string &getName() const { return Name; }
bool isDirective() const { return IsDirective; } bool isDirective() const { return IsDirective; }
virtual void PrintSwitchToSection(const MCAsmInfo &TAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
}; };

View File

@ -48,7 +48,7 @@ public:
/// ShouldOmitSectionDirective - Decides whether a '.section' directive /// ShouldOmitSectionDirective - Decides whether a '.section' directive
/// should be printed before the section name /// should be printed before the section name
bool ShouldOmitSectionDirective(const char *Name, bool ShouldOmitSectionDirective(const char *Name,
const MCAsmInfo &TAI) const; const MCAsmInfo &MAI) const;
/// ShouldPrintSectionType - Only prints the section type if supported /// ShouldPrintSectionType - Only prints the section type if supported
bool ShouldPrintSectionType(unsigned Ty) const; bool ShouldPrintSectionType(unsigned Ty) const;
@ -171,7 +171,7 @@ public:
unsigned getType() const { return Type; } unsigned getType() const { return Type; }
unsigned getFlags() const { return Flags; } unsigned getFlags() const { return Flags; }
virtual void PrintSwitchToSection(const MCAsmInfo &TAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
@ -179,7 +179,7 @@ public:
/// MCSectionELF subclasses with target specific section flags should /// MCSectionELF subclasses with target specific section flags should
/// implement this method if they end up adding letters to the attributes /// implement this method if they end up adding letters to the attributes
/// list. /// list.
virtual void PrintTargetSpecificSectionFlags(const MCAsmInfo &TAI, virtual void PrintTargetSpecificSectionFlags(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
} }

View File

@ -166,7 +166,7 @@ public:
unsigned &TAA, // Out. unsigned &TAA, // Out.
unsigned &StubSize); // Out. unsigned &StubSize); // Out.
virtual void PrintSwitchToSection(const MCAsmInfo &TAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
}; };

View File

@ -241,7 +241,7 @@ namespace llvm {
/// ///
/// \arg AP - If given, an AsmPrinter to use for printing instructions. /// \arg AP - If given, an AsmPrinter to use for printing instructions.
MCStreamer *createAsmStreamer(MCContext &Ctx, raw_ostream &OS, MCStreamer *createAsmStreamer(MCContext &Ctx, raw_ostream &OS,
const MCAsmInfo &TAI, AsmPrinter *AP = 0); const MCAsmInfo &MAI, AsmPrinter *AP = 0);
// FIXME: These two may end up getting rolled into a single // FIXME: These two may end up getting rolled into a single
// createObjectStreamer interface, which implements the assembler backend, and // createObjectStreamer interface, which implements the assembler backend, and

View File

@ -464,7 +464,7 @@ public:
/// Measure the specified inline asm to determine an approximation of its /// Measure the specified inline asm to determine an approximation of its
/// length. /// length.
virtual unsigned getInlineAsmLength(const char *Str, virtual unsigned getInlineAsmLength(const char *Str,
const MCAsmInfo &TAI) const; const MCAsmInfo &MAI) const;
}; };
/// TargetInstrInfoImpl - This is the default implementation of /// TargetInstrInfoImpl - This is the default implementation of

View File

@ -53,7 +53,7 @@ namespace llvm {
const std::string &Features); const std::string &Features);
typedef AsmPrinter *(*AsmPrinterCtorTy)(formatted_raw_ostream &OS, typedef AsmPrinter *(*AsmPrinterCtorTy)(formatted_raw_ostream &OS,
TargetMachine &TM, TargetMachine &TM,
const MCAsmInfo *TAI, const MCAsmInfo *MAI,
bool VerboseAsm); bool VerboseAsm);
typedef TargetAsmParser *(*AsmParserCtorTy)(const Target &T, typedef TargetAsmParser *(*AsmParserCtorTy)(const Target &T,
MCAsmParser &P); MCAsmParser &P);
@ -140,10 +140,10 @@ namespace llvm {
/// createAsmPrinter - Create a target specific assembly printer pass. /// createAsmPrinter - Create a target specific assembly printer pass.
AsmPrinter *createAsmPrinter(formatted_raw_ostream &OS, TargetMachine &TM, AsmPrinter *createAsmPrinter(formatted_raw_ostream &OS, TargetMachine &TM,
const MCAsmInfo *TAI, bool Verbose) const { const MCAsmInfo *MAI, bool Verbose) const {
if (!AsmPrinterCtorFn) if (!AsmPrinterCtorFn)
return 0; return 0;
return AsmPrinterCtorFn(OS, TM, TAI, Verbose); return AsmPrinterCtorFn(OS, TM, MAI, Verbose);
} }
/// createAsmParser - Create a target specific assembly parser. /// createAsmParser - Create a target specific assembly parser.
@ -406,8 +406,8 @@ namespace llvm {
private: private:
static AsmPrinter *Allocator(formatted_raw_ostream &OS, TargetMachine &TM, static AsmPrinter *Allocator(formatted_raw_ostream &OS, TargetMachine &TM,
const MCAsmInfo *TAI, bool Verbose) { const MCAsmInfo *MAI, bool Verbose) {
return new AsmPrinterImpl(OS, TM, TAI, Verbose); return new AsmPrinterImpl(OS, TM, MAI, Verbose);
} }
}; };

View File

@ -52,7 +52,7 @@ char AsmPrinter::ID = 0;
AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm, AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm,
const MCAsmInfo *T, bool VDef) const MCAsmInfo *T, bool VDef)
: MachineFunctionPass(&ID), FunctionNumber(0), O(o), : MachineFunctionPass(&ID), FunctionNumber(0), O(o),
TM(tm), TAI(T), TRI(tm.getRegisterInfo()), TM(tm), MAI(T), TRI(tm.getRegisterInfo()),
OutContext(*new MCContext()), OutContext(*new MCContext()),
OutStreamer(*createAsmStreamer(OutContext, O, *T, this)), OutStreamer(*createAsmStreamer(OutContext, O, *T, this)),
@ -99,16 +99,16 @@ bool AsmPrinter::doInitialization(Module &M) {
const_cast<TargetLoweringObjectFile&>(getObjFileLowering()) const_cast<TargetLoweringObjectFile&>(getObjFileLowering())
.Initialize(OutContext, TM); .Initialize(OutContext, TM);
Mang = new Mangler(M, TAI->getGlobalPrefix(), TAI->getPrivateGlobalPrefix(), Mang = new Mangler(M, MAI->getGlobalPrefix(), MAI->getPrivateGlobalPrefix(),
TAI->getLinkerPrivateGlobalPrefix()); MAI->getLinkerPrivateGlobalPrefix());
if (TAI->doesAllowQuotesInName()) if (MAI->doesAllowQuotesInName())
Mang->setUseQuotes(true); Mang->setUseQuotes(true);
GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>(); GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
assert(MI && "AsmPrinter didn't require GCModuleInfo?"); assert(MI && "AsmPrinter didn't require GCModuleInfo?");
if (TAI->hasSingleParameterDotFile()) { if (MAI->hasSingleParameterDotFile()) {
/* Very minimal debug info. It is ignored if we emit actual /* Very minimal debug info. It is ignored if we emit actual
debug info. If we don't, this at helps the user find where debug info. If we don't, this at helps the user find where
a function came from. */ a function came from. */
@ -117,22 +117,22 @@ bool AsmPrinter::doInitialization(Module &M) {
for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I) for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I)
if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I)) if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I))
MP->beginAssembly(O, *this, *TAI); MP->beginAssembly(O, *this, *MAI);
if (!M.getModuleInlineAsm().empty()) if (!M.getModuleInlineAsm().empty())
O << TAI->getCommentString() << " Start of file scope inline assembly\n" O << MAI->getCommentString() << " Start of file scope inline assembly\n"
<< M.getModuleInlineAsm() << M.getModuleInlineAsm()
<< '\n' << TAI->getCommentString() << '\n' << MAI->getCommentString()
<< " End of file scope inline assembly\n"; << " End of file scope inline assembly\n";
if (TAI->doesSupportDebugInformation() || if (MAI->doesSupportDebugInformation() ||
TAI->doesSupportExceptionHandling()) { MAI->doesSupportExceptionHandling()) {
MMI = getAnalysisIfAvailable<MachineModuleInfo>(); MMI = getAnalysisIfAvailable<MachineModuleInfo>();
if (MMI) if (MMI)
MMI->AnalyzeModule(M); MMI->AnalyzeModule(M);
DW = getAnalysisIfAvailable<DwarfWriter>(); DW = getAnalysisIfAvailable<DwarfWriter>();
if (DW) if (DW)
DW->BeginModule(&M, MMI, O, this, TAI); DW->BeginModule(&M, MMI, O, this, MAI);
} }
return false; return false;
@ -145,11 +145,11 @@ bool AsmPrinter::doFinalization(Module &M) {
PrintGlobalVariable(I); PrintGlobalVariable(I);
// Emit final debug information. // Emit final debug information.
if (TAI->doesSupportDebugInformation() || TAI->doesSupportExceptionHandling()) if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
DW->EndModule(); DW->EndModule();
// If the target wants to know about weak references, print them all. // If the target wants to know about weak references, print them all.
if (TAI->getWeakRefDirective()) { if (MAI->getWeakRefDirective()) {
// FIXME: This is not lazy, it would be nice to only print weak references // FIXME: This is not lazy, it would be nice to only print weak references
// to stuff that is actually used. Note that doing so would require targets // to stuff that is actually used. Note that doing so would require targets
// to notice uses in operands (due to constant exprs etc). This should // to notice uses in operands (due to constant exprs etc). This should
@ -159,16 +159,16 @@ bool AsmPrinter::doFinalization(Module &M) {
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
I != E; ++I) { I != E; ++I) {
if (I->hasExternalWeakLinkage()) if (I->hasExternalWeakLinkage())
O << TAI->getWeakRefDirective() << Mang->getMangledName(I) << '\n'; O << MAI->getWeakRefDirective() << Mang->getMangledName(I) << '\n';
} }
for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) { for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (I->hasExternalWeakLinkage()) if (I->hasExternalWeakLinkage())
O << TAI->getWeakRefDirective() << Mang->getMangledName(I) << '\n'; O << MAI->getWeakRefDirective() << Mang->getMangledName(I) << '\n';
} }
} }
if (TAI->getSetDirective()) { if (MAI->getSetDirective()) {
O << '\n'; O << '\n';
for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end(); for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
I != E; ++I) { I != E; ++I) {
@ -177,16 +177,16 @@ bool AsmPrinter::doFinalization(Module &M) {
const GlobalValue *GV = cast<GlobalValue>(I->getAliasedGlobal()); const GlobalValue *GV = cast<GlobalValue>(I->getAliasedGlobal());
std::string Target = Mang->getMangledName(GV); std::string Target = Mang->getMangledName(GV);
if (I->hasExternalLinkage() || !TAI->getWeakRefDirective()) if (I->hasExternalLinkage() || !MAI->getWeakRefDirective())
O << "\t.globl\t" << Name << '\n'; O << "\t.globl\t" << Name << '\n';
else if (I->hasWeakLinkage()) else if (I->hasWeakLinkage())
O << TAI->getWeakRefDirective() << Name << '\n'; O << MAI->getWeakRefDirective() << Name << '\n';
else if (!I->hasLocalLinkage()) else if (!I->hasLocalLinkage())
llvm_unreachable("Invalid alias linkage"); llvm_unreachable("Invalid alias linkage");
printVisibility(Name, I->getVisibility()); printVisibility(Name, I->getVisibility());
O << TAI->getSetDirective() << ' ' << Name << ", " << Target << '\n'; O << MAI->getSetDirective() << ' ' << Name << ", " << Target << '\n';
} }
} }
@ -194,14 +194,14 @@ bool AsmPrinter::doFinalization(Module &M) {
assert(MI && "AsmPrinter didn't require GCModuleInfo?"); assert(MI && "AsmPrinter didn't require GCModuleInfo?");
for (GCModuleInfo::iterator I = MI->end(), E = MI->begin(); I != E; ) for (GCModuleInfo::iterator I = MI->end(), E = MI->begin(); I != E; )
if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I)) if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I))
MP->finishAssembly(O, *this, *TAI); MP->finishAssembly(O, *this, *MAI);
// If we don't have any trampolines, then we don't require stack memory // If we don't have any trampolines, then we don't require stack memory
// to be executable. Some targets have a directive to declare this. // to be executable. Some targets have a directive to declare this.
Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline"); Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline");
if (!InitTrampolineIntrinsic || InitTrampolineIntrinsic->use_empty()) if (!InitTrampolineIntrinsic || InitTrampolineIntrinsic->use_empty())
if (TAI->getNonexecutableStackDirective()) if (MAI->getNonexecutableStackDirective())
O << TAI->getNonexecutableStackDirective() << '\n'; O << MAI->getNonexecutableStackDirective() << '\n';
delete Mang; Mang = 0; delete Mang; Mang = 0;
DW = 0; MMI = 0; DW = 0; MMI = 0;
@ -214,7 +214,7 @@ std::string
AsmPrinter::getCurrentFunctionEHName(const MachineFunction *MF) const { AsmPrinter::getCurrentFunctionEHName(const MachineFunction *MF) const {
assert(MF && "No machine function?"); assert(MF && "No machine function?");
return Mang->getMangledName(MF->getFunction(), ".eh", return Mang->getMangledName(MF->getFunction(), ".eh",
TAI->is_EHSymbolPrivate()); MAI->is_EHSymbolPrivate());
} }
void AsmPrinter::SetupMachineFunction(MachineFunction &MF) { void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
@ -309,11 +309,11 @@ void AsmPrinter::EmitConstantPool(MachineConstantPool *MCP) {
const Type *Ty = CPE.getType(); const Type *Ty = CPE.getType();
Offset = NewOffset + TM.getTargetData()->getTypeAllocSize(Ty); Offset = NewOffset + TM.getTargetData()->getTypeAllocSize(Ty);
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_'
<< CPI << ':'; << CPI << ':';
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " constant "; O << MAI->getCommentString() << " constant ";
WriteTypeSymbolic(O, CPE.getType(), MF->getFunction()->getParent()); WriteTypeSymbolic(O, CPE.getType(), MF->getFunction()->getParent());
} }
O << '\n'; O << '\n';
@ -369,7 +369,7 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
// the number of relocations the assembler will generate for the jump table. // the number of relocations the assembler will generate for the jump table.
// Set directives are all printed before the jump table itself. // Set directives are all printed before the jump table itself.
SmallPtrSet<MachineBasicBlock*, 16> EmittedSets; SmallPtrSet<MachineBasicBlock*, 16> EmittedSets;
if (TAI->getSetDirective() && IsPic) if (MAI->getSetDirective() && IsPic)
for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii)
if (EmittedSets.insert(JTBBs[ii])) if (EmittedSets.insert(JTBBs[ii]))
printPICJumpTableSetLabel(i, JTBBs[ii]); printPICJumpTableSetLabel(i, JTBBs[ii]);
@ -379,11 +379,11 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
// the assembler and linker the extents of the jump table object. The // the assembler and linker the extents of the jump table object. The
// second label is actually referenced by the code. // second label is actually referenced by the code.
if (JTInDiffSection) { if (JTInDiffSection) {
if (const char *JTLabelPrefix = TAI->getJumpTableSpecialLabelPrefix()) if (const char *JTLabelPrefix = MAI->getJumpTableSpecialLabelPrefix())
O << JTLabelPrefix << "JTI" << getFunctionNumber() << '_' << i << ":\n"; O << JTLabelPrefix << "JTI" << getFunctionNumber() << '_' << i << ":\n";
} }
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << i << ":\n"; << '_' << i << ":\n";
for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) { for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) {
@ -400,11 +400,11 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
// Use JumpTableDirective otherwise honor the entry size from the jump table // Use JumpTableDirective otherwise honor the entry size from the jump table
// info. // info.
const char *JTEntryDirective = TAI->getJumpTableDirective(isPIC); const char *JTEntryDirective = MAI->getJumpTableDirective(isPIC);
bool HadJTEntryDirective = JTEntryDirective != NULL; bool HadJTEntryDirective = JTEntryDirective != NULL;
if (!HadJTEntryDirective) { if (!HadJTEntryDirective) {
JTEntryDirective = MJTI->getEntrySize() == 4 ? JTEntryDirective = MJTI->getEntrySize() == 4 ?
TAI->getData32bitsDirective() : TAI->getData64bitsDirective(); MAI->getData32bitsDirective() : MAI->getData64bitsDirective();
} }
O << JTEntryDirective << ' '; O << JTEntryDirective << ' ';
@ -416,15 +416,15 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
// references to the target basic blocks. // references to the target basic blocks.
if (!isPIC) { if (!isPIC) {
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
} else if (TAI->getSetDirective()) { } else if (MAI->getSetDirective()) {
O << TAI->getPrivateGlobalPrefix() << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
<< '_' << uid << "_set_" << MBB->getNumber(); << '_' << uid << "_set_" << MBB->getNumber();
} else { } else {
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
// If the arch uses custom Jump Table directives, don't calc relative to // If the arch uses custom Jump Table directives, don't calc relative to
// JT // JT
if (!HadJTEntryDirective) if (!HadJTEntryDirective)
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" O << '-' << MAI->getPrivateGlobalPrefix() << "JTI"
<< getFunctionNumber() << '_' << uid; << getFunctionNumber() << '_' << uid;
} }
} }
@ -435,7 +435,7 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
/// do nothing and return false. /// do nothing and return false.
bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) { bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
if (GV->getName() == "llvm.used") { if (GV->getName() == "llvm.used") {
if (TAI->getUsedDirective() != 0) // No need to emit this at all. if (MAI->getUsedDirective() != 0) // No need to emit this at all.
EmitLLVMUsedList(GV->getInitializer()); EmitLLVMUsedList(GV->getInitializer());
return true; return true;
} }
@ -468,11 +468,11 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
return false; return false;
} }
/// EmitLLVMUsedList - For targets that define a TAI::UsedDirective, mark each /// EmitLLVMUsedList - For targets that define a MAI::UsedDirective, mark each
/// global in the specified llvm.used list for which emitUsedDirectiveFor /// global in the specified llvm.used list for which emitUsedDirectiveFor
/// is true, as being used with this directive. /// is true, as being used with this directive.
void AsmPrinter::EmitLLVMUsedList(Constant *List) { void AsmPrinter::EmitLLVMUsedList(Constant *List) {
const char *Directive = TAI->getUsedDirective(); const char *Directive = MAI->getUsedDirective();
// Should be an array of 'i8*'. // Should be an array of 'i8*'.
ConstantArray *InitList = dyn_cast<ConstantArray>(List); ConstantArray *InitList = dyn_cast<ConstantArray>(List);
@ -513,13 +513,13 @@ void AsmPrinter::EmitXXStructorList(Constant *List) {
const std::string &AsmPrinter::getGlobalLinkName(const GlobalVariable *GV, const std::string &AsmPrinter::getGlobalLinkName(const GlobalVariable *GV,
std::string &LinkName) const { std::string &LinkName) const {
if (isa<Function>(GV)) { if (isa<Function>(GV)) {
LinkName += TAI->getFunctionAddrPrefix(); LinkName += MAI->getFunctionAddrPrefix();
LinkName += Mang->getMangledName(GV); LinkName += Mang->getMangledName(GV);
LinkName += TAI->getFunctionAddrSuffix(); LinkName += MAI->getFunctionAddrSuffix();
} else { } else {
LinkName += TAI->getGlobalVarAddrPrefix(); LinkName += MAI->getGlobalVarAddrPrefix();
LinkName += Mang->getMangledName(GV); LinkName += Mang->getMangledName(GV);
LinkName += TAI->getGlobalVarAddrSuffix(); LinkName += MAI->getGlobalVarAddrSuffix();
} }
return LinkName; return LinkName;
@ -586,8 +586,8 @@ void AsmPrinter::EOL() const {
void AsmPrinter::EOL(const std::string &Comment) const { void AsmPrinter::EOL(const std::string &Comment) const {
if (VerboseAsm && !Comment.empty()) { if (VerboseAsm && !Comment.empty()) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< ' ' << ' '
<< Comment; << Comment;
} }
@ -596,8 +596,8 @@ void AsmPrinter::EOL(const std::string &Comment) const {
void AsmPrinter::EOL(const char* Comment) const { void AsmPrinter::EOL(const char* Comment) const {
if (VerboseAsm && *Comment) { if (VerboseAsm && *Comment) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< ' ' << ' '
<< Comment; << Comment;
} }
@ -607,11 +607,11 @@ void AsmPrinter::EOL(const char* Comment) const {
/// EmitULEB128Bytes - Emit an assembler byte data directive to compose an /// EmitULEB128Bytes - Emit an assembler byte data directive to compose an
/// unsigned leb128 value. /// unsigned leb128 value.
void AsmPrinter::EmitULEB128Bytes(unsigned Value) const { void AsmPrinter::EmitULEB128Bytes(unsigned Value) const {
if (TAI->hasLEB128()) { if (MAI->hasLEB128()) {
O << "\t.uleb128\t" O << "\t.uleb128\t"
<< Value; << Value;
} else { } else {
O << TAI->getData8bitsDirective(); O << MAI->getData8bitsDirective();
PrintULEB128(Value); PrintULEB128(Value);
} }
} }
@ -619,11 +619,11 @@ void AsmPrinter::EmitULEB128Bytes(unsigned Value) const {
/// EmitSLEB128Bytes - print an assembler byte data directive to compose a /// EmitSLEB128Bytes - print an assembler byte data directive to compose a
/// signed leb128 value. /// signed leb128 value.
void AsmPrinter::EmitSLEB128Bytes(int Value) const { void AsmPrinter::EmitSLEB128Bytes(int Value) const {
if (TAI->hasLEB128()) { if (MAI->hasLEB128()) {
O << "\t.sleb128\t" O << "\t.sleb128\t"
<< Value; << Value;
} else { } else {
O << TAI->getData8bitsDirective(); O << MAI->getData8bitsDirective();
PrintSLEB128(Value); PrintSLEB128(Value);
} }
} }
@ -631,29 +631,29 @@ void AsmPrinter::EmitSLEB128Bytes(int Value) const {
/// EmitInt8 - Emit a byte directive and value. /// EmitInt8 - Emit a byte directive and value.
/// ///
void AsmPrinter::EmitInt8(int Value) const { void AsmPrinter::EmitInt8(int Value) const {
O << TAI->getData8bitsDirective(); O << MAI->getData8bitsDirective();
PrintHex(Value & 0xFF); PrintHex(Value & 0xFF);
} }
/// EmitInt16 - Emit a short directive and value. /// EmitInt16 - Emit a short directive and value.
/// ///
void AsmPrinter::EmitInt16(int Value) const { void AsmPrinter::EmitInt16(int Value) const {
O << TAI->getData16bitsDirective(); O << MAI->getData16bitsDirective();
PrintHex(Value & 0xFFFF); PrintHex(Value & 0xFFFF);
} }
/// EmitInt32 - Emit a long directive and value. /// EmitInt32 - Emit a long directive and value.
/// ///
void AsmPrinter::EmitInt32(int Value) const { void AsmPrinter::EmitInt32(int Value) const {
O << TAI->getData32bitsDirective(); O << MAI->getData32bitsDirective();
PrintHex(Value); PrintHex(Value);
} }
/// EmitInt64 - Emit a long long directive and value. /// EmitInt64 - Emit a long long directive and value.
/// ///
void AsmPrinter::EmitInt64(uint64_t Value) const { void AsmPrinter::EmitInt64(uint64_t Value) const {
if (TAI->getData64bitsDirective()) { if (MAI->getData64bitsDirective()) {
O << TAI->getData64bitsDirective(); O << MAI->getData64bitsDirective();
PrintHex(Value); PrintHex(Value);
} else { } else {
if (TM.getTargetData()->isBigEndian()) { if (TM.getTargetData()->isBigEndian()) {
@ -706,11 +706,11 @@ void AsmPrinter::EmitString(const std::string &String) const {
} }
void AsmPrinter::EmitString(const char *String, unsigned Size) const { void AsmPrinter::EmitString(const char *String, unsigned Size) const {
const char* AscizDirective = TAI->getAscizDirective(); const char* AscizDirective = MAI->getAscizDirective();
if (AscizDirective) if (AscizDirective)
O << AscizDirective; O << AscizDirective;
else else
O << TAI->getAsciiDirective(); O << MAI->getAsciiDirective();
O << '\"'; O << '\"';
for (unsigned i = 0; i < Size; ++i) for (unsigned i = 0; i < Size; ++i)
printStringChar(O, String[i]); printStringChar(O, String[i]);
@ -756,7 +756,7 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
unsigned FillValue = 0; unsigned FillValue = 0;
if (getCurrentSection()->getKind().isText()) if (getCurrentSection()->getKind().isText())
FillValue = TAI->getTextAlignFillValue(); FillValue = MAI->getTextAlignFillValue();
OutStreamer.EmitValueToAlignment(1 << NumBits, FillValue, 1, 0); OutStreamer.EmitValueToAlignment(1 << NumBits, FillValue, 1, 0);
} }
@ -765,14 +765,14 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
/// ///
void AsmPrinter::EmitZeros(uint64_t NumZeros, unsigned AddrSpace) const { void AsmPrinter::EmitZeros(uint64_t NumZeros, unsigned AddrSpace) const {
if (NumZeros) { if (NumZeros) {
if (TAI->getZeroDirective()) { if (MAI->getZeroDirective()) {
O << TAI->getZeroDirective() << NumZeros; O << MAI->getZeroDirective() << NumZeros;
if (TAI->getZeroDirectiveSuffix()) if (MAI->getZeroDirectiveSuffix())
O << TAI->getZeroDirectiveSuffix(); O << MAI->getZeroDirectiveSuffix();
O << '\n'; O << '\n';
} else { } else {
for (; NumZeros; --NumZeros) for (; NumZeros; --NumZeros)
O << TAI->getData8bitsDirective(AddrSpace) << "0\n"; O << MAI->getData8bitsDirective(AddrSpace) << "0\n";
} }
} }
} }
@ -790,13 +790,13 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
// decorating it with GlobalVarAddrPrefix/Suffix or // decorating it with GlobalVarAddrPrefix/Suffix or
// FunctionAddrPrefix/Suffix (these all default to "" ) // FunctionAddrPrefix/Suffix (these all default to "" )
if (isa<Function>(GV)) { if (isa<Function>(GV)) {
O << TAI->getFunctionAddrPrefix() O << MAI->getFunctionAddrPrefix()
<< Mang->getMangledName(GV) << Mang->getMangledName(GV)
<< TAI->getFunctionAddrSuffix(); << MAI->getFunctionAddrSuffix();
} else { } else {
O << TAI->getGlobalVarAddrPrefix() O << MAI->getGlobalVarAddrPrefix()
<< Mang->getMangledName(GV) << Mang->getMangledName(GV)
<< TAI->getGlobalVarAddrSuffix(); << MAI->getGlobalVarAddrSuffix();
} }
} else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) { } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
const TargetData *TD = TM.getTargetData(); const TargetData *TD = TM.getTargetData();
@ -929,12 +929,12 @@ static void printAsCString(formatted_raw_ostream &O, const ConstantArray *CVA,
/// ///
void AsmPrinter::EmitString(const ConstantArray *CVA) const { void AsmPrinter::EmitString(const ConstantArray *CVA) const {
unsigned NumElts = CVA->getNumOperands(); unsigned NumElts = CVA->getNumOperands();
if (TAI->getAscizDirective() && NumElts && if (MAI->getAscizDirective() && NumElts &&
cast<ConstantInt>(CVA->getOperand(NumElts-1))->getZExtValue() == 0) { cast<ConstantInt>(CVA->getOperand(NumElts-1))->getZExtValue() == 0) {
O << TAI->getAscizDirective(); O << MAI->getAscizDirective();
printAsCString(O, CVA, NumElts-1); printAsCString(O, CVA, NumElts-1);
} else { } else {
O << TAI->getAsciiDirective(); O << MAI->getAsciiDirective();
printAsCString(O, CVA, NumElts); printAsCString(O, CVA, NumElts);
} }
O << '\n'; O << '\n';
@ -994,40 +994,40 @@ void AsmPrinter::EmitGlobalConstantFP(const ConstantFP *CFP,
if (CFP->getType() == Type::getDoubleTy(Context)) { if (CFP->getType() == Type::getDoubleTy(Context)) {
double Val = CFP->getValueAPF().convertToDouble(); // for comment only double Val = CFP->getValueAPF().convertToDouble(); // for comment only
uint64_t i = CFP->getValueAPF().bitcastToAPInt().getZExtValue(); uint64_t i = CFP->getValueAPF().bitcastToAPInt().getZExtValue();
if (TAI->getData64bitsDirective(AddrSpace)) { if (MAI->getData64bitsDirective(AddrSpace)) {
O << TAI->getData64bitsDirective(AddrSpace) << i; O << MAI->getData64bitsDirective(AddrSpace) << i;
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " double " << Val; O << MAI->getCommentString() << " double " << Val;
} }
O << '\n'; O << '\n';
} else if (TD->isBigEndian()) { } else if (TD->isBigEndian()) {
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i >> 32); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(i >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant word of double " << Val; << " most significant word of double " << Val;
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(i);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant word of double " << Val; << " least significant word of double " << Val;
} }
O << '\n'; O << '\n';
} else { } else {
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(i);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant word of double " << Val; << " least significant word of double " << Val;
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i >> 32); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(i >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant word of double " << Val; << " most significant word of double " << Val;
} }
O << '\n'; O << '\n';
@ -1035,11 +1035,11 @@ void AsmPrinter::EmitGlobalConstantFP(const ConstantFP *CFP,
return; return;
} else if (CFP->getType() == Type::getFloatTy(Context)) { } else if (CFP->getType() == Type::getFloatTy(Context)) {
float Val = CFP->getValueAPF().convertToFloat(); // for comment only float Val = CFP->getValueAPF().convertToFloat(); // for comment only
O << TAI->getData32bitsDirective(AddrSpace) O << MAI->getData32bitsDirective(AddrSpace)
<< CFP->getValueAPF().bitcastToAPInt().getZExtValue(); << CFP->getValueAPF().bitcastToAPInt().getZExtValue();
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " float " << Val; O << MAI->getCommentString() << " float " << Val;
} }
O << '\n'; O << '\n';
return; return;
@ -1054,73 +1054,73 @@ void AsmPrinter::EmitGlobalConstantFP(const ConstantFP *CFP,
DoubleVal.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, DoubleVal.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
&ignored); &ignored);
if (TD->isBigEndian()) { if (TD->isBigEndian()) {
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant halfword of x86_fp80 ~" << " most significant halfword of x86_fp80 ~"
<< DoubleVal.convertToDouble(); << DoubleVal.convertToDouble();
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " next halfword"; O << MAI->getCommentString() << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " next halfword"; O << MAI->getCommentString() << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " next halfword"; O << MAI->getCommentString() << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant halfword"; << " least significant halfword";
} }
O << '\n'; O << '\n';
} else { } else {
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant halfword of x86_fp80 ~" << " least significant halfword of x86_fp80 ~"
<< DoubleVal.convertToDouble(); << DoubleVal.convertToDouble();
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next halfword"; << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next halfword"; << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next halfword"; << " next halfword";
} }
O << '\n'; O << '\n';
O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]); O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant halfword"; << " most significant halfword";
} }
O << '\n'; O << '\n';
@ -1134,60 +1134,60 @@ void AsmPrinter::EmitGlobalConstantFP(const ConstantFP *CFP,
APInt api = CFP->getValueAPF().bitcastToAPInt(); APInt api = CFP->getValueAPF().bitcastToAPInt();
const uint64_t *p = api.getRawData(); const uint64_t *p = api.getRawData();
if (TD->isBigEndian()) { if (TD->isBigEndian()) {
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0] >> 32); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant word of ppc_fp128"; << " most significant word of ppc_fp128";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next word"; << " next word";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next word"; << " next word";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1]); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant word"; << " least significant word";
} }
O << '\n'; O << '\n';
} else { } else {
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1]); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant word of ppc_fp128"; << " least significant word of ppc_fp128";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next word"; << " next word";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " next word"; << " next word";
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0] >> 32); O << MAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0] >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant word"; << " most significant word";
} }
O << '\n'; O << '\n';
@ -1214,35 +1214,35 @@ void AsmPrinter::EmitGlobalConstantLargeInt(const ConstantInt *CI,
else else
Val = RawData[i]; Val = RawData[i];
if (TAI->getData64bitsDirective(AddrSpace)) if (MAI->getData64bitsDirective(AddrSpace))
O << TAI->getData64bitsDirective(AddrSpace) << Val << '\n'; O << MAI->getData64bitsDirective(AddrSpace) << Val << '\n';
else if (TD->isBigEndian()) { else if (TD->isBigEndian()) {
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val >> 32); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(Val >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant half of i64 " << Val; << " most significant half of i64 " << Val;
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(Val);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant half of i64 " << Val; << " least significant half of i64 " << Val;
} }
O << '\n'; O << '\n';
} else { } else {
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(Val);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " least significant half of i64 " << Val; << " least significant half of i64 " << Val;
} }
O << '\n'; O << '\n';
O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val >> 32); O << MAI->getData32bitsDirective(AddrSpace) << unsigned(Val >> 32);
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " most significant half of i64 " << Val; << " most significant half of i64 " << Val;
} }
O << '\n'; O << '\n';
@ -1285,8 +1285,8 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV, unsigned AddrSpace) {
if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) { if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
SmallString<40> S; SmallString<40> S;
CI->getValue().toStringUnsigned(S, 16); CI->getValue().toStringUnsigned(S, 16);
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " 0x" << S.str(); O << MAI->getCommentString() << " 0x" << S.str();
} }
} }
O << '\n'; O << '\n';
@ -1305,10 +1305,10 @@ void AsmPrinter::EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) {
/// for their own strange codes. /// for their own strange codes.
void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) const { void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) const {
if (!strcmp(Code, "private")) { if (!strcmp(Code, "private")) {
O << TAI->getPrivateGlobalPrefix(); O << MAI->getPrivateGlobalPrefix();
} else if (!strcmp(Code, "comment")) { } else if (!strcmp(Code, "comment")) {
if (VerboseAsm) if (VerboseAsm)
O << TAI->getCommentString(); O << MAI->getCommentString();
} else if (!strcmp(Code, "uid")) { } else if (!strcmp(Code, "uid")) {
// Comparing the address of MI isn't sufficient, because machineinstrs may // Comparing the address of MI isn't sufficient, because machineinstrs may
// be allocated to the same address across functions. // be allocated to the same address across functions.
@ -1333,10 +1333,10 @@ void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) const {
/// processDebugLoc - Processes the debug information of each machine /// processDebugLoc - Processes the debug information of each machine
/// instruction's DebugLoc. /// instruction's DebugLoc.
void AsmPrinter::processDebugLoc(DebugLoc DL) { void AsmPrinter::processDebugLoc(DebugLoc DL) {
if (!TAI || !DW) if (!MAI || !DW)
return; return;
if (TAI->doesSupportDebugInformation() && DW->ShouldEmitDwarfDebug()) { if (MAI->doesSupportDebugInformation() && DW->ShouldEmitDwarfDebug()) {
if (!DL.isUnknown()) { if (!DL.isUnknown()) {
DebugLocTuple CurDLT = MF->getDebugLocTuple(DL); DebugLocTuple CurDLT = MF->getDebugLocTuple(DL);
@ -1368,15 +1368,15 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const {
// If this asmstr is empty, just print the #APP/#NOAPP markers. // If this asmstr is empty, just print the #APP/#NOAPP markers.
// These are useful to see where empty asm's wound up. // These are useful to see where empty asm's wound up.
if (AsmStr[0] == 0) { if (AsmStr[0] == 0) {
O << TAI->getCommentString() << TAI->getInlineAsmStart() << "\n\t"; O << MAI->getCommentString() << MAI->getInlineAsmStart() << "\n\t";
O << TAI->getCommentString() << TAI->getInlineAsmEnd() << '\n'; O << MAI->getCommentString() << MAI->getInlineAsmEnd() << '\n';
return; return;
} }
O << TAI->getCommentString() << TAI->getInlineAsmStart() << "\n\t"; O << MAI->getCommentString() << MAI->getInlineAsmStart() << "\n\t";
// The variant of the current asmprinter. // The variant of the current asmprinter.
int AsmPrinterVariant = TAI->getAssemblerDialect(); int AsmPrinterVariant = MAI->getAssemblerDialect();
int CurVariant = -1; // The number of the {.|.|.} region we are in. int CurVariant = -1; // The number of the {.|.|.} region we are in.
const char *LastEmitted = AsmStr; // One past the last character emitted. const char *LastEmitted = AsmStr; // One past the last character emitted.
@ -1544,15 +1544,15 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const {
} }
} }
} }
O << "\n\t" << TAI->getCommentString() << TAI->getInlineAsmEnd() << '\n'; O << "\n\t" << MAI->getCommentString() << MAI->getInlineAsmEnd() << '\n';
} }
/// printImplicitDef - This method prints the specified machine instruction /// printImplicitDef - This method prints the specified machine instruction
/// that is an implicit def. /// that is an implicit def.
void AsmPrinter::printImplicitDef(const MachineInstr *MI) const { void AsmPrinter::printImplicitDef(const MachineInstr *MI) const {
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " implicit-def: " O << MAI->getCommentString() << " implicit-def: "
<< TRI->getAsmName(MI->getOperand(0).getReg()) << '\n'; << TRI->getAsmName(MI->getOperand(0).getReg()) << '\n';
} }
} }
@ -1564,7 +1564,7 @@ void AsmPrinter::printLabel(const MachineInstr *MI) const {
} }
void AsmPrinter::printLabel(unsigned Id) const { void AsmPrinter::printLabel(unsigned Id) const {
O << TAI->getPrivateGlobalPrefix() << "label" << Id << ":\n"; O << MAI->getPrivateGlobalPrefix() << "label" << Id << ":\n";
} }
/// PrintAsmOperand - Print the specified operand of MI, an INLINEASM /// PrintAsmOperand - Print the specified operand of MI, an INLINEASM
@ -1595,15 +1595,15 @@ void AsmPrinter::printBasicBlockLabel(const MachineBasicBlock *MBB,
EmitAlignment(Log2_32(Align)); EmitAlignment(Log2_32(Align));
} }
O << TAI->getPrivateGlobalPrefix() << "BB" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "BB" << getFunctionNumber() << '_'
<< MBB->getNumber(); << MBB->getNumber();
if (printColon) if (printColon)
O << ':'; O << ':';
if (printComment) { if (printComment) {
if (const BasicBlock *BB = MBB->getBasicBlock()) if (const BasicBlock *BB = MBB->getBasicBlock())
if (BB->hasName()) { if (BB->hasName()) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << ' '; O << MAI->getCommentString() << ' ';
WriteAsOperand(O, BB, /*PrintType=*/false); WriteAsOperand(O, BB, /*PrintType=*/false);
} }
@ -1616,26 +1616,26 @@ void AsmPrinter::printBasicBlockLabel(const MachineBasicBlock *MBB,
/// specified MachineBasicBlock for a jumptable entry. /// specified MachineBasicBlock for a jumptable entry.
void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, void AsmPrinter::printPICJumpTableSetLabel(unsigned uid,
const MachineBasicBlock *MBB) const { const MachineBasicBlock *MBB) const {
if (!TAI->getSetDirective()) if (!MAI->getSetDirective())
return; return;
O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix() O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ','; << getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ',';
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << '-' << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << uid << '\n'; << '_' << uid << '\n';
} }
void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, unsigned uid2, void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, unsigned uid2,
const MachineBasicBlock *MBB) const { const MachineBasicBlock *MBB) const {
if (!TAI->getSetDirective()) if (!MAI->getSetDirective())
return; return;
O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix() O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << uid << '_' << uid2 << getFunctionNumber() << '_' << uid << '_' << uid2
<< "_set_" << MBB->getNumber() << ','; << "_set_" << MBB->getNumber() << ',';
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << '-' << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << uid << '_' << uid2 << '\n'; << '_' << uid << '_' << uid2 << '\n';
} }
@ -1652,15 +1652,15 @@ void AsmPrinter::printDataDirective(const Type *type, unsigned AddrSpace) {
case Type::IntegerTyID: { case Type::IntegerTyID: {
unsigned BitWidth = cast<IntegerType>(type)->getBitWidth(); unsigned BitWidth = cast<IntegerType>(type)->getBitWidth();
if (BitWidth <= 8) if (BitWidth <= 8)
O << TAI->getData8bitsDirective(AddrSpace); O << MAI->getData8bitsDirective(AddrSpace);
else if (BitWidth <= 16) else if (BitWidth <= 16)
O << TAI->getData16bitsDirective(AddrSpace); O << MAI->getData16bitsDirective(AddrSpace);
else if (BitWidth <= 32) else if (BitWidth <= 32)
O << TAI->getData32bitsDirective(AddrSpace); O << MAI->getData32bitsDirective(AddrSpace);
else if (BitWidth <= 64) { else if (BitWidth <= 64) {
assert(TAI->getData64bitsDirective(AddrSpace) && assert(MAI->getData64bitsDirective(AddrSpace) &&
"Target cannot handle 64-bit constant exprs!"); "Target cannot handle 64-bit constant exprs!");
O << TAI->getData64bitsDirective(AddrSpace); O << MAI->getData64bitsDirective(AddrSpace);
} else { } else {
llvm_unreachable("Target cannot handle given data directive width!"); llvm_unreachable("Target cannot handle given data directive width!");
} }
@ -1668,15 +1668,15 @@ void AsmPrinter::printDataDirective(const Type *type, unsigned AddrSpace) {
} }
case Type::PointerTyID: case Type::PointerTyID:
if (TD->getPointerSize() == 8) { if (TD->getPointerSize() == 8) {
assert(TAI->getData64bitsDirective(AddrSpace) && assert(MAI->getData64bitsDirective(AddrSpace) &&
"Target cannot handle 64-bit pointer exprs!"); "Target cannot handle 64-bit pointer exprs!");
O << TAI->getData64bitsDirective(AddrSpace); O << MAI->getData64bitsDirective(AddrSpace);
} else if (TD->getPointerSize() == 2) { } else if (TD->getPointerSize() == 2) {
O << TAI->getData16bitsDirective(AddrSpace); O << MAI->getData16bitsDirective(AddrSpace);
} else if (TD->getPointerSize() == 1) { } else if (TD->getPointerSize() == 1) {
O << TAI->getData8bitsDirective(AddrSpace); O << MAI->getData8bitsDirective(AddrSpace);
} else { } else {
O << TAI->getData32bitsDirective(AddrSpace); O << MAI->getData32bitsDirective(AddrSpace);
} }
break; break;
} }
@ -1685,10 +1685,10 @@ void AsmPrinter::printDataDirective(const Type *type, unsigned AddrSpace) {
void AsmPrinter::printVisibility(const std::string& Name, void AsmPrinter::printVisibility(const std::string& Name,
unsigned Visibility) const { unsigned Visibility) const {
if (Visibility == GlobalValue::HiddenVisibility) { if (Visibility == GlobalValue::HiddenVisibility) {
if (const char *Directive = TAI->getHiddenDirective()) if (const char *Directive = MAI->getHiddenDirective())
O << Directive << Name << '\n'; O << Directive << Name << '\n';
} else if (Visibility == GlobalValue::ProtectedVisibility) { } else if (Visibility == GlobalValue::ProtectedVisibility) {
if (const char *Directive = TAI->getProtectedDirective()) if (const char *Directive = MAI->getProtectedDirective())
O << Directive << Name << '\n'; O << Directive << Name << '\n';
} }
} }
@ -1737,8 +1737,8 @@ void AsmPrinter::EmitComments(const MachineInstr &MI) const {
DebugLocTuple DLT = MF->getDebugLocTuple(MI.getDebugLoc()); DebugLocTuple DLT = MF->getDebugLocTuple(MI.getDebugLoc());
// Print source line info. // Print source line info.
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " SrcLine "; O << MAI->getCommentString() << " SrcLine ";
if (DLT.CompileUnit->hasInitializer()) { if (DLT.CompileUnit->hasInitializer()) {
Constant *Name = DLT.CompileUnit->getInitializer(); Constant *Name = DLT.CompileUnit->getInitializer();
if (ConstantArray *NameString = dyn_cast<ConstantArray>(Name)) if (ConstantArray *NameString = dyn_cast<ConstantArray>(Name))
@ -1758,8 +1758,8 @@ void AsmPrinter::EmitComments(const MCInst &MI) const
DebugLocTuple DLT = MF->getDebugLocTuple(MI.getDebugLoc()); DebugLocTuple DLT = MF->getDebugLocTuple(MI.getDebugLoc());
// Print source line info // Print source line info
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " SrcLine "; O << MAI->getCommentString() << " SrcLine ";
if (DLT.CompileUnit->hasInitializer()) { if (DLT.CompileUnit->hasInitializer()) {
Constant *Name = DLT.CompileUnit->getInitializer(); Constant *Name = DLT.CompileUnit->getInitializer();
if (ConstantArray *NameString = dyn_cast<ConstantArray>(Name)) if (ConstantArray *NameString = dyn_cast<ConstantArray>(Name))
@ -1792,7 +1792,7 @@ Indent(formatted_raw_ostream &out, int level, int scale = 2) {
/// ///
static void PrintChildLoopComment(formatted_raw_ostream &O, static void PrintChildLoopComment(formatted_raw_ostream &O,
const MachineLoop *loop, const MachineLoop *loop,
const MCAsmInfo *TAI, const MCAsmInfo *MAI,
int FunctionNumber) { int FunctionNumber) {
// Add child loop information // Add child loop information
for(MachineLoop::iterator cl = loop->begin(), for(MachineLoop::iterator cl = loop->begin(),
@ -1803,14 +1803,14 @@ static void PrintChildLoopComment(formatted_raw_ostream &O,
assert(Header && "No header for loop"); assert(Header && "No header for loop");
O << '\n'; O << '\n';
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString(); O << MAI->getCommentString();
Indent(O, (*cl)->getLoopDepth()-1) Indent(O, (*cl)->getLoopDepth()-1)
<< " Child Loop BB" << FunctionNumber << "_" << " Child Loop BB" << FunctionNumber << "_"
<< Header->getNumber() << " Depth " << (*cl)->getLoopDepth(); << Header->getNumber() << " Depth " << (*cl)->getLoopDepth();
PrintChildLoopComment(O, *cl, TAI, FunctionNumber); PrintChildLoopComment(O, *cl, MAI, FunctionNumber);
} }
} }
@ -1824,28 +1824,28 @@ void AsmPrinter::EmitComments(const MachineBasicBlock &MBB) const
if (loop) { if (loop) {
// Print a newline after bb# annotation. // Print a newline after bb# annotation.
O << "\n"; O << "\n";
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " Loop Depth " << loop->getLoopDepth() O << MAI->getCommentString() << " Loop Depth " << loop->getLoopDepth()
<< '\n'; << '\n';
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
MachineBasicBlock *Header = loop->getHeader(); MachineBasicBlock *Header = loop->getHeader();
assert(Header && "No header for loop"); assert(Header && "No header for loop");
if (Header == &MBB) { if (Header == &MBB) {
O << TAI->getCommentString() << " Loop Header"; O << MAI->getCommentString() << " Loop Header";
PrintChildLoopComment(O, loop, TAI, getFunctionNumber()); PrintChildLoopComment(O, loop, MAI, getFunctionNumber());
} }
else { else {
O << TAI->getCommentString() << " Loop Header is BB" O << MAI->getCommentString() << " Loop Header is BB"
<< getFunctionNumber() << "_" << loop->getHeader()->getNumber(); << getFunctionNumber() << "_" << loop->getHeader()->getNumber();
} }
if (loop->empty()) { if (loop->empty()) {
O << '\n'; O << '\n';
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << " Inner Loop"; O << MAI->getCommentString() << " Inner Loop";
} }
// Add parent loop information // Add parent loop information
@ -1856,8 +1856,8 @@ void AsmPrinter::EmitComments(const MachineBasicBlock &MBB) const
assert(Header && "No header for loop"); assert(Header && "No header for loop");
O << '\n'; O << '\n';
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString(); O << MAI->getCommentString();
Indent(O, CurLoop->getLoopDepth()-1) Indent(O, CurLoop->getLoopDepth()-1)
<< " Inside Loop BB" << getFunctionNumber() << "_" << " Inside Loop BB" << getFunctionNumber() << "_"
<< Header->getNumber() << " Depth " << CurLoop->getLoopDepth(); << Header->getNumber() << " Depth " << CurLoop->getLoopDepth();

View File

@ -1334,7 +1334,7 @@ void DwarfDebug::BeginModule(Module *M, MachineModuleInfo *mmi) {
// Print out .file directives to specify files for .loc directives. These are // Print out .file directives to specify files for .loc directives. These are
// printed out early so that they precede any .loc directives. // printed out early so that they precede any .loc directives.
if (TAI->hasDotLocAndDotFile()) { if (MAI->hasDotLocAndDotFile()) {
for (unsigned i = 1, e = getNumSourceIds()+1; i != e; ++i) { for (unsigned i = 1, e = getNumSourceIds()+1; i != e; ++i) {
// Remember source id starts at 1. // Remember source id starts at 1.
std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(i); std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(i);
@ -1654,7 +1654,7 @@ unsigned DwarfDebug::RecordInlinedFnStart(DISubprogram &SP, DICompileUnit CU,
unsigned Line, unsigned Col) { unsigned Line, unsigned Col) {
unsigned LabelID = MMI->NextLabelID(); unsigned LabelID = MMI->NextLabelID();
if (!TAI->doesDwarfUsesInlineInfoSection()) if (!MAI->doesDwarfUsesInlineInfoSection())
return LabelID; return LabelID;
if (TimePassesIsEnabled) if (TimePassesIsEnabled)
@ -1732,7 +1732,7 @@ unsigned DwarfDebug::RecordInlinedFnStart(DISubprogram &SP, DICompileUnit CU,
/// RecordInlinedFnEnd - Indicate the end of inlined subroutine. /// RecordInlinedFnEnd - Indicate the end of inlined subroutine.
unsigned DwarfDebug::RecordInlinedFnEnd(DISubprogram &SP) { unsigned DwarfDebug::RecordInlinedFnEnd(DISubprogram &SP) {
if (!TAI->doesDwarfUsesInlineInfoSection()) if (!MAI->doesDwarfUsesInlineInfoSection())
return 0; return 0;
if (TimePassesIsEnabled) if (TimePassesIsEnabled)
@ -1844,7 +1844,7 @@ void DwarfDebug::EmitInitial() {
const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
// Dwarf sections base addresses. // Dwarf sections base addresses.
if (TAI->doesDwarfRequireFrameSection()) { if (MAI->doesDwarfRequireFrameSection()) {
Asm->OutStreamer.SwitchSection(TLOF.getDwarfFrameSection()); Asm->OutStreamer.SwitchSection(TLOF.getDwarfFrameSection());
EmitLabel("section_debug_frame", 0); EmitLabel("section_debug_frame", 0);
} }
@ -2037,7 +2037,7 @@ void DwarfDebug::EmitEndOfLineMatrix(unsigned SectionEnd) {
void DwarfDebug::EmitDebugLines() { void DwarfDebug::EmitDebugLines() {
// If the target is using .loc/.file, the assembler will be emitting the // If the target is using .loc/.file, the assembler will be emitting the
// .debug_line table automatically. // .debug_line table automatically.
if (TAI->hasDotLocAndDotFile()) if (MAI->hasDotLocAndDotFile())
return; return;
// Minimum line delta, thus ranging from -10..(255-10). // Minimum line delta, thus ranging from -10..(255-10).
@ -2116,7 +2116,7 @@ void DwarfDebug::EmitDebugLines() {
/*if (Asm->isVerbose()) { /*if (Asm->isVerbose()) {
const MCSection *S = SectionMap[j + 1]; const MCSection *S = SectionMap[j + 1];
O << '\t' << TAI->getCommentString() << " Section" O << '\t' << MAI->getCommentString() << " Section"
<< S->getName() << '\n'; << S->getName() << '\n';
}*/ }*/
Asm->EOL(); Asm->EOL();
@ -2136,7 +2136,7 @@ void DwarfDebug::EmitDebugLines() {
else { else {
std::pair<unsigned, unsigned> SourceID = std::pair<unsigned, unsigned> SourceID =
getSourceDirectoryAndFileIds(LineInfo.getSourceID()); getSourceDirectoryAndFileIds(LineInfo.getSourceID());
O << '\t' << TAI->getCommentString() << ' ' O << '\t' << MAI->getCommentString() << ' '
<< getSourceDirectoryName(SourceID.first) << ' ' << getSourceDirectoryName(SourceID.first) << ' '
<< getSourceFileName(SourceID.second) << getSourceFileName(SourceID.second)
<<" :" << utostr_32(LineInfo.getLine()) << '\n'; <<" :" << utostr_32(LineInfo.getLine()) << '\n';
@ -2197,7 +2197,7 @@ void DwarfDebug::EmitDebugLines() {
/// EmitCommonDebugFrame - Emit common frame info into a debug frame section. /// EmitCommonDebugFrame - Emit common frame info into a debug frame section.
/// ///
void DwarfDebug::EmitCommonDebugFrame() { void DwarfDebug::EmitCommonDebugFrame() {
if (!TAI->doesDwarfRequireFrameSection()) if (!MAI->doesDwarfRequireFrameSection())
return; return;
int stackGrowth = int stackGrowth =
@ -2243,7 +2243,7 @@ void DwarfDebug::EmitCommonDebugFrame() {
/// section. /// section.
void void
DwarfDebug::EmitFunctionDebugFrame(const FunctionDebugFrameInfo&DebugFrameInfo){ DwarfDebug::EmitFunctionDebugFrame(const FunctionDebugFrameInfo&DebugFrameInfo){
if (!TAI->doesDwarfRequireFrameSection()) if (!MAI->doesDwarfRequireFrameSection())
return; return;
// Start the dwarf frame section. // Start the dwarf frame section.
@ -2427,7 +2427,7 @@ void DwarfDebug::EmitDebugMacInfo() {
/// __debug_info section, and the low_pc is the starting address for the /// __debug_info section, and the low_pc is the starting address for the
/// inlining instance. /// inlining instance.
void DwarfDebug::EmitDebugInlineInfo() { void DwarfDebug::EmitDebugInlineInfo() {
if (!TAI->doesDwarfUsesInlineInfoSection()) if (!MAI->doesDwarfUsesInlineInfoSection())
return; return;
if (!ModuleCU) if (!ModuleCU)
@ -2479,9 +2479,9 @@ void DwarfDebug::EmitDebugInlineInfo() {
Asm->EmitInt32(SP->getOffset()); Asm->EOL("DIE offset"); Asm->EmitInt32(SP->getOffset()); Asm->EOL("DIE offset");
if (TD->getPointerSize() == sizeof(int32_t)) if (TD->getPointerSize() == sizeof(int32_t))
O << TAI->getData32bitsDirective(); O << MAI->getData32bitsDirective();
else else
O << TAI->getData64bitsDirective(); O << MAI->getData64bitsDirective();
PrintLabelName("label", *LI); Asm->EOL("low_pc"); PrintLabelName("label", *LI); Asm->EOL("low_pc");
} }

View File

@ -60,8 +60,8 @@ void DwarfException::EmitCommonEHFrame(const Function *Personality,
// Begin eh frame section. // Begin eh frame section.
Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getEHFrameSection()); Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getEHFrameSection());
if (TAI->is_EHSymbolPrivate()) if (MAI->is_EHSymbolPrivate())
O << TAI->getPrivateGlobalPrefix(); O << MAI->getPrivateGlobalPrefix();
O << "EH_frame" << Index << ":\n"; O << "EH_frame" << Index << ":\n";
EmitLabel("section_eh_frame", Index); EmitLabel("section_eh_frame", Index);
@ -99,7 +99,7 @@ void DwarfException::EmitCommonEHFrame(const Function *Personality,
Asm->EmitULEB128Bytes(7); Asm->EmitULEB128Bytes(7);
Asm->EOL("Augmentation Size"); Asm->EOL("Augmentation Size");
if (TAI->getNeedsIndirectEncoding()) { if (MAI->getNeedsIndirectEncoding()) {
Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 | Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 |
dwarf::DW_EH_PE_indirect); dwarf::DW_EH_PE_indirect);
Asm->EOL("Personality (pcrel sdata4 indirect)"); Asm->EOL("Personality (pcrel sdata4 indirect)");
@ -109,11 +109,11 @@ void DwarfException::EmitCommonEHFrame(const Function *Personality,
} }
PrintRelDirective(true); PrintRelDirective(true);
O << TAI->getPersonalityPrefix(); O << MAI->getPersonalityPrefix();
Asm->EmitExternalGlobal((const GlobalVariable *)(Personality)); Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
O << TAI->getPersonalitySuffix(); O << MAI->getPersonalitySuffix();
if (strcmp(TAI->getPersonalitySuffix(), "+4@GOTPCREL")) if (strcmp(MAI->getPersonalitySuffix(), "+4@GOTPCREL"))
O << "-" << TAI->getPCSymbol(); O << "-" << MAI->getPCSymbol();
Asm->EOL("Personality"); Asm->EOL("Personality");
Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4); Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4);
@ -157,12 +157,12 @@ void DwarfException::EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo) {
// Externally visible entry into the functions eh frame info. If the // Externally visible entry into the functions eh frame info. If the
// corresponding function is static, this should not be externally visible. // corresponding function is static, this should not be externally visible.
if (!TheFunc->hasLocalLinkage()) if (!TheFunc->hasLocalLinkage())
if (const char *GlobalEHDirective = TAI->getGlobalEHDirective()) if (const char *GlobalEHDirective = MAI->getGlobalEHDirective())
O << GlobalEHDirective << EHFrameInfo.FnName << "\n"; O << GlobalEHDirective << EHFrameInfo.FnName << "\n";
// If corresponding function is weak definition, this should be too. // If corresponding function is weak definition, this should be too.
if (TheFunc->isWeakForLinker() && TAI->getWeakDefDirective()) if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective())
O << TAI->getWeakDefDirective() << EHFrameInfo.FnName << "\n"; O << MAI->getWeakDefDirective() << EHFrameInfo.FnName << "\n";
// If there are no calls then you can't unwind. This may mean we can omit the // If there are no calls then you can't unwind. This may mean we can omit the
// EH Frame, but some environments do not handle weak absolute symbols. If // EH Frame, but some environments do not handle weak absolute symbols. If
@ -170,13 +170,13 @@ void DwarfException::EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo) {
// info is to be available for non-EH uses. // info is to be available for non-EH uses.
if (!EHFrameInfo.hasCalls && !UnwindTablesMandatory && if (!EHFrameInfo.hasCalls && !UnwindTablesMandatory &&
(!TheFunc->isWeakForLinker() || (!TheFunc->isWeakForLinker() ||
!TAI->getWeakDefDirective() || !MAI->getWeakDefDirective() ||
TAI->getSupportsWeakOmittedEHFrame())) { MAI->getSupportsWeakOmittedEHFrame())) {
O << EHFrameInfo.FnName << " = 0\n"; O << EHFrameInfo.FnName << " = 0\n";
// This name has no connection to the function, so it might get // This name has no connection to the function, so it might get
// dead-stripped when the function is not, erroneously. Prohibit // dead-stripped when the function is not, erroneously. Prohibit
// dead-stripping unconditionally. // dead-stripping unconditionally.
if (const char *UsedDirective = TAI->getUsedDirective()) if (const char *UsedDirective = MAI->getUsedDirective())
O << UsedDirective << EHFrameInfo.FnName << "\n\n"; O << UsedDirective << EHFrameInfo.FnName << "\n\n";
} else { } else {
O << EHFrameInfo.FnName << ":\n"; O << EHFrameInfo.FnName << ":\n";
@ -233,7 +233,7 @@ void DwarfException::EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo) {
// on unused functions (calling undefined externals) being dead-stripped to // on unused functions (calling undefined externals) being dead-stripped to
// link correctly. Yes, there really is. // link correctly. Yes, there really is.
if (MMI->isUsedFunction(EHFrameInfo.function)) if (MMI->isUsedFunction(EHFrameInfo.function))
if (const char *UsedDirective = TAI->getUsedDirective()) if (const char *UsedDirective = MAI->getUsedDirective())
O << UsedDirective << EHFrameInfo.FnName << "\n\n"; O << UsedDirective << EHFrameInfo.FnName << "\n\n";
} }
} }
@ -430,7 +430,7 @@ ComputeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
// create a call-site entry with no landing pad for the region between the // create a call-site entry with no landing pad for the region between the
// try-ranges. // try-ranges.
if (SawPotentiallyThrowing && if (SawPotentiallyThrowing &&
TAI->getExceptionHandlingType() == ExceptionHandling::Dwarf) { MAI->getExceptionHandlingType() == ExceptionHandling::Dwarf) {
CallSiteEntry Site = { LastLabel, BeginLabel, 0, 0 }; CallSiteEntry Site = { LastLabel, BeginLabel, 0, 0 };
CallSites.push_back(Site); CallSites.push_back(Site);
PreviousIsInvoke = false; PreviousIsInvoke = false;
@ -472,7 +472,7 @@ ComputeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
// function may throw, create a call-site entry with no landing pad for the // function may throw, create a call-site entry with no landing pad for the
// region following the try-range. // region following the try-range.
if (SawPotentiallyThrowing && if (SawPotentiallyThrowing &&
TAI->getExceptionHandlingType() == ExceptionHandling::Dwarf) { MAI->getExceptionHandlingType() == ExceptionHandling::Dwarf) {
CallSiteEntry Site = { LastLabel, 0, 0, 0 }; CallSiteEntry Site = { LastLabel, 0, 0, 0 };
CallSites.push_back(Site); CallSites.push_back(Site);
} }
@ -546,18 +546,18 @@ void DwarfException::EmitExceptionTable() {
const unsigned LandingPadSize = sizeof(int32_t); // DW_EH_PE_udata4 const unsigned LandingPadSize = sizeof(int32_t); // DW_EH_PE_udata4
unsigned SizeSites; unsigned SizeSites;
bool HaveTTData = (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) bool HaveTTData = (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj)
? (!TypeInfos.empty() || !FilterIds.empty()) : true; ? (!TypeInfos.empty() || !FilterIds.empty()) : true;
if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) { if (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj) {
SizeSites = 0; SizeSites = 0;
} else } else
SizeSites = CallSites.size() * SizeSites = CallSites.size() *
(SiteStartSize + SiteLengthSize + LandingPadSize); (SiteStartSize + SiteLengthSize + LandingPadSize);
for (unsigned i = 0, e = CallSites.size(); i < e; ++i) { for (unsigned i = 0, e = CallSites.size(); i < e; ++i) {
SizeSites += MCAsmInfo::getULEB128Size(CallSites[i].Action); SizeSites += MCAsmInfo::getULEB128Size(CallSites[i].Action);
if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) if (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj)
SizeSites += MCAsmInfo::getULEB128Size(i); SizeSites += MCAsmInfo::getULEB128Size(i);
} }
// Type infos. // Type infos.
@ -588,7 +588,7 @@ void DwarfException::EmitExceptionTable() {
} }
EmitLabel("exception", SubprogramCount); EmitLabel("exception", SubprogramCount);
if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) { if (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj) {
std::string SjLjName = "_lsda_"; std::string SjLjName = "_lsda_";
SjLjName += MF->getFunction()->getName().str(); SjLjName += MF->getFunction()->getName().str();
EmitLabel(SjLjName.c_str(), 0); EmitLabel(SjLjName.c_str(), 0);
@ -657,7 +657,7 @@ void DwarfException::EmitExceptionTable() {
#endif #endif
// SjLj Exception handilng // SjLj Exception handilng
if (TAI->getExceptionHandlingType() == ExceptionHandling::SjLj) { if (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj) {
Asm->EmitInt8(dwarf::DW_EH_PE_udata4); Asm->EmitInt8(dwarf::DW_EH_PE_udata4);
Asm->EOL("Call site format (DW_EH_PE_udata4)"); Asm->EOL("Call site format (DW_EH_PE_udata4)");
Asm->EmitULEB128Bytes(SizeSites); Asm->EmitULEB128Bytes(SizeSites);
@ -682,7 +682,7 @@ void DwarfException::EmitExceptionTable() {
} }
} else { } else {
// DWARF Exception handling // DWARF Exception handling
assert(TAI->getExceptionHandlingType() == ExceptionHandling::Dwarf); assert(MAI->getExceptionHandlingType() == ExceptionHandling::Dwarf);
// The call-site table is a list of all call sites that may throw an // The call-site table is a list of all call sites that may throw an
// exception (including C++ 'throw' statements) in the procedure // exception (including C++ 'throw' statements) in the procedure
@ -836,7 +836,7 @@ void DwarfException::EmitExceptionTable() {
/// EndModule - Emit all exception information that should come after the /// EndModule - Emit all exception information that should come after the
/// content. /// content.
void DwarfException::EndModule() { void DwarfException::EndModule() {
if (TAI->getExceptionHandlingType() != ExceptionHandling::Dwarf) if (MAI->getExceptionHandlingType() != ExceptionHandling::Dwarf)
return; return;
if (TimePassesIsEnabled) if (TimePassesIsEnabled)
ExceptionTimer->startTimer(); ExceptionTimer->startTimer();
@ -864,7 +864,7 @@ void DwarfException::BeginFunction(MachineFunction *MF) {
this->MF = MF; this->MF = MF;
shouldEmitTable = shouldEmitMoves = false; shouldEmitTable = shouldEmitMoves = false;
if (MMI && TAI->doesSupportExceptionHandling()) { if (MMI && MAI->doesSupportExceptionHandling()) {
// Map all labels and get rid of any dead landing pads. // Map all labels and get rid of any dead landing pads.
MMI->TidyLandingPads(); MMI->TidyLandingPads();

View File

@ -28,28 +28,28 @@ using namespace llvm;
Dwarf::Dwarf(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T, Dwarf::Dwarf(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T,
const char *flavor) const char *flavor)
: O(OS), Asm(A), TAI(T), TD(Asm->TM.getTargetData()), : O(OS), Asm(A), MAI(T), TD(Asm->TM.getTargetData()),
RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL), RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL),
SubprogramCount(0), Flavor(flavor), SetCounter(1) {} SubprogramCount(0), Flavor(flavor), SetCounter(1) {}
void Dwarf::PrintRelDirective(bool Force32Bit, bool isInSection) const { void Dwarf::PrintRelDirective(bool Force32Bit, bool isInSection) const {
if (isInSection && TAI->getDwarfSectionOffsetDirective()) if (isInSection && MAI->getDwarfSectionOffsetDirective())
O << TAI->getDwarfSectionOffsetDirective(); O << MAI->getDwarfSectionOffsetDirective();
else if (Force32Bit || TD->getPointerSize() == sizeof(int32_t)) else if (Force32Bit || TD->getPointerSize() == sizeof(int32_t))
O << TAI->getData32bitsDirective(); O << MAI->getData32bitsDirective();
else else
O << TAI->getData64bitsDirective(); O << MAI->getData64bitsDirective();
} }
/// PrintLabelName - Print label name in form used by Dwarf writer. /// PrintLabelName - Print label name in form used by Dwarf writer.
/// ///
void Dwarf::PrintLabelName(const char *Tag, unsigned Number) const { void Dwarf::PrintLabelName(const char *Tag, unsigned Number) const {
O << TAI->getPrivateGlobalPrefix() << Tag; O << MAI->getPrivateGlobalPrefix() << Tag;
if (Number) O << Number; if (Number) O << Number;
} }
void Dwarf::PrintLabelName(const char *Tag, unsigned Number, void Dwarf::PrintLabelName(const char *Tag, unsigned Number,
const char *Suffix) const { const char *Suffix) const {
O << TAI->getPrivateGlobalPrefix() << Tag; O << MAI->getPrivateGlobalPrefix() << Tag;
if (Number) O << Number; if (Number) O << Number;
O << Suffix; O << Suffix;
} }
@ -67,13 +67,13 @@ void Dwarf::EmitReference(const char *Tag, unsigned Number,
bool IsPCRelative, bool Force32Bit) const { bool IsPCRelative, bool Force32Bit) const {
PrintRelDirective(Force32Bit); PrintRelDirective(Force32Bit);
PrintLabelName(Tag, Number); PrintLabelName(Tag, Number);
if (IsPCRelative) O << "-" << TAI->getPCSymbol(); if (IsPCRelative) O << "-" << MAI->getPCSymbol();
} }
void Dwarf::EmitReference(const std::string &Name, bool IsPCRelative, void Dwarf::EmitReference(const std::string &Name, bool IsPCRelative,
bool Force32Bit) const { bool Force32Bit) const {
PrintRelDirective(Force32Bit); PrintRelDirective(Force32Bit);
O << Name; O << Name;
if (IsPCRelative) O << "-" << TAI->getPCSymbol(); if (IsPCRelative) O << "-" << MAI->getPCSymbol();
} }
/// EmitDifference - Emit the difference between two labels. Some assemblers do /// EmitDifference - Emit the difference between two labels. Some assemblers do
@ -82,7 +82,7 @@ void Dwarf::EmitReference(const std::string &Name, bool IsPCRelative,
void Dwarf::EmitDifference(const char *TagHi, unsigned NumberHi, void Dwarf::EmitDifference(const char *TagHi, unsigned NumberHi,
const char *TagLo, unsigned NumberLo, const char *TagLo, unsigned NumberLo,
bool IsSmall) { bool IsSmall) {
if (TAI->needsSet()) { if (MAI->needsSet()) {
O << "\t.set\t"; O << "\t.set\t";
PrintLabelName("set", SetCounter, Flavor); PrintLabelName("set", SetCounter, Flavor);
O << ","; O << ",";
@ -108,11 +108,11 @@ void Dwarf::EmitSectionOffset(const char* Label, const char* Section,
bool useSet) { bool useSet) {
bool printAbsolute = false; bool printAbsolute = false;
if (isEH) if (isEH)
printAbsolute = TAI->isAbsoluteEHSectionOffsets(); printAbsolute = MAI->isAbsoluteEHSectionOffsets();
else else
printAbsolute = TAI->isAbsoluteDebugSectionOffsets(); printAbsolute = MAI->isAbsoluteDebugSectionOffsets();
if (TAI->needsSet() && useSet) { if (MAI->needsSet() && useSet) {
O << "\t.set\t"; O << "\t.set\t";
PrintLabelName("set", SetCounter, Flavor); PrintLabelName("set", SetCounter, Flavor);
O << ","; O << ",";

View File

@ -43,9 +43,9 @@ namespace llvm {
/// ///
AsmPrinter *Asm; AsmPrinter *Asm;
/// TAI - Target asm information. /// MAI - Target asm information.
/// ///
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
/// TD - Target data. /// TD - Target data.
/// ///
@ -88,7 +88,7 @@ namespace llvm {
// //
const AsmPrinter *getAsm() const { return Asm; } const AsmPrinter *getAsm() const { return Asm; }
MachineModuleInfo *getMMI() const { return MMI; } MachineModuleInfo *getMMI() const { return MMI; }
const MCAsmInfo *getMCAsmInfo() const { return TAI; } const MCAsmInfo *getMCAsmInfo() const { return MAI; }
const TargetData *getTargetData() const { return TD; } const TargetData *getTargetData() const { return TD; }
void PrintRelDirective(bool Force32Bit = false, void PrintRelDirective(bool Force32Bit = false,

View File

@ -30,10 +30,10 @@ namespace {
class VISIBILITY_HIDDEN OcamlGCMetadataPrinter : public GCMetadataPrinter { class VISIBILITY_HIDDEN OcamlGCMetadataPrinter : public GCMetadataPrinter {
public: public:
void beginAssembly(raw_ostream &OS, AsmPrinter &AP, void beginAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI); const MCAsmInfo &MAI);
void finishAssembly(raw_ostream &OS, AsmPrinter &AP, void finishAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI); const MCAsmInfo &MAI);
}; };
} }
@ -44,11 +44,11 @@ Y("ocaml", "ocaml 3.10-compatible collector");
void llvm::linkOcamlGCPrinter() { } void llvm::linkOcamlGCPrinter() { }
static void EmitCamlGlobal(const Module &M, raw_ostream &OS, AsmPrinter &AP, static void EmitCamlGlobal(const Module &M, raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI, const char *Id) { const MCAsmInfo &MAI, const char *Id) {
const std::string &MId = M.getModuleIdentifier(); const std::string &MId = M.getModuleIdentifier();
std::string Mangled; std::string Mangled;
Mangled += TAI.getGlobalPrefix(); Mangled += MAI.getGlobalPrefix();
Mangled += "caml"; Mangled += "caml";
size_t Letter = Mangled.size(); size_t Letter = Mangled.size();
Mangled.append(MId.begin(), std::find(MId.begin(), MId.end(), '.')); Mangled.append(MId.begin(), std::find(MId.begin(), MId.end(), '.'));
@ -58,18 +58,18 @@ static void EmitCamlGlobal(const Module &M, raw_ostream &OS, AsmPrinter &AP,
// Capitalize the first letter of the module name. // Capitalize the first letter of the module name.
Mangled[Letter] = toupper(Mangled[Letter]); Mangled[Letter] = toupper(Mangled[Letter]);
if (const char *GlobalDirective = TAI.getGlobalDirective()) if (const char *GlobalDirective = MAI.getGlobalDirective())
OS << GlobalDirective << Mangled << "\n"; OS << GlobalDirective << Mangled << "\n";
OS << Mangled << ":\n"; OS << Mangled << ":\n";
} }
void OcamlGCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP, void OcamlGCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI) { const MCAsmInfo &MAI) {
AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getTextSection()); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getTextSection());
EmitCamlGlobal(getModule(), OS, AP, TAI, "code_begin"); EmitCamlGlobal(getModule(), OS, AP, MAI, "code_begin");
AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection()); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
EmitCamlGlobal(getModule(), OS, AP, TAI, "data_begin"); EmitCamlGlobal(getModule(), OS, AP, MAI, "data_begin");
} }
/// emitAssembly - Print the frametable. The ocaml frametable format is thus: /// emitAssembly - Print the frametable. The ocaml frametable format is thus:
@ -89,28 +89,28 @@ void OcamlGCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP,
/// either condition is detected in a function which uses the GC. /// either condition is detected in a function which uses the GC.
/// ///
void OcamlGCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP, void OcamlGCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI) { const MCAsmInfo &MAI) {
const char *AddressDirective; const char *AddressDirective;
int AddressAlignLog; int AddressAlignLog;
if (AP.TM.getTargetData()->getPointerSize() == sizeof(int32_t)) { if (AP.TM.getTargetData()->getPointerSize() == sizeof(int32_t)) {
AddressDirective = TAI.getData32bitsDirective(); AddressDirective = MAI.getData32bitsDirective();
AddressAlignLog = 2; AddressAlignLog = 2;
} else { } else {
AddressDirective = TAI.getData64bitsDirective(); AddressDirective = MAI.getData64bitsDirective();
AddressAlignLog = 3; AddressAlignLog = 3;
} }
AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getTextSection()); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getTextSection());
EmitCamlGlobal(getModule(), OS, AP, TAI, "code_end"); EmitCamlGlobal(getModule(), OS, AP, MAI, "code_end");
AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection()); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
EmitCamlGlobal(getModule(), OS, AP, TAI, "data_end"); EmitCamlGlobal(getModule(), OS, AP, MAI, "data_end");
OS << AddressDirective << 0; // FIXME: Why does ocaml emit this?? OS << AddressDirective << 0; // FIXME: Why does ocaml emit this??
AP.EOL(); AP.EOL();
AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection()); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
EmitCamlGlobal(getModule(), OS, AP, TAI, "frametable"); EmitCamlGlobal(getModule(), OS, AP, MAI, "frametable");
for (iterator I = begin(), IE = end(); I != IE; ++I) { for (iterator I = begin(), IE = end(); I != IE; ++I) {
GCFunctionInfo &FI = **I; GCFunctionInfo &FI = **I;
@ -126,7 +126,7 @@ void OcamlGCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP,
llvm_report_error(Msg.str()); // Very rude! llvm_report_error(Msg.str()); // Very rude!
} }
OS << "\t" << TAI.getCommentString() << " live roots for " OS << "\t" << MAI.getCommentString() << " live roots for "
<< FI.getFunction().getName() << "\n"; << FI.getFunction().getName() << "\n";
for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) { for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
@ -141,7 +141,7 @@ void OcamlGCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP,
} }
OS << AddressDirective OS << AddressDirective
<< TAI.getPrivateGlobalPrefix() << "label" << J->Num; << MAI.getPrivateGlobalPrefix() << "label" << J->Num;
AP.EOL("call return address"); AP.EOL("call return address");
AP.EmitInt16(FrameSize); AP.EmitInt16(FrameSize);

View File

@ -80,7 +80,7 @@ ELFWriter::ELFWriter(raw_ostream &o, TargetMachine &tm)
isLittleEndian(TM.getTargetData()->isLittleEndian()), isLittleEndian(TM.getTargetData()->isLittleEndian()),
ElfHdr(isLittleEndian, is64Bit) { ElfHdr(isLittleEndian, is64Bit) {
TAI = TM.getMCAsmInfo(); MAI = TM.getMCAsmInfo();
TEW = TM.getELFWriterInfo(); TEW = TM.getELFWriterInfo();
// Create the object code emitter object for this target. // Create the object code emitter object for this target.
@ -687,7 +687,7 @@ bool ELFWriter::doFinalization(Module &M) {
SymbolList.push_back(ELFSym::getExtSym(*I)); SymbolList.push_back(ELFSym::getExtSym(*I));
// Emit non-executable stack note // Emit non-executable stack note
if (TAI->getNonexecutableStackDirective()) if (MAI->getNonexecutableStackDirective())
getNonExecStackSection(); getNonExecStackSection();
// Emit a symbol for each section created until now, skip null section // Emit a symbol for each section created until now, skip null section

View File

@ -86,9 +86,9 @@ namespace llvm {
/// and other object file specific stuff /// and other object file specific stuff
const TargetLoweringObjectFile &TLOF; const TargetLoweringObjectFile &TLOF;
/// TAI - Target Asm Info, provide information about section names for /// MAI - Target Asm Info, provide information about section names for
/// globals and other target specific stuff. /// globals and other target specific stuff.
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// Properties inferred automatically from the target machine. // Properties inferred automatically from the target machine.
@ -118,7 +118,7 @@ namespace llvm {
unsigned NumSections; // Always = SectionList.size() unsigned NumSections; // Always = SectionList.size()
/// SectionLookup - This is a mapping from section name to section number in /// SectionLookup - This is a mapping from section name to section number in
/// the SectionList. Used to quickly gather the Section Index from TAI names /// the SectionList. Used to quickly gather the Section Index from MAI names
std::map<std::string, ELFSection*> SectionLookup; std::map<std::string, ELFSection*> SectionLookup;
/// PendingGlobals - Globals not processed as symbols yet. /// PendingGlobals - Globals not processed as symbols yet.

View File

@ -20,11 +20,11 @@ GCMetadataPrinter::GCMetadataPrinter() { }
GCMetadataPrinter::~GCMetadataPrinter() { } GCMetadataPrinter::~GCMetadataPrinter() { }
void GCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP, void GCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI) { const MCAsmInfo &MAI) {
// Default is no action. // Default is no action.
} }
void GCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP, void GCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP,
const MCAsmInfo &TAI) { const MCAsmInfo &MAI) {
// Default is no action. // Default is no action.
} }

View File

@ -68,7 +68,7 @@ struct MachOSym {
}; };
MachOSym(const GlobalValue *gv, std::string name, uint8_t sect, MachOSym(const GlobalValue *gv, std::string name, uint8_t sect,
const MCAsmInfo *TAI); const MCAsmInfo *MAI);
struct SymCmp { struct SymCmp {
// FIXME: this does not appear to be sorting 'f' after 'F' // FIXME: this does not appear to be sorting 'f' after 'F'

View File

@ -35,7 +35,7 @@ MachOCodeEmitter::MachOCodeEmitter(MachOWriter &mow, MachOSection &mos) :
ObjectCodeEmitter(&mos), MOW(mow), TM(MOW.TM) { ObjectCodeEmitter(&mos), MOW(mow), TM(MOW.TM) {
is64Bit = TM.getTargetData()->getPointerSizeInBits() == 64; is64Bit = TM.getTargetData()->getPointerSizeInBits() == 64;
isLittleEndian = TM.getTargetData()->isLittleEndian(); isLittleEndian = TM.getTargetData()->isLittleEndian();
TAI = TM.getMCAsmInfo(); MAI = TM.getMCAsmInfo();
} }
/// startFunction - This callback is invoked when a new machine function is /// startFunction - This callback is invoked when a new machine function is
@ -61,7 +61,7 @@ void MachOCodeEmitter::startFunction(MachineFunction &MF) {
// Create symbol for function entry // Create symbol for function entry
const GlobalValue *FuncV = MF.getFunction(); const GlobalValue *FuncV = MF.getFunction();
MachOSym FnSym(FuncV, MOW.Mang->getMangledName(FuncV), MOS->Index, TAI); MachOSym FnSym(FuncV, MOW.Mang->getMangledName(FuncV), MOS->Index, MAI);
FnSym.n_value = getCurrentPCOffset(); FnSym.n_value = getCurrentPCOffset();
// add it to the symtab. // add it to the symtab.

View File

@ -30,7 +30,7 @@ class MachOCodeEmitter : public ObjectCodeEmitter {
/// machine directly, indicating what header values and flags to set. /// machine directly, indicating what header values and flags to set.
bool is64Bit, isLittleEndian; bool is64Bit, isLittleEndian;
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
/// Relocations - These are the relocations that the function needs, as /// Relocations - These are the relocations that the function needs, as
/// emitted. /// emitted.

View File

@ -61,7 +61,7 @@ MachOWriter::MachOWriter(raw_ostream &o, TargetMachine &tm)
is64Bit = TM.getTargetData()->getPointerSizeInBits() == 64; is64Bit = TM.getTargetData()->getPointerSizeInBits() == 64;
isLittleEndian = TM.getTargetData()->isLittleEndian(); isLittleEndian = TM.getTargetData()->isLittleEndian();
TAI = TM.getMCAsmInfo(); MAI = TM.getMCAsmInfo();
// Create the machine code emitter object for this target. // Create the machine code emitter object for this target.
MachOCE = new MachOCodeEmitter(*this, *getTextSection(true)); MachOCE = new MachOCodeEmitter(*this, *getTextSection(true));
@ -221,7 +221,7 @@ void MachOWriter::AddSymbolToSection(MachOSection *Sec, GlobalVariable *GV) {
} }
// Globals without external linkage apparently do not go in the symbol table. // Globals without external linkage apparently do not go in the symbol table.
if (!GV->hasLocalLinkage()) { if (!GV->hasLocalLinkage()) {
MachOSym Sym(GV, Mang->getMangledName(GV), Sec->Index, TAI); MachOSym Sym(GV, Mang->getMangledName(GV), Sec->Index, MAI);
Sym.n_value = Sec->size(); Sym.n_value = Sec->size();
SymbolTable.push_back(Sym); SymbolTable.push_back(Sym);
} }
@ -256,7 +256,7 @@ void MachOWriter::EmitGlobal(GlobalVariable *GV) {
if (NoInit || GV->hasLinkOnceLinkage() || GV->hasWeakLinkage() || if (NoInit || GV->hasLinkOnceLinkage() || GV->hasWeakLinkage() ||
GV->hasCommonLinkage()) { GV->hasCommonLinkage()) {
MachOSym ExtOrCommonSym(GV, Mang->getMangledName(GV), MachOSym ExtOrCommonSym(GV, Mang->getMangledName(GV),
MachOSym::NO_SECT, TAI); MachOSym::NO_SECT, MAI);
// For undefined (N_UNDF) external (N_EXT) types, n_value is the size in // For undefined (N_UNDF) external (N_EXT) types, n_value is the size in
// bytes of the symbol. // bytes of the symbol.
ExtOrCommonSym.n_value = Size; ExtOrCommonSym.n_value = Size;
@ -454,7 +454,7 @@ void MachOWriter::BufferSymbolAndStringTable() {
for (std::vector<GlobalValue*>::iterator I = PendingGlobals.begin(), for (std::vector<GlobalValue*>::iterator I = PendingGlobals.begin(),
E = PendingGlobals.end(); I != E; ++I) { E = PendingGlobals.end(); I != E; ++I) {
if (GVOffset[*I] == 0 && GVSection[*I] == 0) { if (GVOffset[*I] == 0 && GVSection[*I] == 0) {
MachOSym UndfSym(*I, Mang->getMangledName(*I), MachOSym::NO_SECT, TAI); MachOSym UndfSym(*I, Mang->getMangledName(*I), MachOSym::NO_SECT, MAI);
SymbolTable.push_back(UndfSym); SymbolTable.push_back(UndfSym);
GVOffset[*I] = -1; GVOffset[*I] = -1;
} }
@ -743,7 +743,7 @@ void MachOWriter::InitMem(const Constant *C, uintptr_t Offset,
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
MachOSym::MachOSym(const GlobalValue *gv, std::string name, uint8_t sect, MachOSym::MachOSym(const GlobalValue *gv, std::string name, uint8_t sect,
const MCAsmInfo *TAI) : const MCAsmInfo *MAI) :
GV(gv), n_strx(0), n_type(sect == NO_SECT ? N_UNDF : N_SECT), n_sect(sect), GV(gv), n_strx(0), n_type(sect == NO_SECT ? N_UNDF : N_SECT), n_sect(sect),
n_desc(0), n_value(0) { n_desc(0), n_value(0) {
@ -759,17 +759,17 @@ MachOSym::MachOSym(const GlobalValue *gv, std::string name, uint8_t sect,
case GlobalValue::CommonLinkage: case GlobalValue::CommonLinkage:
assert(!isa<Function>(gv) && "Unexpected linkage type for Function!"); assert(!isa<Function>(gv) && "Unexpected linkage type for Function!");
case GlobalValue::ExternalLinkage: case GlobalValue::ExternalLinkage:
GVName = TAI->getGlobalPrefix() + name; GVName = MAI->getGlobalPrefix() + name;
n_type |= GV->hasHiddenVisibility() ? N_PEXT : N_EXT; n_type |= GV->hasHiddenVisibility() ? N_PEXT : N_EXT;
break; break;
case GlobalValue::PrivateLinkage: case GlobalValue::PrivateLinkage:
GVName = TAI->getPrivateGlobalPrefix() + name; GVName = MAI->getPrivateGlobalPrefix() + name;
break; break;
case GlobalValue::LinkerPrivateLinkage: case GlobalValue::LinkerPrivateLinkage:
GVName = TAI->getLinkerPrivateGlobalPrefix() + name; GVName = MAI->getLinkerPrivateGlobalPrefix() + name;
break; break;
case GlobalValue::InternalLinkage: case GlobalValue::InternalLinkage:
GVName = TAI->getGlobalPrefix() + name; GVName = MAI->getGlobalPrefix() + name;
break; break;
} }
} }

View File

@ -78,7 +78,7 @@ namespace llvm {
bool is64Bit, isLittleEndian; bool is64Bit, isLittleEndian;
// Target Asm Info // Target Asm Info
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
/// Header - An instance of MachOHeader that we will update while we build /// Header - An instance of MachOHeader that we will update while we build
/// the file, and then emit during finalization. /// the file, and then emit during finalization.

View File

@ -66,7 +66,7 @@ MCAsmInfo::MCAsmInfo() {
UsedDirective = 0; UsedDirective = 0;
WeakRefDirective = 0; WeakRefDirective = 0;
WeakDefDirective = 0; WeakDefDirective = 0;
// FIXME: These are ELFish - move to ELFTAI. // FIXME: These are ELFish - move to ELFMAI.
HiddenDirective = "\t.hidden\t"; HiddenDirective = "\t.hidden\t";
ProtectedDirective = "\t.protected\t"; ProtectedDirective = "\t.protected\t";
AbsoluteDebugSectionOffsets = false; AbsoluteDebugSectionOffsets = false;

View File

@ -24,12 +24,12 @@ namespace {
class MCAsmStreamer : public MCStreamer { class MCAsmStreamer : public MCStreamer {
raw_ostream &OS; raw_ostream &OS;
const MCAsmInfo &TAI; const MCAsmInfo &MAI;
AsmPrinter *Printer; AsmPrinter *Printer;
public: public:
MCAsmStreamer(MCContext &Context, raw_ostream &_OS, const MCAsmInfo &tai, MCAsmStreamer(MCContext &Context, raw_ostream &_OS, const MCAsmInfo &tai,
AsmPrinter *_AsmPrinter) AsmPrinter *_AsmPrinter)
: MCStreamer(Context), OS(_OS), TAI(tai), Printer(_AsmPrinter) {} : MCStreamer(Context), OS(_OS), MAI(tai), Printer(_AsmPrinter) {}
~MCAsmStreamer() {} ~MCAsmStreamer() {}
/// @name MCStreamer Interface /// @name MCStreamer Interface
@ -102,7 +102,7 @@ void MCAsmStreamer::SwitchSection(const MCSection *Section) {
assert(Section && "Cannot switch to a null section!"); assert(Section && "Cannot switch to a null section!");
if (Section != CurSection) { if (Section != CurSection) {
CurSection = Section; CurSection = Section;
Section->PrintSwitchToSection(TAI, OS); Section->PrintSwitchToSection(MAI, OS);
} }
} }
@ -230,14 +230,14 @@ void MCAsmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value,
if (isPowerOf2_32(ByteAlignment)) { if (isPowerOf2_32(ByteAlignment)) {
switch (ValueSize) { switch (ValueSize) {
default: llvm_unreachable("Invalid size for machine code value!"); default: llvm_unreachable("Invalid size for machine code value!");
case 1: OS << TAI.getAlignDirective(); break; case 1: OS << MAI.getAlignDirective(); break;
// FIXME: use TAI for this! // FIXME: use MAI for this!
case 2: OS << ".p2alignw "; break; case 2: OS << ".p2alignw "; break;
case 4: OS << ".p2alignl "; break; case 4: OS << ".p2alignl "; break;
case 8: llvm_unreachable("Unsupported alignment size!"); case 8: llvm_unreachable("Unsupported alignment size!");
} }
if (TAI.getAlignmentIsInBytes()) if (MAI.getAlignmentIsInBytes())
OS << ByteAlignment; OS << ByteAlignment;
else else
OS << Log2_32(ByteAlignment); OS << Log2_32(ByteAlignment);
@ -253,7 +253,7 @@ void MCAsmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value,
} }
// Non-power of two alignment. This is not widely supported by assemblers. // Non-power of two alignment. This is not widely supported by assemblers.
// FIXME: Parameterize this based on TAI. // FIXME: Parameterize this based on MAI.
switch (ValueSize) { switch (ValueSize) {
default: llvm_unreachable("Invalid size for machine code value!"); default: llvm_unreachable("Invalid size for machine code value!");
case 1: OS << ".balign"; break; case 1: OS << ".balign"; break;
@ -314,6 +314,6 @@ void MCAsmStreamer::Finish() {
} }
MCStreamer *llvm::createAsmStreamer(MCContext &Context, raw_ostream &OS, MCStreamer *llvm::createAsmStreamer(MCContext &Context, raw_ostream &OS,
const MCAsmInfo &TAI, AsmPrinter *AP) { const MCAsmInfo &MAI, AsmPrinter *AP) {
return new MCAsmStreamer(Context, OS, TAI, AP); return new MCAsmStreamer(Context, OS, MAI, AP);
} }

View File

@ -29,7 +29,7 @@ Create(const StringRef &Name, bool IsDirective, SectionKind K, MCContext &Ctx) {
return new (Ctx) MCSectionCOFF(Name, IsDirective, K); return new (Ctx) MCSectionCOFF(Name, IsDirective, K);
} }
void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &TAI, void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
if (isDirective()) { if (isDirective()) {

View File

@ -23,13 +23,13 @@ Create(const StringRef &Section, unsigned Type, unsigned Flags,
// ShouldOmitSectionDirective - Decides whether a '.section' directive // ShouldOmitSectionDirective - Decides whether a '.section' directive
// should be printed before the section name // should be printed before the section name
bool MCSectionELF::ShouldOmitSectionDirective(const char *Name, bool MCSectionELF::ShouldOmitSectionDirective(const char *Name,
const MCAsmInfo &TAI) const { const MCAsmInfo &MAI) const {
// FIXME: Does .section .bss/.data/.text work everywhere?? // FIXME: Does .section .bss/.data/.text work everywhere??
if (strcmp(Name, ".text") == 0 || if (strcmp(Name, ".text") == 0 ||
strcmp(Name, ".data") == 0 || strcmp(Name, ".data") == 0 ||
(strcmp(Name, ".bss") == 0 && (strcmp(Name, ".bss") == 0 &&
!TAI.usesELFSectionDirectiveForBSS())) !MAI.usesELFSectionDirectiveForBSS()))
return true; return true;
return false; return false;
@ -44,10 +44,10 @@ bool MCSectionELF::ShouldPrintSectionType(unsigned Ty) const {
return true; return true;
} }
void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &TAI, void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
if (ShouldOmitSectionDirective(SectionName.c_str(), TAI)) { if (ShouldOmitSectionDirective(SectionName.c_str(), MAI)) {
OS << '\t' << getSectionName() << '\n'; OS << '\t' << getSectionName() << '\n';
return; return;
} }
@ -55,7 +55,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &TAI,
OS << "\t.section\t" << getSectionName(); OS << "\t.section\t" << getSectionName();
// Handle the weird solaris syntax if desired. // Handle the weird solaris syntax if desired.
if (TAI.usesSunStyleELFSectionSwitchSyntax() && if (MAI.usesSunStyleELFSectionSwitchSyntax() &&
!(Flags & MCSectionELF::SHF_MERGE)) { !(Flags & MCSectionELF::SHF_MERGE)) {
if (Flags & MCSectionELF::SHF_ALLOC) if (Flags & MCSectionELF::SHF_ALLOC)
OS << ",#alloc"; OS << ",#alloc";
@ -82,7 +82,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &TAI,
// If there are target-specific flags, print them. // If there are target-specific flags, print them.
if (Flags & ~MCSectionELF::TARGET_INDEP_SHF) if (Flags & ~MCSectionELF::TARGET_INDEP_SHF)
PrintTargetSpecificSectionFlags(TAI, OS); PrintTargetSpecificSectionFlags(MAI, OS);
OS << '"'; OS << '"';
@ -90,7 +90,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &TAI,
OS << ','; OS << ',';
// If comment string is '@', e.g. as on ARM - use '%' instead // If comment string is '@', e.g. as on ARM - use '%' instead
if (TAI.getCommentString()[0] == '@') if (MAI.getCommentString()[0] == '@')
OS << '%'; OS << '%';
else else
OS << '@'; OS << '@';

View File

@ -72,7 +72,7 @@ Create(const StringRef &Segment, const StringRef &Section,
Reserved2, K); Reserved2, K);
} }
void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &TAI, void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
OS << "\t.section\t" << getSegmentName() << ',' << getSectionName(); OS << "\t.section\t" << getSegmentName() << ',' << getSectionName();

View File

@ -405,7 +405,7 @@ static unsigned getNumJTEntries(const std::vector<MachineJumpTableEntry> &JT,
unsigned ARMBaseInstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const { unsigned ARMBaseInstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
const MachineBasicBlock &MBB = *MI->getParent(); const MachineBasicBlock &MBB = *MI->getParent();
const MachineFunction *MF = MBB.getParent(); const MachineFunction *MF = MBB.getParent();
const MCAsmInfo *TAI = MF->getTarget().getMCAsmInfo(); const MCAsmInfo *MAI = MF->getTarget().getMCAsmInfo();
// Basic size info comes from the TSFlags field. // Basic size info comes from the TSFlags field.
const TargetInstrDesc &TID = MI->getDesc(); const TargetInstrDesc &TID = MI->getDesc();
@ -416,7 +416,7 @@ unsigned ARMBaseInstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
default: { default: {
// If this machine instr is an inline asm, measure it. // If this machine instr is an inline asm, measure it.
if (MI->getOpcode() == ARM::INLINEASM) if (MI->getOpcode() == ARM::INLINEASM)
return getInlineAsmLength(MI->getOperand(0).getSymbolName(), *TAI); return getInlineAsmLength(MI->getOperand(0).getSymbolName(), *MAI);
if (MI->isLabel()) if (MI->isLabel())
return 0; return 0;
switch (Opc) { switch (Opc) {

View File

@ -221,7 +221,7 @@ namespace {
if (ACPV->hasModifier()) O << "(" << ACPV->getModifier() << ")"; if (ACPV->hasModifier()) O << "(" << ACPV->getModifier() << ")";
if (ACPV->getPCAdjustment() != 0) { if (ACPV->getPCAdjustment() != 0) {
O << "-(" << TAI->getPrivateGlobalPrefix() << "PC" O << "-(" << MAI->getPrivateGlobalPrefix() << "PC"
<< ACPV->getLabelId() << ACPV->getLabelId()
<< "+" << (unsigned)ACPV->getPCAdjustment(); << "+" << (unsigned)ACPV->getPCAdjustment();
if (ACPV->mustAddCurrentAddress()) if (ACPV->mustAddCurrentAddress())
@ -280,7 +280,7 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
O << "\t.globl\t" << CurrentFnName << "\n"; O << "\t.globl\t" << CurrentFnName << "\n";
O << "\t.weak_definition\t" << CurrentFnName << "\n"; O << "\t.weak_definition\t" << CurrentFnName << "\n";
} else { } else {
O << TAI->getWeakRefDirective() << CurrentFnName << "\n"; O << MAI->getWeakRefDirective() << CurrentFnName << "\n";
} }
break; break;
} }
@ -328,7 +328,7 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
} }
} }
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size " << CurrentFnName << ", .-" << CurrentFnName << "\n"; O << "\t.size " << CurrentFnName << ", .-" << CurrentFnName << "\n";
// Emit post-function debug information. // Emit post-function debug information.
@ -410,11 +410,11 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
break; break;
} }
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
default: default:
@ -423,7 +423,7 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
} }
static void printSOImm(formatted_raw_ostream &O, int64_t V, bool VerboseAsm, static void printSOImm(formatted_raw_ostream &O, int64_t V, bool VerboseAsm,
const MCAsmInfo *TAI) { const MCAsmInfo *MAI) {
// Break it up into two parts that make up a shifter immediate. // Break it up into two parts that make up a shifter immediate.
V = ARM_AM::getSOImmVal(V); V = ARM_AM::getSOImmVal(V);
assert(V != -1 && "Not a valid so_imm value!"); assert(V != -1 && "Not a valid so_imm value!");
@ -437,7 +437,7 @@ static void printSOImm(formatted_raw_ostream &O, int64_t V, bool VerboseAsm,
O << "#" << Imm << ", " << Rot; O << "#" << Imm << ", " << Rot;
// Pretty printed version. // Pretty printed version.
if (VerboseAsm) if (VerboseAsm)
O << ' ' << TAI->getCommentString() O << ' ' << MAI->getCommentString()
<< ' ' << (int)ARM_AM::rotr32(Imm, Rot); << ' ' << (int)ARM_AM::rotr32(Imm, Rot);
} else { } else {
O << "#" << Imm; O << "#" << Imm;
@ -449,7 +449,7 @@ static void printSOImm(formatted_raw_ostream &O, int64_t V, bool VerboseAsm,
void ARMAsmPrinter::printSOImmOperand(const MachineInstr *MI, int OpNum) { void ARMAsmPrinter::printSOImmOperand(const MachineInstr *MI, int OpNum) {
const MachineOperand &MO = MI->getOperand(OpNum); const MachineOperand &MO = MI->getOperand(OpNum);
assert(MO.isImm() && "Not a valid so_imm value!"); assert(MO.isImm() && "Not a valid so_imm value!");
printSOImm(O, MO.getImm(), VerboseAsm, TAI); printSOImm(O, MO.getImm(), VerboseAsm, MAI);
} }
/// printSOImm2PartOperand - SOImm is broken into two pieces using a 'mov' /// printSOImm2PartOperand - SOImm is broken into two pieces using a 'mov'
@ -459,7 +459,7 @@ void ARMAsmPrinter::printSOImm2PartOperand(const MachineInstr *MI, int OpNum) {
assert(MO.isImm() && "Not a valid so_imm value!"); assert(MO.isImm() && "Not a valid so_imm value!");
unsigned V1 = ARM_AM::getSOImmTwoPartFirst(MO.getImm()); unsigned V1 = ARM_AM::getSOImmTwoPartFirst(MO.getImm());
unsigned V2 = ARM_AM::getSOImmTwoPartSecond(MO.getImm()); unsigned V2 = ARM_AM::getSOImmTwoPartSecond(MO.getImm());
printSOImm(O, V1, VerboseAsm, TAI); printSOImm(O, V1, VerboseAsm, MAI);
O << "\n\torr"; O << "\n\torr";
printPredicateOperand(MI, 2); printPredicateOperand(MI, 2);
O << " "; O << " ";
@ -467,7 +467,7 @@ void ARMAsmPrinter::printSOImm2PartOperand(const MachineInstr *MI, int OpNum) {
O << ", "; O << ", ";
printOperand(MI, 0); printOperand(MI, 0);
O << ", "; O << ", ";
printSOImm(O, V2, VerboseAsm, TAI); printSOImm(O, V2, VerboseAsm, MAI);
} }
// so_reg is a 4-operand unit corresponding to register forms of the A5.1 // so_reg is a 4-operand unit corresponding to register forms of the A5.1
@ -881,7 +881,7 @@ void ARMAsmPrinter::printSBitModifierOperand(const MachineInstr *MI, int OpNum){
void ARMAsmPrinter::printPCLabel(const MachineInstr *MI, int OpNum) { void ARMAsmPrinter::printPCLabel(const MachineInstr *MI, int OpNum) {
int Id = (int)MI->getOperand(OpNum).getImm(); int Id = (int)MI->getOperand(OpNum).getImm();
O << TAI->getPrivateGlobalPrefix() << "PC" << Id; O << MAI->getPrivateGlobalPrefix() << "PC" << Id;
} }
void ARMAsmPrinter::printRegisterList(const MachineInstr *MI, int OpNum) { void ARMAsmPrinter::printRegisterList(const MachineInstr *MI, int OpNum) {
@ -902,7 +902,7 @@ void ARMAsmPrinter::printCPInstOperand(const MachineInstr *MI, int OpNum,
// data itself. // data itself.
if (!strcmp(Modifier, "label")) { if (!strcmp(Modifier, "label")) {
unsigned ID = MI->getOperand(OpNum).getImm(); unsigned ID = MI->getOperand(OpNum).getImm();
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
<< '_' << ID << ":\n"; << '_' << ID << ":\n";
} else { } else {
assert(!strcmp(Modifier, "cpentry") && "Unknown modifier for CPE"); assert(!strcmp(Modifier, "cpentry") && "Unknown modifier for CPE");
@ -924,16 +924,16 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) {
const MachineOperand &MO1 = MI->getOperand(OpNum); const MachineOperand &MO1 = MI->getOperand(OpNum);
const MachineOperand &MO2 = MI->getOperand(OpNum+1); // Unique Id const MachineOperand &MO2 = MI->getOperand(OpNum+1); // Unique Id
unsigned JTI = MO1.getIndex(); unsigned JTI = MO1.getIndex();
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << JTI << '_' << MO2.getImm() << ":\n"; << '_' << JTI << '_' << MO2.getImm() << ":\n";
const char *JTEntryDirective = TAI->getData32bitsDirective(); const char *JTEntryDirective = MAI->getData32bitsDirective();
const MachineFunction *MF = MI->getParent()->getParent(); const MachineFunction *MF = MI->getParent()->getParent();
const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo();
const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables(); const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs; const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs;
bool UseSet= TAI->getSetDirective() && TM.getRelocationModel() == Reloc::PIC_; bool UseSet= MAI->getSetDirective() && TM.getRelocationModel() == Reloc::PIC_;
SmallPtrSet<MachineBasicBlock*, 8> JTSets; SmallPtrSet<MachineBasicBlock*, 8> JTSets;
for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) { for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) {
MachineBasicBlock *MBB = JTBBs[i]; MachineBasicBlock *MBB = JTBBs[i];
@ -944,12 +944,12 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) {
O << JTEntryDirective << ' '; O << JTEntryDirective << ' ';
if (UseSet) if (UseSet)
O << TAI->getPrivateGlobalPrefix() << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
<< '_' << JTI << '_' << MO2.getImm() << '_' << JTI << '_' << MO2.getImm()
<< "_set_" << MBB->getNumber(); << "_set_" << MBB->getNumber();
else if (TM.getRelocationModel() == Reloc::PIC_) { else if (TM.getRelocationModel() == Reloc::PIC_) {
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" O << '-' << MAI->getPrivateGlobalPrefix() << "JTI"
<< getFunctionNumber() << '_' << JTI << '_' << MO2.getImm(); << getFunctionNumber() << '_' << JTI << '_' << MO2.getImm();
} else { } else {
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
@ -963,7 +963,7 @@ void ARMAsmPrinter::printJT2BlockOperand(const MachineInstr *MI, int OpNum) {
const MachineOperand &MO1 = MI->getOperand(OpNum); const MachineOperand &MO1 = MI->getOperand(OpNum);
const MachineOperand &MO2 = MI->getOperand(OpNum+1); // Unique Id const MachineOperand &MO2 = MI->getOperand(OpNum+1); // Unique Id
unsigned JTI = MO1.getIndex(); unsigned JTI = MO1.getIndex();
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << JTI << '_' << MO2.getImm() << ":\n"; << '_' << JTI << '_' << MO2.getImm() << ":\n";
const MachineFunction *MF = MI->getParent()->getParent(); const MachineFunction *MF = MI->getParent()->getParent();
@ -979,13 +979,13 @@ void ARMAsmPrinter::printJT2BlockOperand(const MachineInstr *MI, int OpNum) {
for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) { for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) {
MachineBasicBlock *MBB = JTBBs[i]; MachineBasicBlock *MBB = JTBBs[i];
if (ByteOffset) if (ByteOffset)
O << TAI->getData8bitsDirective(); O << MAI->getData8bitsDirective();
else if (HalfWordOffset) else if (HalfWordOffset)
O << TAI->getData16bitsDirective(); O << MAI->getData16bitsDirective();
if (ByteOffset || HalfWordOffset) { if (ByteOffset || HalfWordOffset) {
O << '('; O << '(';
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
O << "-" << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << "-" << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << JTI << '_' << MO2.getImm() << ")/2"; << '_' << JTI << '_' << MO2.getImm() << ")/2";
} else { } else {
O << "\tb.w "; O << "\tb.w ";
@ -1172,7 +1172,7 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
// Don't put things that should go in the cstring section into "comm". // Don't put things that should go in the cstring section into "comm".
!TheSection->getKind().isMergeableCString()) { !TheSection->getKind().isMergeableCString()) {
if (GVar->hasExternalLinkage()) { if (GVar->hasExternalLinkage()) {
if (const char *Directive = TAI->getZeroFillDirective()) { if (const char *Directive = MAI->getZeroFillDirective()) {
O << "\t.globl\t" << name << "\n"; O << "\t.globl\t" << name << "\n";
O << Directive << "__DATA, __common, " << name << ", " O << Directive << "__DATA, __common, " << name << ", "
<< Size << ", " << Align << "\n"; << Size << ", " << Align << "\n";
@ -1185,42 +1185,42 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
if (isDarwin) { if (isDarwin) {
if (GVar->hasLocalLinkage()) { if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << "," << Size O << MAI->getLCOMMDirective() << name << "," << Size
<< ',' << Align; << ',' << Align;
} else if (GVar->hasCommonLinkage()) { } else if (GVar->hasCommonLinkage()) {
O << TAI->getCOMMDirective() << name << "," << Size O << MAI->getCOMMDirective() << name << "," << Size
<< ',' << Align; << ',' << Align;
} else { } else {
OutStreamer.SwitchSection(TheSection); OutStreamer.SwitchSection(TheSection);
O << "\t.globl " << name << '\n' O << "\t.globl " << name << '\n'
<< TAI->getWeakDefDirective() << name << '\n'; << MAI->getWeakDefDirective() << name << '\n';
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << ' '; O << "\t\t\t\t" << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
EmitGlobalConstant(C); EmitGlobalConstant(C);
return; return;
} }
} else if (TAI->getLCOMMDirective() != NULL) { } else if (MAI->getLCOMMDirective() != NULL) {
if (GVar->hasLocalLinkage()) { if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << "," << Size; O << MAI->getLCOMMDirective() << name << "," << Size;
} else { } else {
O << TAI->getCOMMDirective() << name << "," << Size; O << MAI->getCOMMDirective() << name << "," << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align); O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
} }
} else { } else {
if (GVar->hasLocalLinkage()) if (GVar->hasLocalLinkage())
O << "\t.local\t" << name << "\n"; O << "\t.local\t" << name << "\n";
O << TAI->getCOMMDirective() << name << "," << Size; O << MAI->getCOMMDirective() << name << "," << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << "," << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align); O << "," << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
} }
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t" << TAI->getCommentString() << " "; O << "\t\t" << MAI->getCommentString() << " ";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << "\n"; O << "\n";
@ -1258,11 +1258,11 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << " "; O << "\t\t\t\t" << MAI->getCommentString() << " ";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << "\n"; O << "\n";
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size " << name << ", " << Size << "\n"; O << "\t.size " << name << ", " << Size << "\n";
EmitGlobalConstant(C); EmitGlobalConstant(C);

View File

@ -99,7 +99,7 @@ void AlphaAsmPrinter::printOp(const MachineOperand &MO, bool IsCallOp) {
return; return;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_" O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_"
<< MO.getIndex(); << MO.getIndex();
return; return;
@ -112,7 +112,7 @@ void AlphaAsmPrinter::printOp(const MachineOperand &MO, bool IsCallOp) {
return; return;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
return; return;
@ -155,7 +155,7 @@ bool AlphaAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
case Function::WeakODRLinkage: case Function::WeakODRLinkage:
case Function::LinkOnceAnyLinkage: case Function::LinkOnceAnyLinkage:
case Function::LinkOnceODRLinkage: case Function::LinkOnceODRLinkage:
O << TAI->getWeakRefDirective() << CurrentFnName << "\n"; O << MAI->getWeakRefDirective() << CurrentFnName << "\n";
break; break;
} }
@ -224,11 +224,11 @@ void AlphaAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
case GlobalValue::WeakAnyLinkage: case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage: case GlobalValue::WeakODRLinkage:
case GlobalValue::CommonLinkage: case GlobalValue::CommonLinkage:
O << TAI->getWeakRefDirective() << name << '\n'; O << MAI->getWeakRefDirective() << name << '\n';
break; break;
case GlobalValue::AppendingLinkage: case GlobalValue::AppendingLinkage:
case GlobalValue::ExternalLinkage: case GlobalValue::ExternalLinkage:
O << TAI->getGlobalDirective() << name << "\n"; O << MAI->getGlobalDirective() << name << "\n";
break; break;
case GlobalValue::InternalLinkage: case GlobalValue::InternalLinkage:
case GlobalValue::PrivateLinkage: case GlobalValue::PrivateLinkage:
@ -239,7 +239,7 @@ void AlphaAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
} }
// 3: Type, Size, Align // 3: Type, Size, Align
if (TAI->hasDotTypeDotSizeDirective()) { if (MAI->hasDotTypeDotSizeDirective()) {
O << "\t.type\t" << name << ", @object\n"; O << "\t.type\t" << name << ", @object\n";
O << "\t.size\t" << name << ", " << Size << "\n"; O << "\t.size\t" << name << ", " << Size << "\n";
} }

View File

@ -40,8 +40,8 @@ namespace {
class VISIBILITY_HIDDEN BlackfinAsmPrinter : public AsmPrinter { class VISIBILITY_HIDDEN BlackfinAsmPrinter : public AsmPrinter {
public: public:
BlackfinAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, BlackfinAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
const MCAsmInfo *TAI, bool V) const MCAsmInfo *MAI, bool V)
: AsmPrinter(O, TM, TAI, V) {} : AsmPrinter(O, TM, MAI, V) {}
virtual const char *getPassName() const { virtual const char *getPassName() const {
return "Blackfin Assembly Printer"; return "Blackfin Assembly Printer";
@ -75,14 +75,14 @@ void BlackfinAsmPrinter::emitLinkage(const std::string &name,
case GlobalValue::LinkerPrivateLinkage: case GlobalValue::LinkerPrivateLinkage:
break; break;
case GlobalValue::ExternalLinkage: case GlobalValue::ExternalLinkage:
O << TAI->getGlobalDirective() << name << "\n"; O << MAI->getGlobalDirective() << name << "\n";
break; break;
case GlobalValue::LinkOnceAnyLinkage: case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage: case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage: case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage: case GlobalValue::WeakODRLinkage:
O << TAI->getGlobalDirective() << name << "\n"; O << MAI->getGlobalDirective() << name << "\n";
O << TAI->getWeakDefDirective() << name << "\n"; O << MAI->getWeakDefDirective() << name << "\n";
break; break;
} }
} }
@ -180,11 +180,11 @@ void BlackfinAsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
O << Mang->makeNameProper(MO.getSymbolName()); O << Mang->makeNameProper(MO.getSymbolName());
break; break;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_" O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_"
<< MO.getIndex(); << MO.getIndex();
break; break;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
default: default:

View File

@ -325,22 +325,22 @@ void SPUAsmPrinter::printOp(const MachineOperand &MO) {
printBasicBlockLabel(MO.getMBB()); printBasicBlockLabel(MO.getMBB());
return; return;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
return; return;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
return; return;
case MachineOperand::MO_ExternalSymbol: case MachineOperand::MO_ExternalSymbol:
// Computing the address of an external symbol, not calling it. // Computing the address of an external symbol, not calling it.
if (TM.getRelocationModel() != Reloc::Static) { if (TM.getRelocationModel() != Reloc::Static) {
std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName(); std::string Name(MAI->getGlobalPrefix()); Name += MO.getSymbolName();
GVStubs.insert(Name); GVStubs.insert(Name);
O << "L" << Name << "$non_lazy_ptr"; O << "L" << Name << "$non_lazy_ptr";
return; return;
} }
O << TAI->getGlobalPrefix() << MO.getSymbolName(); O << MAI->getGlobalPrefix() << MO.getSymbolName();
return; return;
case MachineOperand::MO_GlobalAddress: { case MachineOperand::MO_GlobalAddress: {
// Computing the address of a global symbol, not calling it. // Computing the address of a global symbol, not calling it.
@ -528,11 +528,11 @@ void LinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
O << name << ":\n"; O << name << ":\n";
O << "\t.zero " << Size << '\n'; O << "\t.zero " << Size << '\n';
} else if (GVar->hasLocalLinkage()) { } else if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << ',' << Size; O << MAI->getLCOMMDirective() << name << ',' << Size;
} else { } else {
O << ".comm " << name << ',' << Size; O << ".comm " << name << ',' << Size;
} }
O << "\t\t" << TAI->getCommentString() << " '"; O << "\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'\n"; O << "'\n";
return; return;
@ -566,7 +566,7 @@ void LinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
} }
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":\t\t\t\t" << TAI->getCommentString() << " '"; O << name << ":\t\t\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'\n"; O << "'\n";

View File

@ -44,8 +44,8 @@ namespace {
class VISIBILITY_HIDDEN MSP430AsmPrinter : public AsmPrinter { class VISIBILITY_HIDDEN MSP430AsmPrinter : public AsmPrinter {
public: public:
MSP430AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, MSP430AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
const MCAsmInfo *TAI, bool V) const MCAsmInfo *MAI, bool V)
: AsmPrinter(O, TM, TAI, V) {} : AsmPrinter(O, TM, MAI, V) {}
virtual const char *getPassName() const { virtual const char *getPassName() const {
return "MSP430 Assembly Printer"; return "MSP430 Assembly Printer";
@ -132,7 +132,7 @@ bool MSP430AsmPrinter::runOnMachineFunction(MachineFunction &MF) {
printMachineInstruction(II); printMachineInstruction(II);
} }
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n'; O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n';
// We didn't modify anything // We didn't modify anything
@ -180,7 +180,7 @@ void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
} }
case MachineOperand::MO_ExternalSymbol: { case MachineOperand::MO_ExternalSymbol: {
bool isCallOp = Modifier && !strcmp(Modifier, "call"); bool isCallOp = Modifier && !strcmp(Modifier, "call");
std::string Name(TAI->getGlobalPrefix()); std::string Name(MAI->getGlobalPrefix());
Name += MO.getSymbolName(); Name += MO.getSymbolName();
if (isCallOp) if (isCallOp)
O << '#'; O << '#';

View File

@ -221,7 +221,7 @@ void MipsAsmPrinter::emitFunctionStart(MachineFunction &MF) {
printVisibility(CurrentFnName, F->getVisibility()); printVisibility(CurrentFnName, F->getVisibility());
if ((TAI->hasDotTypeDotSizeDirective()) && Subtarget->isLinux()) if ((MAI->hasDotTypeDotSizeDirective()) && Subtarget->isLinux())
O << "\t.type\t" << CurrentFnName << ", @function\n"; O << "\t.type\t" << CurrentFnName << ", @function\n";
O << CurrentFnName << ":\n"; O << CurrentFnName << ":\n";
@ -241,7 +241,7 @@ void MipsAsmPrinter::emitFunctionEnd(MachineFunction &MF) {
O << "\t.set\treorder\n"; O << "\t.set\treorder\n";
O << "\t.end\t" << CurrentFnName << '\n'; O << "\t.end\t" << CurrentFnName << '\n';
if (TAI->hasDotTypeDotSizeDirective() && !Subtarget->isLinux()) if (MAI->hasDotTypeDotSizeDirective() && !Subtarget->isLinux())
O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n'; O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n';
} }
@ -370,12 +370,12 @@ void MipsAsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
break; break;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" O << MAI->getPrivateGlobalPrefix() << "CPI"
<< getFunctionNumber() << "_" << MO.getIndex(); << getFunctionNumber() << "_" << MO.getIndex();
break; break;
@ -480,8 +480,8 @@ void MipsAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
if (GVar->hasLocalLinkage()) if (GVar->hasLocalLinkage())
O << "\t.local\t" << name << '\n'; O << "\t.local\t" << name << '\n';
O << TAI->getCOMMDirective() << name << ',' << Size; O << MAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (1 << Align); O << ',' << (1 << Align);
O << '\n'; O << '\n';
@ -503,7 +503,7 @@ void MipsAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
// or something. For now, just emit them as external. // or something. For now, just emit them as external.
case GlobalValue::ExternalLinkage: case GlobalValue::ExternalLinkage:
// If external or appending, declare as a global symbol // If external or appending, declare as a global symbol
O << TAI->getGlobalDirective() << name << '\n'; O << MAI->getGlobalDirective() << name << '\n';
// Fall Through // Fall Through
case GlobalValue::PrivateLinkage: case GlobalValue::PrivateLinkage:
case GlobalValue::LinkerPrivateLinkage: case GlobalValue::LinkerPrivateLinkage:
@ -523,7 +523,7 @@ void MipsAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
if (TAI->hasDotTypeDotSizeDirective() && printSizeAndType) { if (MAI->hasDotTypeDotSizeDirective() && printSizeAndType) {
O << "\t.type " << name << ",@object\n"; O << "\t.type " << name << ",@object\n";
O << "\t.size " << name << ',' << Size << '\n'; O << "\t.size " << name << ',' << Size << '\n';
} }

View File

@ -37,7 +37,7 @@ PIC16AsmPrinter::PIC16AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
const MCAsmInfo *T, bool V) const MCAsmInfo *T, bool V)
: AsmPrinter(O, TM, T, V), DbgInfo(O, T) { : AsmPrinter(O, TM, T, V), DbgInfo(O, T) {
PTLI = static_cast<PIC16TargetLowering*>(TM.getTargetLowering()); PTLI = static_cast<PIC16TargetLowering*>(TM.getTargetLowering());
PTAI = static_cast<const PIC16MCAsmInfo*>(T); PMAI = static_cast<const PIC16MCAsmInfo*>(T);
PTOF = (PIC16TargetObjectFile*)&PTLI->getObjFileLowering(); PTOF = (PIC16TargetObjectFile*)&PTLI->getObjFileLowering();
} }
@ -199,18 +199,18 @@ void PIC16AsmPrinter::printLibcallDecls() {
// If no libcalls used, return. // If no libcalls used, return.
if (LibcallDecls.empty()) return; if (LibcallDecls.empty()) return;
O << TAI->getCommentString() << "External decls for libcalls - BEGIN." <<"\n"; O << MAI->getCommentString() << "External decls for libcalls - BEGIN." <<"\n";
// Remove duplicate entries. // Remove duplicate entries.
LibcallDecls.sort(is_before); LibcallDecls.sort(is_before);
LibcallDecls.unique(is_duplicate); LibcallDecls.unique(is_duplicate);
for (std::list<const char*>::const_iterator I = LibcallDecls.begin(); for (std::list<const char*>::const_iterator I = LibcallDecls.begin();
I != LibcallDecls.end(); I++) { I != LibcallDecls.end(); I++) {
O << TAI->getExternDirective() << *I << "\n"; O << MAI->getExternDirective() << *I << "\n";
O << TAI->getExternDirective() << PAN::getArgsLabel(*I) << "\n"; O << MAI->getExternDirective() << PAN::getArgsLabel(*I) << "\n";
O << TAI->getExternDirective() << PAN::getRetvalLabel(*I) << "\n"; O << MAI->getExternDirective() << PAN::getRetvalLabel(*I) << "\n";
} }
O << TAI->getCommentString() << "External decls for libcalls - END." <<"\n"; O << MAI->getCommentString() << "External decls for libcalls - END." <<"\n";
} }
/// doInitialization - Perfrom Module level initializations here. /// doInitialization - Perfrom Module level initializations here.
@ -250,7 +250,7 @@ bool PIC16AsmPrinter::doInitialization(Module &M) {
/// ///
void PIC16AsmPrinter::EmitFunctionDecls(Module &M) { void PIC16AsmPrinter::EmitFunctionDecls(Module &M) {
// Emit declarations for external functions. // Emit declarations for external functions.
O <<"\n"<<TAI->getCommentString() << "Function Declarations - BEGIN." <<"\n"; O <<"\n"<<MAI->getCommentString() << "Function Declarations - BEGIN." <<"\n";
for (Module::iterator I = M.begin(), E = M.end(); I != E; I++) { for (Module::iterator I = M.begin(), E = M.end(); I != E; I++) {
if (I->isIntrinsic()) if (I->isIntrinsic())
continue; continue;
@ -272,15 +272,15 @@ void PIC16AsmPrinter::EmitFunctionDecls(Module &M) {
// tracking both kind of references in printInstrunction. // tracking both kind of references in printInstrunction.
if (I->isDeclaration() && PAN::isMemIntrinsic(Name)) continue; if (I->isDeclaration() && PAN::isMemIntrinsic(Name)) continue;
const char *directive = I->isDeclaration() ? TAI->getExternDirective() : const char *directive = I->isDeclaration() ? MAI->getExternDirective() :
TAI->getGlobalDirective(); MAI->getGlobalDirective();
O << directive << Name << "\n"; O << directive << Name << "\n";
O << directive << PAN::getRetvalLabel(Name) << "\n"; O << directive << PAN::getRetvalLabel(Name) << "\n";
O << directive << PAN::getArgsLabel(Name) << "\n"; O << directive << PAN::getArgsLabel(Name) << "\n";
} }
O << TAI->getCommentString() << "Function Declarations - END." <<"\n"; O << MAI->getCommentString() << "Function Declarations - END." <<"\n";
} }
// Emit variables imported from other Modules. // Emit variables imported from other Modules.
@ -288,11 +288,11 @@ void PIC16AsmPrinter::EmitUndefinedVars(Module &M) {
std::vector<const GlobalVariable*> Items = PTOF->ExternalVarDecls->Items; std::vector<const GlobalVariable*> Items = PTOF->ExternalVarDecls->Items;
if (!Items.size()) return; if (!Items.size()) return;
O << "\n" << TAI->getCommentString() << "Imported Variables - BEGIN" << "\n"; O << "\n" << MAI->getCommentString() << "Imported Variables - BEGIN" << "\n";
for (unsigned j = 0; j < Items.size(); j++) { for (unsigned j = 0; j < Items.size(); j++) {
O << TAI->getExternDirective() << Mang->getMangledName(Items[j]) << "\n"; O << MAI->getExternDirective() << Mang->getMangledName(Items[j]) << "\n";
} }
O << TAI->getCommentString() << "Imported Variables - END" << "\n"; O << MAI->getCommentString() << "Imported Variables - END" << "\n";
} }
// Emit variables defined in this module and are available to other modules. // Emit variables defined in this module and are available to other modules.
@ -300,11 +300,11 @@ void PIC16AsmPrinter::EmitDefinedVars(Module &M) {
std::vector<const GlobalVariable*> Items = PTOF->ExternalVarDefs->Items; std::vector<const GlobalVariable*> Items = PTOF->ExternalVarDefs->Items;
if (!Items.size()) return; if (!Items.size()) return;
O << "\n" << TAI->getCommentString() << "Exported Variables - BEGIN" << "\n"; O << "\n" << MAI->getCommentString() << "Exported Variables - BEGIN" << "\n";
for (unsigned j = 0; j < Items.size(); j++) { for (unsigned j = 0; j < Items.size(); j++) {
O << TAI->getGlobalDirective() << Mang->getMangledName(Items[j]) << "\n"; O << MAI->getGlobalDirective() << Mang->getMangledName(Items[j]) << "\n";
} }
O << TAI->getCommentString() << "Exported Variables - END" << "\n"; O << MAI->getCommentString() << "Exported Variables - END" << "\n";
} }
// Emit initialized data placed in ROM. // Emit initialized data placed in ROM.

View File

@ -70,7 +70,7 @@ namespace llvm {
PIC16TargetObjectFile *PTOF; PIC16TargetObjectFile *PTOF;
PIC16TargetLowering *PTLI; PIC16TargetLowering *PTLI;
PIC16DbgInfo DbgInfo; PIC16DbgInfo DbgInfo;
const PIC16MCAsmInfo *PTAI; const PIC16MCAsmInfo *PMAI;
std::list<const char *> LibcallDecls; // List of extern decls. std::list<const char *> LibcallDecls; // List of extern decls.
}; };
} // end of namespace } // end of namespace

View File

@ -32,7 +32,7 @@ namespace llvm {
static MCSectionPIC16 *Create(const StringRef &Name, static MCSectionPIC16 *Create(const StringRef &Name,
SectionKind K, MCContext &Ctx); SectionKind K, MCContext &Ctx);
virtual void PrintSwitchToSection(const MCAsmInfo &TAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
}; };

View File

@ -450,7 +450,7 @@ void PIC16DbgInfo::EmitVarDebugInfo(Module &M) {
bool HasAux = false; bool HasAux = false;
int Aux[PIC16Dbg::AuxSize] = { 0 }; int Aux[PIC16Dbg::AuxSize] = { 0 };
std::string TagName = ""; std::string TagName = "";
std::string VarName = TAI->getGlobalPrefix()+DIGV.getGlobal()->getNameStr(); std::string VarName = MAI->getGlobalPrefix()+DIGV.getGlobal()->getNameStr();
PopulateDebugInfo(Ty, TypeNo, HasAux, Aux, TagName); PopulateDebugInfo(Ty, TypeNo, HasAux, Aux, TagName);
// Emit debug info only if type information is availaible. // Emit debug info only if type information is availaible.
if (TypeNo != PIC16Dbg::T_NULL) { if (TypeNo != PIC16Dbg::T_NULL) {

View File

@ -92,7 +92,7 @@ namespace llvm {
class PIC16DbgInfo { class PIC16DbgInfo {
formatted_raw_ostream &O; formatted_raw_ostream &O;
const MCAsmInfo *TAI; const MCAsmInfo *MAI;
std::string CurFile; std::string CurFile;
unsigned CurLine; unsigned CurLine;
@ -102,7 +102,7 @@ namespace llvm {
public: public:
PIC16DbgInfo(formatted_raw_ostream &o, const MCAsmInfo *T) PIC16DbgInfo(formatted_raw_ostream &o, const MCAsmInfo *T)
: O(o), TAI(T) { : O(o), MAI(T) {
CurFile = ""; CurFile = "";
CurLine = 0; CurLine = 0;
EmitDebugDirectives = false; EmitDebugDirectives = false;

View File

@ -25,7 +25,7 @@ MCSectionPIC16 *MCSectionPIC16::Create(const StringRef &Name,
} }
void MCSectionPIC16::PrintSwitchToSection(const MCAsmInfo &TAI, void MCSectionPIC16::PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
OS << getName() << '\n'; OS << getName() << '\n';
} }

View File

@ -324,7 +324,7 @@ namespace {
// Map symbol -> label of TOC entry. // Map symbol -> label of TOC entry.
if (TOC.count(Name) == 0) { if (TOC.count(Name) == 0) {
std::string Label; std::string Label;
Label += TAI->getPrivateGlobalPrefix(); Label += MAI->getPrivateGlobalPrefix();
Label += "C"; Label += "C";
Label += utostr(LabelID++); Label += utostr(LabelID++);
@ -406,17 +406,17 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {
printBasicBlockLabel(MO.getMBB()); printBasicBlockLabel(MO.getMBB());
return; return;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
// FIXME: PIC relocation model // FIXME: PIC relocation model
return; return;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
return; return;
case MachineOperand::MO_ExternalSymbol: { case MachineOperand::MO_ExternalSymbol: {
// Computing the address of an external symbol, not calling it. // Computing the address of an external symbol, not calling it.
std::string Name(TAI->getGlobalPrefix()); std::string Name(MAI->getGlobalPrefix());
Name += MO.getSymbolName(); Name += MO.getSymbolName();
if (TM.getRelocationModel() != Reloc::Static) { if (TM.getRelocationModel() != Reloc::Static) {
@ -719,12 +719,12 @@ void PPCLinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
O << name << ":\n"; O << name << ":\n";
O << "\t.zero " << Size << '\n'; O << "\t.zero " << Size << '\n';
} else if (GVar->hasLocalLinkage()) { } else if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << ',' << Size; O << MAI->getLCOMMDirective() << name << ',' << Size;
} else { } else {
O << ".comm " << name << ',' << Size; O << ".comm " << name << ',' << Size;
} }
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t" << TAI->getCommentString() << " '"; O << "\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'"; O << "'";
} }
@ -761,7 +761,7 @@ void PPCLinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << " '"; O << "\t\t\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'"; O << "'";
} }
@ -958,14 +958,14 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
O << "\t.zerofill __DATA, __common, " << name << ", " O << "\t.zerofill __DATA, __common, " << name << ", "
<< Size << ", " << Align; << Size << ", " << Align;
} else if (GVar->hasLocalLinkage()) { } else if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << ',' << Size << ',' << Align; O << MAI->getLCOMMDirective() << name << ',' << Size << ',' << Align;
} else if (!GVar->hasCommonLinkage()) { } else if (!GVar->hasCommonLinkage()) {
O << "\t.globl " << name << '\n' O << "\t.globl " << name << '\n'
<< TAI->getWeakDefDirective() << name << '\n'; << MAI->getWeakDefDirective() << name << '\n';
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << " "; O << "\t\t\t\t" << MAI->getCommentString() << " ";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
@ -978,7 +978,7 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
O << ',' << Align; O << ',' << Align;
} }
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t" << TAI->getCommentString() << " '"; O << "\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'"; O << "'";
} }
@ -1013,7 +1013,7 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << " '"; O << "\t\t\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
O << "'"; O << "'";
} }
@ -1097,7 +1097,7 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) {
O << '\n'; O << '\n';
if (TAI->doesSupportExceptionHandling() && MMI) { if (MAI->doesSupportExceptionHandling() && MMI) {
// Add the (possibly multiple) personalities to the set of global values. // Add the (possibly multiple) personalities to the set of global values.
// Only referenced functions get into the Personalities list. // Only referenced functions get into the Personalities list.
const std::vector<Function *> &Personalities = MMI->getPersonalities(); const std::vector<Function *> &Personalities = MMI->getPersonalities();

View File

@ -167,7 +167,7 @@ void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
O << MO.getSymbolName(); O << MO.getSymbolName();
break; break;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_" O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_"
<< MO.getIndex(); << MO.getIndex();
break; break;
default: default:
@ -239,8 +239,8 @@ void SparcAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
if (GVar->hasLocalLinkage()) if (GVar->hasLocalLinkage())
O << "\t.local " << name << '\n'; O << "\t.local " << name << '\n';
O << TAI->getCOMMDirective() << name << ',' << Size; O << MAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (1 << Align); O << ',' << (1 << Align);
O << '\n'; O << '\n';
@ -262,7 +262,7 @@ void SparcAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
// their name or something. For now, just emit them as external. // their name or something. For now, just emit them as external.
case GlobalValue::ExternalLinkage: case GlobalValue::ExternalLinkage:
// If external or appending, declare as a global symbol // If external or appending, declare as a global symbol
O << TAI->getGlobalDirective() << name << '\n'; O << MAI->getGlobalDirective() << name << '\n';
// FALL THROUGH // FALL THROUGH
case GlobalValue::PrivateLinkage: case GlobalValue::PrivateLinkage:
case GlobalValue::LinkerPrivateLinkage: case GlobalValue::LinkerPrivateLinkage:
@ -280,7 +280,7 @@ void SparcAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
if (TAI->hasDotTypeDotSizeDirective()) { if (MAI->hasDotTypeDotSizeDirective()) {
O << "\t.type " << name << ",#object\n"; O << "\t.type " << name << ",#object\n";
O << "\t.size " << name << ',' << Size << '\n'; O << "\t.size " << name << ',' << Size << '\n';
} }

View File

@ -44,8 +44,8 @@ namespace {
class VISIBILITY_HIDDEN SystemZAsmPrinter : public AsmPrinter { class VISIBILITY_HIDDEN SystemZAsmPrinter : public AsmPrinter {
public: public:
SystemZAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, SystemZAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
const MCAsmInfo *TAI, bool V) const MCAsmInfo *MAI, bool V)
: AsmPrinter(O, TM, TAI, V) {} : AsmPrinter(O, TM, MAI, V) {}
virtual const char *getPassName() const { virtual const char *getPassName() const {
return "SystemZ Assembly Printer"; return "SystemZ Assembly Printer";
@ -140,7 +140,7 @@ bool SystemZAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
printMachineInstruction(II); printMachineInstruction(II);
} }
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n'; O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n';
// Print out jump tables referenced by the function. // Print out jump tables referenced by the function.
@ -182,7 +182,7 @@ void SystemZAsmPrinter::printPCRelImmOperand(const MachineInstr *MI, int OpNum)
return; return;
} }
case MachineOperand::MO_ExternalSymbol: { case MachineOperand::MO_ExternalSymbol: {
std::string Name(TAI->getGlobalPrefix()); std::string Name(MAI->getGlobalPrefix());
Name += MO.getSymbolName(); Name += MO.getSymbolName();
O << Name; O << Name;
@ -224,12 +224,12 @@ void SystemZAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
printBasicBlockLabel(MO.getMBB()); printBasicBlockLabel(MO.getMBB());
return; return;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_'
<< MO.getIndex(); << MO.getIndex();
return; return;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_'
<< MO.getIndex(); << MO.getIndex();
printOffset(MO.getOffset()); printOffset(MO.getOffset());
@ -242,7 +242,7 @@ void SystemZAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
break; break;
} }
case MachineOperand::MO_ExternalSymbol: { case MachineOperand::MO_ExternalSymbol: {
std::string Name(TAI->getGlobalPrefix()); std::string Name(MAI->getGlobalPrefix());
Name += MO.getSymbolName(); Name += MO.getSymbolName();
O << Name; O << Name;
break; break;
@ -330,12 +330,12 @@ void SystemZAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
if (GVar->hasLocalLinkage()) if (GVar->hasLocalLinkage())
O << "\t.local\t" << name << '\n'; O << "\t.local\t" << name << '\n';
O << TAI->getCOMMDirective() << name << ',' << Size; O << MAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align); O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t" << TAI->getCommentString() << ' '; O << "\t\t" << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
@ -370,11 +370,11 @@ void SystemZAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
EmitAlignment(Align, GVar, 1); EmitAlignment(Align, GVar, 1);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O << "\t\t\t\t" << TAI->getCommentString() << ' '; O << "\t\t\t\t" << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size\t" << name << ", " << Size << '\n'; O << "\t.size\t" << name << ", " << Size << '\n';
EmitGlobalConstant(C); EmitGlobalConstant(C);

View File

@ -73,21 +73,21 @@ bool TargetInstrInfo::isUnpredicatedTerminator(const MachineInstr *MI) const {
/// Variable-length instructions are not handled here; this function /// Variable-length instructions are not handled here; this function
/// may be overloaded in the target code to do that. /// may be overloaded in the target code to do that.
unsigned TargetInstrInfo::getInlineAsmLength(const char *Str, unsigned TargetInstrInfo::getInlineAsmLength(const char *Str,
const MCAsmInfo &TAI) const { const MCAsmInfo &MAI) const {
// Count the number of instructions in the asm. // Count the number of instructions in the asm.
bool atInsnStart = true; bool atInsnStart = true;
unsigned Length = 0; unsigned Length = 0;
for (; *Str; ++Str) { for (; *Str; ++Str) {
if (*Str == '\n' || *Str == TAI.getSeparatorChar()) if (*Str == '\n' || *Str == MAI.getSeparatorChar())
atInsnStart = true; atInsnStart = true;
if (atInsnStart && !isspace(*Str)) { if (atInsnStart && !isspace(*Str)) {
Length += TAI.getMaxInstLength(); Length += MAI.getMaxInstLength();
atInsnStart = false; atInsnStart = false;
} }
if (atInsnStart && strncmp(Str, TAI.getCommentString(), if (atInsnStart && strncmp(Str, MAI.getCommentString(),
strlen(TAI.getCommentString())) == 0) strlen(MAI.getCommentString())) == 0)
atInsnStart = false; atInsnStart = false;
} }

View File

@ -193,7 +193,7 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
case Function::WeakODRLinkage: case Function::WeakODRLinkage:
if (Subtarget->isTargetDarwin()) { if (Subtarget->isTargetDarwin()) {
O << "\t.globl\t" << CurrentFnName << '\n'; O << "\t.globl\t" << CurrentFnName << '\n';
O << TAI->getWeakDefDirective() << CurrentFnName << '\n'; O << MAI->getWeakDefDirective() << CurrentFnName << '\n';
} else if (Subtarget->isTargetCygMing()) { } else if (Subtarget->isTargetCygMing()) {
O << "\t.globl\t" << CurrentFnName << "\n" O << "\t.globl\t" << CurrentFnName << "\n"
"\t.linkonce discard\n"; "\t.linkonce discard\n";
@ -217,8 +217,8 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
O << CurrentFnName << ':'; O << CurrentFnName << ':';
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << ' '; O << MAI->getCommentString() << ' ';
WriteAsOperand(O, F, /*PrintType=*/false, F->getParent()); WriteAsOperand(O, F, /*PrintType=*/false, F->getParent());
} }
O << '\n'; O << '\n';
@ -255,7 +255,7 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
emitFunctionHeader(MF); emitFunctionHeader(MF);
// Emit pre-function debug and/or EH information. // Emit pre-function debug and/or EH information.
if (TAI->doesSupportDebugInformation() || TAI->doesSupportExceptionHandling()) if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
DW->BeginFunction(&MF); DW->BeginFunction(&MF);
// Print out code for the function. // Print out code for the function.
@ -287,11 +287,11 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
O << "\tnop\n"; O << "\tnop\n";
} }
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n'; O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n';
// Emit post-function debug information. // Emit post-function debug information.
if (TAI->doesSupportDebugInformation() || TAI->doesSupportExceptionHandling()) if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
DW->EndFunction(&MF); DW->EndFunction(&MF);
// Print out jump tables referenced by the function. // Print out jump tables referenced by the function.
@ -308,11 +308,11 @@ void X86ATTAsmPrinter::printSymbolOperand(const MachineOperand &MO) {
switch (MO.getType()) { switch (MO.getType()) {
default: llvm_unreachable("unknown symbol type!"); default: llvm_unreachable("unknown symbol type!");
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_'
<< MO.getIndex(); << MO.getIndex();
break; break;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_'
<< MO.getIndex(); << MO.getIndex();
printOffset(MO.getOffset()); printOffset(MO.getOffset());
break; break;
@ -535,18 +535,18 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op,
void X86ATTAsmPrinter::printPICJumpTableSetLabel(unsigned uid, void X86ATTAsmPrinter::printPICJumpTableSetLabel(unsigned uid,
const MachineBasicBlock *MBB) const { const MachineBasicBlock *MBB) const {
if (!TAI->getSetDirective()) if (!MAI->getSetDirective())
return; return;
// We don't need .set machinery if we have GOT-style relocations // We don't need .set machinery if we have GOT-style relocations
if (Subtarget->isPICStyleGOT()) if (Subtarget->isPICStyleGOT())
return; return;
O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix() O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ','; << getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ',';
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
if (Subtarget->isPICStyleRIPRel()) if (Subtarget->isPICStyleRIPRel())
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << '-' << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << uid << '\n'; << '_' << uid << '\n';
else { else {
O << '-'; O << '-';
@ -568,12 +568,12 @@ void X86ATTAsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
const MachineBasicBlock *MBB, const MachineBasicBlock *MBB,
unsigned uid) const { unsigned uid) const {
const char *JTEntryDirective = MJTI->getEntrySize() == 4 ? const char *JTEntryDirective = MJTI->getEntrySize() == 4 ?
TAI->getData32bitsDirective() : TAI->getData64bitsDirective(); MAI->getData32bitsDirective() : MAI->getData64bitsDirective();
O << JTEntryDirective << ' '; O << JTEntryDirective << ' ';
if (Subtarget->isPICStyleRIPRel() || Subtarget->isPICStyleStubPIC()) { if (Subtarget->isPICStyleRIPRel() || Subtarget->isPICStyleStubPIC()) {
O << TAI->getPrivateGlobalPrefix() << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
<< '_' << uid << "_set_" << MBB->getNumber(); << '_' << uid << "_set_" << MBB->getNumber();
} else if (Subtarget->isPICStyleGOT()) { } else if (Subtarget->isPICStyleGOT()) {
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
@ -950,7 +950,7 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
// Don't put things that should go in the cstring section into "comm". // Don't put things that should go in the cstring section into "comm".
!TheSection->getKind().isMergeableCString()) { !TheSection->getKind().isMergeableCString()) {
if (GVar->hasExternalLinkage()) { if (GVar->hasExternalLinkage()) {
if (const char *Directive = TAI->getZeroFillDirective()) { if (const char *Directive = MAI->getZeroFillDirective()) {
O << "\t.globl " << name << '\n'; O << "\t.globl " << name << '\n';
O << Directive << "__DATA, __common, " << name << ", " O << Directive << "__DATA, __common, " << name << ", "
<< Size << ", " << Align << '\n'; << Size << ", " << Align << '\n';
@ -962,41 +962,41 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
(GVar->hasLocalLinkage() || GVar->isWeakForLinker())) { (GVar->hasLocalLinkage() || GVar->isWeakForLinker())) {
if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
if (TAI->getLCOMMDirective() != NULL) { if (MAI->getLCOMMDirective() != NULL) {
if (GVar->hasLocalLinkage()) { if (GVar->hasLocalLinkage()) {
O << TAI->getLCOMMDirective() << name << ',' << Size; O << MAI->getLCOMMDirective() << name << ',' << Size;
if (Subtarget->isTargetDarwin()) if (Subtarget->isTargetDarwin())
O << ',' << Align; O << ',' << Align;
} else if (Subtarget->isTargetDarwin() && !GVar->hasCommonLinkage()) { } else if (Subtarget->isTargetDarwin() && !GVar->hasCommonLinkage()) {
O << "\t.globl " << name << '\n' O << "\t.globl " << name << '\n'
<< TAI->getWeakDefDirective() << name << '\n'; << MAI->getWeakDefDirective() << name << '\n';
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << ' '; O << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
EmitGlobalConstant(C); EmitGlobalConstant(C);
return; return;
} else { } else {
O << TAI->getCOMMDirective() << name << ',' << Size; O << MAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align); O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
} }
} else { } else {
if (!Subtarget->isTargetCygMing()) { if (!Subtarget->isTargetCygMing()) {
if (GVar->hasLocalLinkage()) if (GVar->hasLocalLinkage())
O << "\t.local\t" << name << '\n'; O << "\t.local\t" << name << '\n';
} }
O << TAI->getCOMMDirective() << name << ',' << Size; O << MAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment()) if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align); O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
} }
if (VerboseAsm) { if (VerboseAsm) {
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << ' '; O << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
@ -1013,7 +1013,7 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
case GlobalValue::LinkerPrivateLinkage: case GlobalValue::LinkerPrivateLinkage:
if (Subtarget->isTargetDarwin()) { if (Subtarget->isTargetDarwin()) {
O << "\t.globl " << name << '\n' O << "\t.globl " << name << '\n'
<< TAI->getWeakDefDirective() << name << '\n'; << MAI->getWeakDefDirective() << name << '\n';
} else if (Subtarget->isTargetCygMing()) { } else if (Subtarget->isTargetCygMing()) {
O << "\t.globl\t" << name << "\n" O << "\t.globl\t" << name << "\n"
"\t.linkonce same_size\n"; "\t.linkonce same_size\n";
@ -1039,15 +1039,15 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
EmitAlignment(Align, GVar); EmitAlignment(Align, GVar);
O << name << ":"; O << name << ":";
if (VerboseAsm){ if (VerboseAsm){
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() << ' '; O << MAI->getCommentString() << ' ';
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent()); WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
} }
O << '\n'; O << '\n';
EmitGlobalConstant(C); EmitGlobalConstant(C);
if (TAI->hasDotTypeDotSizeDirective()) if (MAI->hasDotTypeDotSizeDirective())
O << "\t.size\t" << name << ", " << Size << '\n'; O << "\t.size\t" << name << ", " << Size << '\n';
} }
@ -1066,7 +1066,7 @@ bool X86ATTAsmPrinter::doFinalization(Module &M) {
// Add the (possibly multiple) personalities to the set of global value // Add the (possibly multiple) personalities to the set of global value
// stubs. Only referenced functions get into the Personalities list. // stubs. Only referenced functions get into the Personalities list.
if (TAI->doesSupportExceptionHandling() && MMI && !Subtarget->is64Bit()) { if (MAI->doesSupportExceptionHandling() && MMI && !Subtarget->is64Bit()) {
const std::vector<Function*> &Personalities = MMI->getPersonalities(); const std::vector<Function*> &Personalities = MMI->getPersonalities();
for (unsigned i = 0, e = Personalities.size(); i != e; ++i) { for (unsigned i = 0, e = Personalities.size(); i != e; ++i) {
if (Personalities[i]) if (Personalities[i])
@ -1110,7 +1110,7 @@ bool X86ATTAsmPrinter::doFinalization(Module &M) {
EmitAlignment(2); EmitAlignment(2);
for (StringMap<std::string>::iterator I = HiddenGVStubs.begin(), for (StringMap<std::string>::iterator I = HiddenGVStubs.begin(),
E = HiddenGVStubs.end(); I != E; ++I) E = HiddenGVStubs.end(); I != E; ++I)
O << I->getKeyData() << ":\n" << TAI->getData32bitsDirective() O << I->getKeyData() << ":\n" << MAI->getData32bitsDirective()
<< I->second << '\n'; << I->second << '\n';
} }

View File

@ -60,7 +60,7 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MCInst *MI, unsigned OpNo) {
else if (Op.isMBBLabel()) else if (Op.isMBBLabel())
// FIXME: Keep in sync with printBasicBlockLabel. printBasicBlockLabel // FIXME: Keep in sync with printBasicBlockLabel. printBasicBlockLabel
// should eventually call into this code, not the other way around. // should eventually call into this code, not the other way around.
O << TAI->getPrivateGlobalPrefix() << "BB" << Op.getMBBLabelFunction() O << MAI->getPrivateGlobalPrefix() << "BB" << Op.getMBBLabelFunction()
<< '_' << Op.getMBBLabelBlock(); << '_' << Op.getMBBLabelBlock();
else else
llvm_unreachable("Unknown pcrel immediate operand"); llvm_unreachable("Unknown pcrel immediate operand");

View File

@ -226,14 +226,14 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
case MachineOperand::MO_JumpTableIndex: { case MachineOperand::MO_JumpTableIndex: {
bool isMemOp = Modifier && !strcmp(Modifier, "mem"); bool isMemOp = Modifier && !strcmp(Modifier, "mem");
if (!isMemOp) O << "OFFSET "; if (!isMemOp) O << "OFFSET ";
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< "_" << MO.getIndex(); << "_" << MO.getIndex();
return; return;
} }
case MachineOperand::MO_ConstantPoolIndex: { case MachineOperand::MO_ConstantPoolIndex: {
bool isMemOp = Modifier && !strcmp(Modifier, "mem"); bool isMemOp = Modifier && !strcmp(Modifier, "mem");
if (!isMemOp) O << "OFFSET "; if (!isMemOp) O << "OFFSET ";
O << "[" << TAI->getPrivateGlobalPrefix() << "CPI" O << "[" << MAI->getPrivateGlobalPrefix() << "CPI"
<< getFunctionNumber() << "_" << MO.getIndex(); << getFunctionNumber() << "_" << MO.getIndex();
printOffset(MO.getOffset()); printOffset(MO.getOffset());
O << "]"; O << "]";
@ -258,7 +258,7 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
return; return;
} }
case MachineOperand::MO_ExternalSymbol: { case MachineOperand::MO_ExternalSymbol: {
O << TAI->getGlobalPrefix() << MO.getSymbolName(); O << MAI->getGlobalPrefix() << MO.getSymbolName();
return; return;
} }
default: default:
@ -293,7 +293,7 @@ void X86IntelAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo){
} }
case MachineOperand::MO_ExternalSymbol: case MachineOperand::MO_ExternalSymbol:
O << TAI->getGlobalPrefix() << MO.getSymbolName(); O << MAI->getGlobalPrefix() << MO.getSymbolName();
return; return;
} }
} }
@ -357,10 +357,10 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op,
void X86IntelAsmPrinter::printPICJumpTableSetLabel(unsigned uid, void X86IntelAsmPrinter::printPICJumpTableSetLabel(unsigned uid,
const MachineBasicBlock *MBB) const { const MachineBasicBlock *MBB) const {
if (!TAI->getSetDirective()) if (!MAI->getSetDirective())
return; return;
O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix() O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ','; << getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ',';
printBasicBlockLabel(MBB, false, false, false); printBasicBlockLabel(MBB, false, false, false);
O << '-' << "\"L" << getFunctionNumber() << "$pb\"'\n"; O << '-' << "\"L" << getFunctionNumber() << "$pb\"'\n";
@ -525,8 +525,8 @@ void X86IntelAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
O << name << ":"; O << name << ":";
if (VerboseAsm) if (VerboseAsm)
O.PadToColumn(TAI->getCommentColumn()); O.PadToColumn(MAI->getCommentColumn());
O << TAI->getCommentString() O << MAI->getCommentString()
<< " " << GV->getName(); << " " << GV->getName();
O << '\n'; O << '\n';

View File

@ -97,7 +97,7 @@ namespace {
void XCoreAsmPrinter:: void XCoreAsmPrinter::
emitGlobalDirective(const std::string &name) emitGlobalDirective(const std::string &name)
{ {
O << TAI->getGlobalDirective() << name; O << MAI->getGlobalDirective() << name;
O << "\n"; O << "\n";
} }
@ -117,12 +117,12 @@ emitArrayBound(const std::string &name, const GlobalVariable *GV)
if (const ArrayType *ATy = dyn_cast<ArrayType>( if (const ArrayType *ATy = dyn_cast<ArrayType>(
cast<PointerType>(GV->getType())->getElementType())) cast<PointerType>(GV->getType())->getElementType()))
{ {
O << TAI->getGlobalDirective() << name << ".globound" << "\n"; O << MAI->getGlobalDirective() << name << ".globound" << "\n";
O << TAI->getSetDirective() << name << ".globound" << "," O << MAI->getSetDirective() << name << ".globound" << ","
<< ATy->getNumElements() << "\n"; << ATy->getNumElements() << "\n";
if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) { if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) {
// TODO Use COMDAT groups for LinkOnceLinkage // TODO Use COMDAT groups for LinkOnceLinkage
O << TAI->getWeakDefDirective() << name << ".globound" << "\n"; O << MAI->getWeakDefDirective() << name << ".globound" << "\n";
} }
} }
} }
@ -156,7 +156,7 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
emitGlobalDirective(name); emitGlobalDirective(name);
// TODO Use COMDAT groups for LinkOnceLinkage // TODO Use COMDAT groups for LinkOnceLinkage
if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) { if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) {
O << TAI->getWeakDefDirective() << name << "\n"; O << MAI->getWeakDefDirective() << name << "\n";
} }
// FALL THROUGH // FALL THROUGH
case GlobalValue::InternalLinkage: case GlobalValue::InternalLinkage:
@ -179,7 +179,7 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
if (GV->isThreadLocal()) { if (GV->isThreadLocal()) {
Size *= MaxThreads; Size *= MaxThreads;
} }
if (TAI->hasDotTypeDotSizeDirective()) { if (MAI->hasDotTypeDotSizeDirective()) {
O << "\t.type " << name << ",@object\n"; O << "\t.type " << name << ",@object\n";
O << "\t.size " << name << "," << Size << "\n"; O << "\t.size " << name << "," << Size << "\n";
} }
@ -225,13 +225,13 @@ void XCoreAsmPrinter::emitFunctionStart(MachineFunction &MF) {
case Function::WeakAnyLinkage: case Function::WeakAnyLinkage:
case Function::WeakODRLinkage: case Function::WeakODRLinkage:
// TODO Use COMDAT groups for LinkOnceLinkage // TODO Use COMDAT groups for LinkOnceLinkage
O << TAI->getGlobalDirective() << CurrentFnName << "\n"; O << MAI->getGlobalDirective() << CurrentFnName << "\n";
O << TAI->getWeakDefDirective() << CurrentFnName << "\n"; O << MAI->getWeakDefDirective() << CurrentFnName << "\n";
break; break;
} }
// (1 << 1) byte aligned // (1 << 1) byte aligned
EmitAlignment(MF.getAlignment(), F, 1); EmitAlignment(MF.getAlignment(), F, 1);
if (TAI->hasDotTypeDotSizeDirective()) { if (MAI->hasDotTypeDotSizeDirective()) {
O << "\t.type " << CurrentFnName << ",@function\n"; O << "\t.type " << CurrentFnName << ",@function\n";
} }
O << CurrentFnName << ":\n"; O << CurrentFnName << ":\n";
@ -331,11 +331,11 @@ void XCoreAsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
O << MO.getSymbolName(); O << MO.getSymbolName();
break; break;
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
case MachineOperand::MO_JumpTableIndex: case MachineOperand::MO_JumpTableIndex:
O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << MO.getIndex(); << '_' << MO.getIndex();
break; break;
default: default:

View File

@ -26,7 +26,7 @@ MCSectionXCore::Create(const StringRef &Section, unsigned Type,
/// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp /// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp
/// section flags. /// section flags.
void MCSectionXCore::PrintTargetSpecificSectionFlags(const MCAsmInfo &TAI, void MCSectionXCore::PrintTargetSpecificSectionFlags(const MCAsmInfo &MAI,
raw_ostream &OS) const { raw_ostream &OS) const {
if (getFlags() & MCSectionXCore::SHF_CP_SECTION) if (getFlags() & MCSectionXCore::SHF_CP_SECTION)
OS << 'c'; OS << 'c';

View File

@ -44,7 +44,7 @@ public:
/// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp /// PrintTargetSpecificSectionFlags - This handles the XCore-specific cp/dp
/// section flags. /// section flags.
virtual void PrintTargetSpecificSectionFlags(const MCAsmInfo &TAI, virtual void PrintTargetSpecificSectionFlags(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
}; };