- Added option -relocation-model to set relocation model. Valid values include static...
[oota-llvm.git] / lib / Target / PowerPC / PPCSubtarget.cpp
index 0efc1c152d84c95a740b32aaf6428c02a01fd77d..606dfc09799f698a704c399ceee5c3615dc3449f 100644 (file)
@@ -1,4 +1,4 @@
-//===- PowerPCSubtarget.cpp - PPC Subtarget Information ---------*- C++ -*-===//
+//===- PowerPCSubtarget.cpp - PPC Subtarget Information -------------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
 //
 //===----------------------------------------------------------------------===//
 
-#include "PowerPCSubtarget.h"
-#include "PowerPC.h"
+#include "PPCSubtarget.h"
+#include "PPC.h"
 #include "llvm/Module.h"
 #include "llvm/Support/CommandLine.h"
-#include "llvm/Target/SubtargetFeature.h"
+#include "PPCGenSubtarget.inc"
 
 using namespace llvm;
 PPCTargetEnum llvm::PPCTarget = TargetDefault;
@@ -28,54 +28,9 @@ namespace llvm {
                           clEnumValN(TargetDarwin,"darwin",
                                      "  Enable Darwin codegen"),
                           clEnumValEnd),
-               cl::location(PPCTarget), cl::init(TargetDefault));
-}
-
-enum PowerPCFeature {
-  PowerPCFeature64Bit   = 1 << 0,
-  PowerPCFeatureAltivec = 1 << 1,
-  PowerPCFeatureFSqrt   = 1 << 2,
-  PowerPCFeatureGPUL    = 1 << 3,
-};
-
-/// Sorted (by key) array of values for CPU subtype.
-static const SubtargetFeatureKV PowerPCSubTypeKV[] = {
-  { "601"    , 0 },
-  { "602"    , 0 },
-  { "603"    , 0 },
-  { "603e"   , 0 },
-  { "603ev"  , 0 },
-  { "604"    , 0 },
-  { "604e"   , 0 },
-  { "620"    , 0 },
-  { "7400"   , PowerPCFeatureAltivec },
-  { "7450"   , PowerPCFeatureAltivec },
-  { "750"    , 0 },
-  { "970"    , PowerPCFeature64Bit | PowerPCFeatureAltivec |
-               PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
-  { "g3"     , 0 },
-  { "g4"     , PowerPCFeatureAltivec },
-  { "g4+"    , PowerPCFeatureAltivec },
-  { "g5"     , PowerPCFeature64Bit | PowerPCFeatureAltivec |
-               PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
-  { "generic", 0 }
-};
-/// Length of PowerPCSubTypeKV.
-static const unsigned PowerPCSubTypeKVSize = sizeof(PowerPCSubTypeKV)
-                                             / sizeof(SubtargetFeatureKV);
-
-/// Sorted (by key) array of values for CPU features.
-static SubtargetFeatureKV PowerPCFeatureKV[] = {
-  { "64bit"  , PowerPCFeature64Bit   },
-  { "altivec", PowerPCFeatureAltivec },
-  { "fsqrt"  , PowerPCFeatureFSqrt },
-  { "gpul"   , PowerPCFeatureGPUL    }
- };
-/// Length of PowerPCFeatureKV.
-static const unsigned PowerPCFeatureKVSize = sizeof(PowerPCFeatureKV)
-                                          / sizeof(SubtargetFeatureKV);
-
-
+               cl::location(PPCTarget), cl::init(TargetDefault));  
+} 
 #if defined(__APPLE__)
 #include <mach/mach.h>
 #include <mach/mach_host.h>
@@ -113,20 +68,26 @@ static const char *GetCurrentPowerPCCPU() {
 }
 #endif
 
+
 PPCSubtarget::PPCSubtarget(const Module &M, const std::string &FS)
-  : StackAlignment(16), IsGigaProcessor(false), IsAIX(false), IsDarwin(false) {
+  : StackAlignment(16)
+  , InstrItins()
+  , IsGigaProcessor(false)
+  , Is64Bit(false)
+  , Has64BitRegs(false)
+  , HasAltivec(false)
+  , HasFSQRT(false)
+  , IsAIX(false)
+  , IsDarwin(false) {
 
   // Determine default and user specified characteristics
-  std::string CPU;
+  std::string CPU = "generic";
 #if defined(__APPLE__)
   CPU = GetCurrentPowerPCCPU();
 #endif
-  uint32_t Bits =
-  SubtargetFeatures::Parse(FS, CPU,
-                           PowerPCSubTypeKV, PowerPCSubTypeKVSize,
-                           PowerPCFeatureKV, PowerPCFeatureKVSize);
-  IsGigaProcessor = (Bits & PowerPCFeatureGPUL ) != 0;
-  HasFSQRT        = (Bits & PowerPCFeatureFSqrt) != 0;
+
+  // Parse features string.
+  ParseSubtargetFeatures(FS, CPU);
 
   // Set the boolean corresponding to the current target triple, or the default
   // if one cannot be determined, to true.