From 2bb296df3bf2d230047de81a47feae62aa9a8d7d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 11 Sep 2025 18:26:58 -0700 Subject: [PATCH] unittests/ASM: Primary Group table --- unittests/ASM/Includes/modrm_oob_macros.mac | 8 + unittests/ASM/modrm_oob/PrimaryGroup.asm | 203 ++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 unittests/ASM/modrm_oob/PrimaryGroup.asm diff --git a/unittests/ASM/Includes/modrm_oob_macros.mac b/unittests/ASM/Includes/modrm_oob_macros.mac index ea7958b75..cef90e311 100644 --- a/unittests/ASM/Includes/modrm_oob_macros.mac +++ b/unittests/ASM/Includes/modrm_oob_macros.mac @@ -22,6 +22,14 @@ %1 [r14], %3 %endmacro +%macro w3_size 3 +; Ensures that the load doesn't read past the end. +%1 %3 [r15 - %2] + +; Ensures the load doesn't read before the start. +%1 %3 [r14] +%endmacro + %macro r3 3 ; Ensures that the load doesn't read past the end. %1 %3, [r15 - %2] diff --git a/unittests/ASM/modrm_oob/PrimaryGroup.asm b/unittests/ASM/modrm_oob/PrimaryGroup.asm new file mode 100644 index 000000000..25bd537ac --- /dev/null +++ b/unittests/ASM/modrm_oob/PrimaryGroup.asm @@ -0,0 +1,203 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "1" + }, + "MemoryRegions": { + "0x100000000": "4096", + "0x100002000": "4096" + } +} +%endif + +mov r15, 0x100001000 +mov r14, 0x100002000 +mov rax, 0 + +%include "modrm_oob_macros.mac" + +; Primary Group + +w4_size add, 1, byte, 1 +w4_size add, 2, word, 1 +w4_size add, 4, dword, 1 +w4_size add, 8, qword, 1 + +w4_size lock add, 1, byte, 1 +w4_size lock add, 2, word, 1 +w4_size lock add, 4, dword, 1 +w4_size lock add, 8, qword, 1 + +w4_size or, 1, byte, 1 +w4_size or, 2, word, 1 +w4_size or, 4, dword, 1 +w4_size or, 8, qword, 1 + +w4_size lock or, 1, byte, 1 +w4_size lock or, 2, word, 1 +w4_size lock or, 4, dword, 1 +w4_size lock or, 8, qword, 1 + +w4_size adc, 1, byte, 1 +w4_size adc, 2, word, 1 +w4_size adc, 4, dword, 1 +w4_size adc, 8, qword, 1 + +w4_size lock adc, 1, byte, 1 +w4_size lock adc, 2, word, 1 +w4_size lock adc, 4, dword, 1 +w4_size lock adc, 8, qword, 1 + +w4_size sbb, 1, byte, 1 +w4_size sbb, 2, word, 1 +w4_size sbb, 4, dword, 1 +w4_size sbb, 8, qword, 1 + +w4_size lock sbb, 1, byte, 1 +w4_size lock sbb, 2, word, 1 +w4_size lock sbb, 4, dword, 1 +w4_size lock sbb, 8, qword, 1 + +w4_size and, 1, byte, 1 +w4_size and, 2, word, 1 +w4_size and, 4, dword, 1 +w4_size and, 8, qword, 1 + +w4_size lock and, 1, byte, 1 +w4_size lock and, 2, word, 1 +w4_size lock and, 4, dword, 1 +w4_size lock and, 8, qword, 1 + +w4_size sub, 1, byte, 1 +w4_size sub, 2, word, 1 +w4_size sub, 4, dword, 1 +w4_size sub, 8, qword, 1 + +w4_size lock sub, 1, byte, 1 +w4_size lock sub, 2, word, 1 +w4_size lock sub, 4, dword, 1 +w4_size lock sub, 8, qword, 1 + +w4_size xor, 1, byte, 1 +w4_size xor, 2, word, 1 +w4_size xor, 4, dword, 1 +w4_size xor, 8, qword, 1 + +w4_size lock xor, 1, byte, 1 +w4_size lock xor, 2, word, 1 +w4_size lock xor, 4, dword, 1 +w4_size lock xor, 8, qword, 1 + +w4_size cmp, 1, byte, 1 +w4_size cmp, 2, word, 1 +w4_size cmp, 4, dword, 1 +w4_size cmp, 8, qword, 1 + +w4_size rol, 1, byte, 1 +w4_size rol, 2, word, 1 +w4_size rol, 4, dword, 1 +w4_size rol, 8, qword, 1 + +w4_size ror, 1, byte, 1 +w4_size ror, 2, word, 1 +w4_size ror, 4, dword, 1 +w4_size ror, 8, qword, 1 + +w4_size rcl, 1, byte, 1 +w4_size rcl, 2, word, 1 +w4_size rcl, 4, dword, 1 +w4_size rcl, 8, qword, 1 + +w4_size rcr, 1, byte, 1 +w4_size rcr, 2, word, 1 +w4_size rcr, 4, dword, 1 +w4_size rcr, 8, qword, 1 + +w4_size shl, 1, byte, 1 +w4_size shl, 2, word, 1 +w4_size shl, 4, dword, 1 +w4_size shl, 8, qword, 1 + +w4_size shr, 1, byte, 1 +w4_size shr, 2, word, 1 +w4_size shr, 4, dword, 1 +w4_size shr, 8, qword, 1 + +w4_size sar, 1, byte, 1 +w4_size sar, 2, word, 1 +w4_size sar, 4, dword, 1 +w4_size sar, 8, qword, 1 + +w4_size test, 1, byte, 1 +w4_size test, 2, word, 1 +w4_size test, 4, dword, 1 +w4_size test, 8, qword, 1 + +w3_size not, 1, byte +w3_size not, 2, word +w3_size not, 4, dword +w3_size not, 8, qword + +w3_size lock not, 1, byte +w3_size lock not, 2, word +w3_size lock not, 4, dword +w3_size lock not, 8, qword + +w3_size neg, 1, byte +w3_size neg, 2, word +w3_size neg, 4, dword +w3_size neg, 8, qword + +w3_size lock neg, 1, byte +w3_size lock neg, 2, word +w3_size lock neg, 4, dword +w3_size lock neg, 8, qword + +w3_size mul, 1, byte +w3_size mul, 2, word +w3_size mul, 4, dword +w3_size mul, 8, qword + +w3_size imul, 1, byte +w3_size imul, 2, word +w3_size imul, 4, dword +w3_size imul, 8, qword + +w3_size div, 1, byte +w3_size div, 2, word +w3_size div, 4, dword +w3_size div, 8, qword + +w3_size idiv, 1, byte +w3_size idiv, 2, word +w3_size idiv, 4, dword +w3_size idiv, 8, qword + +w3_size inc, 1, byte +w3_size inc, 2, word +w3_size inc, 4, dword +w3_size inc, 8, qword + +w3_size lock inc, 1, byte +w3_size lock inc, 2, word +w3_size lock inc, 4, dword +w3_size lock inc, 8, qword + +w3_size dec, 1, byte +w3_size dec, 2, word +w3_size dec, 4, dword +w3_size dec, 8, qword + +w3_size lock dec, 1, byte +w3_size lock dec, 2, word +w3_size lock dec, 4, dword +w3_size lock dec, 8, qword + +w4_size mov, 1, byte, 1 +w4_size mov, 2, word, 1 +w4_size mov, 4, dword, 1 +w4_size mov, 8, qword, 1 + +; Done +mov rax, 1 +hlt