[X86] Add RMPQUERY to SNP instructions
authorGanesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
Mon, 6 Feb 2023 04:16:12 +0000 (09:46 +0530)
committerGanesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
Mon, 6 Feb 2023 05:16:34 +0000 (10:46 +0530)
Add RMPQUERY to the list of SNP instructions.
Tech Documentation: https://www.amd.com/system/files/TechDocs/24594.pdf

Reviewed By: RKSimon, craig.topper

Differential Revision: https://reviews.llvm.org/D141458

llvm/lib/Target/X86/X86InstrSNP.td
llvm/test/MC/Disassembler/X86/x86-64.txt
llvm/test/MC/X86/SNP-32.s
llvm/test/MC/X86/SNP-64.s

index de59f3fe27500904fee71f4247c696c3b884ace2..ab13fa43c92ddbb4e6f3228c227c404bbe1c36ed 100644 (file)
 
 let SchedRW = [WriteSystem] in {
 // F3 0F 01 FF
-let Uses = [RAX] in
+let Uses = [RAX], Defs = [EAX, EFLAGS] in
 def PSMASH: I<0x01, MRM_FF, (outs), (ins), "psmash", []>, XS,
             Requires<[In64BitMode]>;
 
 // F2 0F 01 FF
-let Uses = [RAX] in
+let Uses = [RAX, RCX, RDX], Defs = [EAX, EFLAGS] in
 def PVALIDATE64: I<0x01, MRM_FF, (outs), (ins), "pvalidate",[]>,
                  XD, Requires<[In64BitMode]>;
 
-let Uses = [EAX] in
+let Uses = [EAX, ECX, EDX], Defs = [EAX, EFLAGS] in
 def PVALIDATE32: I<0x01, MRM_FF, (outs), (ins), "pvalidate",[]>,
                  XD, Requires<[Not64BitMode]>;
 
 // F2 0F 01 FE
-let Uses = [RAX] in
+let Uses = [RAX, RCX], Defs = [EAX, EFLAGS] in
 def RMPUPDATE: I<0x01, MRM_FE, (outs), (ins), "rmpupdate", []>, XD,
                Requires<[In64BitMode]>;
 
 // F3 0F 01 FE
-let Uses = [RAX] in
+let Uses = [RAX, RCX, RDX], Defs = [EAX, EFLAGS] in
 def RMPADJUST: I<0x01, MRM_FE, (outs), (ins), "rmpadjust", []>, XS,
                Requires<[In64BitMode]>;
+
+// F3 0F 01 FD
+let Uses = [RAX, RDX], Defs = [RAX, RCX, RDX, EFLAGS] in
+def RMPQUERY: I<0x01, MRM_FD, (outs), (ins), "rmpquery", []>, XS,
+               Requires<[In64BitMode]>;
 } // SchedRW
 
 def : InstAlias<"psmash\t{%rax|rax}", (PSMASH)>, Requires<[In64BitMode]>;
-def : InstAlias<"pvalidate\t{%rax|rax}", (PVALIDATE64)>, Requires<[In64BitMode]>;
-def : InstAlias<"pvalidate\t{%eax|eax}", (PVALIDATE32)>, Requires<[Not64BitMode]>;
-def : InstAlias<"rmpupdate\t{%rax|rax}", (RMPUPDATE)>, Requires<[In64BitMode]>;
-def : InstAlias<"rmpadjust\t{%rax|rax}", (RMPADJUST)>, Requires<[In64BitMode]>;
+def : InstAlias<"pvalidate\t{%rax, %rcx, %rdx|rdx, rcx, rax|}", (PVALIDATE64)>, Requires<[In64BitMode]>;
+def : InstAlias<"pvalidate\t{%eax, %ecx, %edx|edx, ecx, eax|}", (PVALIDATE32)>, Requires<[Not64BitMode]>;
+def : InstAlias<"rmpupdate\t{%rax, %rcx|rcx, rax|}", (RMPUPDATE)>, Requires<[In64BitMode]>;
+def : InstAlias<"rmpadjust\t{%rax, %rcx, %rdx|rdx, rcx, rax|}", (RMPADJUST)>, Requires<[In64BitMode]>;
+def : InstAlias<"rmpquery\t{%rax, %rdx|rdx, rax|}", (RMPQUERY)>, Requires<[In64BitMode]>;
index 9ea036769aed507de479d3c752d909e237ace315..159d9efcbf7e40b1d852751979ffd2a95aa434ef 100644 (file)
 # CHECK: rmpadjust
 0xf3 0x0f 0x01 0xfe
 
+# CHECK: rmpquery
+0xf3 0x0f 0x01 0xfd
+
 # CHECK: testui
 0xf3,0x0f,0x01,0xed
 
index 0c1211a2e45ecb2eb9bd5be0afeeab31c951bc02..4f7c595c52f85bf62b4c435c07c1c9cea9ae32bc 100644 (file)
@@ -6,4 +6,4 @@ pvalidate
 
 // CHECK: pvalidate
 // CHECK: encoding: [0xf2,0x0f,0x01,0xff]
-pvalidate      %eax
+pvalidate      %eax, %ecx, %edx
index 7a532a10c8953d917e9e11143b0bad611de9fac2..e2ff66338319cd81cf2e31eb408dc0810c50211a 100644 (file)
@@ -2,32 +2,40 @@
 
 // CHECK: rmpupdate
 // CHECK: encoding: [0xf2,0x0f,0x01,0xfe]
-rmpupdate
+rmpupdate %rax, %rcx
 
 // CHECK: psmash
 // CHECK: encoding: [0xf3,0x0f,0x01,0xff]
-psmash
+psmash %rax
 
 // CHECK: pvalidate
 // CHECK: encoding: [0xf2,0x0f,0x01,0xff]
-pvalidate
+pvalidate %rax, %rcx, %rdx
 
 // CHECK: rmpadjust
 // CHECK: encoding: [0xf3,0x0f,0x01,0xfe]
-rmpadjust
+rmpadjust %rax, %rcx, %rdx 
+
+// CHECK: rmpquery
+// CHECK: encoding: [0xf3,0x0f,0x01,0xfd]
+rmpquery %rax, %rdx
 
 // CHECK: rmpupdate
 // CHECK: encoding: [0xf2,0x0f,0x01,0xfe]
-rmpupdate %rax
+rmpupdate
 
 // CHECK: psmash
 // CHECK: encoding: [0xf3,0x0f,0x01,0xff]
-psmash %rax
+psmash
 
 // CHECK: pvalidate
 // CHECK: encoding: [0xf2,0x0f,0x01,0xff]
-pvalidate %rax
+pvalidate
 
 // CHECK: rmpadjust
 // CHECK: encoding: [0xf3,0x0f,0x01,0xfe]
-rmpadjust %rax
+rmpadjust
+
+// CHECK: rmpquery
+// CHECK: encoding: [0xf3,0x0f,0x01,0xfd]
+rmpquery