Add the Object Code Emitter class. Original patch by Aaron Gray, I did some
[oota-llvm.git] / lib / Target / ARM / ARMTargetAsmInfo.h
index 9030d065bd60fae39ef6d8e7f030c11575a57e0a..d3f2da0f4b098407f54204e089611383c193ccfc 100644 (file)
 #ifndef ARMTARGETASMINFO_H
 #define ARMTARGETASMINFO_H
 
+#include "ARMTargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
-
-#include "ARMSubtarget.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  // Forward declaration.
-  class ARMTargetMachine;
+  extern const char *const arm_asm_table[];
+
+  template <class BaseTAI>
+  struct ARMTargetAsmInfo : public BaseTAI {
+    explicit ARMTargetAsmInfo(const ARMBaseTargetMachine &TM) : BaseTAI(TM) {
+      BaseTAI::AsmTransCBE = arm_asm_table;
 
-  struct ARMTargetAsmInfo : public virtual TargetAsmInfo {
-    explicit ARMTargetAsmInfo(const ARMTargetMachine &TM);
+      BaseTAI::AlignmentIsInBytes = false;
+      BaseTAI::Data64bitsDirective = 0;
+      BaseTAI::CommentString = "@";
+      BaseTAI::ConstantPoolSection = "\t.text\n";
+      BaseTAI::COMMDirectiveTakesAlignment = false;
+      BaseTAI::InlineAsmStart = "@ InlineAsm Start";
+      BaseTAI::InlineAsmEnd = "@ InlineAsm End";
+      BaseTAI::LCOMMDirective = "\t.lcomm\t";
+    }
 
     const ARMSubtarget *Subtarget;
 
@@ -35,14 +46,16 @@ namespace llvm {
     unsigned countString(const char *p) const;
   };
 
-  struct ARMDarwinTargetAsmInfo : public virtual ARMTargetAsmInfo,
-                                  public virtual DarwinTargetAsmInfo {
-    explicit ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM);
+  typedef ARMTargetAsmInfo<TargetAsmInfo> ARMGenericTargetAsmInfo;
+
+  EXTERN_TEMPLATE_INSTANTIATION(class ARMTargetAsmInfo<TargetAsmInfo>);
+
+  struct ARMDarwinTargetAsmInfo : public ARMTargetAsmInfo<DarwinTargetAsmInfo> {
+    explicit ARMDarwinTargetAsmInfo(const ARMBaseTargetMachine &TM);
   };
 
-  struct ARMELFTargetAsmInfo : public virtual ARMTargetAsmInfo,
-                               public virtual ELFTargetAsmInfo {
-    explicit ARMELFTargetAsmInfo(const ARMTargetMachine &TM);
+  struct ARMELFTargetAsmInfo : public ARMTargetAsmInfo<ELFTargetAsmInfo> {
+    explicit ARMELFTargetAsmInfo(const ARMBaseTargetMachine &TM);
   };
 
 } // namespace llvm