mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Implement xgetbv and xsetbv.
Patch by Jai Menon. llvm-svn: 126165
This commit is contained in:
parent
de9e3eaf5f
commit
e4a04cce2b
@ -41,6 +41,8 @@ def MRM_F8 : Format<41>;
|
||||
def MRM_F9 : Format<42>;
|
||||
def RawFrmImm8 : Format<43>;
|
||||
def RawFrmImm16 : Format<44>;
|
||||
def MRM_D0 : Format<45>;
|
||||
def MRM_D1 : Format<46>;
|
||||
|
||||
// ImmType - This specifies the immediate type used by an instruction. This is
|
||||
// part of the ad-hoc solution used to emit machine instruction encodings by our
|
||||
|
@ -311,6 +311,8 @@ namespace X86II {
|
||||
MRM_F0 = 40,
|
||||
MRM_F8 = 41,
|
||||
MRM_F9 = 42,
|
||||
MRM_D0 = 45,
|
||||
MRM_D1 = 46,
|
||||
|
||||
/// RawFrmImm8 - This is used for the ENTER instruction, which has two
|
||||
/// immediates, the first of which is a 16-bit immediate (specified by
|
||||
@ -577,6 +579,8 @@ namespace X86II {
|
||||
case X86II::MRM_F0:
|
||||
case X86II::MRM_F8:
|
||||
case X86II::MRM_F9:
|
||||
case X86II::MRM_D0:
|
||||
case X86II::MRM_D1:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -388,3 +388,8 @@ def CPUID : I<0xA2, RawFrm, (outs), (ins), "cpuid", []>, TB;
|
||||
def INVD : I<0x08, RawFrm, (outs), (ins), "invd", []>, TB;
|
||||
def WBINVD : I<0x09, RawFrm, (outs), (ins), "wbinvd", []>, TB;
|
||||
|
||||
let Defs = [RDX, RAX], Uses = [RCX] in
|
||||
def XGETBV : I<0x01, MRM_D0, (outs), (ins), "xgetbv", []>, TB;
|
||||
|
||||
let Uses = [RDX, RAX, RCX] in
|
||||
def XSETBV : I<0x01, MRM_D1, (outs), (ins), "xsetbv", []>, TB;
|
||||
|
@ -979,6 +979,14 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
|
||||
EmitByte(BaseOpcode, CurByte, OS);
|
||||
EmitByte(0xF9, CurByte, OS);
|
||||
break;
|
||||
case X86II::MRM_D0:
|
||||
EmitByte(BaseOpcode, CurByte, OS);
|
||||
EmitByte(0xD0, CurByte, OS);
|
||||
break;
|
||||
case X86II::MRM_D1:
|
||||
EmitByte(BaseOpcode, CurByte, OS);
|
||||
EmitByte(0xD1, CurByte, OS);
|
||||
break;
|
||||
}
|
||||
|
||||
// If there is a remaining operand, it must be a trailing immediate. Emit it
|
||||
|
@ -942,3 +942,7 @@ movq 18446744073709551615,%rbx // CHECK: movq -1, %rbx
|
||||
|
||||
// PR8946
|
||||
movdqu %xmm0, %xmm1 // CHECK: movdqu %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
|
||||
|
||||
// PR8935
|
||||
xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
|
||||
xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1]
|
||||
|
@ -34,7 +34,9 @@ using namespace llvm;
|
||||
MAP(E8, 39) \
|
||||
MAP(F0, 40) \
|
||||
MAP(F8, 41) \
|
||||
MAP(F9, 42)
|
||||
MAP(F9, 42) \
|
||||
MAP(D0, 45) \
|
||||
MAP(D1, 46)
|
||||
|
||||
// A clone of X86 since we can't depend on something that is generated.
|
||||
namespace X86Local {
|
||||
|
Loading…
x
Reference in New Issue
Block a user