mirror of
https://github.com/RPCSX/llvm.git
synced 2025-04-02 08:11:54 +00:00
[x86] adding PKU feature flag
the feature flag is essential for RDPKRU and WRPKRU instruction more about the instruction can be found in the SDM rev 56, vol 2 from http://www.intel.com/sdm Differential Revision: http://reviews.llvm.org/D15491 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255644 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
926403958d
commit
22bb8f5964
@ -812,6 +812,8 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
|
||||
Features["rdseed"] = HasLeaf7 && ((EBX >> 18) & 1);
|
||||
Features["adx"] = HasLeaf7 && ((EBX >> 19) & 1);
|
||||
Features["sha"] = HasLeaf7 && ((EBX >> 29) & 1);
|
||||
// Enable protection keys
|
||||
Features["pku"] = HasLeaf7 && ((ECX >> 4) & 1);
|
||||
|
||||
// AVX512 is only supported if the OS supports the context save for it.
|
||||
Features["avx512f"] = HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save;
|
||||
|
@ -134,6 +134,8 @@ def FeatureBWI : SubtargetFeature<"avx512bw", "HasBWI", "true",
|
||||
def FeatureVLX : SubtargetFeature<"avx512vl", "HasVLX", "true",
|
||||
"Enable AVX-512 Vector Length eXtensions",
|
||||
[FeatureAVX512]>;
|
||||
def FeaturePKU : SubtargetFeature<"pku", "HasPKU", "true",
|
||||
"Enable protection keys">;
|
||||
def FeaturePCLMUL : SubtargetFeature<"pclmul", "HasPCLMUL", "true",
|
||||
"Enable packed carry-less multiplication instructions",
|
||||
[FeatureSSE2]>;
|
||||
@ -491,6 +493,7 @@ class SkylakeProc<string Name> : ProcessorModel<Name, HaswellModel, [
|
||||
FeatureDQI,
|
||||
FeatureBWI,
|
||||
FeatureVLX,
|
||||
FeaturePKU,
|
||||
FeatureCMPXCHG16B,
|
||||
FeatureSlowBTMem,
|
||||
FeaturePOPCNT,
|
||||
|
@ -771,6 +771,7 @@ def HasVLX : Predicate<"Subtarget->hasVLX()">,
|
||||
def NoVLX : Predicate<"!Subtarget->hasVLX()">;
|
||||
def NoVLX_Or_NoBWI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasBWI()">;
|
||||
def NoVLX_Or_NoDQI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasDQI()">;
|
||||
def PKU : Predicate<"!Subtarget->hasPKU()">;
|
||||
|
||||
def HasPOPCNT : Predicate<"Subtarget->hasPOPCNT()">;
|
||||
def HasAES : Predicate<"Subtarget->hasAES()">;
|
||||
|
@ -270,6 +270,7 @@ void X86Subtarget::initializeEnvironment() {
|
||||
HasBWI = false;
|
||||
HasVLX = false;
|
||||
HasADX = false;
|
||||
HasPKU = false;
|
||||
HasSHA = false;
|
||||
HasPRFCHW = false;
|
||||
HasRDSEED = false;
|
||||
|
@ -223,6 +223,9 @@ protected:
|
||||
/// Processor has AVX-512 Vector Length eXtenstions
|
||||
bool HasVLX;
|
||||
|
||||
/// Processor has PKU extenstions
|
||||
bool HasPKU;
|
||||
|
||||
/// Processot supports MPX - Memory Protection Extensions
|
||||
bool HasMPX;
|
||||
|
||||
@ -398,6 +401,7 @@ public:
|
||||
bool hasDQI() const { return HasDQI; }
|
||||
bool hasBWI() const { return HasBWI; }
|
||||
bool hasVLX() const { return HasVLX; }
|
||||
bool hasPKU() const { return HasPKU; }
|
||||
bool hasMPX() const { return HasMPX; }
|
||||
|
||||
bool isAtom() const { return X86ProcFamily == IntelAtom; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user