mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Put a bunch of calls to ToggleFeature behind proper if statements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141527 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -187,28 +187,53 @@ void X86Subtarget::AutoDetectSubtargetFeatures() { | ||||
|  | ||||
|   X86_MC::GetCpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX); | ||||
|    | ||||
|   if ((EDX >> 15) & 1) HasCMov = true;      ToggleFeature(X86::FeatureCMOV); | ||||
|   if ((EDX >> 23) & 1) X86SSELevel = MMX;   ToggleFeature(X86::FeatureMMX); | ||||
|   if ((EDX >> 25) & 1) X86SSELevel = SSE1;  ToggleFeature(X86::FeatureSSE1); | ||||
|   if ((EDX >> 26) & 1) X86SSELevel = SSE2;  ToggleFeature(X86::FeatureSSE2); | ||||
|   if (ECX & 0x1)       X86SSELevel = SSE3;  ToggleFeature(X86::FeatureSSE3); | ||||
|   if ((ECX >> 9)  & 1) X86SSELevel = SSSE3; ToggleFeature(X86::FeatureSSSE3); | ||||
|   if ((ECX >> 19) & 1) X86SSELevel = SSE41; ToggleFeature(X86::FeatureSSE41); | ||||
|   if ((ECX >> 20) & 1) X86SSELevel = SSE42; ToggleFeature(X86::FeatureSSE42); | ||||
|   if ((EDX >> 15) & 1) { HasCMov = true;      ToggleFeature(X86::FeatureCMOV); } | ||||
|   if ((EDX >> 23) & 1) { X86SSELevel = MMX;   ToggleFeature(X86::FeatureMMX);  } | ||||
|   if ((EDX >> 25) & 1) { X86SSELevel = SSE1;  ToggleFeature(X86::FeatureSSE1); } | ||||
|   if ((EDX >> 26) & 1) { X86SSELevel = SSE2;  ToggleFeature(X86::FeatureSSE2); } | ||||
|   if (ECX & 0x1)       { X86SSELevel = SSE3;  ToggleFeature(X86::FeatureSSE3); } | ||||
|   if ((ECX >> 9)  & 1) { X86SSELevel = SSSE3; ToggleFeature(X86::FeatureSSSE3);} | ||||
|   if ((ECX >> 19) & 1) { X86SSELevel = SSE41; ToggleFeature(X86::FeatureSSE41);} | ||||
|   if ((ECX >> 20) & 1) { X86SSELevel = SSE42; ToggleFeature(X86::FeatureSSE42);} | ||||
|   // FIXME: AVX codegen support is not ready. | ||||
|   //if ((ECX >> 28) & 1) { HasAVX = true; } ToggleFeature(X86::FeatureAVX); | ||||
|   //if ((ECX >> 28) & 1) { HasAVX = true;  ToggleFeature(X86::FeatureAVX); } | ||||
|  | ||||
|   bool IsIntel = memcmp(text.c, "GenuineIntel", 12) == 0; | ||||
|   bool IsAMD   = !IsIntel && memcmp(text.c, "AuthenticAMD", 12) == 0; | ||||
|  | ||||
|   HasCLMUL = IsIntel && ((ECX >> 1) & 0x1);   ToggleFeature(X86::FeatureCLMUL); | ||||
|   HasFMA3  = IsIntel && ((ECX >> 12) & 0x1);  ToggleFeature(X86::FeatureFMA3); | ||||
|   HasMOVBE = IsIntel && ((ECX >> 22) & 0x1);  ToggleFeature(X86::FeatureMOVBE); | ||||
|   HasPOPCNT = IsIntel && ((ECX >> 23) & 0x1); ToggleFeature(X86::FeaturePOPCNT); | ||||
|   HasAES   = IsIntel && ((ECX >> 25) & 0x1);  ToggleFeature(X86::FeatureAES); | ||||
|   HasF16C  = IsIntel && ((ECX >> 29) & 0x1);  ToggleFeature(X86::FeatureF16C); | ||||
|   HasRDRAND = IsIntel && ((ECX >> 30) & 0x1); ToggleFeature(X86::FeatureRDRAND); | ||||
|   HasCmpxchg16b = ((ECX >> 13) & 0x1); ToggleFeature(X86::FeatureCMPXCHG16B); | ||||
|   if (IsIntel && ((ECX >> 1) & 0x1)) { | ||||
|     HasCLMUL = true; | ||||
|     ToggleFeature(X86::FeatureCLMUL); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 12) & 0x1)) { | ||||
|     HasFMA3 = true; | ||||
|     ToggleFeature(X86::FeatureFMA3); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 22) & 0x1)) { | ||||
|     HasMOVBE = true; | ||||
|     ToggleFeature(X86::FeatureMOVBE); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 23) & 0x1)) { | ||||
|     HasPOPCNT = true; | ||||
|     ToggleFeature(X86::FeaturePOPCNT); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 25) & 0x1)) { | ||||
|     HasAES = true; | ||||
|     ToggleFeature(X86::FeatureAES); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 29) & 0x1)) { | ||||
|     HasF16C = true; | ||||
|     ToggleFeature(X86::FeatureF16C); | ||||
|   } | ||||
|   if (IsIntel && ((ECX >> 30) & 0x1)) { | ||||
|     HasRDRAND = true; | ||||
|     ToggleFeature(X86::FeatureRDRAND); | ||||
|   } | ||||
|  | ||||
|   if ((ECX >> 13) & 0x1) { | ||||
|     HasCmpxchg16b = true; | ||||
|     ToggleFeature(X86::FeatureCMPXCHG16B); | ||||
|   } | ||||
|  | ||||
|   if (IsIntel || IsAMD) { | ||||
|     // Determine if bit test memory instructions are slow. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user