diff options
author | Andrew Lenharth <andrewl@lenharth.org> | 2005-09-30 20:24:38 +0000 |
---|---|---|
committer | Andrew Lenharth <andrewl@lenharth.org> | 2005-09-30 20:24:38 +0000 |
commit | ac35cd207f3f186aef469cb834eca6ca2f1228f2 (patch) | |
tree | 2fd044a1341d397d9ca3c02c23947a7cc76aef10 | |
parent | b78ea801cd762ede7586c6e8ae37f8009100289a (diff) | |
download | external_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.cpp | 37 |
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; + } |