From 23a29475b9ac0c1ebf17461b9a682ee8e2d0aa82 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 23 Oct 2017 15:53:21 +0000 Subject: [PATCH] [X86] Add PTWRITE instruction for assembler and disassembler. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316333 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrSystem.td | 16 ++++++++++++++-- test/MC/Disassembler/X86/x86-32.txt | 6 ++++++ test/MC/Disassembler/X86/x86-64.txt | 11 +++++++++++ test/MC/X86/x86-32.s | 8 ++++++++ test/MC/X86/x86-64.s | 16 ++++++++++++++++ 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/X86InstrSystem.td b/lib/Target/X86/X86InstrSystem.td index c95aa286152..2407ced9f9f 100644 --- a/lib/Target/X86/X86InstrSystem.td +++ b/lib/Target/X86/X86InstrSystem.td @@ -506,10 +506,10 @@ let Uses = [EDX, EAX] in { let Predicates = [HasXSAVE] in { def XSAVE : I<0xAE, MRM4m, (outs), (ins opaque512mem:$dst), "xsave\t$dst", - [(int_x86_xsave addr:$dst, EDX, EAX)]>, TB; + [(int_x86_xsave addr:$dst, EDX, EAX)]>, PS; def XSAVE64 : RI<0xAE, MRM4m, (outs), (ins opaque512mem:$dst), "xsave64\t$dst", - [(int_x86_xsave64 addr:$dst, EDX, EAX)]>, TB, Requires<[In64BitMode]>; + [(int_x86_xsave64 addr:$dst, EDX, EAX)]>, PS, Requires<[In64BitMode]>; def XRSTOR : I<0xAE, MRM5m, (outs), (ins opaque512mem:$dst), "xrstor\t$dst", [(int_x86_xrstor addr:$dst, EDX, EAX)]>, TB; @@ -644,3 +644,15 @@ def RDPID32 : I<0xC7, MRM7r, (outs GR32:$src), (ins), def RDPID64 : I<0xC7, MRM7r, (outs GR64:$src), (ins), "rdpid\t$src", []>, XS, Requires<[In64BitMode]>; + +//===----------------------------------------------------------------------===// +// PTWRITE Instruction +def PTWRITEm: I<0xAE, MRM4m, (outs), (ins i32mem:$dst), + "ptwrite{l}\t$dst", []>, XS; +def PTWRITE64m : RI<0xAE, MRM4m, (outs), (ins i64mem:$dst), + "ptwrite{q}\t$dst", []>, XS, Requires<[In64BitMode]>; + +def PTWRITEr : I<0xAE, MRM4r, (outs), (ins GR32:$dst), + "ptwrite{l}\t$dst", []>, XS; +def PTWRITE64r : RI<0xAE, MRM4r, (outs), (ins GR64:$dst), + "ptwrite{q}\t$dst", []>, XS, Requires<[In64BitMode]>; diff --git a/test/MC/Disassembler/X86/x86-32.txt b/test/MC/Disassembler/X86/x86-32.txt index b069de2fd51..4211721ec48 100644 --- a/test/MC/Disassembler/X86/x86-32.txt +++ b/test/MC/Disassembler/X86/x86-32.txt @@ -811,3 +811,9 @@ # CHECK: rdpid %eax 0xf3 0x0f 0xc7 0xf8 + +# CHECK: ptwritel -559038737(%ebx,%ecx,8) +0xf3 0x0f 0xae 0xa4 0xcb 0xef 0xbe 0xad 0xde + +# CHECK: ptwritel %eax +0xf3 0x0f 0xae 0xe0 diff --git a/test/MC/Disassembler/X86/x86-64.txt b/test/MC/Disassembler/X86/x86-64.txt index 93026680e2a..05ea82d1302 100644 --- a/test/MC/Disassembler/X86/x86-64.txt +++ b/test/MC/Disassembler/X86/x86-64.txt @@ -496,3 +496,14 @@ # CHECK: movw %bx, %cs:(%esi,%ebp) 0x2e 0x66 0x67 0x89 0x1c 0x2e +# CHECK: ptwritel -559038737(%rbx,%rcx,8) +0xf3 0x0f 0xae 0xa4 0xcb 0xef 0xbe 0xad 0xde + +# CHECK: ptwritel %eax +0xf3 0x0f 0xae 0xe0 + +# CHECK: ptwriteq -559038737(%rbx,%rcx,8) +0xf3 0x48 0x0f 0xae 0xa4 0xcb 0xef 0xbe 0xad 0xde + +# CHECK: ptwriteq %rax +0xf3 0x48 0x0f 0xae 0xe0 diff --git a/test/MC/X86/x86-32.s b/test/MC/X86/x86-32.s index 80acbba6ce8..9171a07233b 100644 --- a/test/MC/X86/x86-32.s +++ b/test/MC/X86/x86-32.s @@ -1101,3 +1101,11 @@ data16 lgdt 4(%eax) // CHECK: rdpid %eax // CHECK: encoding: [0xf3,0x0f,0xc7,0xf8] rdpid %eax + +// CHECK: ptwritel 3735928559(%ebx,%ecx,8) +// CHECK: encoding: [0xf3,0x0f,0xae,0xa4,0xcb,0xef,0xbe,0xad,0xde] +ptwritel 0xdeadbeef(%ebx,%ecx,8) + +// CHECK: ptwritel %eax +// CHECK: encoding: [0xf3,0x0f,0xae,0xe0] +ptwritel %eax diff --git a/test/MC/X86/x86-64.s b/test/MC/X86/x86-64.s index 96d775270b5..1afc3f5683a 100644 --- a/test/MC/X86/x86-64.s +++ b/test/MC/X86/x86-64.s @@ -1531,3 +1531,19 @@ nopq %rax // CHECK: rdpid %rax // CHECK: encoding: [0xf3,0x0f,0xc7,0xf8] rdpid %rax + +// CHECK: ptwritel 3735928559(%rbx,%rcx,8) +// CHECK: encoding: [0xf3,0x0f,0xae,0xa4,0xcb,0xef,0xbe,0xad,0xde] +ptwritel 0xdeadbeef(%rbx,%rcx,8) + +// CHECK: ptwritel %eax +// CHECK: encoding: [0xf3,0x0f,0xae,0xe0] +ptwritel %eax + +// CHECK: ptwriteq 3735928559(%rbx,%rcx,8) +// CHECK: encoding: [0xf3,0x48,0x0f,0xae,0xa4,0xcb,0xef,0xbe,0xad,0xde] +ptwriteq 0xdeadbeef(%rbx,%rcx,8) + +// CHECK: ptwriteq %rax +// CHECK: encoding: [0xf3,0x48,0x0f,0xae,0xe0] +ptwriteq %rax -- 2.40.0