mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +00:00
Update CPU capabilities for AMD machines
- added processors k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, and barcelona with appropriate sse3/4a levels - added FeatureSSE4A for amdfam10 processors in X86Subtarget: - added hasSSE4A - updated AutoDetectSubtargetFeatures to detect SSE4A - updated GetCurrentX86CPU to detect family 15 with sse3 as k8-sse3 and family 10h as amdfam10 New processor names match those used by gcc. Patch by Paul Redmond! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72434 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ecc23a5240
commit
8cf5ab153d
@ -52,6 +52,8 @@ def Feature64Bit : SubtargetFeature<"64bit", "HasX86_64", "true",
|
||||
"Support 64-bit instructions">;
|
||||
def FeatureSlowBTMem : SubtargetFeature<"slow-bt-mem", "IsBTMemSlow", "true",
|
||||
"Bit testing of memory is slow">;
|
||||
def FeatureSSE4A : SubtargetFeature<"sse4a", "HasSSE4A", "true",
|
||||
"Support SSE 4a instructions">;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// X86 processors supported.
|
||||
@ -97,6 +99,16 @@ def : Proc<"athlon64", [FeatureSSE2, Feature3DNowA, Feature64Bit,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"athlon-fx", [FeatureSSE2, Feature3DNowA, Feature64Bit,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"k8-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"opteron-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"athlon64-sse3", [FeatureSSE3, Feature3DNowA, Feature64Bit,
|
||||
FeatureSlowBTMem]>;
|
||||
def : Proc<"amdfam10", [FeatureSSE3, FeatureSSE4A,
|
||||
Feature3DNowA, Feature64Bit, FeatureSlowBTMem]>;
|
||||
def : Proc<"barcelona", [FeatureSSE3, FeatureSSE4A,
|
||||
Feature3DNowA, Feature64Bit, FeatureSlowBTMem]>;
|
||||
|
||||
def : Proc<"winchip-c6", [FeatureMMX]>;
|
||||
def : Proc<"winchip2", [FeatureMMX, Feature3DNow]>;
|
||||
|
@ -216,6 +216,7 @@ void X86Subtarget::AutoDetectSubtargetFeatures() {
|
||||
|
||||
X86::GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
|
||||
HasX86_64 = (EDX >> 29) & 0x1;
|
||||
HasSSE4A = IsAMD && ((ECX >> 6) & 0x1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -229,6 +230,7 @@ static const char *GetCurrentX86CPU() {
|
||||
|
||||
X86::GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
|
||||
bool Em64T = (EDX >> 29) & 0x1;
|
||||
bool HasSSE3 = (ECX & 0x1);
|
||||
|
||||
union {
|
||||
unsigned u[3];
|
||||
@ -311,10 +313,20 @@ static const char *GetCurrentX86CPU() {
|
||||
default: return "athlon";
|
||||
}
|
||||
case 15:
|
||||
if (HasSSE3) {
|
||||
switch (Model) {
|
||||
default: return "k8-sse3";
|
||||
}
|
||||
} else {
|
||||
switch (Model) {
|
||||
case 1: return "opteron";
|
||||
case 5: return "athlon-fx"; // also opteron
|
||||
default: return "athlon64";
|
||||
}
|
||||
}
|
||||
case 16:
|
||||
switch (Model) {
|
||||
case 1: return "opteron";
|
||||
case 5: return "athlon-fx"; // also opteron
|
||||
default: return "athlon64";
|
||||
default: return "amdfam10";
|
||||
}
|
||||
default:
|
||||
return "generic";
|
||||
|
@ -67,6 +67,9 @@ protected:
|
||||
/// IsBTMemSlow - True if BT (bit test) of memory instructions are slow.
|
||||
bool IsBTMemSlow;
|
||||
|
||||
/// HasSSE4A - True if the processor supports SSE4A instructions.
|
||||
bool HasSSE4A;
|
||||
|
||||
/// DarwinVers - Nonzero if this is a darwin platform: the numeric
|
||||
/// version of the platform, e.g. 8 = 10.4 (Tiger), 9 = 10.5 (Leopard), etc.
|
||||
unsigned char DarwinVers; // Is any darwin-x86 platform.
|
||||
@ -127,6 +130,7 @@ public:
|
||||
bool hasSSSE3() const { return X86SSELevel >= SSSE3; }
|
||||
bool hasSSE41() const { return X86SSELevel >= SSE41; }
|
||||
bool hasSSE42() const { return X86SSELevel >= SSE42; }
|
||||
bool hasSSE4A() const { return HasSSE4A; }
|
||||
bool has3DNow() const { return X863DNowLevel >= ThreeDNow; }
|
||||
bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user