mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-27 22:55:15 +00:00
Adding a feature flag to the llvm backend for x86 TBM instruction set.
Adding TBM feature to bdver2 processor; piledriver supports this instruction set according to the following document: http://developer.amd.com/wordpress/media/2012/10/New-Bulldozer-and-Piledriver-Instructions.pdf Phabricator code review is located here: http://llvm-reviews.chandlerc.com/D1692 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191324 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
09b16f3bb5
commit
4da61345ec
@ -117,6 +117,8 @@ def FeatureVectorUAMem : SubtargetFeature<"vector-unaligned-mem",
|
||||
def FeatureAES : SubtargetFeature<"aes", "HasAES", "true",
|
||||
"Enable AES instructions",
|
||||
[FeatureSSE2]>;
|
||||
def FeatureTBM : SubtargetFeature<"tbm", "HasTBM", "true",
|
||||
"Enable TBM instructions">;
|
||||
def FeatureMOVBE : SubtargetFeature<"movbe", "HasMOVBE", "true",
|
||||
"Support MOVBE instruction">;
|
||||
def FeatureRDRAND : SubtargetFeature<"rdrnd", "HasRDRAND", "true",
|
||||
@ -304,7 +306,8 @@ def : Proc<"bdver1", [FeatureXOP, FeatureFMA4, FeatureCMPXCHG16B,
|
||||
def : Proc<"bdver2", [FeatureXOP, FeatureFMA4, FeatureCMPXCHG16B,
|
||||
FeatureAES, FeaturePCLMUL,
|
||||
FeatureF16C, FeatureLZCNT,
|
||||
FeaturePOPCNT, FeatureBMI, FeatureFMA]>;
|
||||
FeaturePOPCNT, FeatureBMI, FeatureTBM,
|
||||
FeatureFMA]>;
|
||||
def : Proc<"geode", [Feature3DNowA]>;
|
||||
|
||||
def : Proc<"winchip-c6", [FeatureMMX]>;
|
||||
|
@ -384,6 +384,10 @@ void X86Subtarget::AutoDetectSubtargetFeatures() {
|
||||
ToggleFeature(X86::FeatureSHA);
|
||||
}
|
||||
}
|
||||
if (IsAMD && ((ECX >> 21) & 0x1)) {
|
||||
HasTBM = true;
|
||||
ToggleFeature(X86::FeatureTBM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -492,6 +496,7 @@ void X86Subtarget::initializeEnvironment() {
|
||||
HasFMA = false;
|
||||
HasFMA4 = false;
|
||||
HasXOP = false;
|
||||
HasTBM = false;
|
||||
HasMOVBE = false;
|
||||
HasRDRAND = false;
|
||||
HasF16C = false;
|
||||
|
@ -97,6 +97,9 @@ protected:
|
||||
/// HasXOP - Target has XOP instructions
|
||||
bool HasXOP;
|
||||
|
||||
/// HasTBM - Target has TBM instructions.
|
||||
bool HasTBM;
|
||||
|
||||
/// HasMOVBE - True if the processor has the MOVBE instruction.
|
||||
bool HasMOVBE;
|
||||
|
||||
@ -274,6 +277,7 @@ public:
|
||||
// FIXME: Favor FMA when both are enabled. Is this the right thing to do?
|
||||
bool hasFMA4() const { return HasFMA4 && !HasFMA; }
|
||||
bool hasXOP() const { return HasXOP; }
|
||||
bool hasTBM() const { return HasTBM; }
|
||||
bool hasMOVBE() const { return HasMOVBE; }
|
||||
bool hasRDRAND() const { return HasRDRAND; }
|
||||
bool hasF16C() const { return HasF16C; }
|
||||
|
Loading…
Reference in New Issue
Block a user