about summary refs log tree commit diff stats
path: root/test/samples/x86_64/mul_div.S
diff options
context:
space:
mode:
Diffstat (limited to 'test/samples/x86_64/mul_div.S')
-rw-r--r--test/samples/x86_64/mul_div.S55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/samples/x86_64/mul_div.S b/test/samples/x86_64/mul_div.S
new file mode 100644
index 00000000..4a5fcfdd
--- /dev/null
+++ b/test/samples/x86_64/mul_div.S
@@ -0,0 +1,55 @@
+main:
+	;; MUL
+	MOV RCX, 0x20000002
+	MOV RAX, 0x1122334455667788
+	MOV RDX, RAX
+	MOV RAX, 0x1122334400000020
+	MUL ECX
+	CMP RAX, 0x40
+	JNZ bad
+	CMP RDX, 0x4
+	JNZ bad
+
+	;; IMUL
+	MOV RCX, 0xFFFFFFF2
+	MOV RAX, 0x1122334455667788
+	MOV RDX, RAX
+	MOV RAX, 0x1122334400000020
+	IMUL ECX
+	MOV ESI, 0xFFFFFE40
+	CMP RAX, RSI
+	JNZ bad
+	MOV ESI 0xFFFFFFFF
+	CMP RDX, RSI
+	JNZ bad
+
+	;; DIV
+	MOV RAX, 0x1122334400000002
+	MOV RCX, RAX
+	MOV RAX, 0x1122334400000000
+	MOV RDX, RAX
+	MOV RAX, 0x1122334440000003
+	DIV ECX
+	CMP RAX, 0x20000001
+	JNZ bad
+	CMP RDX, 0x1
+	JNZ bad
+
+	;; IDIV
+	MOV RAX, 0x11223344FFFFFFF2
+	MOV RCX, RAX
+	MOV RAX, 0x11223344FFFFFFFF
+	MOV RDX, RAX
+	MOV RAX, 0x11223344FFFFFFF2
+	IDIV ECX
+	CMP RAX, 0x1
+	JNZ bad
+	CMP RDX, 0x0
+	JNZ bad
+
+
+	RET
+
+bad:
+	INT 0x3
+