summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-08-28 18:03:49 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-08-28 18:03:49 -0700
commit5e7d6f1105917d5ef490078a2444aa8523e2d85b (patch)
tree04697e713f7dd69d327db5c3a972b85f7ba5db5e
parentc5b37dbf5e18a77a91c1cb0454e537018b71b5d3 (diff)
downloadnasm-5e7d6f1105917d5ef490078a2444aa8523e2d85b.tar.gz
BR 2029472: Wrong operand size for VMREAD/VMWRITE in 64-bit mode
Fix the operand size for VMREAD/VMWRITE in 64-bit mode
-rw-r--r--insns.dat6
-rw-r--r--test/vmread.asm22
2 files changed, 26 insertions, 2 deletions
diff --git a/insns.dat b/insns.dat
index eba621d3..1f7f8ef2 100644
--- a/insns.dat
+++ b/insns.dat
@@ -1735,11 +1735,13 @@ VMLOAD void \3\x0F\x01\xDA X64,VMX
VMMCALL void \3\x0F\x01\xD9 X64,VMX
VMPTRLD mem \2\x0F\xC7\206 VMX
VMPTRST mem \2\x0F\xC7\207 VMX
-VMREAD rm32,reg32 \360\2\x0F\x78\101 VMX
+VMREAD rm32,reg32 \360\2\x0F\x78\101 VMX,NOLONG
+VMREAD rm64,reg64 \323\360\2\x0F\x78\101 X64,VMX
VMRESUME void \3\x0F\x01\xC3 VMX
VMRUN void \3\x0F\x01\xD8 X64,VMX
VMSAVE void \3\x0F\x01\xDB X64,VMX
-VMWRITE reg32,rm32 \360\2\x0F\x79\110 VMX
+VMWRITE reg32,rm32 \360\2\x0F\x79\110 VMX,NOLONG
+VMWRITE reg64,rm64 \323\360\2\x0F\x79\110 X64,VMX
VMXOFF void \3\x0F\x01\xC4 VMX
VMXON mem \363\2\x0F\xC7\206 VMX
;# Extended Page Tables VMX instructions
diff --git a/test/vmread.asm b/test/vmread.asm
new file mode 100644
index 00000000..1b6ac708
--- /dev/null
+++ b/test/vmread.asm
@@ -0,0 +1,22 @@
+;Testname=test; Arguments=-fbin -ovmread.bin; Files=.stdout .stderr vmread.bin
+
+ bits 32
+ vmread dword [0], eax
+ vmwrite eax, dword [0]
+
+ bits 64
+ vmread qword [0], rax
+ vmwrite rax, qword [0]
+
+%ifdef ERROR
+ bits 32
+ vmread qword [0], eax
+ vmwrite eax, qword [0]
+
+ bits 64
+ vmread dword [0], eax
+ vmwrite eax, dword [0]
+
+ vmread qword [0], eax
+ vmwrite eax, qword [0]
+%endif \ No newline at end of file