Created
February 13, 2014 21:30
-
-
Save jedisct1/8984243 to your computer and use it in GitHub Desktop.
Disable AVX in Rust (required for EC2)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td | |
index e755fae..e154cc7 100644 | |
--- a/lib/Target/X86/X86.td | |
+++ b/lib/Target/X86/X86.td | |
@@ -246,17 +246,17 @@ def : ProcessorModel<"westmere", SandyBridgeModel, | |
// SSE is not listed here since llvm treats AVX as a reimplementation of SSE, | |
// rather than a superset. | |
def : ProcessorModel<"corei7-avx", SandyBridgeModel, | |
- [FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem, | |
+ [FeatureCMPXCHG16B, FeatureFastUAMem, | |
FeaturePOPCNT, FeatureAES, FeaturePCLMUL]>; | |
// Ivy Bridge | |
def : ProcessorModel<"core-avx-i", SandyBridgeModel, | |
- [FeatureAVX, FeatureCMPXCHG16B, FeatureFastUAMem, | |
+ [FeatureCMPXCHG16B, FeatureFastUAMem, | |
FeaturePOPCNT, FeatureAES, FeaturePCLMUL, FeatureRDRAND, | |
FeatureF16C, FeatureFSGSBase]>; | |
// Haswell | |
def : ProcessorModel<"core-avx2", HaswellModel, | |
- [FeatureAVX2, FeatureCMPXCHG16B, FeatureFastUAMem, | |
+ [FeatureCMPXCHG16B, FeatureFastUAMem, | |
FeaturePOPCNT, FeatureAES, FeaturePCLMUL, FeatureRDRAND, | |
FeatureF16C, FeatureFSGSBase, FeatureMOVBE, FeatureLZCNT, | |
FeatureBMI, FeatureBMI2, FeatureFMA, FeatureRTM, | |
@@ -265,7 +265,7 @@ def : ProcessorModel<"core-avx2", HaswellModel, | |
// KNL | |
// FIXME: define KNL model | |
def : ProcessorModel<"knl", HaswellModel, | |
- [FeatureAVX512, FeatureERI, FeatureCDI, FeaturePFI, | |
+ [FeatureERI, FeatureCDI, FeaturePFI, | |
FeatureCMPXCHG16B, FeatureFastUAMem, FeaturePOPCNT, | |
FeatureAES, FeaturePCLMUL, FeatureRDRAND, FeatureF16C, | |
FeatureFSGSBase, FeatureMOVBE, FeatureLZCNT, FeatureBMI, | |
@@ -307,7 +307,7 @@ def : Proc<"btver1", [FeatureSSSE3, FeatureSSE4A, FeatureCMPXCHG16B, | |
FeaturePRFCHW, FeatureLZCNT, FeaturePOPCNT, | |
FeatureSlowSHLD]>; | |
// Jaguar | |
-def : Proc<"btver2", [FeatureAVX, FeatureSSE4A, FeatureCMPXCHG16B, | |
+def : Proc<"btver2", [FeatureSSE4A, FeatureCMPXCHG16B, | |
FeaturePRFCHW, FeatureAES, FeaturePCLMUL, | |
FeatureBMI, FeatureF16C, FeatureMOVBE, | |
FeatureLZCNT, FeaturePOPCNT, FeatureSlowSHLD]>; | |
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp | |
index 16161cf..90a2fc1 100644 | |
--- a/lib/Target/X86/X86Subtarget.cpp | |
+++ b/lib/Target/X86/X86Subtarget.cpp | |
@@ -171,23 +171,7 @@ bool X86Subtarget::IsLegalToCallImmediateAddr(const TargetMachine &TM) const { | |
} | |
static bool OSHasAVXSupport() { | |
-#if defined(i386) || defined(__i386__) || defined(__x86__) || defined(_M_IX86)\ | |
- || defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64) | |
-#if defined(__GNUC__) | |
- // Check xgetbv; this uses a .byte sequence instead of the instruction | |
- // directly because older assemblers do not include support for xgetbv and | |
- // there is no easy way to conditionally compile based on the assembler used. | |
- int rEAX, rEDX; | |
- __asm__ (".byte 0x0f, 0x01, 0xd0" : "=a" (rEAX), "=d" (rEDX) : "c" (0)); | |
-#elif defined(_MSC_FULL_VER) && defined(_XCR_XFEATURE_ENABLED_MASK) | |
- unsigned long long rEAX = _xgetbv(_XCR_XFEATURE_ENABLED_MASK); | |
-#else | |
- int rEAX = 0; // Ensures we return false | |
-#endif | |
- return (rEAX & 6) == 6; | |
-#else | |
return false; | |
-#endif | |
} | |
void X86Subtarget::AutoDetectSubtargetFeatures() { | |
@@ -213,7 +197,7 @@ void X86Subtarget::AutoDetectSubtargetFeatures() { | |
if ((ECX >> 19) & 1) { X86SSELevel = SSE41; ToggleFeature(X86::FeatureSSE41);} | |
if ((ECX >> 20) & 1) { X86SSELevel = SSE42; ToggleFeature(X86::FeatureSSE42);} | |
if (((ECX >> 27) & 1) && ((ECX >> 28) & 1) && OSHasAVXSupport()) { | |
- X86SSELevel = AVX; ToggleFeature(X86::FeatureAVX); | |
+// X86SSELevel = AVX; ToggleFeature(X86::FeatureAVX); | |
} | |
bool IsIntel = memcmp(text.c, "GenuineIntel", 12) == 0; | |
@@ -358,8 +342,8 @@ void X86Subtarget::AutoDetectSubtargetFeatures() { | |
ToggleFeature(X86::FeatureHLE); | |
} | |
if (IsIntel && ((EBX >> 5) & 0x1)) { | |
- X86SSELevel = AVX2; | |
- ToggleFeature(X86::FeatureAVX2); | |
+// X86SSELevel = AVX2; | |
+// ToggleFeature(X86::FeatureAVX2); | |
} | |
if (IsIntel && ((EBX >> 8) & 0x1)) { | |
HasBMI2 = true; | |
@@ -370,8 +354,8 @@ void X86Subtarget::AutoDetectSubtargetFeatures() { | |
ToggleFeature(X86::FeatureRTM); | |
} | |
if (IsIntel && ((EBX >> 16) & 0x1)) { | |
- X86SSELevel = AVX512F; | |
- ToggleFeature(X86::FeatureAVX512); | |
+// X86SSELevel = AVX512F; | |
+// ToggleFeature(X86::FeatureAVX512); | |
} | |
if (IsIntel && ((EBX >> 18) & 0x1)) { | |
HasRDSEED = true; | |
diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h | |
index 1e9fba8..392d1e6 100644 | |
--- a/lib/Target/X86/X86Subtarget.h | |
+++ b/lib/Target/X86/X86Subtarget.h | |
@@ -280,9 +280,9 @@ public: | |
bool hasSSSE3() const { return X86SSELevel >= SSSE3; } | |
bool hasSSE41() const { return X86SSELevel >= SSE41; } | |
bool hasSSE42() const { return X86SSELevel >= SSE42; } | |
- bool hasAVX() const { return X86SSELevel >= AVX; } | |
- bool hasAVX2() const { return X86SSELevel >= AVX2; } | |
- bool hasAVX512() const { return X86SSELevel >= AVX512F; } | |
+ bool hasAVX() const { return false; } | |
+ bool hasAVX2() const { return false; } | |
+ bool hasAVX512() const { return false; } | |
bool hasFp256() const { return hasAVX(); } | |
bool hasInt256() const { return hasAVX2(); } | |
bool hasSSE4A() const { return HasSSE4A; } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment