diff options
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h b/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h index c3160e34628..a533d5fc60e 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h +++ b/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.h @@ -14,28 +14,43 @@ #ifndef PPCTARGETASMINFO_H #define PPCTARGETASMINFO_H +#include "PPCTargetMachine.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/DarwinTargetAsmInfo.h" #include "llvm/Target/ELFTargetAsmInfo.h" +#include "llvm/Support/Compiler.h" namespace llvm { - // Forward declaration. - class PPCTargetMachine; - - struct PPCTargetAsmInfo : public virtual TargetAsmInfo { - explicit PPCTargetAsmInfo(const PPCTargetMachine &TM); + template <class BaseTAI> + struct PPCTargetAsmInfo : public BaseTAI { + explicit PPCTargetAsmInfo(const PPCTargetMachine &TM): + BaseTAI(TM) { + const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>(); + bool isPPC64 = Subtarget->isPPC64(); + + BaseTAI::ZeroDirective = "\t.space\t"; + BaseTAI::SetDirective = "\t.set"; + BaseTAI::Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0; + BaseTAI::AlignmentIsInBytes = false; + BaseTAI::LCOMMDirective = "\t.lcomm\t"; + BaseTAI::InlineAsmStart = "# InlineAsm Start"; + BaseTAI::InlineAsmEnd = "# InlineAsm End"; + BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor(); + } }; - struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo, - public DarwinTargetAsmInfo { + typedef PPCTargetAsmInfo<TargetAsmInfo> PPCGenericTargetAsmInfo; + + EXTERN_TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>); + + struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo<DarwinTargetAsmInfo> { explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM); virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason, bool Global) const; }; - struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo, - public ELFTargetAsmInfo { + struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo<ELFTargetAsmInfo> { explicit PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM); virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason, bool Global) const; |