summaryrefslogtreecommitdiff
path: root/test/imul.asm
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-10-07 11:26:41 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-10-07 11:26:41 -0700
commit65feb5ae3376d02c6ac89b6e58a3e802da6a222e (patch)
treef2e144399bbed8030eb7ad10ef2020bd2eb6a9b7 /test/imul.asm
parent37c6d166d266b04fca3c384d00ad7576282ee583 (diff)
downloadnasm-65feb5ae3376d02c6ac89b6e58a3e802da6a222e.tar.gz
Add missing IMUL pattern: reg64,imm8
Make "imul rax,byte 5" work as expected. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'test/imul.asm')
-rw-r--r--test/imul.asm89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/imul.asm b/test/imul.asm
new file mode 100644
index 00000000..5b0a8eac
--- /dev/null
+++ b/test/imul.asm
@@ -0,0 +1,89 @@
+;Testname=test; Arguments=-fbin -oimul.bin; Files=stdout stderr imul.bin
+
+%macro test 1-2 5
+ bits %1
+
+%undef MEM
+%if %1 == 16
+ %define MEM [di]
+%elif %1 == 32
+ %define MEM [edi]
+%elif %1 == 64
+ %define MEM [rdi]
+%endif
+
+ imul al
+ imul byte MEM
+ imul ax
+ imul word MEM
+ imul eax
+ imul dword MEM
+%if %1 == 64
+ imul rdx
+ imul qword MEM
+%endif
+
+ imul ax,cx
+ imul ax,MEM
+ imul ax,word MEM
+ imul eax,ecx
+ imul eax,MEM
+ imul eax,dword MEM
+%if %1 == 64
+ imul rax,rcx
+ imul rax,MEM
+ imul rax,qword MEM
+%endif
+
+ imul ax,cx,%2
+ imul ax,cx,byte %2
+ imul ax,MEM,%2
+ imul ax,word MEM,%2
+ imul eax,ecx,%2
+ imul eax,ecx,byte %2
+ imul eax,MEM,%2
+ imul eax,dword MEM,%2
+%if %1 == 64
+ imul rax,rcx,%2
+ imul rax,rcx,byte %2
+ imul rax,MEM,%2
+ imul rax,qword MEM,%2
+%endif
+
+ imul ax,%2
+ imul ax,byte %2
+ imul eax,%2
+ imul eax,byte %2
+%if %1 == 64
+ imul rax,%2
+; imul rax,byte %2 ; ERROR
+%endif
+
+ imul ax,cx,0x1234
+ imul ax,MEM,0x1234
+ imul ax,word MEM,0x1234
+ imul eax,ecx,0x12345678
+ imul eax,MEM,0x12345678
+ imul eax,dword MEM,0x12345678
+%if %1 == 64
+ imul rax,rcx,0x12345678
+ imul rax,MEM,0x12345678
+ imul rax,qword MEM,0x12345678
+%endif
+
+ imul ax,0x1234
+ imul eax,0x12345678
+%if %1 == 64
+ imul rax,0x12345678
+%endif
+%endmacro
+
+ test 16
+ test 32
+ test 64
+
+%ifdef WARN
+ test 16,0x999
+ test 32,0x999999
+ test 64,0x999999999
+%endif