mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Add x86 CLMUL (Carry-less multiplication) cpu feature
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109206 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -357,6 +357,7 @@ def HasSSE41 : Predicate<"Subtarget->hasSSE41()">;
|
|||||||
def HasSSE42 : Predicate<"Subtarget->hasSSE42()">;
|
def HasSSE42 : Predicate<"Subtarget->hasSSE42()">;
|
||||||
def HasSSE4A : Predicate<"Subtarget->hasSSE4A()">;
|
def HasSSE4A : Predicate<"Subtarget->hasSSE4A()">;
|
||||||
def HasAVX : Predicate<"Subtarget->hasAVX()">;
|
def HasAVX : Predicate<"Subtarget->hasAVX()">;
|
||||||
|
def HasCLMUL : Predicate<"Subtarget->hasCLMUL()">;
|
||||||
def HasFMA3 : Predicate<"Subtarget->hasFMA3()">;
|
def HasFMA3 : Predicate<"Subtarget->hasFMA3()">;
|
||||||
def HasFMA4 : Predicate<"Subtarget->hasFMA4()">;
|
def HasFMA4 : Predicate<"Subtarget->hasFMA4()">;
|
||||||
def FPStackf32 : Predicate<"!Subtarget->hasSSE1()">;
|
def FPStackf32 : Predicate<"!Subtarget->hasSSE1()">;
|
||||||
|
@@ -260,9 +260,10 @@ void X86Subtarget::AutoDetectSubtargetFeatures() {
|
|||||||
bool IsIntel = memcmp(text.c, "GenuineIntel", 12) == 0;
|
bool IsIntel = memcmp(text.c, "GenuineIntel", 12) == 0;
|
||||||
bool IsAMD = !IsIntel && memcmp(text.c, "AuthenticAMD", 12) == 0;
|
bool IsAMD = !IsIntel && memcmp(text.c, "AuthenticAMD", 12) == 0;
|
||||||
|
|
||||||
HasFMA3 = IsIntel && ((ECX >> 12) & 0x1);
|
HasCLMUL = IsIntel && ((ECX >> 1) & 0x1);
|
||||||
HasAVX = ((ECX >> 28) & 0x1);
|
HasFMA3 = IsIntel && ((ECX >> 12) & 0x1);
|
||||||
HasAES = IsIntel && ((ECX >> 25) & 0x1);
|
HasAVX = ((ECX >> 28) & 0x1);
|
||||||
|
HasAES = IsIntel && ((ECX >> 25) & 0x1);
|
||||||
|
|
||||||
if (IsIntel || IsAMD) {
|
if (IsIntel || IsAMD) {
|
||||||
// Determine if bit test memory instructions are slow.
|
// Determine if bit test memory instructions are slow.
|
||||||
@@ -291,6 +292,7 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &FS,
|
|||||||
, HasSSE4A(false)
|
, HasSSE4A(false)
|
||||||
, HasAVX(false)
|
, HasAVX(false)
|
||||||
, HasAES(false)
|
, HasAES(false)
|
||||||
|
, HasCLMUL(false)
|
||||||
, HasFMA3(false)
|
, HasFMA3(false)
|
||||||
, HasFMA4(false)
|
, HasFMA4(false)
|
||||||
, IsBTMemSlow(false)
|
, IsBTMemSlow(false)
|
||||||
|
@@ -74,6 +74,9 @@ protected:
|
|||||||
/// HasAES - Target has AES instructions
|
/// HasAES - Target has AES instructions
|
||||||
bool HasAES;
|
bool HasAES;
|
||||||
|
|
||||||
|
/// HasCLMUL - Target has carry-less multiplication
|
||||||
|
bool HasCLMUL;
|
||||||
|
|
||||||
/// HasFMA3 - Target has 3-operand fused multiply-add
|
/// HasFMA3 - Target has 3-operand fused multiply-add
|
||||||
bool HasFMA3;
|
bool HasFMA3;
|
||||||
|
|
||||||
@@ -149,6 +152,7 @@ public:
|
|||||||
bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; }
|
bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; }
|
||||||
bool hasAVX() const { return HasAVX; }
|
bool hasAVX() const { return HasAVX; }
|
||||||
bool hasAES() const { return HasAES; }
|
bool hasAES() const { return HasAES; }
|
||||||
|
bool hasCLMUL() const { return HasCLMUL; }
|
||||||
bool hasFMA3() const { return HasFMA3; }
|
bool hasFMA3() const { return HasFMA3; }
|
||||||
bool hasFMA4() const { return HasFMA4; }
|
bool hasFMA4() const { return HasFMA4; }
|
||||||
bool isBTMemSlow() const { return IsBTMemSlow; }
|
bool isBTMemSlow() const { return IsBTMemSlow; }
|
||||||
|
Reference in New Issue
Block a user