diff options
Diffstat (limited to 'test/samples/x86_64/mul_div.S')
| -rw-r--r-- | test/samples/x86_64/mul_div.S | 55 |
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 + |