From ae7aa51b0c1e781456b3965519def43c1f4f4167 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 27 Sep 2020 18:50:25 -0700 Subject: [PATCH] Extends PEXTRW and PINSRW unit tests Ensures that an index past the max element is correctly masked --- unittests/ASM/OpSize/66_C4_2.asm | 73 +++++++++++++++++++++++++++++++ unittests/ASM/OpSize/66_C5_2.asm | 62 ++++++++++++++++++++++++++ unittests/ASM/TwoByte/0F_C4_2.asm | 46 +++++++++++++++++++ unittests/ASM/TwoByte/0F_C5_2.asm | 43 ++++++++++++++++++ 4 files changed, 224 insertions(+) create mode 100644 unittests/ASM/OpSize/66_C4_2.asm create mode 100644 unittests/ASM/OpSize/66_C5_2.asm create mode 100644 unittests/ASM/TwoByte/0F_C4_2.asm create mode 100644 unittests/ASM/TwoByte/0F_C5_2.asm diff --git a/unittests/ASM/OpSize/66_C4_2.asm b/unittests/ASM/OpSize/66_C4_2.asm new file mode 100644 index 000000000..874ea04f6 --- /dev/null +++ b/unittests/ASM/OpSize/66_C4_2.asm @@ -0,0 +1,73 @@ +%ifdef CONFIG +{ + "RegData": { + "XMM0": ["0x4142434445467778", "0x5152535455565758"], + "XMM1": ["0x4142434477784748", "0x5152535455565758"], + "XMM2": ["0x4142777845464748", "0x5152535455565758"], + "XMM3": ["0x7778434445464748", "0x5152535455565758"], + "XMM4": ["0x4142434445464748", "0x5152535455567778"], + "XMM5": ["0x4142434445464748", "0x5152535477785758"], + "XMM6": ["0x4142434445464748", "0x5152777855565758"], + "XMM7": ["0x4142434445464748", "0x7778535455565758"], + "XMM8": ["0x4142434445467778", "0x5152535455565758"], + "XMM9": ["0x4142434477784748", "0x5152535455565758"], + "XMM10": ["0x4142777845464748", "0x5152535455565758"], + "XMM11": ["0x7778434445464748", "0x5152535455565758"], + "XMM12": ["0x4142434445464748", "0x5152535455567778"], + "XMM13": ["0x4142434445464748", "0x5152535477785758"], + "XMM14": ["0x4142434445464748", "0x5152777855565758"], + "XMM15": ["0x4142434445464748", "0x7778535455565758"] + }, + "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, 0x7172737475767778 +mov [rdx + 8 * 2], 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 * 0] +movapd xmm9, [rdx + 8 * 0] +movapd xmm10, [rdx + 8 * 0] +movapd xmm11, [rdx + 8 * 0] +movapd xmm12, [rdx + 8 * 0] +movapd xmm13, [rdx + 8 * 0] +movapd xmm14, [rdx + 8 * 0] +movapd xmm15, [rdx + 8 * 0] + +pinsrw xmm0, rax, 0 +pinsrw xmm1, rax, 1 +pinsrw xmm2, rax, 2 +pinsrw xmm3, rax, 3 +pinsrw xmm4, rax, 4 +pinsrw xmm5, rax, 5 +pinsrw xmm6, rax, 6 +pinsrw xmm7, rax, 7 + +pinsrw xmm8, rax, 8 +pinsrw xmm9, rax, 9 +pinsrw xmm10, rax, 10 +pinsrw xmm11, rax, 11 +pinsrw xmm12, rax, 12 +pinsrw xmm13, rax, 13 +pinsrw xmm14, rax, 14 +pinsrw xmm15, rax, 15 + +hlt diff --git a/unittests/ASM/OpSize/66_C5_2.asm b/unittests/ASM/OpSize/66_C5_2.asm new file mode 100644 index 000000000..311bdcfe0 --- /dev/null +++ b/unittests/ASM/OpSize/66_C5_2.asm @@ -0,0 +1,62 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4748", + "RBX": "0x4546", + "RCX": "0x4344", + "RDX": "0x4142", + "RBP": "0x5758", + "RSI": "0x5556", + "RDI": "0x5354", + "RSP": "0x5152", + "R8": "0x4748", + "R9": "0x4546", + "R10": "0x4344", + "R11": "0x4142", + "R12": "0x5758", + "R13": "0x5556", + "R14": "0x5354", + "R15": "0x5152" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +movapd xmm0, [rdx + 8 * 0] + +mov rax, -1 +mov rbx, -1 +mov rcx, -1 +mov rdx, -1 +mov rbp, -1 +mov rsi, -1 +mov rdi, -1 +mov rsp, -1 + +pextrw rax, xmm0, 0 +pextrw rbx, xmm0, 1 +pextrw rcx, xmm0, 2 +pextrw rdx, xmm0, 3 +pextrw rbp, xmm0, 4 +pextrw rsi, xmm0, 5 +pextrw rdi, xmm0, 6 +pextrw rsp, xmm0, 7 +pextrw r8, xmm0, 8 +pextrw r9, xmm0, 9 +pextrw r10, xmm0, 10 +pextrw r11, xmm0, 11 +pextrw r12, xmm0, 12 +pextrw r13, xmm0, 13 +pextrw r14, xmm0, 14 +pextrw r15, xmm0, 15 + +hlt diff --git a/unittests/ASM/TwoByte/0F_C4_2.asm b/unittests/ASM/TwoByte/0F_C4_2.asm new file mode 100644 index 000000000..a490d9d7e --- /dev/null +++ b/unittests/ASM/TwoByte/0F_C4_2.asm @@ -0,0 +1,46 @@ +%ifdef CONFIG +{ + "RegData": { + "MM0": "0x4142434445467778", + "MM1": "0x4142434477784748", + "MM2": "0x4142777845464748", + "MM3": "0x7778434445464748", + "MM4": "0x4142434445467778", + "MM5": "0x4142434477784748", + "MM6": "0x4142777845464748", + "MM7": "0x7778434445464748" + }, + "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, 0x7172737475767778 + +movq mm0, [rdx + 8 * 0] +movq mm1, [rdx + 8 * 0] +movq mm2, [rdx + 8 * 0] +movq mm3, [rdx + 8 * 0] +movq mm4, [rdx + 8 * 0] +movq mm5, [rdx + 8 * 0] +movq mm6, [rdx + 8 * 0] +movq mm7, [rdx + 8 * 0] + +pinsrw mm0, eax, 0 +pinsrw mm1, eax, 1 +pinsrw mm2, eax, 2 +pinsrw mm3, eax, 3 +pinsrw mm4, eax, 4 +pinsrw mm5, eax, 5 +pinsrw mm6, eax, 6 +pinsrw mm7, eax, 7 + +hlt diff --git a/unittests/ASM/TwoByte/0F_C5_2.asm b/unittests/ASM/TwoByte/0F_C5_2.asm new file mode 100644 index 000000000..2ecf02104 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_C5_2.asm @@ -0,0 +1,43 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4748", + "RBX": "0x4546", + "RCX": "0x4344", + "RDX": "0x4142", + "RSI": "0x4748", + "RDI": "0x4546", + "RBP": "0x4344", + "RSP": "0x4142" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +movq mm0, [rdx + 8 * 0] + +mov rax, -1 +mov rbx, -1 +mov rcx, -1 +mov rdx, -1 + +pextrw eax, mm0, 0 +pextrw ebx, mm0, 1 +pextrw ecx, mm0, 2 +pextrw edx, mm0, 3 +pextrw esi, mm0, 4 +pextrw edi, mm0, 5 +pextrw ebp, mm0, 6 +pextrw esp, mm0, 7 + + +hlt