X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FMips%2FMipsSubtarget.h;h=5300a81254ab33a9b942af1aaff68131faf69126;hb=225ca9cdd70de3d12641b0aba7daf6cb568a7ebd;hp=f1068231c2a21c337dc6bb370521f95c25b4cf45;hpb=d2947ee33e810b24a016b944b375d34910f8f5dd;p=oota-llvm.git diff --git a/lib/Target/Mips/MipsSubtarget.h b/lib/Target/Mips/MipsSubtarget.h index f1068231c2a..5300a81254a 100644 --- a/lib/Target/Mips/MipsSubtarget.h +++ b/lib/Target/Mips/MipsSubtarget.h @@ -26,11 +26,48 @@ class MipsSubtarget : public TargetSubtarget { protected: - bool IsMipsIII; + enum MipsArchEnum { + Mips1, Mips2, Mips3, Mips4, Mips32, Mips32r2 + }; + + enum MipsABIEnum { + O32, EABI + }; + + // Mips architecture version + MipsArchEnum MipsArchVersion; + + // Mips supported ABIs + MipsABIEnum MipsABI; + + // IsLittle - The target is Little Endian bool IsLittle; + + // IsSingleFloat - The target only supports single precision float + // point operations. This enable the target to use all 32 32-bit + // float point registers instead of only using even ones. + bool IsSingleFloat; + + // IsFP64bit - The target processor has 64-bit float point registers. + bool IsFP64bit; + + // IsFP64bit - General-purpose registers are 64 bits wide + bool IsGP64bit; + + // HasAllegrexVFPU - Allegrex processor has a vector float point unit. + bool HasAllegrexVFPU; + + // IsAllegrex - The target processor is a Allegrex core. + bool IsAllegrex; + InstrItineraryData InstrItins; public: + + /// Only O32 and EABI supported right now. + bool isABI_EABI() const { return MipsABI == EABI; } + bool isABI_O32() const { return MipsABI == O32; } + /// This constructor initializes the data members to match that /// of the specified module. MipsSubtarget(const TargetMachine &TM, const Module &M, @@ -40,12 +77,17 @@ public: /// subtarget options. Definition of function is auto generated by tblgen. void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU); - /// isMipsIII - Return true if the selected CPU supports MipsIII ISA - /// support. - bool isMipsIII() const { return IsMipsIII; } + bool hasMips2Ops() const { return MipsArchVersion >= Mips2; } - /// isMipsIII - Return true if the target is little endian. bool isLittle() const { return IsLittle; } + bool isFP64bit() const { return IsFP64bit; }; + bool isGP64bit() const { return IsGP64bit; }; + bool isGP32bit() const { return !IsGP64bit; }; + bool isSingleFloat() const { return IsSingleFloat; }; + bool isNotSingleFloat() const { return !IsSingleFloat; }; + bool hasAllegrexVFPU() const { return HasAllegrexVFPU; }; + bool isAllegrex() const { return IsAllegrex; }; + }; } // End llvm namespace