]> granicus.if.org Git - clang/commitdiff
Class reorg for PPC; shouldn't be any visible changes unless I messed
authorEli Friedman <eli.friedman@gmail.com>
Wed, 20 Aug 2008 23:11:40 +0000 (23:11 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 20 Aug 2008 23:11:40 +0000 (23:11 +0000)
up somehow.

This concludes the series of reorg patches for the target
implementations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55086 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp

index f0cd2269ff28bf172554d957afce24499774d1ac..430bb504beaf75f77f9cf5689ce5a32997f31919 100644 (file)
@@ -34,32 +34,6 @@ static void Define(std::vector<char> &Buf, const char *Macro,
   Buf.push_back('\n');
 }
 
-
-namespace {
-class DarwinTargetInfo : public TargetInfo {
-public:
-  DarwinTargetInfo(const std::string& triple) : TargetInfo(triple) {}
-  
-  virtual void getTargetDefines(std::vector<char> &Defs) const {
-// FIXME: we need a real target configuration system.  For now, only define
-// __APPLE__ if the host has it.
-#ifdef __APPLE__
-    Define(Defs, "__APPLE__");
-    Define(Defs, "__MACH__");
-#endif
-
-/* FIXME. we may also need to distinguish between darwin and linux targets */
-#ifdef linux
-    Define(Defs, "linux");
-#endif
-    
-    if (0)  // darwin_pascal_strings
-      Define(Defs, "__PASCAL_STRINGS__");
-  }
-
-};
-}
-
 static void getSolarisDefines(std::vector<char> &Defs) {
   Define(Defs, "__SUN__");
   Define(Defs, "__SOLARIS__");
@@ -352,103 +326,44 @@ static void getARMDefines(std::vector<char> &Defs) {
   Define(Defs, "__LDBL_MIN__", "2.2250738585072014e-308");
 }
 
-static const char* getPPCVAListDeclaration() {
-  return 
-    "typedef struct __va_list_tag {"
-    "  unsigned char gpr;"
-    "  unsigned char fpr;"
-    "  unsigned short reserved;"
-    "  void* overflow_arg_area;"
-    "  void* reg_save_area;"
-    "} __builtin_va_list[1];";
-}
+//===----------------------------------------------------------------------===//
+// Specific target implementations.
+//===----------------------------------------------------------------------===//
 
-/// PPC builtin info.
-namespace clang {
-namespace PPC {
-  
-  static const Builtin::Info BuiltinInfo[] = {
-#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS },
-#include "clang/AST/PPCBuiltins.def"
-  };
-  
-  static void getBuiltins(const Builtin::Info *&Records, unsigned &NumRecords) {
-    Records = BuiltinInfo;
-    NumRecords = LastTSBuiltin-Builtin::FirstTSBuiltin;
-  }
-
-  static const char * const GCCRegNames[] = {
-    "0", "1", "2", "3", "4", "5", "6", "7",
-    "8", "9", "10", "11", "12", "13", "14", "15",
-    "16", "17", "18", "19", "20", "21", "22", "23",
-    "24", "25", "26", "27", "28", "29", "30", "31",
-    "0", "1", "2", "3", "4", "5", "6", "7",
-    "8", "9", "10", "11", "12", "13", "14", "15",
-    "16", "17", "18", "19", "20", "21", "22", "23",
-    "24", "25", "26", "27", "28", "29", "30", "31",
-    "mq", "lr", "ctr", "ap",
-    "0", "1", "2", "3", "4", "5", "6", "7",
-    "xer",
-    "0", "1", "2", "3", "4", "5", "6", "7",
-    "8", "9", "10", "11", "12", "13", "14", "15",
-    "16", "17", "18", "19", "20", "21", "22", "23",
-    "24", "25", "26", "27", "28", "29", "30", "31",
-    "vrsave", "vscr",
-    "spe_acc", "spefscr",
-    "sfp"
-  };
+namespace {
+// PPC abstract base class
+class PPCTargetInfo : public TargetInfo {
+  static const Builtin::Info BuiltinInfo[];
+  static const char * const GCCRegNames[];
+  static const TargetInfo::GCCRegAlias GCCRegAliases[];
 
-  static void getGCCRegNames(const char * const *&Names, 
-                                  unsigned &NumNames) {
-    Names = GCCRegNames;
-    NumNames = llvm::array_lengthof(GCCRegNames);
+public:
+  PPCTargetInfo(const std::string& triple) : TargetInfo(triple) {
+    CharIsSigned = false;
   }
-
-  static const TargetInfo::GCCRegAlias GCCRegAliases[] = {
-    // While some of these aliases do map to different registers
-    // they still share the same register name.
-    { { "cc", "cr0", "fr0", "r0", "v0"}, "0" }, 
-    { { "cr1", "fr1", "r1", "sp", "v1"}, "1" }, 
-    { { "cr2", "fr2", "r2", "toc", "v2"}, "2" }, 
-    { { "cr3", "fr3", "r3", "v3"}, "3" }, 
-    { { "cr4", "fr4", "r4", "v4"}, "4" }, 
-    { { "cr5", "fr5", "r5", "v5"}, "5" }, 
-    { { "cr6", "fr6", "r6", "v6"}, "6" }, 
-    { { "cr7", "fr7", "r7", "v7"}, "7" }, 
-    { { "fr8", "r8", "v8"}, "8" }, 
-    { { "fr9", "r9", "v9"}, "9" }, 
-    { { "fr10", "r10", "v10"}, "10" }, 
-    { { "fr11", "r11", "v11"}, "11" }, 
-    { { "fr12", "r12", "v12"}, "12" }, 
-    { { "fr13", "r13", "v13"}, "13" }, 
-    { { "fr14", "r14", "v14"}, "14" }, 
-    { { "fr15", "r15", "v15"}, "15" }, 
-    { { "fr16", "r16", "v16"}, "16" }, 
-    { { "fr17", "r17", "v17"}, "17" }, 
-    { { "fr18", "r18", "v18"}, "18" }, 
-    { { "fr19", "r19", "v19"}, "19" }, 
-    { { "fr20", "r20", "v20"}, "20" }, 
-    { { "fr21", "r21", "v21"}, "21" }, 
-    { { "fr22", "r22", "v22"}, "22" }, 
-    { { "fr23", "r23", "v23"}, "23" }, 
-    { { "fr24", "r24", "v24"}, "24" }, 
-    { { "fr25", "r25", "v25"}, "25" }, 
-    { { "fr26", "r26", "v26"}, "26" }, 
-    { { "fr27", "r27", "v27"}, "27" }, 
-    { { "fr28", "r28", "v28"}, "28" }, 
-    { { "fr29", "r29", "v29"}, "29" }, 
-    { { "fr30", "r30", "v30"}, "30" }, 
-    { { "fr31", "r31", "v31"}, "31" }, 
-  };
-  
-  static void getGCCRegAliases(const TargetInfo::GCCRegAlias *&Aliases, 
-                               unsigned &NumAliases) {
-    Aliases = GCCRegAliases;
-    NumAliases = llvm::array_lengthof(GCCRegAliases);
+  virtual void getTargetBuiltins(const Builtin::Info *&Records,
+                                 unsigned &NumRecords) const {
+    Records = BuiltinInfo;
+    NumRecords = clang::PPC::LastTSBuiltin-Builtin::FirstTSBuiltin;
   }
-  
-  static bool validateAsmConstraint(char c, 
-                                    TargetInfo::ConstraintInfo &info) {
+  virtual const char *getVAListDeclaration() const {
+    return "typedef struct __va_list_tag {"
+           "  unsigned char gpr;"
+           "  unsigned char fpr;"
+           "  unsigned short reserved;"
+           "  void* overflow_arg_area;"
+           "  void* reg_save_area;"
+           "} __builtin_va_list[1];";
+  }
+  virtual const char *getTargetPrefix() const {
+    return "ppc";
+  }
+  virtual void getGCCRegNames(const char * const *&Names, 
+                              unsigned &NumNames) const;
+  virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, 
+                                unsigned &NumAliases) const;
+  virtual bool validateAsmConstraint(char c,
+                                     TargetInfo::ConstraintInfo &info) const {
     switch (c) {
     default: return false;
     case 'O': // Zero
@@ -459,100 +374,128 @@ namespace PPC {
       return true;
     }
   }
-  
-  const char *getClobbers() {
-    return 0;
+  virtual const char *getClobbers() const {
+    return "";
   }
+};
 
-  const char *getTargetPrefix() {
-    return "ppc";
-  }
-  
-} // End namespace PPC
+const Builtin::Info PPCTargetInfo::BuiltinInfo[] = {
+#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS },
+#include "clang/AST/PPCBuiltins.def"
+};
 
-} // end namespace clang.
+const char * const PPCTargetInfo::GCCRegNames[] = {
+  "0", "1", "2", "3", "4", "5", "6", "7",
+  "8", "9", "10", "11", "12", "13", "14", "15",
+  "16", "17", "18", "19", "20", "21", "22", "23",
+  "24", "25", "26", "27", "28", "29", "30", "31",
+  "0", "1", "2", "3", "4", "5", "6", "7",
+  "8", "9", "10", "11", "12", "13", "14", "15",
+  "16", "17", "18", "19", "20", "21", "22", "23",
+  "24", "25", "26", "27", "28", "29", "30", "31",
+  "mq", "lr", "ctr", "ap",
+  "0", "1", "2", "3", "4", "5", "6", "7",
+  "xer",
+  "0", "1", "2", "3", "4", "5", "6", "7",
+  "8", "9", "10", "11", "12", "13", "14", "15",
+  "16", "17", "18", "19", "20", "21", "22", "23",
+  "24", "25", "26", "27", "28", "29", "30", "31",
+  "vrsave", "vscr",
+  "spe_acc", "spefscr",
+  "sfp"
+};
 
-//===----------------------------------------------------------------------===//
-// Specific target implementations.
-//===----------------------------------------------------------------------===//
+void PPCTargetInfo::getGCCRegNames(const char * const *&Names, 
+                                   unsigned &NumNames) const {
+  Names = GCCRegNames;
+  NumNames = llvm::array_lengthof(GCCRegNames);
+}
+
+const TargetInfo::GCCRegAlias PPCTargetInfo::GCCRegAliases[] = {
+  // While some of these aliases do map to different registers
+  // they still share the same register name.
+  { { "cc", "cr0", "fr0", "r0", "v0"}, "0" }, 
+  { { "cr1", "fr1", "r1", "sp", "v1"}, "1" }, 
+  { { "cr2", "fr2", "r2", "toc", "v2"}, "2" }, 
+  { { "cr3", "fr3", "r3", "v3"}, "3" }, 
+  { { "cr4", "fr4", "r4", "v4"}, "4" }, 
+  { { "cr5", "fr5", "r5", "v5"}, "5" }, 
+  { { "cr6", "fr6", "r6", "v6"}, "6" }, 
+  { { "cr7", "fr7", "r7", "v7"}, "7" }, 
+  { { "fr8", "r8", "v8"}, "8" }, 
+  { { "fr9", "r9", "v9"}, "9" }, 
+  { { "fr10", "r10", "v10"}, "10" }, 
+  { { "fr11", "r11", "v11"}, "11" }, 
+  { { "fr12", "r12", "v12"}, "12" }, 
+  { { "fr13", "r13", "v13"}, "13" }, 
+  { { "fr14", "r14", "v14"}, "14" }, 
+  { { "fr15", "r15", "v15"}, "15" }, 
+  { { "fr16", "r16", "v16"}, "16" }, 
+  { { "fr17", "r17", "v17"}, "17" }, 
+  { { "fr18", "r18", "v18"}, "18" }, 
+  { { "fr19", "r19", "v19"}, "19" }, 
+  { { "fr20", "r20", "v20"}, "20" }, 
+  { { "fr21", "r21", "v21"}, "21" }, 
+  { { "fr22", "r22", "v22"}, "22" }, 
+  { { "fr23", "r23", "v23"}, "23" }, 
+  { { "fr24", "r24", "v24"}, "24" }, 
+  { { "fr25", "r25", "v25"}, "25" }, 
+  { { "fr26", "r26", "v26"}, "26" }, 
+  { { "fr27", "r27", "v27"}, "27" }, 
+  { { "fr28", "r28", "v28"}, "28" }, 
+  { { "fr29", "r29", "v29"}, "29" }, 
+  { { "fr30", "r30", "v30"}, "30" }, 
+  { { "fr31", "r31", "v31"}, "31" }, 
+};
 
+void PPCTargetInfo::getGCCRegAliases(const GCCRegAlias *&Aliases, 
+                                     unsigned &NumAliases) const {
+  Aliases = GCCRegAliases;
+  NumAliases = llvm::array_lengthof(GCCRegAliases);
+}
+} // end anonymous namespace.
 
 namespace {
-class DarwinPPCTargetInfo : public DarwinTargetInfo {
+class PPC32TargetInfo : public PPCTargetInfo {
 public:
-  DarwinPPCTargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {
-    CharIsSigned = false;
-  }
-  
+  PPC32TargetInfo(const std::string& triple) : PPCTargetInfo(triple) {}
   virtual void getTargetDefines(std::vector<char> &Defines) const {
-    DarwinTargetInfo::getTargetDefines(Defines);
     getPowerPCDefines(Defines, false);
   }
-  virtual void getTargetBuiltins(const Builtin::Info *&Records,
-                                 unsigned &NumRecords) const {
-    PPC::getBuiltins(Records, NumRecords);
-  }
-  virtual const char *getVAListDeclaration() const {
-    return getPPCVAListDeclaration();
-  }
-  virtual const char *getTargetPrefix() const {
-    return PPC::getTargetPrefix();
-  }
-  virtual void getGCCRegNames(const char * const *&Names, 
-                              unsigned &NumNames) const {
-    PPC::getGCCRegNames(Names, NumNames);
-  }
-  virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, 
-                                unsigned &NumAliases) const {
-    PPC::getGCCRegAliases(Aliases, NumAliases);
-  }
-  virtual bool validateAsmConstraint(char c,
-                                     TargetInfo::ConstraintInfo &info) const {
-    return PPC::validateAsmConstraint(c, info);
-  }
-  virtual const char *getClobbers() const {
-    return PPC::getClobbers();
-  }
 };
 } // end anonymous namespace.
 
 namespace {
-class DarwinPPC64TargetInfo : public DarwinTargetInfo {
+class PPC64TargetInfo : public PPCTargetInfo {
 public:
-  DarwinPPC64TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {
-    CharIsSigned = false;
+  PPC64TargetInfo(const std::string& triple) : PPCTargetInfo(triple) {
     LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
   }
-  
   virtual void getTargetDefines(std::vector<char> &Defines) const {
-    DarwinTargetInfo::getTargetDefines(Defines);
     getPowerPCDefines(Defines, true);
   }
-  virtual void getTargetBuiltins(const Builtin::Info *&Records,
-                                 unsigned &NumRecords) const {
-    PPC::getBuiltins(Records, NumRecords);
-  }
-  virtual const char *getVAListDeclaration() const {
-    return getPPCVAListDeclaration();
-  }  
-  virtual const char *getTargetPrefix() const {
-    return PPC::getTargetPrefix();
-  }  
-  virtual void getGCCRegNames(const char * const *&Names, 
-                                   unsigned &NumNames) const {
-    PPC::getGCCRegNames(Names, NumNames);
-  }    
-  virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, 
-                                unsigned &NumAliases) const {
-    PPC::getGCCRegAliases(Aliases, NumAliases);
+};
+} // end anonymous namespace.
+
+namespace {
+class DarwinPPCTargetInfo : public PPC32TargetInfo {
+public:
+  DarwinPPCTargetInfo(const std::string& triple) : PPC32TargetInfo(triple) {}
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
+    PPC32TargetInfo::getTargetDefines(Defines);
+    getDarwinDefines(Defines);
   }
-  virtual bool validateAsmConstraint(char c,
-                                     TargetInfo::ConstraintInfo &info) const {
-    return PPC::validateAsmConstraint(c, info);
+};
+} // end anonymous namespace.
+
+namespace {
+class DarwinPPC64TargetInfo : public PPC64TargetInfo {
+public:
+  DarwinPPC64TargetInfo(const std::string& triple) : PPC64TargetInfo(triple) {}
+  virtual void getTargetDefines(std::vector<char> &Defines) const {
+    PPC64TargetInfo::getTargetDefines(Defines);
+    getDarwinDefines(Defines);
   }
-  virtual const char *getClobbers() const {
-    return PPC::getClobbers();
-  }  
 };
 } // end anonymous namespace.