Change the sysexit mnemonic (and sysexitl) to never have the REX.W prefix and

not depend on In32BitMode.  Use the sysexitq mnemonic for the version with the
REX.W prefix and only allow it only In64BitMode.  rdar://9738584


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143112 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kevin Enderby 2011-10-27 17:40:41 +00:00
parent 88484c0030
commit 55c4127134
5 changed files with 24 additions and 3 deletions

View File

@ -1573,6 +1573,7 @@ def : MnemonicAlias<"verrw", "verr">;
// System instruction aliases.
def : MnemonicAlias<"iret", "iretl">;
def : MnemonicAlias<"sysret", "sysretl">;
def : MnemonicAlias<"sysexit", "sysexitl">;
def : MnemonicAlias<"lgdtl", "lgdt">, Requires<[In32BitMode]>;
def : MnemonicAlias<"lgdtq", "lgdt">, Requires<[In64BitMode]>;

View File

@ -51,9 +51,8 @@ def SYSRETQ :RI<0x07, RawFrm, (outs), (ins), "sysretq", []>, TB,
def SYSENTER : I<0x34, RawFrm, (outs), (ins), "sysenter", []>, TB;
def SYSEXIT : I<0x35, RawFrm, (outs), (ins), "sysexit", []>, TB,
Requires<[In32BitMode]>;
def SYSEXIT64 :RI<0x35, RawFrm, (outs), (ins), "sysexit", []>, TB,
def SYSEXIT : I<0x35, RawFrm, (outs), (ins), "sysexitl", []>, TB;
def SYSEXIT64 :RI<0x35, RawFrm, (outs), (ins), "sysexitq", []>, TB,
Requires<[In64BitMode]>;
def IRET16 : I<0xcf, RawFrm, (outs), (ins), "iretw", []>, OpSize;

View File

@ -500,6 +500,9 @@
// CHECK: sysexit
sysexit
// CHECK: sysexitl
sysexitl
// CHECK: ud2
ud2
@ -4417,6 +4420,10 @@
// CHECK: encoding: [0x0f,0x35]
sysexit
// CHECK: sysexitl
// CHECK: encoding: [0x0f,0x35]
sysexitl
// CHECK: fxsave 3735928559(%ebx,%ecx,8)
// CHECK: encoding: [0x0f,0xae,0x84,0xcb,0xef,0xbe,0xad,0xde]
fxsave 0xdeadbeef(%ebx,%ecx,8)

View File

@ -1191,3 +1191,15 @@ xchgl %ecx, %eax
// CHECK: xchgl %ecx, %eax
// CHECK: encoding: [0x91]
xchgl %eax, %ecx
// CHECK: sysexit
// CHECK: encoding: [0x0f,0x35]
sysexit
// CHECK: sysexitl
// CHECK: encoding: [0x0f,0x35]
sysexitl
// CHECK: sysexitq
// CHECK: encoding: [0x48,0x0f,0x35]
sysexitq

View File

@ -18,3 +18,5 @@ addl $0, 0(%rax)
movl 0(%rax), 0(%edx) // error: invalid operand for instruction
// 32: error: instruction requires a CPU feature not currently enabled
sysexitq