aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Lenharth <andrewl@lenharth.org>2005-09-30 20:24:38 +0000
committerAndrew Lenharth <andrewl@lenharth.org>2005-09-30 20:24:38 +0000
commitac35cd207f3f186aef469cb834eca6ca2f1228f2 (patch)
tree2fd044a1341d397d9ca3c02c23947a7cc76aef10
parentb78ea801cd762ede7586c6e8ae37f8009100289a (diff)
downloadexternal_llvm-ac35cd207f3f186aef469cb834eca6ca2f1228f2.zip
external_llvm-ac35cd207f3f186aef469cb834eca6ca2f1228f2.tar.gz
external_llvm-ac35cd207f3f186aef469cb834eca6ca2f1228f2.tar.bz2
subtarget support for CIX and FIX extentions (the only 2 I care about right now)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23569 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Alpha/AlphaSubtarget.cpp37
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/Target/Alpha/AlphaSubtarget.cpp b/lib/Target/Alpha/AlphaSubtarget.cpp
index e1c61d8..794ecb3 100644
--- a/lib/Target/Alpha/AlphaSubtarget.cpp
+++ b/lib/Target/Alpha/AlphaSubtarget.cpp
@@ -16,13 +16,46 @@
#include "llvm/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Target/SubtargetFeature.h"
+#include "llvm/Support/Debug.h"
using namespace llvm;
-//"alphaev67-unknown-linux-gnu"
+enum AlphaFeature {
+ AlphaFeatureCIX = 1 << 0,
+ AlphaFeatureFIX = 1 << 1,
+};
+
+/// Sorted (by key) array of values for CPU subtype.
+static const SubtargetFeatureKV AlphaSubTypeKV[] = {
+ { "ev56" , "Select the Alpha EV56 processor", 0 },
+ { "ev6" , "Select the Alpha EV6 processor", AlphaFeatureFIX },
+ { "ev67" , "Select the Alpha EV67 processor", AlphaFeatureFIX | AlphaFeatureCIX },
+ { "pca56" , "Select the Alpha PCA56 processor", 0 },
+ { "generic", "Select instructions for a generic Alpha processor (EV56)", 0 }
+};
+
+/// Length of AlphaSubTypeKV.
+static const unsigned AlphaSubTypeKVSize = sizeof(AlphaSubTypeKV)
+ / sizeof(SubtargetFeatureKV);
+
+/// Sorted (by key) array of values for CPU features.
+static SubtargetFeatureKV AlphaFeatureKV[] = {
+ { "FIX" , "Should FIX extentions be used" , AlphaFeatureFIX },
+ { "CIX", "Should CIX extentions be used" , AlphaFeatureCIX }
+ };
+/// Length of AlphaFeatureKV.
+static const unsigned AlphaFeatureKVSize = sizeof(AlphaFeatureKV)
+ / sizeof(SubtargetFeatureKV);
AlphaSubtarget::AlphaSubtarget(const Module &M, const std::string &FS)
:HasF2I(false), HasCT(false)
{
-//TODO: figure out host
+ std::string CPU = "generic";
+ uint32_t Bits =
+ SubtargetFeatures::Parse(FS, CPU,
+ AlphaSubTypeKV, AlphaSubTypeKVSize,
+ AlphaFeatureKV, AlphaFeatureKVSize);
+ HasF2I = (Bits & AlphaFeatureFIX) != 0;
+ HasCT = (Bits & AlphaFeatureCIX) != 0;
+
}