forked from OSchip/llvm-project
[X86] Add HRESET instruction.
For more details about these instructions, please refer to the latest ISE document: https://software.intel.com/en-us/download/intel-architecture-instruction-set-extensions-programming-reference. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D89102
This commit is contained in:
parent
ec2c2ad2a2
commit
412cdcf2ed
|
@ -3261,6 +3261,8 @@ X86
|
||||||
|
|
||||||
.. option:: -mgfni, -mno-gfni
|
.. option:: -mgfni, -mno-gfni
|
||||||
|
|
||||||
|
.. option:: -mhreset, -mno-hreset
|
||||||
|
|
||||||
.. option:: -minvpcid, -mno-invpcid
|
.. option:: -minvpcid, -mno-invpcid
|
||||||
|
|
||||||
.. option:: -mkl, -mno-kl
|
.. option:: -mkl, -mno-kl
|
||||||
|
|
|
@ -3260,6 +3260,8 @@ def minvpcid : Flag<["-"], "minvpcid">, Group<m_x86_Features_Group>;
|
||||||
def mno_invpcid : Flag<["-"], "mno-invpcid">, Group<m_x86_Features_Group>;
|
def mno_invpcid : Flag<["-"], "mno-invpcid">, Group<m_x86_Features_Group>;
|
||||||
def mgfni : Flag<["-"], "mgfni">, Group<m_x86_Features_Group>;
|
def mgfni : Flag<["-"], "mgfni">, Group<m_x86_Features_Group>;
|
||||||
def mno_gfni : Flag<["-"], "mno-gfni">, Group<m_x86_Features_Group>;
|
def mno_gfni : Flag<["-"], "mno-gfni">, Group<m_x86_Features_Group>;
|
||||||
|
def mhreset : Flag<["-"], "mhreset">, Group<m_x86_Features_Group>;
|
||||||
|
def mno_hreset : Flag<["-"], "mno-hreset">, Group<m_x86_Features_Group>;
|
||||||
def mkl : Flag<["-"], "mkl">, Group<m_x86_Features_Group>;
|
def mkl : Flag<["-"], "mkl">, Group<m_x86_Features_Group>;
|
||||||
def mno_kl : Flag<["-"], "mno-kl">, Group<m_x86_Features_Group>;
|
def mno_kl : Flag<["-"], "mno-kl">, Group<m_x86_Features_Group>;
|
||||||
def mwidekl : Flag<["-"], "mwidekl">, Group<m_x86_Features_Group>;
|
def mwidekl : Flag<["-"], "mwidekl">, Group<m_x86_Features_Group>;
|
||||||
|
|
|
@ -298,6 +298,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
|
||||||
HasINVPCID = true;
|
HasINVPCID = true;
|
||||||
} else if (Feature == "+enqcmd") {
|
} else if (Feature == "+enqcmd") {
|
||||||
HasENQCMD = true;
|
HasENQCMD = true;
|
||||||
|
} else if (Feature == "+hreset") {
|
||||||
|
HasHRESET = true;
|
||||||
} else if (Feature == "+amx-bf16") {
|
} else if (Feature == "+amx-bf16") {
|
||||||
HasAMXBF16 = true;
|
HasAMXBF16 = true;
|
||||||
} else if (Feature == "+amx-int8") {
|
} else if (Feature == "+amx-int8") {
|
||||||
|
@ -712,6 +714,8 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||||
Builder.defineMacro("__INVPCID__");
|
Builder.defineMacro("__INVPCID__");
|
||||||
if (HasENQCMD)
|
if (HasENQCMD)
|
||||||
Builder.defineMacro("__ENQCMD__");
|
Builder.defineMacro("__ENQCMD__");
|
||||||
|
if (HasHRESET)
|
||||||
|
Builder.defineMacro("__HRESET__");
|
||||||
if (HasAMXTILE)
|
if (HasAMXTILE)
|
||||||
Builder.defineMacro("__AMXTILE__");
|
Builder.defineMacro("__AMXTILE__");
|
||||||
if (HasAMXINT8)
|
if (HasAMXINT8)
|
||||||
|
@ -848,6 +852,7 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
|
||||||
.Case("fsgsbase", true)
|
.Case("fsgsbase", true)
|
||||||
.Case("fxsr", true)
|
.Case("fxsr", true)
|
||||||
.Case("gfni", true)
|
.Case("gfni", true)
|
||||||
|
.Case("hreset", true)
|
||||||
.Case("invpcid", true)
|
.Case("invpcid", true)
|
||||||
.Case("kl", true)
|
.Case("kl", true)
|
||||||
.Case("widekl", true)
|
.Case("widekl", true)
|
||||||
|
@ -936,6 +941,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
|
||||||
.Case("fsgsbase", HasFSGSBASE)
|
.Case("fsgsbase", HasFSGSBASE)
|
||||||
.Case("fxsr", HasFXSR)
|
.Case("fxsr", HasFXSR)
|
||||||
.Case("gfni", HasGFNI)
|
.Case("gfni", HasGFNI)
|
||||||
|
.Case("hreset", HasHRESET)
|
||||||
.Case("invpcid", HasINVPCID)
|
.Case("invpcid", HasINVPCID)
|
||||||
.Case("kl", HasKL)
|
.Case("kl", HasKL)
|
||||||
.Case("widekl", HasWIDEKL)
|
.Case("widekl", HasWIDEKL)
|
||||||
|
|
|
@ -129,6 +129,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public TargetInfo {
|
||||||
bool HasENQCMD = false;
|
bool HasENQCMD = false;
|
||||||
bool HasKL = false; // For key locker
|
bool HasKL = false; // For key locker
|
||||||
bool HasWIDEKL = false; // For wide key locker
|
bool HasWIDEKL = false; // For wide key locker
|
||||||
|
bool HasHRESET = false;
|
||||||
bool HasAMXTILE = false;
|
bool HasAMXTILE = false;
|
||||||
bool HasAMXINT8 = false;
|
bool HasAMXINT8 = false;
|
||||||
bool HasAMXBF16 = false;
|
bool HasAMXBF16 = false;
|
||||||
|
|
|
@ -65,6 +65,7 @@ set(files
|
||||||
fmaintrin.h
|
fmaintrin.h
|
||||||
fxsrintrin.h
|
fxsrintrin.h
|
||||||
gfniintrin.h
|
gfniintrin.h
|
||||||
|
hresetintrin.h
|
||||||
htmintrin.h
|
htmintrin.h
|
||||||
htmxlintrin.h
|
htmxlintrin.h
|
||||||
ia32intrin.h
|
ia32intrin.h
|
||||||
|
@ -124,6 +125,7 @@ set(files
|
||||||
wmmintrin.h
|
wmmintrin.h
|
||||||
__wmmintrin_aes.h
|
__wmmintrin_aes.h
|
||||||
__wmmintrin_pclmul.h
|
__wmmintrin_pclmul.h
|
||||||
|
x86gprintrin.h
|
||||||
x86intrin.h
|
x86intrin.h
|
||||||
xmmintrin.h
|
xmmintrin.h
|
||||||
xopintrin.h
|
xopintrin.h
|
||||||
|
|
|
@ -196,6 +196,7 @@
|
||||||
|
|
||||||
/* Features in %eax for leaf 7 sub-leaf 1 */
|
/* Features in %eax for leaf 7 sub-leaf 1 */
|
||||||
#define bit_AVX512BF16 0x00000020
|
#define bit_AVX512BF16 0x00000020
|
||||||
|
#define bit_HRESET 0x00400000
|
||||||
|
|
||||||
/* Features in %eax for leaf 13 sub-leaf 1 */
|
/* Features in %eax for leaf 13 sub-leaf 1 */
|
||||||
#define bit_XSAVEOPT 0x00000001
|
#define bit_XSAVEOPT 0x00000001
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*===---------------- hresetintrin.h - HRESET intrinsics -------------------===
|
||||||
|
*
|
||||||
|
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
* See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
*
|
||||||
|
*===-----------------------------------------------------------------------===
|
||||||
|
*/
|
||||||
|
#ifndef __X86GPRINTRIN_H
|
||||||
|
#error "Never use <hresetintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __HRESETINTRIN_H
|
||||||
|
#define __HRESETINTRIN_H
|
||||||
|
|
||||||
|
#if __has_extension(gnu_asm)
|
||||||
|
|
||||||
|
/* Define the default attributes for the functions in this file. */
|
||||||
|
#define __DEFAULT_FN_ATTRS \
|
||||||
|
__attribute__((__always_inline__, __nodebug__, __target__("hreset")))
|
||||||
|
|
||||||
|
/// Provides a hint to the processor to selectively reset the prediction
|
||||||
|
/// history of the current logical processor specified by a 32-bit integer
|
||||||
|
/// value \a __eax.
|
||||||
|
///
|
||||||
|
/// This intrinsic corresponds to the <c> HRESET </c> instruction.
|
||||||
|
///
|
||||||
|
/// \operation
|
||||||
|
/// IF __eax == 0
|
||||||
|
/// // nop
|
||||||
|
/// ELSE
|
||||||
|
/// FOR i := 0 to 31
|
||||||
|
/// IF __eax[i]
|
||||||
|
/// ResetPredictionFeature(i)
|
||||||
|
/// FI
|
||||||
|
/// ENDFOR
|
||||||
|
/// FI
|
||||||
|
/// \endoperation
|
||||||
|
static __inline void __DEFAULT_FN_ATTRS
|
||||||
|
_hreset(int __eax)
|
||||||
|
{
|
||||||
|
__asm__ ("hreset $0" :: "a"(__eax));
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef __DEFAULT_FN_ATTRS
|
||||||
|
|
||||||
|
#endif /* __has_extension(gnu_asm) */
|
||||||
|
|
||||||
|
#endif /* __HRESETINTRIN_H */
|
|
@ -10,6 +10,8 @@
|
||||||
#ifndef __IMMINTRIN_H
|
#ifndef __IMMINTRIN_H
|
||||||
#define __IMMINTRIN_H
|
#define __IMMINTRIN_H
|
||||||
|
|
||||||
|
#include <x86gprintrin.h>
|
||||||
|
|
||||||
#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||||||
defined(__MMX__)
|
defined(__MMX__)
|
||||||
#include <mmintrin.h>
|
#include <mmintrin.h>
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*===--------------- x86gprintrin.h - X86 GPR intrinsics ------------------===
|
||||||
|
*
|
||||||
|
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
* See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
*
|
||||||
|
*===-----------------------------------------------------------------------===
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __X86GPRINTRIN_H
|
||||||
|
#define __X86GPRINTRIN_H
|
||||||
|
|
||||||
|
#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
|
||||||
|
defined(__HRESET__)
|
||||||
|
#include <hresetintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __X86GPRINTRIN_H */
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: %clang_cc1 %s -ffreestanding -triple x86_64-unknown-unknown -target-feature +hreset -emit-llvm -o - | FileCheck %s
|
||||||
|
// RUN: %clang_cc1 %s -ffreestanding -triple i386-unknown-unknown -target-feature +hreset -emit-llvm -o - | FileCheck %s
|
||||||
|
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
void test_hreset(int a)
|
||||||
|
{
|
||||||
|
// CHECK-LABEL: test_hreset
|
||||||
|
// CHECK: call void asm sideeffect "hreset $$0", "{ax},~{dirflag},~{fpsr},~{flags}"(i32 %{{[0-9]}})
|
||||||
|
_hreset(a);
|
||||||
|
}
|
|
@ -278,3 +278,8 @@
|
||||||
// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-amx-int8 %s -### -o %t.o 2>&1 | FileCheck --check-prefix=NO-AMX-INT8 %s
|
// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-amx-int8 %s -### -o %t.o 2>&1 | FileCheck --check-prefix=NO-AMX-INT8 %s
|
||||||
// AMX-INT8: "-target-feature" "+amx-int8"
|
// AMX-INT8: "-target-feature" "+amx-int8"
|
||||||
// NO-AMX-INT8: "-target-feature" "-amx-int8"
|
// NO-AMX-INT8: "-target-feature" "-amx-int8"
|
||||||
|
|
||||||
|
// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mhreset %s -### -o %t.o 2>&1 | FileCheck -check-prefix=HRESET %s
|
||||||
|
// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-hreset %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-HRESET %s
|
||||||
|
// HRESET: "-target-feature" "+hreset"
|
||||||
|
// NO-HRESET: "-target-feature" "-hreset"
|
||||||
|
|
|
@ -528,3 +528,11 @@
|
||||||
// RUN: %clang -target i386-unknown-unknown -march=atom -mno-tsxldtrk -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOTSXLDTRK %s
|
// RUN: %clang -target i386-unknown-unknown -march=atom -mno-tsxldtrk -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOTSXLDTRK %s
|
||||||
|
|
||||||
// NOTSXLDTRK-NOT: #define __TSXLDTRK__ 1
|
// NOTSXLDTRK-NOT: #define __TSXLDTRK__ 1
|
||||||
|
|
||||||
|
// RUN: %clang -target i386-unknown-unknown -march=atom -mhreset -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=HRESET %s
|
||||||
|
|
||||||
|
// HRESET: #define __HRESET__ 1
|
||||||
|
|
||||||
|
// RUN: %clang -target i386-unknown-unknown -march=atom -mno-hreset -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOHRESET %s
|
||||||
|
|
||||||
|
// NOHRESET-NOT: #define __HRESET__ 1
|
||||||
|
|
|
@ -114,6 +114,7 @@ During this release ...
|
||||||
the "target-cpu" attribute or TargetMachine CPU which will be used to select
|
the "target-cpu" attribute or TargetMachine CPU which will be used to select
|
||||||
Instruction Set. If the attribute is not present, the tune CPU will follow
|
Instruction Set. If the attribute is not present, the tune CPU will follow
|
||||||
the target CPU.
|
the target CPU.
|
||||||
|
* Support for ISA HRESET has been added.
|
||||||
|
|
||||||
Changes to the AMDGPU Target
|
Changes to the AMDGPU Target
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
|
@ -187,6 +187,7 @@ X86_FEATURE (XSAVE, "xsave")
|
||||||
X86_FEATURE (XSAVEC, "xsavec")
|
X86_FEATURE (XSAVEC, "xsavec")
|
||||||
X86_FEATURE (XSAVEOPT, "xsaveopt")
|
X86_FEATURE (XSAVEOPT, "xsaveopt")
|
||||||
X86_FEATURE (XSAVES, "xsaves")
|
X86_FEATURE (XSAVES, "xsaves")
|
||||||
|
X86_FEATURE (HRESET, "hreset")
|
||||||
// These features aren't really CPU features, but the frontend can set them.
|
// These features aren't really CPU features, but the frontend can set them.
|
||||||
X86_FEATURE (RETPOLINE_EXTERNAL_THUNK, "retpoline-external-thunk")
|
X86_FEATURE (RETPOLINE_EXTERNAL_THUNK, "retpoline-external-thunk")
|
||||||
X86_FEATURE (RETPOLINE_INDIRECT_BRANCHES, "retpoline-indirect-branches")
|
X86_FEATURE (RETPOLINE_INDIRECT_BRANCHES, "retpoline-indirect-branches")
|
||||||
|
|
|
@ -1496,6 +1496,7 @@ bool sys::getHostCPUFeatures(StringMap<bool> &Features) {
|
||||||
bool HasLeaf7Subleaf1 =
|
bool HasLeaf7Subleaf1 =
|
||||||
MaxLevel >= 7 && !getX86CpuIDAndInfoEx(0x7, 0x1, &EAX, &EBX, &ECX, &EDX);
|
MaxLevel >= 7 && !getX86CpuIDAndInfoEx(0x7, 0x1, &EAX, &EBX, &ECX, &EDX);
|
||||||
Features["avx512bf16"] = HasLeaf7Subleaf1 && ((EAX >> 5) & 1) && HasAVX512Save;
|
Features["avx512bf16"] = HasLeaf7Subleaf1 && ((EAX >> 5) & 1) && HasAVX512Save;
|
||||||
|
Features["hreset"] = HasLeaf7Subleaf1 && ((EAX >> 22) & 1);
|
||||||
|
|
||||||
bool HasLeafD = MaxLevel >= 0xd &&
|
bool HasLeafD = MaxLevel >= 0xd &&
|
||||||
!getX86CpuIDAndInfoEx(0xd, 0x1, &EAX, &EBX, &ECX, &EDX);
|
!getX86CpuIDAndInfoEx(0xd, 0x1, &EAX, &EBX, &ECX, &EDX);
|
||||||
|
|
|
@ -558,6 +558,7 @@ constexpr FeatureBitset ImpliedFeaturesXOP = FeatureFMA4;
|
||||||
constexpr FeatureBitset ImpliedFeaturesAMX_TILE = {};
|
constexpr FeatureBitset ImpliedFeaturesAMX_TILE = {};
|
||||||
constexpr FeatureBitset ImpliedFeaturesAMX_BF16 = FeatureAMX_TILE;
|
constexpr FeatureBitset ImpliedFeaturesAMX_BF16 = FeatureAMX_TILE;
|
||||||
constexpr FeatureBitset ImpliedFeaturesAMX_INT8 = FeatureAMX_TILE;
|
constexpr FeatureBitset ImpliedFeaturesAMX_INT8 = FeatureAMX_TILE;
|
||||||
|
constexpr FeatureBitset ImpliedFeaturesHRESET = {};
|
||||||
|
|
||||||
// Key Locker Features
|
// Key Locker Features
|
||||||
constexpr FeatureBitset ImpliedFeaturesKL = FeatureSSE2;
|
constexpr FeatureBitset ImpliedFeaturesKL = FeatureSSE2;
|
||||||
|
|
|
@ -285,6 +285,8 @@ def FeatureKL : SubtargetFeature<"kl", "HasKL", "true",
|
||||||
def FeatureWIDEKL : SubtargetFeature<"widekl", "HasWIDEKL", "true",
|
def FeatureWIDEKL : SubtargetFeature<"widekl", "HasWIDEKL", "true",
|
||||||
"Support Key Locker wide Instructions",
|
"Support Key Locker wide Instructions",
|
||||||
[FeatureKL]>;
|
[FeatureKL]>;
|
||||||
|
def FeatureHRESET : SubtargetFeature<"hreset", "HasHRESET", "true",
|
||||||
|
"Has hreset instruction">;
|
||||||
def FeatureSERIALIZE : SubtargetFeature<"serialize", "HasSERIALIZE", "true",
|
def FeatureSERIALIZE : SubtargetFeature<"serialize", "HasSERIALIZE", "true",
|
||||||
"Has serialize instruction">;
|
"Has serialize instruction">;
|
||||||
def FeatureTSXLDTRK : SubtargetFeature<"tsxldtrk", "HasTSXLDTRK", "true",
|
def FeatureTSXLDTRK : SubtargetFeature<"tsxldtrk", "HasTSXLDTRK", "true",
|
||||||
|
|
|
@ -216,6 +216,7 @@ class T8XS : T8 { Prefix OpPrefix = XS; }
|
||||||
class TAPS : TA { Prefix OpPrefix = PS; }
|
class TAPS : TA { Prefix OpPrefix = PS; }
|
||||||
class TAPD : TA { Prefix OpPrefix = PD; }
|
class TAPD : TA { Prefix OpPrefix = PD; }
|
||||||
class TAXD : TA { Prefix OpPrefix = XD; }
|
class TAXD : TA { Prefix OpPrefix = XD; }
|
||||||
|
class TAXS : TA { Prefix OpPrefix = XS; }
|
||||||
class VEX { Encoding OpEnc = EncVEX; }
|
class VEX { Encoding OpEnc = EncVEX; }
|
||||||
class VEX_W { bit HasVEX_W = 1; }
|
class VEX_W { bit HasVEX_W = 1; }
|
||||||
class VEX_WIG { bit IgnoresVEX_W = 1; }
|
class VEX_WIG { bit IgnoresVEX_W = 1; }
|
||||||
|
|
|
@ -972,6 +972,7 @@ def HasPCONFIG : Predicate<"Subtarget->hasPCONFIG()">;
|
||||||
def HasENQCMD : Predicate<"Subtarget->hasENQCMD()">;
|
def HasENQCMD : Predicate<"Subtarget->hasENQCMD()">;
|
||||||
def HasKL : Predicate<"Subtarget->hasKL()">;
|
def HasKL : Predicate<"Subtarget->hasKL()">;
|
||||||
def HasWIDEKL : Predicate<"Subtarget->hasWIDEKL()">;
|
def HasWIDEKL : Predicate<"Subtarget->hasWIDEKL()">;
|
||||||
|
def HasHRESET : Predicate<"Subtarget->hasHRESET()">;
|
||||||
def HasSERIALIZE : Predicate<"Subtarget->hasSERIALIZE()">;
|
def HasSERIALIZE : Predicate<"Subtarget->hasSERIALIZE()">;
|
||||||
def HasTSXLDTRK : Predicate<"Subtarget->hasTSXLDTRK()">;
|
def HasTSXLDTRK : Predicate<"Subtarget->hasTSXLDTRK()">;
|
||||||
def HasAMXTILE : Predicate<"Subtarget->hasAMXTILE()">;
|
def HasAMXTILE : Predicate<"Subtarget->hasAMXTILE()">;
|
||||||
|
@ -2913,6 +2914,13 @@ let SchedRW = [WriteLoad] in {
|
||||||
def : InstAlias<"clzero\t{%eax|eax}", (CLZERO32r)>, Requires<[Not64BitMode]>;
|
def : InstAlias<"clzero\t{%eax|eax}", (CLZERO32r)>, Requires<[Not64BitMode]>;
|
||||||
def : InstAlias<"clzero\t{%rax|rax}", (CLZERO64r)>, Requires<[In64BitMode]>;
|
def : InstAlias<"clzero\t{%rax|rax}", (CLZERO64r)>, Requires<[In64BitMode]>;
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// HRESET Instruction
|
||||||
|
//
|
||||||
|
let Uses = [EAX], SchedRW = [WriteSystem] in
|
||||||
|
def HRESET : Ii8<0xF0, MRM_C0, (outs), (ins i32u8imm:$imm), "hreset\t$imm", []>,
|
||||||
|
Requires<[HasHRESET]>, TAXS;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// SERIALIZE Instruction
|
// SERIALIZE Instruction
|
||||||
//
|
//
|
||||||
|
|
|
@ -401,6 +401,9 @@ class X86Subtarget final : public X86GenSubtargetInfo {
|
||||||
/// Processor support key locker wide instructions
|
/// Processor support key locker wide instructions
|
||||||
bool HasWIDEKL = false;
|
bool HasWIDEKL = false;
|
||||||
|
|
||||||
|
/// Processor supports HRESET instruction
|
||||||
|
bool HasHRESET = false;
|
||||||
|
|
||||||
/// Processor supports SERIALIZE instruction
|
/// Processor supports SERIALIZE instruction
|
||||||
bool HasSERIALIZE = false;
|
bool HasSERIALIZE = false;
|
||||||
|
|
||||||
|
@ -736,6 +739,7 @@ public:
|
||||||
bool hasENQCMD() const { return HasENQCMD; }
|
bool hasENQCMD() const { return HasENQCMD; }
|
||||||
bool hasKL() const { return HasKL; }
|
bool hasKL() const { return HasKL; }
|
||||||
bool hasWIDEKL() const { return HasWIDEKL; }
|
bool hasWIDEKL() const { return HasWIDEKL; }
|
||||||
|
bool hasHRESET() const { return HasHRESET; }
|
||||||
bool hasSERIALIZE() const { return HasSERIALIZE; }
|
bool hasSERIALIZE() const { return HasSERIALIZE; }
|
||||||
bool hasTSXLDTRK() const { return HasTSXLDTRK; }
|
bool hasTSXLDTRK() const { return HasTSXLDTRK; }
|
||||||
bool useRetpolineIndirectCalls() const { return UseRetpolineIndirectCalls; }
|
bool useRetpolineIndirectCalls() const { return UseRetpolineIndirectCalls; }
|
||||||
|
|
|
@ -1000,3 +1000,6 @@
|
||||||
|
|
||||||
#CHECK: tdcall
|
#CHECK: tdcall
|
||||||
0x66 0x0f 0x01 0xcc
|
0x66 0x0f 0x01 0xcc
|
||||||
|
|
||||||
|
# CHECK: hreset $1
|
||||||
|
0xf3 0x0f 0x3a 0xf0 0xc0 0x01
|
||||||
|
|
|
@ -712,3 +712,6 @@
|
||||||
|
|
||||||
#CHECK: tdcall
|
#CHECK: tdcall
|
||||||
0x66 0x0f 0x01 0xcc
|
0x66 0x0f 0x01 0xcc
|
||||||
|
|
||||||
|
# CHECK: hreset $1
|
||||||
|
0xf3 0x0f 0x3a 0xf0 0xc0 0x01
|
||||||
|
|
|
@ -10891,4 +10891,8 @@ xresldtrk
|
||||||
|
|
||||||
// CHECK: tdcall
|
// CHECK: tdcall
|
||||||
// CHECK: encoding: [0x66,0x0f,0x01,0xcc]
|
// CHECK: encoding: [0x66,0x0f,0x01,0xcc]
|
||||||
tdcall
|
tdcall
|
||||||
|
|
||||||
|
// CHECK: hreset
|
||||||
|
// CHECK: encoding: [0xf3,0x0f,0x3a,0xf0,0xc0,0x01]
|
||||||
|
hreset $1
|
||||||
|
|
|
@ -2014,3 +2014,7 @@ seamops
|
||||||
// CHECK: tdcall
|
// CHECK: tdcall
|
||||||
// CHECK: encoding: [0x66,0x0f,0x01,0xcc]
|
// CHECK: encoding: [0x66,0x0f,0x01,0xcc]
|
||||||
tdcall
|
tdcall
|
||||||
|
|
||||||
|
// CHECK: hreset
|
||||||
|
// CHECK: encoding: [0xf3,0x0f,0x3a,0xf0,0xc0,0x01]
|
||||||
|
hreset $1
|
||||||
|
|
Loading…
Reference in New Issue