From 8e5fe4ba7655d0be13619cfd49e29bd7b76cbef4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 8 Mar 2020 22:07:59 -0700 Subject: [PATCH] Implements the rest of the TwoByte table unit tests --- unittests/ASM/TwoByte/0F_80.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_81.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_82.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_83.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_84.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_85.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_86.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_87.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_88.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_89.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8A.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8B.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8C.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8D.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8E.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_8F.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_A2.asm | 22 ++++++++ unittests/ASM/TwoByte/0F_A3.asm | 49 +++++++++++++++++ unittests/ASM/TwoByte/0F_A4.asm | 58 ++++++++++++++++++++ unittests/ASM/TwoByte/0F_A5.asm | 67 +++++++++++++++++++++++ unittests/ASM/TwoByte/0F_AB.asm | 62 +++++++++++++++++++++ unittests/ASM/TwoByte/0F_AC.asm | 58 ++++++++++++++++++++ unittests/ASM/TwoByte/0F_AD.asm | 67 +++++++++++++++++++++++ unittests/ASM/TwoByte/0F_AF.asm | 42 +++++++++++++++ unittests/ASM/TwoByte/0F_B0.asm | 96 +++++++++++++++++++++++++++++++++ unittests/ASM/TwoByte/0F_B3.asm | 64 ++++++++++++++++++++++ unittests/ASM/TwoByte/0F_B6.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_B7.asm | 31 +++++++++++ unittests/ASM/TwoByte/0F_BB.asm | 62 +++++++++++++++++++++ unittests/ASM/TwoByte/0F_BC.asm | 51 ++++++++++++++++++ unittests/ASM/TwoByte/0F_BD.asm | 51 ++++++++++++++++++ unittests/ASM/TwoByte/0F_BE.asm | 37 +++++++++++++ unittests/ASM/TwoByte/0F_BF.asm | 31 +++++++++++ unittests/ASM/TwoByte/0F_C0.asm | 53 ++++++++++++++++++ unittests/ASM/TwoByte/0F_C2.asm | 51 ++++++++++++++++++ unittests/ASM/TwoByte/0F_C6.asm | 64 ++++++++++++++++++++++ 36 files changed, 1645 insertions(+) create mode 100644 unittests/ASM/TwoByte/0F_80.asm create mode 100644 unittests/ASM/TwoByte/0F_81.asm create mode 100644 unittests/ASM/TwoByte/0F_82.asm create mode 100644 unittests/ASM/TwoByte/0F_83.asm create mode 100644 unittests/ASM/TwoByte/0F_84.asm create mode 100644 unittests/ASM/TwoByte/0F_85.asm create mode 100644 unittests/ASM/TwoByte/0F_86.asm create mode 100644 unittests/ASM/TwoByte/0F_87.asm create mode 100644 unittests/ASM/TwoByte/0F_88.asm create mode 100644 unittests/ASM/TwoByte/0F_89.asm create mode 100644 unittests/ASM/TwoByte/0F_8A.asm create mode 100644 unittests/ASM/TwoByte/0F_8B.asm create mode 100644 unittests/ASM/TwoByte/0F_8C.asm create mode 100644 unittests/ASM/TwoByte/0F_8D.asm create mode 100644 unittests/ASM/TwoByte/0F_8E.asm create mode 100644 unittests/ASM/TwoByte/0F_8F.asm create mode 100644 unittests/ASM/TwoByte/0F_A2.asm create mode 100644 unittests/ASM/TwoByte/0F_A3.asm create mode 100644 unittests/ASM/TwoByte/0F_A4.asm create mode 100644 unittests/ASM/TwoByte/0F_A5.asm create mode 100644 unittests/ASM/TwoByte/0F_AB.asm create mode 100644 unittests/ASM/TwoByte/0F_AC.asm create mode 100644 unittests/ASM/TwoByte/0F_AD.asm create mode 100644 unittests/ASM/TwoByte/0F_AF.asm create mode 100644 unittests/ASM/TwoByte/0F_B0.asm create mode 100644 unittests/ASM/TwoByte/0F_B3.asm create mode 100644 unittests/ASM/TwoByte/0F_B6.asm create mode 100644 unittests/ASM/TwoByte/0F_B7.asm create mode 100644 unittests/ASM/TwoByte/0F_BB.asm create mode 100644 unittests/ASM/TwoByte/0F_BC.asm create mode 100644 unittests/ASM/TwoByte/0F_BD.asm create mode 100644 unittests/ASM/TwoByte/0F_BE.asm create mode 100644 unittests/ASM/TwoByte/0F_BF.asm create mode 100644 unittests/ASM/TwoByte/0F_C0.asm create mode 100644 unittests/ASM/TwoByte/0F_C2.asm create mode 100644 unittests/ASM/TwoByte/0F_C6.asm diff --git a/unittests/ASM/TwoByte/0F_80.asm b/unittests/ASM/TwoByte/0F_80.asm new file mode 100644 index 000000000..92e5a6254 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_80.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x80000000 +mov r11, 0x1 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jo .tgt_1 +jno .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_81.asm b/unittests/ASM/TwoByte/0F_81.asm new file mode 100644 index 000000000..f0d988707 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_81.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jno .tgt_1 +jo .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_82.asm b/unittests/ASM/TwoByte/0F_82.asm new file mode 100644 index 000000000..a517deb43 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_82.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jc .tgt_1 +jnc .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_83.asm b/unittests/ASM/TwoByte/0F_83.asm new file mode 100644 index 000000000..4d1eb9394 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_83.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnc .tgt_1 +jc .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_84.asm b/unittests/ASM/TwoByte/0F_84.asm new file mode 100644 index 000000000..d31d84433 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_84.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jz .tgt_1 +jnz .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_85.asm b/unittests/ASM/TwoByte/0F_85.asm new file mode 100644 index 000000000..e42b9b6fb --- /dev/null +++ b/unittests/ASM/TwoByte/0F_85.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnz .tgt_1 +jz .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_86.asm b/unittests/ASM/TwoByte/0F_86.asm new file mode 100644 index 000000000..78884ad80 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_86.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jbe .tgt_1 +jnbe .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_87.asm b/unittests/ASM/TwoByte/0F_87.asm new file mode 100644 index 000000000..b8cb0f3fc --- /dev/null +++ b/unittests/ASM/TwoByte/0F_87.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnbe .tgt_1 +jbe .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_88.asm b/unittests/ASM/TwoByte/0F_88.asm new file mode 100644 index 000000000..87126bcf1 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_88.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +js .tgt_1 +jns .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_89.asm b/unittests/ASM/TwoByte/0F_89.asm new file mode 100644 index 000000000..a298bc713 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_89.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jns .tgt_1 +js .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8A.asm b/unittests/ASM/TwoByte/0F_8A.asm new file mode 100644 index 000000000..268f28b52 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8A.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x4 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jp .tgt_1 +jnp .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8B.asm b/unittests/ASM/TwoByte/0F_8B.asm new file mode 100644 index 000000000..3df7c15a5 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8B.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x3 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnp .tgt_1 +jp .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8C.asm b/unittests/ASM/TwoByte/0F_8C.asm new file mode 100644 index 000000000..bc942b89d --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8C.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jl .tgt_1 +jnl .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8D.asm b/unittests/ASM/TwoByte/0F_8D.asm new file mode 100644 index 000000000..9b6d34091 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8D.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnl .tgt_1 +jl .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8E.asm b/unittests/ASM/TwoByte/0F_8E.asm new file mode 100644 index 000000000..bbc3907d5 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8E.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x1 +mov r11, 0x0 +mov r12, 0x2 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jle .tgt_1 +jnle .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_8F.asm b/unittests/ASM/TwoByte/0F_8F.asm new file mode 100644 index 000000000..ec1f0d6e5 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_8F.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1", + "RBX": "0x0" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov r10, 0x2 +mov r11, 0x0 +mov r12, 0x1 + +cmp r10d, r12d + +mov rax, 0 +mov rbx, 0 + +jnle .tgt_1 +jle .tgt_2 +jmp .end + +.tgt_1: +mov rax, 1 +jmp .end + +.tgt_2: +mov rbx, 1 +jmp .end + +.end: +hlt diff --git a/unittests/ASM/TwoByte/0F_A2.asm b/unittests/ASM/TwoByte/0F_A2.asm new file mode 100644 index 000000000..5e4bc3287 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_A2.asm @@ -0,0 +1,22 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x1" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +; CPUID function zero +mov rax, 0 + +cpuid + +; CPUID function zero always returns >0 in EAX +cmp eax, 0 +mov rax, 0 +setnz al + +hlt diff --git a/unittests/ASM/TwoByte/0F_A3.asm b/unittests/ASM/TwoByte/0F_A3.asm new file mode 100644 index 000000000..5e891cbe4 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_A3.asm @@ -0,0 +1,49 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x3" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +%macro cfmerge 0 + +; Get CF +sbb r14, r14 +and r14, 1 + +; Merge in to results +shl r15, 1 +or r15, r14 + +%endmacro + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFF80000000 +mov [rdx + 8 * 0], rax +mov [rdx + 8 * 1], rax +mov [rdx + 8 * 2], rax +mov rax, 0x01 +mov [rdx + 8 * 3], eax +mov rax, 0x0 +mov [rdx + 8 * 3 + 4], eax + +xor r15, r15 ; Will contain our results + +mov r13, 1 +bt word [rdx], r13w +cfmerge + +mov r13, 32 +bt dword [rdx], r13d +cfmerge + +mov r13, 64 * 3 +bt qword [rdx], r13 +cfmerge + +hlt diff --git a/unittests/ASM/TwoByte/0F_A4.asm b/unittests/ASM/TwoByte/0F_A4.asm new file mode 100644 index 000000000..31d75d067 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_A4.asm @@ -0,0 +1,58 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434457584857", + "RBX": "0x6162636467687576", + "RCX": "0x8788919291929394", + "RDX": "0xA7A8919293949596", + "RSI": "0xB1B2B3B4B5B6B7B8" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [rdx + 8 * 3], rax + +mov rax, 0x8182838485868788 +mov [rdx + 8 * 4], rax +mov rax, 0x9192939495969798 +mov [rdx + 8 * 5], rax +mov rax, 0xA1A2A3A4A5A6A7A8 +mov [rdx + 8 * 6], rax +mov rax, 0xB1B2B3B4B5B6B7B8 +mov [rdx + 8 * 7], rax + +mov rax, [rdx + 8 * 1] +shld word [rdx + 8 * 0 + 0], ax, 8 +shld word [rdx + 8 * 0 + 2], ax, 16 +shld word [rdx + 8 * 0 + 4], ax, 32 + +mov rax, [rdx + 8 * 3] +shld dword [rdx + 8 * 2 + 0], eax, 16 +shld dword [rdx + 8 * 2 + 4], eax, 32 + +mov rax, [rdx + 8 * 5] +shld qword [rdx + 8 * 4 + 0], rax, 16 +shld qword [rdx + 8 * 4 + 0], rax, 32 +shld qword [rdx + 8 * 6 + 0], rax, 48 +shld qword [rdx + 8 * 7 + 0], rax, 64 + +mov rax, qword [rdx + 8 * 0] +mov rbx, qword [rdx + 8 * 2] +mov rcx, qword [rdx + 8 * 4] +mov rsi, qword [rdx + 8 * 7] +mov rdx, qword [rdx + 8 * 6] + +hlt diff --git a/unittests/ASM/TwoByte/0F_A5.asm b/unittests/ASM/TwoByte/0F_A5.asm new file mode 100644 index 000000000..9de223c5e --- /dev/null +++ b/unittests/ASM/TwoByte/0F_A5.asm @@ -0,0 +1,67 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434457584857", + "RBX": "0x6162636467687576", + "RCX": "0x8788919291929394", + "RDX": "0xA7A8919293949596", + "RSI": "0xB1B2B3B4B5B6B7B8" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [rdx + 8 * 3], rax + +mov rax, 0x8182838485868788 +mov [rdx + 8 * 4], rax +mov rax, 0x9192939495969798 +mov [rdx + 8 * 5], rax +mov rax, 0xA1A2A3A4A5A6A7A8 +mov [rdx + 8 * 6], rax +mov rax, 0xB1B2B3B4B5B6B7B8 +mov [rdx + 8 * 7], rax + +mov rax, [rdx + 8 * 1] +mov cl, 8 +shld word [rdx + 8 * 0 + 0], ax, cl +mov cl, 16 +shld word [rdx + 8 * 0 + 2], ax, cl +mov cl, 32 +shld word [rdx + 8 * 0 + 4], ax, cl + +mov rax, [rdx + 8 * 3] +mov cl, 16 +shld dword [rdx + 8 * 2 + 0], eax, cl +mov cl, 32 +shld dword [rdx + 8 * 2 + 4], eax, cl + +mov rax, [rdx + 8 * 5] +mov cl, 16 +shld qword [rdx + 8 * 4 + 0], rax, cl +mov cl, 32 +shld qword [rdx + 8 * 4 + 0], rax, cl +mov cl, 48 +shld qword [rdx + 8 * 6 + 0], rax, cl +mov cl, 64 +shld qword [rdx + 8 * 7 + 0], rax, cl + +mov rax, qword [rdx + 8 * 0] +mov rbx, qword [rdx + 8 * 2] +mov rcx, qword [rdx + 8 * 4] +mov rsi, qword [rdx + 8 * 7] +mov rdx, qword [rdx + 8 * 6] + +hlt diff --git a/unittests/ASM/TwoByte/0F_AB.asm b/unittests/ASM/TwoByte/0F_AB.asm new file mode 100644 index 000000000..f9e571dde --- /dev/null +++ b/unittests/ASM/TwoByte/0F_AB.asm @@ -0,0 +1,62 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x1F" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +%macro cfmerge 0 + +; Get CF +sbb r14, r14 +and r14, 1 + +; Merge in to results +shl r15, 1 +or r15, r14 + +%endmacro + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFF80000000 +mov [rdx + 8 * 0], rax +mov [rdx + 8 * 1], rax +mov [rdx + 8 * 2], rax +mov rax, 0x01 +mov [rdx + 8 * 3], eax +mov rax, 0x0 +mov [rdx + 8 * 3 + 4], eax + +xor r15, r15 ; Will contain our results + +; Test and set +mov r13, 1 +bts word [rdx], r13w +cfmerge + +; Ensure it is set +mov r13, 1 +bt word [rdx], r13w +cfmerge + +mov r13, 32 +bts dword [rdx], r13d +cfmerge + +bt dword [rdx], r13d +cfmerge + +mov r13, 64 * 3 +bts qword [rdx], r13 +cfmerge + +mov r13, 64 * 3 +bt qword [rdx], r13 +cfmerge + +hlt diff --git a/unittests/ASM/TwoByte/0F_AC.asm b/unittests/ASM/TwoByte/0F_AC.asm new file mode 100644 index 000000000..137131f85 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_AC.asm @@ -0,0 +1,58 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434457585847", + "RBX": "0x6162636477786566", + "RCX": "0x9596979897988182", + "RDX": "0x939495969798A1A2", + "RSI": "0xB1B2B3B4B5B6B7B8" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [rdx + 8 * 3], rax + +mov rax, 0x8182838485868788 +mov [rdx + 8 * 4], rax +mov rax, 0x9192939495969798 +mov [rdx + 8 * 5], rax +mov rax, 0xA1A2A3A4A5A6A7A8 +mov [rdx + 8 * 6], rax +mov rax, 0xB1B2B3B4B5B6B7B8 +mov [rdx + 8 * 7], rax + +mov rax, [rdx + 8 * 1] +shrd word [rdx + 8 * 0 + 0], ax, 8 +shrd word [rdx + 8 * 0 + 2], ax, 16 +shrd word [rdx + 8 * 0 + 4], ax, 32 + +mov rax, [rdx + 8 * 3] +shrd dword [rdx + 8 * 2 + 0], eax, 16 +shrd dword [rdx + 8 * 2 + 4], eax, 32 + +mov rax, [rdx + 8 * 5] +shrd qword [rdx + 8 * 4 + 0], rax, 16 +shrd qword [rdx + 8 * 4 + 0], rax, 32 +shrd qword [rdx + 8 * 6 + 0], rax, 48 +shrd qword [rdx + 8 * 7 + 0], rax, 64 + +mov rax, qword [rdx + 8 * 0] +mov rbx, qword [rdx + 8 * 2] +mov rcx, qword [rdx + 8 * 4] +mov rsi, qword [rdx + 8 * 7] +mov rdx, qword [rdx + 8 * 6] + +hlt diff --git a/unittests/ASM/TwoByte/0F_AD.asm b/unittests/ASM/TwoByte/0F_AD.asm new file mode 100644 index 000000000..431b4a0f1 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_AD.asm @@ -0,0 +1,67 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434457585847", + "RBX": "0x6162636477786566", + "RCX": "0x9596979897988182", + "RDX": "0x939495969798A1A2", + "RSI": "0xB1B2B3B4B5B6B7B8" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [rdx + 8 * 3], rax + +mov rax, 0x8182838485868788 +mov [rdx + 8 * 4], rax +mov rax, 0x9192939495969798 +mov [rdx + 8 * 5], rax +mov rax, 0xA1A2A3A4A5A6A7A8 +mov [rdx + 8 * 6], rax +mov rax, 0xB1B2B3B4B5B6B7B8 +mov [rdx + 8 * 7], rax + +mov rax, [rdx + 8 * 1] +mov cl, 8 +shrd word [rdx + 8 * 0 + 0], ax, cl +mov cl, 16 +shrd word [rdx + 8 * 0 + 2], ax, cl +mov cl, 32 +shrd word [rdx + 8 * 0 + 4], ax, cl + +mov rax, [rdx + 8 * 3] +mov cl, 16 +shrd dword [rdx + 8 * 2 + 0], eax, cl +mov cl, 32 +shrd dword [rdx + 8 * 2 + 4], eax, cl + +mov rax, [rdx + 8 * 5] +mov cl, 16 +shrd qword [rdx + 8 * 4 + 0], rax, cl +mov cl, 32 +shrd qword [rdx + 8 * 4 + 0], rax, cl +mov cl, 48 +shrd qword [rdx + 8 * 6 + 0], rax, cl +mov cl, 64 +shrd qword [rdx + 8 * 7 + 0], rax, cl + +mov rax, qword [rdx + 8 * 0] +mov rbx, qword [rdx + 8 * 2] +mov rcx, qword [rdx + 8 * 4] +mov rsi, qword [rdx + 8 * 7] +mov rdx, qword [rdx + 8 * 6] + +hlt diff --git a/unittests/ASM/TwoByte/0F_AF.asm b/unittests/ASM/TwoByte/0F_AF.asm new file mode 100644 index 000000000..eeaf15c6c --- /dev/null +++ b/unittests/ASM/TwoByte/0F_AF.asm @@ -0,0 +1,42 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x5C00", + "RBX": "0x54D45400", + "RSI": "0x4ECE4DCD4CCC4C00" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r15, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [r15 + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [r15 + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [r15 + 8 * 2], rax + +mov rax, 0x0 +mov [r15 + 8 * 3], rax +mov [r15 + 8 * 4], rax + +mov ax, -128 +imul ax, word [r15 + 8 * 0 + 0] +mov word [r15 + 8 * 3 + 0], ax + +mov eax, -128 +imul eax, dword [r15 + 8 * 1 + 0] +mov dword [r15 + 8 * 4 + 0], eax + +mov rax, -128 +imul rax, qword [r15 + 8 * 2 + 0] +mov rsi, rax + +mov rax, [r15 + 8 * 3] +mov rbx, [r15 + 8 * 4] + +hlt diff --git a/unittests/ASM/TwoByte/0F_B0.asm b/unittests/ASM/TwoByte/0F_B0.asm new file mode 100644 index 000000000..a7915689e --- /dev/null +++ b/unittests/ASM/TwoByte/0F_B0.asm @@ -0,0 +1,96 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x414243444546FF48", + "RBX": "0x51525354FFFF5758", + "RCX": "0xFFFFFFFF65666768", + "RDX": "0xFFFFFFFFFFFFFFFF", + "RBP": "0x4748", + "RSI": "0x55565758", + "RDI": "0x6162636465666768", + "RSP": "0x7172737475767778", + "R8": "0x7172737475767778" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r10, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [r10 + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [r10 + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [r10 + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [r10 + 8 * 3], rax + +mov rax, 0 +mov [r10 + 8 * 4], rax +mov [r10 + 8 * 5], rax +mov [r10 + 8 * 6], rax +mov [r10 + 8 * 7], rax +mov [r10 + 8 * 8], rax + +; False +mov rax, 0 +mov rcx, 0xFF +cmpxchg [r10 + 8 * 0 + 0], cl +mov [r10 + 8 * 4 + 0], al + +; True +mov rax, 0x47 +mov rcx, 0xFF +cmpxchg [r10 + 8 * 0 + 1], cl +mov [r10 + 8 * 4 + 1], al + +; False +mov rax, 0 +mov rcx, 0xFFFF +cmpxchg [r10 + 8 * 1 + 0], cx +mov [r10 + 8 * 5 + 0], ax + +; True +mov rax, 0x5556 +mov rcx, 0xFFFF +cmpxchg [r10 + 8 * 1 + 2], cx +mov [r10 + 8 * 5 + 2], ax + +; False +mov rax, 0 +mov rcx, 0xFFFFFFFF +cmpxchg [r10 + 8 * 2 + 0], ecx +mov [r10 + 8 * 6 + 0], eax + +; True +mov rax, 0x61626364 +mov rcx, 0xFFFFFFFF +cmpxchg [r10 + 8 * 2 + 4], ecx +mov [r10 + 8 * 6 + 4], eax + +; False +mov rax, 0 +mov rcx, 0xFFFFFFFFFFFFFFFF +cmpxchg [r10 + 8 * 3 + 0], rcx +mov [r10 + 8 * 7 + 0], rax + +; True +mov rax, 0x7172737475767778 +mov rcx, 0xFFFFFFFFFFFFFFFF +cmpxchg [r10 + 8 * 3 + 0], rcx +mov [r10 + 8 * 8], rax + +mov rax, [r10 + 8 * 0] +mov rbx, [r10 + 8 * 1] +mov rcx, [r10 + 8 * 2] +mov rdx, [r10 + 8 * 3] +mov rbp, [r10 + 8 * 4] +mov rsi, [r10 + 8 * 5] +mov rdi, [r10 + 8 * 6] +mov rsp, [r10 + 8 * 7] +mov r8, [r10 + 8 * 8] + +hlt diff --git a/unittests/ASM/TwoByte/0F_B3.asm b/unittests/ASM/TwoByte/0F_B3.asm new file mode 100644 index 000000000..5ad2679be --- /dev/null +++ b/unittests/ASM/TwoByte/0F_B3.asm @@ -0,0 +1,64 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0xA" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +%macro cfmerge 0 + +; Get CF +sbb r14, r14 +and r14, 1 + +; Merge in to results +shl r15, 1 +or r15, r14 + +%endmacro + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFF80000000 +mov [rdx + 8 * 0], rax +mov [rdx + 8 * 1], rax +mov [rdx + 8 * 2], rax +mov rax, 0x01 +mov [rdx + 8 * 3], eax +mov rax, 0x0 +mov [rdx + 8 * 3 + 4], eax + +xor r15, r15 ; Will contain our results + +; Test and set +mov r13, 1 +btr word [rdx], r13w +cfmerge + +; Ensure it is set +mov r13, 1 +bt word [rdx], r13w +cfmerge + +mov r13, 32 +btr dword [rdx], r13d +cfmerge + +bt dword [rdx], r13d +cfmerge + +mov r13, 64 * 3 +btr qword [rdx], r13 +cfmerge + +mov r13, 64 * 3 +bt qword [rdx], r13 +cfmerge + +hlt + + diff --git a/unittests/ASM/TwoByte/0F_B6.asm b/unittests/ASM/TwoByte/0F_B6.asm new file mode 100644 index 000000000..5991fd0f6 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_B6.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x41424344454600FF", + "R14": "0x00000000000000FF", + "R13": "0x00000000000000FF", + "R12": "0x41424344454600FF", + "R11": "0x00000000000000FF", + "R10": "0x00000000000000FF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax + +mov r15, 0x4142434445464748 +mov r14, 0x4142434445464748 +mov r13, 0x4142434445464748 +mov r12, 0x4142434445464748 +mov r11, 0x4142434445464748 +mov r10, 0x4142434445464748 + +movzx r15w, byte [rdx + 8 * 0] +movzx r14d, byte [rdx + 8 * 0] +movzx r13, byte [rdx + 8 * 0] + +movzx r12w, al +movzx r11d, al +movzx r10, al + +hlt diff --git a/unittests/ASM/TwoByte/0F_B7.asm b/unittests/ASM/TwoByte/0F_B7.asm new file mode 100644 index 000000000..abcf0b5de --- /dev/null +++ b/unittests/ASM/TwoByte/0F_B7.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "R14": "0x000000000000FFFF", + "R13": "0x000000000000FFFF", + "R12": "0x000000000000FFFF", + "R11": "0x000000000000FFFF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax + +mov r14, 0x4142434445464748 +mov r13, 0x4142434445464748 +mov r12, 0x4142434445464748 +mov r11, 0x4142434445464748 + +movzx r14d, word [rdx + 8 * 0] +movzx r13, word [rdx + 8 * 0] + +movzx r12d, ax +movzx r11, ax + +hlt diff --git a/unittests/ASM/TwoByte/0F_BB.asm b/unittests/ASM/TwoByte/0F_BB.asm new file mode 100644 index 000000000..4723ba1b2 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_BB.asm @@ -0,0 +1,62 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x1A" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +%macro cfmerge 0 + +; Get CF +sbb r14, r14 +and r14, 1 + +; Merge in to results +shl r15, 1 +or r15, r14 + +%endmacro + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFF80000000 +mov [rdx + 8 * 0], rax +mov [rdx + 8 * 1], rax +mov [rdx + 8 * 2], rax +mov rax, 0x01 +mov [rdx + 8 * 3], eax +mov rax, 0x0 +mov [rdx + 8 * 3 + 4], eax + +xor r15, r15 ; Will contain our results + +; Test and set +mov r13, 1 +btc word [rdx], r13w +cfmerge + +; Ensure it is set +mov r13, 1 +bt word [rdx], r13w +cfmerge + +mov r13, 32 +btc dword [rdx], r13d +cfmerge + +bt dword [rdx], r13d +cfmerge + +mov r13, 64 * 3 +btc qword [rdx], r13 +cfmerge + +mov r13, 64 * 3 +bt qword [rdx], r13 +cfmerge + +hlt diff --git a/unittests/ASM/TwoByte/0F_BC.asm b/unittests/ASM/TwoByte/0F_BC.asm new file mode 100644 index 000000000..7976959de --- /dev/null +++ b/unittests/ASM/TwoByte/0F_BC.asm @@ -0,0 +1,51 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0xFFFFFFFFFFFF0000", + "R14": "0x0", + "R13": "0x0", + "R12": "0xFFFFFFFFFFFF0004", + "R11": "0x04", + "R10": "0x04", + "R9": "0xFFFFFFFFFFFFFFFF", + "R8": "0xFFFFFFFFFFFFFFFF", + "RSI": "0xFFFFFFFFFFFFFFFF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax +mov rax, 0x1010101010101010 +mov [rdx + 8 * 1], rax +mov rax, 0 +mov [rdx + 8 * 2], rax + +mov r15, -1 +mov r14, -1 +mov r13, -1 +mov r12, -1 +mov r11, -1 +mov r10, -1 +mov r9, -1 +mov r8, -1 +mov rsi, -1 + +bsf r15w, word [rdx + 8 * 0] +bsf r14d, dword [rdx + 8 * 0] +bsf r13, qword [rdx + 8 * 0] + +bsf r12w, word [rdx + 8 * 1] +bsf r11d, dword [rdx + 8 * 1] +bsf r10, qword [rdx + 8 * 1] + +bsf r9w, word [rdx + 8 * 2] +bsf r8d, dword [rdx + 8 * 2] +bsf rsi, qword [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/TwoByte/0F_BD.asm b/unittests/ASM/TwoByte/0F_BD.asm new file mode 100644 index 000000000..7a07bffab --- /dev/null +++ b/unittests/ASM/TwoByte/0F_BD.asm @@ -0,0 +1,51 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0xFFFFFFFFFFFF000F", + "R14": "0x1F", + "R13": "0x3F", + "R12": "0xFFFFFFFFFFFF000C", + "R11": "0x1C", + "R10": "0x3C", + "R9": "0xFFFFFFFFFFFFFFFF", + "R8": "0xFFFFFFFFFFFFFFFF", + "RSI": "0xFFFFFFFFFFFFFFFF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax +mov rax, 0x1010101010101010 +mov [rdx + 8 * 1], rax +mov rax, 0 +mov [rdx + 8 * 2], rax + +mov r15, -1 +mov r14, -1 +mov r13, -1 +mov r12, -1 +mov r11, -1 +mov r10, -1 +mov r9, -1 +mov r8, -1 +mov rsi, -1 + +bsr r15w, word [rdx + 8 * 0] +bsr r14d, dword [rdx + 8 * 0] +bsr r13, qword [rdx + 8 * 0] + +bsr r12w, word [rdx + 8 * 1] +bsr r11d, dword [rdx + 8 * 1] +bsr r10, qword [rdx + 8 * 1] + +bsr r9w, word [rdx + 8 * 2] +bsr r8d, dword [rdx + 8 * 2] +bsr rsi, qword [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/TwoByte/0F_BE.asm b/unittests/ASM/TwoByte/0F_BE.asm new file mode 100644 index 000000000..197b7a93a --- /dev/null +++ b/unittests/ASM/TwoByte/0F_BE.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x414243444546FFFF", + "R14": "0x00000000FFFFFFFF", + "R13": "0xFFFFFFFFFFFFFFFF", + "R12": "0x414243444546FFFF", + "R11": "0x00000000FFFFFFFF", + "R10": "0xFFFFFFFFFFFFFFFF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax + +mov r15, 0x4142434445464748 +mov r14, 0x4142434445464748 +mov r13, 0x4142434445464748 +mov r12, 0x4142434445464748 +mov r11, 0x4142434445464748 +mov r10, 0x4142434445464748 + +movsx r15w, byte [rdx + 8 * 0] +movsx r14d, byte [rdx + 8 * 0] +movsx r13, byte [rdx + 8 * 0] + +movsx r12w, al +movsx r11d, al +movsx r10, al + +hlt diff --git a/unittests/ASM/TwoByte/0F_BF.asm b/unittests/ASM/TwoByte/0F_BF.asm new file mode 100644 index 000000000..d15e6519b --- /dev/null +++ b/unittests/ASM/TwoByte/0F_BF.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "R14": "0x00000000FFFFFFFF", + "R13": "0xFFFFFFFFFFFFFFFF", + "R12": "0x00000000FFFFFFFF", + "R11": "0xFFFFFFFFFFFFFFFF" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0xFFFFFFFFFFFFFFFF +mov [rdx + 8 * 0], rax + +mov r14, 0x4142434445464748 +mov r13, 0x4142434445464748 +mov r12, 0x4142434445464748 +mov r11, 0x4142434445464748 + +movsx r14d, word [rdx + 8 * 0] +movsx r13, word [rdx + 8 * 0] + +movsx r12d, ax +movsx r11, ax + +hlt diff --git a/unittests/ASM/TwoByte/0F_C0.asm b/unittests/ASM/TwoByte/0F_C0.asm new file mode 100644 index 000000000..315cc64ac --- /dev/null +++ b/unittests/ASM/TwoByte/0F_C0.asm @@ -0,0 +1,53 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445464749", + "RBX": "0x5152535455565759", + "RCX": "0x6162636465666769", + "RDX": "0x7172737475767779", + "R15": "0x49", + "R14": "0x5759", + "R13": "0x65666769", + "R12": "0x7172737475767779" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov r10, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [r10 + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [r10 + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [r10 + 8 * 2], rax +mov rax, 0x7172737475767778 +mov [r10 + 8 * 3], rax + +mov rax, 0x01 +xadd byte [r10 + 8 * 0], al +mov rax, 0x01 +xadd word [r10 + 8 * 1], ax +mov rax, 0x01 +xadd dword [r10 + 8 * 2], eax +mov rax, 0x01 +xadd qword [r10 + 8 * 3], rax + +mov rax, [r10 + 8 * 0] +mov rbx, [r10 + 8 * 1] +mov rcx, [r10 + 8 * 2] +mov rdx, [r10 + 8 * 3] + +mov r15, 0x00 +xadd byte [r10 + 8 * 0], r15b +mov r14, 0x00 +xadd word [r10 + 8 * 1], r14w +mov r13, 0x00 +xadd dword [r10 + 8 * 2], r13d +mov r12, 0x00 +xadd qword [r10 + 8 * 3], r12 + +hlt diff --git a/unittests/ASM/TwoByte/0F_C2.asm b/unittests/ASM/TwoByte/0F_C2.asm new file mode 100644 index 000000000..1833e02c2 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_C2.asm @@ -0,0 +1,51 @@ +%ifdef CONFIG +{ + "RegData": { + "XMM0": ["0xFFFFFFFFFFFFFFFF", "0x0"], + "XMM1": ["0x0", "0xFFFFFFFF00000000"], + "XMM2": ["0xFFFFFFFFFFFFFFFF", "0xFFFFFFFF00000000"], + "XMM3": ["0x3f80000040000000", "0x4000000040800000"], + "XMM4": ["0x0", "0xFFFFFFFFFFFFFFFF"], + "XMM5": ["0xFFFFFFFFFFFFFFFF", "0x00000000FFFFFFFF"], + "XMM6": ["0x0000000000000000", "0x00000000FFFFFFFF"], + "XMM7": ["0x3f80000040000000", "0x4000000040800000"], + "XMM8": ["0x3f80000040000000", "0x40a000003f800000"] + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x3f80000040000000 +mov [rdx + 8 * 0], rax +mov rax, 0x4000000040800000 +mov [rdx + 8 * 1], rax + +mov rax, 0x3f80000040000000 +mov [rdx + 8 * 2], rax +mov rax, 0x40a000003f800000 +mov [rdx + 8 * 3], rax + +movapd xmm0, [rdx + 8 * 0] +movapd xmm1, [rdx + 8 * 0] +movapd xmm2, [rdx + 8 * 0] +movapd xmm3, [rdx + 8 * 0] +movapd xmm4, [rdx + 8 * 0] +movapd xmm5, [rdx + 8 * 0] +movapd xmm6, [rdx + 8 * 0] +movapd xmm7, [rdx + 8 * 0] +movapd xmm8, [rdx + 8 * 2] + +cmpps xmm0, xmm8, 0x00 ; EQ +cmpps xmm1, xmm8, 0x01 ; LT +cmpps xmm2, xmm8, 0x02 ; LTE +;cmpps xmm3, xmm8, 0x03 ; Unordered +cmpps xmm4, xmm8, 0x04 ; NEQ +cmpps xmm5, xmm8, 0x05 ; NLT +cmpps xmm6, xmm8, 0x06 ; NLTE +;cmpps xmm7, xmm8, 0x07 ; Ordered + +hlt diff --git a/unittests/ASM/TwoByte/0F_C6.asm b/unittests/ASM/TwoByte/0F_C6.asm new file mode 100644 index 000000000..23fbb84b8 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_C6.asm @@ -0,0 +1,64 @@ +%ifdef CONFIG +{ + "RegData": { + "R15": "0x0000000008070605", + "R14": "0x00000000F8F7F6F5", + "R13": "0x00000000E8E7E6E5", + "R12": "0x00000000D8D7D6D5", + "R11": "0x00000000C8C7C6C5", + "R10": "0x00000000B8B7B6B5", + "R9": "0x00000000A8A7A6A5", + "R8": "0x0000000098979695", + "RSP": "0x8887868584838281", + "RDI": "0x7877767574737271", + "RSI": "0x6867666564636261", + "RBP": "0x5857565554535251", + "RDX": "0x4847464544434241", + "RCX": "0x3837363534333231", + "RBX": "0x2827262524232221", + "RAX": "0x1817161514131211" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x1112131415161718 +mov rbx, 0x2122232425262728 +mov rcx, 0x3132333435363738 +mov rdx, 0x4142434445464748 +mov rbp, 0x5152535455565758 +mov rsi, 0x6162636465666768 +mov rdi, 0x7172737475767778 +mov rsp, 0x8182838485868788 +mov r8, 0x9192939495969798 +mov r9, 0xA1A2A3A4A5A6A7A8 +mov r10, 0xB1B2B3B4B5B6B7B8 +mov r11, 0xC1C2C3C4C5C6C7C8 +mov r12, 0xD1D2D3D4D5D6D7D8 +mov r13, 0xE1E2E3E4E5E6E7E8 +mov r14, 0xF1F2F3F4F5F6F7F8 +mov r15, 0x0102030405060708 + +bswap rax +bswap rbx +bswap rcx +bswap rdx +bswap rbp +bswap rsi +bswap rdi +bswap rsp + +bswap r8d +bswap r9d +bswap r10d +bswap r11d +bswap r12d +bswap r13d +bswap r14d +bswap r15d + +hlt