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 | 49e48f6234cff55ecf2844c305ae08817664c4b4 (patch) | |
tree | 1eb8e439f07bd0b89403fbe52c4b871e3a8ddcd4 /llvm/lib/Target/Alpha/AlphaSubtarget.cpp | |
parent | 90b34c186512ec7fa0af452e28edc5830785e5ce (diff) | |
download | bcm5719-llvm-49e48f6234cff55ecf2844c305ae08817664c4b4.tar.gz bcm5719-llvm-49e48f6234cff55ecf2844c305ae08817664c4b4.zip |
subtarget support for CIX and FIX extentions (the only 2 I care about right now)
llvm-svn: 23569
Diffstat (limited to 'llvm/lib/Target/Alpha/AlphaSubtarget.cpp')
-rw-r--r-- | llvm/lib/Target/Alpha/AlphaSubtarget.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/llvm/lib/Target/Alpha/AlphaSubtarget.cpp b/llvm/lib/Target/Alpha/AlphaSubtarget.cpp index e1c61d8054f..794ecb304ac 100644 --- a/llvm/lib/Target/Alpha/AlphaSubtarget.cpp +++ b/llvm/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; + } |