From 55c4127134d127ccd52cc2f4115af00084b28807 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Thu, 27 Oct 2011 17:40:41 +0000 Subject: [PATCH] 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 --- lib/Target/X86/X86InstrInfo.td | 1 + lib/Target/X86/X86InstrSystem.td | 5 ++--- test/MC/X86/x86-32-coverage.s | 7 +++++++ test/MC/X86/x86-64.s | 12 ++++++++++++ test/MC/X86/x86_errors.s | 2 ++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index aa35cf0f009..2a85ba193f3 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -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]>; diff --git a/lib/Target/X86/X86InstrSystem.td b/lib/Target/X86/X86InstrSystem.td index b5651f314c3..be3500adeca 100644 --- a/lib/Target/X86/X86InstrSystem.td +++ b/lib/Target/X86/X86InstrSystem.td @@ -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; diff --git a/test/MC/X86/x86-32-coverage.s b/test/MC/X86/x86-32-coverage.s index 0954ce2b02c..577ac40e321 100644 --- a/test/MC/X86/x86-32-coverage.s +++ b/test/MC/X86/x86-32-coverage.s @@ -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) diff --git a/test/MC/X86/x86-64.s b/test/MC/X86/x86-64.s index a9cdaa495f0..6c836fca907 100644 --- a/test/MC/X86/x86-64.s +++ b/test/MC/X86/x86-64.s @@ -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 diff --git a/test/MC/X86/x86_errors.s b/test/MC/X86/x86_errors.s index 054331ad81b..8de7444ea6c 100644 --- a/test/MC/X86/x86_errors.s +++ b/test/MC/X86/x86_errors.s @@ -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