mirror of
https://github.com/netwide-assembler/nasm
synced 2026-08-26 16:23:04 -04:00
This is a mostly automated, partially AI-assisted migration of tests from the test/ directory into the travis framework. Running tests manually in the test/ directory is still supported, but move common include files into travis/test and add a default -I option to Makefile.in in the test/ directory. The incbin test fails for pre-existing reasons; for now it contains an stderr file with the errors. The problem is that INCBIN is both a macro and a special instruction (not even a directive...), but there currently is no way to handle prefixes, *especially* TIMES, in multi-line macros. This is a separate problem and needs to be dealt with as such. Reorganize the travis directory so that each test or collection of tests are in a separate subdirectory of travis/, and travis itself lives in tools/travis to avoid creating deeper paths. Add support for recording compression options in the travis .json files, so that compressed files can be recreated with the same options: because of the generally repetitive nature of the binary output test files, the parameters used for xz compression can matter enormously. These are combined into a single huge commit to avoid adding large binary files into the repository that then would immediately be obsoleted, but still retained in git. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
388 lines
21 KiB
NASM
388 lines
21 KiB
NASM
; APX shift testcases
|
|
|
|
%macro testcase 2
|
|
%ifdef BIN
|
|
db %1
|
|
%endif
|
|
%ifdef SRC
|
|
%2
|
|
%endif
|
|
%endmacro
|
|
|
|
bits 64
|
|
|
|
; --- Rotate instructions : RCL/RCR/ROL/ROR ---
|
|
; legacy - rcl
|
|
testcase {0xD0, 0x12}, {rcl byte [rdx], 1}
|
|
testcase {0xD2, 0x12}, {rcl byte [rdx], cl}
|
|
testcase {0xC0, 0x12, 0x03}, {rcl byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x12}, {rcl word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x12}, {rcl word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x12, 0x03}, {rcl word [rdx], 0x03}
|
|
testcase {0xD1, 0x12}, {rcl dword [rdx], 1}
|
|
testcase {0xD3, 0x12}, {rcl dword [rdx], cl}
|
|
testcase {0xC1, 0x12, 0x03}, {rcl dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x12}, {rcl qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x12}, {rcl qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x12, 0x03}, {rcl qword [rdx], 0x03}
|
|
; legacy - rcr
|
|
testcase {0xD0, 0x1A}, {rcr byte [rdx], 1}
|
|
testcase {0xD2, 0x1A}, {rcr byte [rdx], cl}
|
|
testcase {0xC0, 0x1A, 0x03}, {rcr byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x1A}, {rcr word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x1A}, {rcr word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x1A, 0x03}, {rcr word [rdx], 0x03}
|
|
testcase {0xD1, 0x1A}, {rcr dword [rdx], 1}
|
|
testcase {0xD3, 0x1A}, {rcr dword [rdx], cl}
|
|
testcase {0xC1, 0x1A, 0x03}, {rcr dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x1A}, {rcr qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x1A}, {rcr qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x1A, 0x03}, {rcr qword [rdx], 0x03}
|
|
; legacy - rol
|
|
testcase {0xD0, 0x02}, {rol byte [rdx], 1}
|
|
testcase {0xD2, 0x02}, {rol byte [rdx], cl}
|
|
testcase {0xC0, 0x02, 0x03}, {rol byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x02}, {rol word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x02}, {rol word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x02, 0x03}, {rol word [rdx], 0x03}
|
|
testcase {0xD1, 0x02}, {rol dword [rdx], 1}
|
|
testcase {0xD3, 0x02}, {rol dword [rdx], cl}
|
|
testcase {0xC1, 0x02, 0x03}, {rol dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x02}, {rol qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x02}, {rol qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x02, 0x03}, {rol qword [rdx], 0x03}
|
|
; legacy - ror
|
|
testcase {0xD0, 0x0A}, {ror byte [rdx], 1}
|
|
testcase {0xD2, 0x0A}, {ror byte [rdx], cl}
|
|
testcase {0xC0, 0x0A, 0x03}, {ror byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x0A}, {ror word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x0A}, {ror word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x0A, 0x03}, {ror word [rdx], 0x03}
|
|
testcase {0xD1, 0x0A}, {ror dword [rdx], 1}
|
|
testcase {0xD3, 0x0A}, {ror dword [rdx], cl}
|
|
testcase {0xC1, 0x0A, 0x03}, {ror dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x0A}, {ror qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x0A}, {ror qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x0A, 0x03}, {ror qword [rdx], 0x03}
|
|
|
|
; implicit evex through EGPRs - rcl
|
|
testcase {0xD5, 0x11, 0xD0, 0x12}, {rcl byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x12}, {rcl byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x12, 0x03}, {rcl byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x12}, {rcl word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x12}, {rcl word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x12, 0x03}, {rcl word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x12}, {rcl dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x12}, {rcl dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x12, 0x03}, {rcl dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x12}, {rcl qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x12}, {rcl qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x12, 0x03}, {rcl qword [r26], 0x03}
|
|
; implicit evex through ND - rcl
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x12}, {rcl r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x12}, {rcl r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x12, 0x03}, {rcl r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x12}, {rcl r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x12}, {rcl r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x12, 0x03}, {rcl r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x12}, {rcl r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x12}, {rcl r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x12, 0x03}, {rcl r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x12}, {rcl r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x12}, {rcl r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x12, 0x03}, {rcl r25, qword [r26], 0x03}
|
|
; implicit evex through EGPRs - rcr
|
|
testcase {0xD5, 0x11, 0xD0, 0x1A}, {rcr byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x1A}, {rcr byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x1A, 0x03}, {rcr byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x1A}, {rcr word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x1A}, {rcr word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x1A, 0x03}, {rcr word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x1A}, {rcr dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x1A}, {rcr dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x1A, 0x03}, {rcr dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x1A}, {rcr qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x1A}, {rcr qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x1A, 0x03}, {rcr qword [r26], 0x03}
|
|
; implicit evex through ND - rcr
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x1A}, {rcr r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x1A}, {rcr r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x1A, 0x03}, {rcr r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x1A}, {rcr r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x1A}, {rcr r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x1A, 0x03}, {rcr r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x1A}, {rcr r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x1A}, {rcr r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x1A, 0x03}, {rcr r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x1A}, {rcr r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x1A}, {rcr r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x1A, 0x03}, {rcr r25, qword [r26], 0x03}
|
|
; implicit evex through EGPRs - rol
|
|
testcase {0xD5, 0x11, 0xD0, 0x02}, {rol byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x02}, {rol byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x02, 0x03}, {rol byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x02}, {rol word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x02}, {rol word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x02, 0x03}, {rol word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x02}, {rol dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x02}, {rol dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x02, 0x03}, {rol dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x02}, {rol qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x02}, {rol qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x02, 0x03}, {rol qword [r26], 0x03}
|
|
; implicit evex through ND - rol
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x02}, {rol r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x02}, {rol r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x02, 0x03}, {rol r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x02}, {rol r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x02}, {rol r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x02, 0x03}, {rol r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x02}, {rol r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x02}, {rol r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x02, 0x03}, {rol r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x02}, {rol r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x02}, {rol r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x02, 0x03}, {rol r25, qword [r26], 0x03}
|
|
; implicit evex through EGPRs - ror
|
|
testcase {0xD5, 0x11, 0xD0, 0x0A}, {ror byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x0A}, {ror byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x0A, 0x03}, {ror byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x0A}, {ror word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x0A}, {ror word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x0A, 0x03}, {ror word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x0A}, {ror dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x0A}, {ror dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x0A, 0x03}, {ror dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x0A}, {ror qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x0A}, {ror qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x0A, 0x03}, {ror qword [r26], 0x03}
|
|
; implicit evex through ND - ror
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x0A}, {ror r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x0A}, {ror r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x0A, 0x03}, {ror r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x0A}, {ror r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x0A}, {ror r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x0A, 0x03}, {ror r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x0A}, {ror r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x0A}, {ror r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x0A, 0x03}, {ror r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x0A}, {ror r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x0A}, {ror r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x0A, 0x03}, {ror r25, qword [r26], 0x03}
|
|
|
|
; --- rorx instruction ---
|
|
; legacy
|
|
testcase {0xC4, 0xE3, 0x7B, 0xF0, 0x0A, 0x03}, {rorx ecx, [rdx], 0x03}
|
|
testcase {0xC4, 0xE3, 0xFB, 0xF0, 0x0A, 0x03}, {rorx rcx, [rdx], 0x03}
|
|
; implicit evex through EGPRs
|
|
testcase {0x62, 0x63, 0x7F, 0x08, 0xF0, 0x0A, 0x03}, {rorx r25d, [rdx], 0x03}
|
|
testcase {0x62, 0x63, 0xFF, 0x08, 0xF0, 0x0A, 0x03}, {rorx r25, [rdx], 0x03}
|
|
|
|
; --- sar instruction ---
|
|
; legacy - sar
|
|
testcase {0xD0, 0x3A}, {sar byte [rdx], 1}
|
|
testcase {0xD2, 0x3A}, {sar byte [rdx], cl}
|
|
testcase {0xC0, 0x3A, 0x03}, {sar byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x3A}, {sar word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x3A}, {sar word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x3A, 0x03}, {sar word [rdx], 0x03}
|
|
testcase {0xD1, 0x3A}, {sar dword [rdx], 1}
|
|
testcase {0xD3, 0x3A}, {sar dword [rdx], cl}
|
|
testcase {0xC1, 0x3A, 0x03}, {sar dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x3A}, {sar qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x3A}, {sar qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x3A, 0x03}, {sar qword [rdx], 0x03}
|
|
; legacy - shl
|
|
testcase {0xD0, 0x22}, {shl byte [rdx], 1}
|
|
testcase {0xD2, 0x22}, {shl byte [rdx], cl}
|
|
testcase {0xC0, 0x22, 0x03}, {shl byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x22}, {shl word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x22}, {shl word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x22, 0x03}, {shl word [rdx], 0x03}
|
|
testcase {0xD1, 0x22}, {shl dword [rdx], 1}
|
|
testcase {0xD3, 0x22}, {shl dword [rdx], cl}
|
|
testcase {0xC1, 0x22, 0x03}, {shl dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x22}, {shl qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x22}, {shl qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x22, 0x03}, {shl qword [rdx], 0x03}
|
|
; legacy - shr
|
|
testcase {0xD0, 0x2A}, {shr byte [rdx], 1}
|
|
testcase {0xD2, 0x2A}, {shr byte [rdx], cl}
|
|
testcase {0xC0, 0x2A, 0x03}, {shr byte [rdx], 0x03}
|
|
testcase {0x66, 0xD1, 0x2A}, {shr word [rdx], 1}
|
|
testcase {0x66, 0xD3, 0x2A}, {shr word [rdx], cl}
|
|
testcase {0x66, 0xC1, 0x2A, 0x03}, {shr word [rdx], 0x03}
|
|
testcase {0xD1, 0x2A}, {shr dword [rdx], 1}
|
|
testcase {0xD3, 0x2A}, {shr dword [rdx], cl}
|
|
testcase {0xC1, 0x2A, 0x03}, {shr dword [rdx], 0x03}
|
|
testcase {0x48, 0xD1, 0x2A}, {shr qword [rdx], 1}
|
|
testcase {0x48, 0xD3, 0x2A}, {shr qword [rdx], cl}
|
|
testcase {0x48, 0xC1, 0x2A, 0x03}, {shr qword [rdx], 0x03}
|
|
|
|
; implicit evex through EGPRs - sar
|
|
testcase {0xD5, 0x11, 0xD0, 0x3A}, {sar byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x3A}, {sar byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x3A, 0x03}, {sar byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x3A}, {sar word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x3A}, {sar word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x3A, 0x03}, {sar word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x3A}, {sar dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x3A}, {sar dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x3A, 0x03}, {sar dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x3A}, {sar qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x3A}, {sar qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x3A, 0x03}, {sar qword [r26], 0x03}
|
|
; implicit evex through ND - sar
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x3A}, {sar r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x3A}, {sar r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x3A, 0x03}, {sar r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x3A}, {sar r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x3A}, {sar r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x3A, 0x03}, {sar r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x3A}, {sar r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x3A}, {sar r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x3A, 0x03}, {sar r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x3A}, {sar r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x3A}, {sar r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x3A, 0x03}, {sar r25, qword [r26], 0x03}
|
|
; implicit evex through EGPRs - shl
|
|
testcase {0xD5, 0x11, 0xD0, 0x22}, {shl byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x22}, {shl byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x22, 0x03}, {shl byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x22}, {shl word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x22}, {shl word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x22, 0x03}, {shl word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x22}, {shl dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x22}, {shl dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x22, 0x03}, {shl dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x22}, {shl qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x22}, {shl qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x22, 0x03}, {shl qword [r26], 0x03}
|
|
; implicit evex through ND - shl
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x22}, {shl r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x22}, {shl r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x22, 0x03}, {shl r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x22}, {shl r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x22}, {shl r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x22, 0x03}, {shl r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x22}, {shl r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x22}, {shl r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x22, 0x03}, {shl r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x22}, {shl r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x22}, {shl r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x22, 0x03}, {shl r25, qword [r26], 0x03}
|
|
; implicit evex through EGPRs - shr
|
|
testcase {0xD5, 0x11, 0xD0, 0x2A}, {shr byte [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD2, 0x2A}, {shr byte [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC0, 0x2A, 0x03}, {shr byte [r26], 0x03}
|
|
testcase {0x66, 0xD5, 0x11, 0xD1, 0x2A}, {shr word [r26], 1}
|
|
testcase {0x66, 0xD5, 0x11, 0xD3, 0x2A}, {shr word [r26], cl}
|
|
testcase {0x66, 0xD5, 0x11, 0xC1, 0x2A, 0x03}, {shr word [r26], 0x03}
|
|
testcase {0xD5, 0x11, 0xD1, 0x2A}, {shr dword [r26], 1}
|
|
testcase {0xD5, 0x11, 0xD3, 0x2A}, {shr dword [r26], cl}
|
|
testcase {0xD5, 0x11, 0xC1, 0x2A, 0x03}, {shr dword [r26], 0x03}
|
|
testcase {0xD5, 0x19, 0xD1, 0x2A}, {shr qword [r26], 1}
|
|
testcase {0xD5, 0x19, 0xD3, 0x2A}, {shr qword [r26], cl}
|
|
testcase {0xD5, 0x19, 0xC1, 0x2A, 0x03}, {shr qword [r26], 0x03}
|
|
; implicit evex through ND - shr
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD0, 0x2A}, {shr r25b, byte [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD2, 0x2A}, {shr r25b, byte [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC0, 0x2A, 0x03}, {shr r25b, byte [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD1, 0x2A}, {shr r25w, word [r26], 1}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xD3, 0x2A}, {shr r25w, word [r26], cl}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xC1, 0x2A, 0x03}, {shr r25w, word [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD1, 0x2A}, {shr r25d, dword [r26], 1}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xD3, 0x2A}, {shr r25d, dword [r26], cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xC1, 0x2A, 0x03}, {shr r25d, dword [r26], 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x2A}, {shr r25, qword [r26], 1}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x2A}, {shr r25, qword [r26], cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x2A, 0x03}, {shr r25, qword [r26], 0x03}
|
|
|
|
; --- sarx instruction ---
|
|
; legacy
|
|
testcase {0xC4, 0xE2, 0x2A, 0xF7, 0x0A}, {sarx ecx, [rdx], r10d}
|
|
testcase {0xC4, 0xE2, 0xAA, 0xF7, 0x0A}, {sarx rcx, [rdx], r10}
|
|
; implicit evex through EGPRs
|
|
testcase {0x62, 0x62, 0x2E, 0x08, 0xF7, 0x0A}, {sarx r25d, [rdx], r10d}
|
|
testcase {0x62, 0x62, 0xAE, 0x08, 0xF7, 0x0A}, {sarx r25, [rdx], r10}
|
|
; --- shlx instruction ---
|
|
; legacy
|
|
testcase {0xC4, 0xE2, 0x29, 0xF7, 0x0A}, {shlx ecx, [rdx], r10d}
|
|
testcase {0xC4, 0xE2, 0xA9, 0xF7, 0x0A}, {shlx rcx, [rdx], r10}
|
|
; implicit evex through EGPRs
|
|
testcase {0x62, 0x62, 0x2D, 0x08, 0xF7, 0x0A}, {shlx r25d, [rdx], r10d}
|
|
testcase {0x62, 0x62, 0xAD, 0x08, 0xF7, 0x0A}, {shlx r25, [rdx], r10}
|
|
; --- shrx instruction ---
|
|
; legacy
|
|
testcase {0xC4, 0xE2, 0x2B, 0xF7, 0x0A}, {shrx ecx, [rdx], r10d}
|
|
testcase {0xC4, 0xE2, 0xAB, 0xF7, 0x0A}, {shrx rcx, [rdx], r10}
|
|
; implicit evex through EGPRs
|
|
testcase {0x62, 0x62, 0x2F, 0x08, 0xF7, 0x0A}, {shrx r25d, [rdx], r10d}
|
|
testcase {0x62, 0x62, 0xAF, 0x08, 0xF7, 0x0A}, {shrx r25, [rdx], r10}
|
|
|
|
; --- shld instruction ---
|
|
; legacy
|
|
testcase {0x66, 0x0F, 0xA4, 0x02, 0x03}, {shld [rdx], ax, 0x03}
|
|
testcase {0x0F, 0xA4, 0x02, 0x03}, {shld [rdx], eax, 0x03}
|
|
testcase {0x48, 0x0F, 0xA4, 0x02, 0x03}, {shld [rdx], rax, 0x03}
|
|
testcase {0x66, 0x0F, 0xA5, 0x02}, {shld [rdx], ax, cl}
|
|
testcase {0x0F, 0xA5, 0x02}, {shld [rdx], eax, cl}
|
|
testcase {0x48, 0x0F, 0xA5, 0x02}, {shld [rdx], rax, cl}
|
|
|
|
; implicit rex2 through EGPRs
|
|
testcase {0x66, 0xD5, 0x91, 0xA4, 0x02, 0x03}, {shld [r26], ax, 0x03}
|
|
testcase {0xD5, 0x91, 0xA4, 0x02, 0x03}, {shld [r26], eax, 0x03}
|
|
testcase {0xD5, 0x99, 0xA4, 0x02, 0x03}, {shld [r26], rax, 0x03}
|
|
testcase {0x66, 0xD5, 0x91, 0xA5, 0x02}, {shld [r26], ax, cl}
|
|
testcase {0xD5, 0x91, 0xA5, 0x02}, {shld [r26], eax, cl}
|
|
testcase {0xD5, 0x99, 0xA5, 0x02}, {shld [r26], rax, cl}
|
|
|
|
; implicit evex through ND
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0x24, 0x02, 0x03}, {shld r25w, [r26], ax, 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0x24, 0x02, 0x03}, {shld r25d, [r26], eax, 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0x24, 0x02, 0x03}, {shld r25, [r26], rax, 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xA5, 0x02}, {shld r25w, [r26], ax, cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xA5, 0x02}, {shld r25d, [r26], eax, cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xA5, 0x02}, {shld r25, [r26], rax, cl}
|
|
|
|
; implicit evex through ND
|
|
testcase {0x62, 0xDC, 0x7D, 0x0C, 0x24, 0x02, 0x03}, {shld{nf} [r26], ax, 0x03}
|
|
testcase {0x62, 0xDC, 0x7C, 0x0C, 0x24, 0x02, 0x03}, {shld{nf} [r26], eax, 0x03}
|
|
testcase {0x62, 0xDC, 0xFC, 0x0C, 0x24, 0x02, 0x03}, {shld{nf} [r26], rax, 0x03}
|
|
testcase {0x62, 0xDC, 0x7D, 0x0C, 0xA5, 0x02}, {shld{nf} [r26], ax, cl}
|
|
testcase {0x62, 0xDC, 0x7C, 0x0C, 0xA5, 0x02}, {shld{nf} [r26], eax, cl}
|
|
testcase {0x62, 0xDC, 0xFC, 0x0C, 0xA5, 0x02}, {shld{nf} [r26], rax, cl}
|
|
|
|
; --- shrd instruction ---
|
|
; legacy
|
|
testcase {0x66, 0x0F, 0xAC, 0x02, 0x03}, {shrd [rdx], ax, 0x03}
|
|
testcase {0x0F, 0xAC, 0x02, 0x03}, {shrd [rdx], eax, 0x03}
|
|
testcase {0x48, 0x0F, 0xAC, 0x02, 0x03}, {shrd [rdx], rax, 0x03}
|
|
testcase {0x66, 0x0F, 0xAD, 0x02}, {shrd [rdx], ax, cl}
|
|
testcase {0x0F, 0xAD, 0x02}, {shrd [rdx], eax, cl}
|
|
testcase {0x48, 0x0F, 0xAD, 0x02}, {shrd [rdx], rax, cl}
|
|
|
|
; implicit rex2 through EGPRs
|
|
testcase {0x66, 0xD5, 0x91, 0xAC, 0x02, 0x03}, {shrd [r26], ax, 0x03}
|
|
testcase {0xD5, 0x91, 0xAC, 0x02, 0x03}, {shrd [r26], eax, 0x03}
|
|
testcase {0xD5, 0x99, 0xAC, 0x02, 0x03}, {shrd [r26], rax, 0x03}
|
|
testcase {0x66, 0xD5, 0x91, 0xAD, 0x02}, {shrd [r26], ax, cl}
|
|
testcase {0xD5, 0x91, 0xAD, 0x02}, {shrd [r26], eax, cl}
|
|
testcase {0xD5, 0x99, 0xAD, 0x02}, {shrd [r26], rax, cl}
|
|
|
|
; implicit evex through ND
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0x2C, 0x02, 0x03}, {shrd r25w, [r26], ax, 0x03}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0x2C, 0x02, 0x03}, {shrd r25d, [r26], eax, 0x03}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0x2C, 0x02, 0x03}, {shrd r25, [r26], rax, 0x03}
|
|
testcase {0x62, 0xDC, 0x35, 0x10, 0xAD, 0x02}, {shrd r25w, [r26], ax, cl}
|
|
testcase {0x62, 0xDC, 0x34, 0x10, 0xAD, 0x02}, {shrd r25d, [r26], eax, cl}
|
|
testcase {0x62, 0xDC, 0xB4, 0x10, 0xAD, 0x02}, {shrd r25, [r26], rax, cl}
|
|
|
|
; implicit evex through ND
|
|
testcase {0x62, 0xDC, 0x7D, 0x0C, 0x2C, 0x02, 0x03}, {shrd{nf} [r26], ax, 0x03}
|
|
testcase {0x62, 0xDC, 0x7C, 0x0C, 0x2C, 0x02, 0x03}, {shrd{nf} [r26], eax, 0x03}
|
|
testcase {0x62, 0xDC, 0xFC, 0x0C, 0x2C, 0x02, 0x03}, {shrd{nf} [r26], rax, 0x03}
|
|
testcase {0x62, 0xDC, 0x7D, 0x0C, 0xAD, 0x02}, {shrd{nf} [r26], ax, cl}
|
|
testcase {0x62, 0xDC, 0x7C, 0x0C, 0xAD, 0x02}, {shrd{nf} [r26], eax, cl}
|
|
testcase {0x62, 0xDC, 0xFC, 0x0C, 0xAD, 0x02}, {shrd{nf} [r26], rax, cl}
|
|
|