0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-09-22 10:43:39 -04:00
Files
nasm/travis/test/apx.asm
Maciej Wieczor-Retman 936cc5bbf6 insns: travis: apx: Fix msr instructions missing IMM operand
APX variants of RDMSR and WRMSRNS were missing the immediate operand.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-19 14:53:04 +02:00

718 lines
31 KiB
NASM

; APX testcases
%macro testcase 2
%ifdef BIN
db %1
%endif
%ifdef SRC
%2
%endif
%endmacro
bits 64
; aadd instruction
testcase {0x0F, 0x38, 0xFC, 0x0A}, {aadd [rdx],ecx} ;m32 <- r32 regular
testcase {0x48, 0x0F, 0x38, 0xFC, 0x0A}, {aadd [rdx],rcx} ;m64 <- r64 regular
testcase {0x62, 0xF4, 0x7C, 0x08, 0xFC, 0x0A}, {aadd {evex} [rdx],ecx} ;m32 <- r32 explicit evex
testcase {0x62, 0xF4, 0xFC, 0x08, 0xFC, 0x0A}, {aadd {evex} [rdx],rcx} ;m64 <- r64 explicit evex
testcase {0x62, 0x64, 0xFC, 0x08, 0xFC, 0x0A}, {aadd [rdx],r25} ;m64 <- er64
; aand instruction
testcase {0x66, 0x0F, 0x38, 0xFC, 0x0A}, {aand [rdx],ecx} ;m32 <- r32 regular
testcase {0x66, 0x48, 0x0F, 0x38, 0xFC, 0x0A}, {aand [rdx],rcx} ;m64 <- r64 regular
testcase {0x62, 0xF4, 0x7D, 0x08, 0xFC, 0x0A}, {aand {evex} [rdx],ecx} ;m32 <- r32 explicit evex
testcase {0x62, 0xF4, 0xFD, 0x08, 0xFC, 0x0A}, {aand {evex} [rdx],rcx} ;m64 <- r64 explicit evex
testcase {0x62, 0x64, 0xFD, 0x08, 0xFC, 0x0A}, {aand [rdx],r25} ;m64 <- er64
; aor instruction
testcase {0xF2, 0x0F, 0x38, 0xFC, 0x0A}, {aor [rdx],ecx} ;m32 <- r32 regular
testcase {0xF2, 0x48, 0x0F, 0x38, 0xFC, 0x0A}, {aor [rdx],rcx} ;m64 <- r64 regular
testcase {0x62, 0xF4, 0x7F, 0x08, 0xFC, 0x0A}, {aor {evex} [rdx],ecx} ;m32 <- r32 explicit evex
testcase {0x62, 0xF4, 0xFF, 0x08, 0xFC, 0x0A}, {aor {evex} [rdx],rcx} ;m64 <- r64 explicit evex
testcase {0x62, 0x64, 0xFF, 0x08, 0xFC, 0x0A}, {aor [rdx],r25} ;m64 <- er64
; axor instruction
testcase {0xF3, 0x0F, 0x38, 0xFC, 0x0A}, {axor [rdx],ecx} ;m32 <- r32 regular
testcase {0xF3, 0x48, 0x0F, 0x38, 0xFC, 0x0A}, {axor [rdx],rcx} ;m64 <- r64 regular
testcase {0x62, 0xF4, 0x7E, 0x08, 0xFC, 0x0A}, {axor {evex} [rdx],ecx} ;m32 <- r32 explicit evex
testcase {0x62, 0xF4, 0xFE, 0x08, 0xFC, 0x0A}, {axor {evex} [rdx],rcx} ;m64 <- r64 explicit evex
testcase {0x62, 0x64, 0xFE, 0x08, 0xFC, 0x0A}, {axor [rdx],r25} ;m64 <- er64
; adcx instruction: reg = reg + r/m
; adcx non-apx control group
testcase {0x66, 0x0F, 0x38, 0xF6, 0x0A}, {adcx ecx, [rdx]} ;r32 + r/m32
testcase {0x66 ,0x48, 0x0F, 0x38, 0xF6, 0x0A}, {adcx rcx, [rdx]} ;r64 + r/m64
testcase {0x66 ,0x4C, 0x0F, 0x38, 0xF6, 0x0A}, {adcx r9, [rdx]} ;r64 + r/m64
; adcx implicit evex
; (legacy map 2 - no rex2 variant)
testcase {0x62, 0x44, 0x7D, 0x08, 0x66, 0x09}, {adcx r25d, [r9]} ;r32 + r/m32
testcase {0x62, 0x44, 0xFD, 0x08, 0x66, 0x09}, {adcx r25, [r9]} ;r64 + r/m64
testcase {0x62, 0x5C, 0x7D, 0x08, 0x66, 0x09}, {adcx r9d, [r25]} ;r32 + r/m32
testcase {0x62, 0x5C, 0xFD, 0x08, 0x66, 0x09}, {adcx r9, [r25]} ;r64 + r/m64
testcase {0x62, 0x5C, 0x75, 0x18, 0x66, 0x09}, {adcx ecx, r9d, [r25]} ;r32 + r/m32 - ndd variant
testcase {0x62, 0x5C, 0xF5, 0x18, 0x66, 0x09}, {adcx rcx, r9, [r25]} ;r64 + r/m64 - ndd variant
; adox instruction: reg = reg + r/m
; adox non-apx control group
testcase {0xF3, 0x0F, 0x38, 0xF6, 0x0A}, {adox ecx, [rdx]} ;r32 + r/m32
testcase {0xF3 ,0x48, 0x0F, 0x38, 0xF6, 0x0A}, {adox rcx, [rdx]} ;r64 + r/m64
testcase {0xF3 ,0x4C, 0x0F, 0x38, 0xF6, 0x0A}, {adox r9, [rdx]} ;r64 + r/m64
; adox implicit evex
; (legacy map 2 - no rex2 variant)
testcase {0x62, 0x44, 0x7E, 0x08, 0x66, 0x09}, {adox r25d, [r9]} ;r32 + r/m32
testcase {0x62, 0x44, 0xFE, 0x08, 0x66, 0x09}, {adox r25, [r9]} ;r64 + r/m64
testcase {0x62, 0x5C, 0x7E, 0x08, 0x66, 0x09}, {adox r9d, [r25]} ;r32 + r/m32
testcase {0x62, 0x5C, 0xFE, 0x08, 0x66, 0x09}, {adox r9, [r25]} ;r64 + r/m64
testcase {0x62, 0x5C, 0x76, 0x18, 0x66, 0x09}, {adox ecx, r9d, [r25]} ;r32 + r/m32 - ndd variant
testcase {0x62, 0x5C, 0xF6, 0x18, 0x66, 0x09}, {adox rcx, r9, [r25]} ;r64 + r/m64 - ndd variant
; andn instruction
; andn non-apx control group (vex)
testcase {0xC4, 0x62, 0x70, 0xF2, 0x0A}, {andn r9d, ecx, dword [rdx]}
testcase {0xC4, 0x62, 0xF0, 0xF2, 0x0A}, {andn r9, rcx, qword [rdx]}
; andn explicit evex
testcase {0x62, 0x72, 0x74, 0x08, 0xF2, 0x0A}, {andn{evex} r9d, ecx, dword [rdx]}
testcase {0x62, 0x72, 0xF4, 0x08, 0xF2, 0x0A}, {andn{evex} r9, rcx, qword [rdx]}
; andn implicit evex through NF
testcase {0x62, 0x72, 0x74, 0x0C, 0xF2, 0x0A}, {andn{nf} r9d, ecx, dword [rdx]}
testcase {0x62, 0x72, 0xF4, 0x0C, 0xF2, 0x0A}, {andn{nf} r9, rcx, qword [rdx]}
; andn implicit evex through EGPR
testcase {0x62, 0x62, 0x74, 0x08, 0xF2, 0x0A}, {andn r25d, ecx, dword [rdx]}
testcase {0x62, 0x62, 0xF4, 0x08, 0xF2, 0x0A}, {andn r25, rcx, qword [rdx]}
; bextr instruction
; bextr non-apx control group (vex)
testcase {0xC4, 0x62, 0x70, 0xF7, 0x0A}, {bextr r9d, dword [rdx], ecx}
testcase {0xC4, 0x62, 0xF0, 0xF7, 0x0A}, {bextr r9, qword [rdx], rcx}
; bextr explicit evex
testcase {0x62, 0x72, 0x74, 0x08, 0xF7, 0x0A}, {bextr{evex} r9d, dword [rdx], ecx}
testcase {0x62, 0x72, 0xF4, 0x08, 0xF7, 0x0A}, {bextr{evex} r9, qword [rdx], rcx}
; bextr implicit evex through NF
testcase {0x62, 0x72, 0x74, 0x0C, 0xF7, 0x0A}, {bextr{nf} r9d, dword [rdx], ecx}
testcase {0x62, 0x72, 0xF4, 0x0C, 0xF7, 0x0A}, {bextr{nf} r9, qword [rdx], rcx}
; bextr implicit evex through EGPR
testcase {0x62, 0x62, 0x74, 0x08, 0xF7, 0x0A}, {bextr r25d, dword [rdx], ecx}
testcase {0x62, 0x62, 0xF4, 0x08, 0xF7, 0x0A}, {bextr r25, qword [rdx], rcx}
; blsi instruction
; blsi non-apx control group (vex)
testcase {0xC4, 0xE2, 0x30, 0xF3, 0x1A}, {blsi r9d, dword [rdx]}
testcase {0xC4, 0xE2, 0xB0, 0xF3, 0x1A}, {blsi r9, qword [rdx]}
; blsi explicit evex
testcase {0x62, 0xF2, 0x34, 0x08, 0xF3, 0x1A}, {blsi{evex} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x08, 0xF3, 0x1A}, {blsi{evex} r9, qword [rdx]}
; blsi implicit evex through NF
testcase {0x62, 0xF2, 0x34, 0x0C, 0xF3, 0x1A}, {blsi{nf} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x0C, 0xF3, 0x1A}, {blsi{nf} r9, qword [rdx]}
; blsi implicit evex through EGPR
testcase {0x62, 0xF2, 0x34, 0x00, 0xF3, 0x1A}, {blsi r25d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x00, 0xF3, 0x1A}, {blsi r25, qword [rdx]}
; blsmsk instruction
; blsmsk non-apx control group (vex)
testcase {0xC4, 0xE2, 0x30, 0xF3, 0x12}, {blsmsk r9d, dword [rdx]}
testcase {0xC4, 0xE2, 0xB0, 0xF3, 0x12}, {blsmsk r9, qword [rdx]}
; blsmsk explicit evex
testcase {0x62, 0xF2, 0x34, 0x08, 0xF3, 0x12}, {blsmsk{evex} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x08, 0xF3, 0x12}, {blsmsk{evex} r9, qword [rdx]}
; blsmsk implicit evex through NF
testcase {0x62, 0xF2, 0x34, 0x0C, 0xF3, 0x12}, {blsmsk{nf} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x0C, 0xF3, 0x12}, {blsmsk{nf} r9, qword [rdx]}
; blsmsk implicit evex through EGPR
testcase {0x62, 0xF2, 0x34, 0x00, 0xF3, 0x12}, {blsmsk r25d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x00, 0xF3, 0x12}, {blsmsk r25, qword [rdx]}
; blsr instruction
; blsr non-apx control group (vex)
testcase {0xC4, 0xE2, 0x30, 0xF3, 0x0A}, {blsr r9d, dword [rdx]}
testcase {0xC4, 0xE2, 0xB0, 0xF3, 0x0A}, {blsr r9, qword [rdx]}
; blsr explicit evex
testcase {0x62, 0xF2, 0x34, 0x08, 0xF3, 0x0A}, {blsr{evex} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x08, 0xF3, 0x0A}, {blsr{evex} r9, qword [rdx]}
; blsr implicit evex through NF
testcase {0x62, 0xF2, 0x34, 0x0C, 0xF3, 0x0A}, {blsr{nf} r9d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x0C, 0xF3, 0x0A}, {blsr{nf} r9, qword [rdx]}
; blsr implicit evex through EGPR
testcase {0x62, 0xF2, 0x34, 0x00, 0xF3, 0x0A}, {blsr r25d, dword [rdx]}
testcase {0x62, 0xF2, 0xB4, 0x00, 0xF3, 0x0A}, {blsr r25, qword [rdx]}
; bzhi instruction
; bzhi non-apx control group (vex)
testcase {0xC4, 0x62, 0x70, 0xF5, 0x0A}, {bzhi r9d, dword [rdx], ecx}
testcase {0xC4, 0x62, 0xF0, 0xF5, 0x0A}, {bzhi r9, qword [rdx], rcx}
; bzhi explicit evex
testcase {0x62, 0x72, 0x74, 0x08, 0xF5, 0x0A}, {bzhi{evex} r9d, dword [rdx], ecx}
testcase {0x62, 0x72, 0xF4, 0x08, 0xF5, 0x0A}, {bzhi{evex} r9, qword [rdx], rcx}
; bzhi implicit evex through NF
testcase {0x62, 0x72, 0x74, 0x0C, 0xF5, 0x0A}, {bzhi{nf} r9d, dword [rdx], ecx}
testcase {0x62, 0x72, 0xF4, 0x0C, 0xF5, 0x0A}, {bzhi{nf} r9, qword [rdx], rcx}
; bzhi implicit evex through EGPR
testcase {0x62, 0x62, 0x74, 0x08, 0xF5, 0x0A}, {bzhi r25d, dword [rdx], ecx}
testcase {0x62, 0x62, 0xF4, 0x08, 0xF5, 0x0A}, {bzhi r25, qword [rdx], rcx}
; --- crc32 instruction ---
; legacy crc32
testcase {0xF2, 0x0F, 0x38, 0xF0, 0x0A}, {crc32 ecx, byte [rdx]} ; reg32 += crc32(r/m8)
testcase {0x66, 0xF2, 0x0F, 0x38, 0xF1, 0x0A}, {crc32 ecx, word [rdx]} ; reg32 += crc32(r/m16)
testcase {0xF2, 0x0F, 0x38, 0xF1, 0x0A}, {crc32 ecx, dword [rdx]} ; reg32 += crc32(r/m32)
testcase {0xF2, 0x4C, 0x0F, 0x38, 0xF0, 0x0A}, {crc32 r9, byte [rdx]} ; reg64 += crc32(r/m8)
testcase {0xF2, 0x4C, 0x0F, 0x38, 0xF1, 0x0A}, {crc32 r9, qword [rdx]} ; reg64 += crc32(r/m64)
; implicit evex through EGPRs
testcase {0x62, 0x64, 0x7C, 0x08, 0xF0, 0x0A}, {crc32 r25d, byte [rdx]} ; ereg32 += crc32(r/m8)
testcase {0x62, 0x64, 0x7D, 0x08, 0xF1, 0x0A}, {crc32 r25d, word [rdx]} ; ereg32 += crc32(r/m16)
testcase {0x62, 0x64, 0x7C, 0x08, 0xF1, 0x0A}, {crc32 r25d, dword [rdx]} ; ereg32 += crc32(r/m32)
testcase {0x62, 0x64, 0xFC, 0x08, 0xF0, 0x0A}, {crc32 r25, byte [rdx]} ; ereg64 += crc32(r/m8)
testcase {0x62, 0x64, 0xFC, 0x08, 0xF1, 0x0A}, {crc32 r25, qword [rdx]} ; ereg64 += crc32(r/m64)
; --- dec instruction ---
; legacy dec
testcase {0xFE, 0x0A}, {dec byte [rdx]}
testcase {0x66, 0xFF, 0x0A}, {dec word [rdx]}
testcase {0xFF, 0x0A}, {dec dword [rdx]}
testcase {0x48, 0xFF, 0x0A}, {dec qword [rdx]}
; nolong only testcases
; testcase {0x66, 0x4A}, {dec dx}
; testcase {0x4A}, {dec edx}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xFE, 0x0A}, {dec{nf} byte [rdx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xFF, 0x0A}, {dec{nf} word [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xFF, 0x0A}, {dec{nf} dword [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xFF, 0x0A}, {dec{nf} qword [rdx]}
; implicit evex through ND and EGPRs
testcase {0x62, 0xF4, 0x34, 0x10, 0xFE, 0x0A}, {dec r25b, byte [rdx]}
testcase {0x62, 0xF4, 0x35, 0x10, 0xFF, 0x0A}, {dec r25w, word [rdx]}
testcase {0x62, 0xF4, 0x34, 0x10, 0xFF, 0x0A}, {dec r25d, dword [rdx]}
testcase {0x62, 0xF4, 0xB4, 0x10, 0xFF, 0x0A}, {dec r25, qword [rdx]}
; --- div instruction ---
; legacy div
testcase {0xF6, 0x31}, {div byte [rcx]}
testcase {0x66, 0xF7, 0x31}, {div word [rcx]}
testcase {0xF7, 0x31}, {div dword [rcx]}
testcase {0x48, 0xF7, 0x31}, {div qword [rcx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF6, 0x31}, {div{nf} byte [rcx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF7, 0x31}, {div{nf} word [rcx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF7, 0x31}, {div{nf} dword [rcx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF7, 0x31}, {div{nf} qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x31}, {div byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x31}, {div word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x31}, {div dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x31}, {div qword [r25]}
; --- enqcmd instruction ---
testcase {0x67, 0xF2, 0x0F, 0x38, 0xF8, 0x0A}, {enqcmd ecx, zword [edx]}
testcase {0xF2, 0x0F, 0x38, 0xF8, 0x0A}, {enqcmd rcx, zword [rdx]}
testcase {0x62, 0x64, 0xFF, 0x08, 0xF8, 0x0A}, {enqcmd r25, zword [rdx]}
; --- enqcmds instruction ---
testcase {0x67, 0xF3, 0x0F, 0x38, 0xF8, 0x0A}, {enqcmds ecx, zword [edx]}
testcase {0xF3, 0x0F, 0x38, 0xF8, 0x0A}, {enqcmds rcx, zword [rdx]}
testcase {0x62, 0x64, 0xFE, 0x08, 0xF8, 0x0A}, {enqcmds r25, zword [rdx]}
; --- idiv instruction ---
; legacy idiv
testcase {0xF6, 0x39}, {idiv byte [rcx]}
testcase {0x66, 0xF7, 0x39}, {idiv word [rcx]}
testcase {0xF7, 0x39}, {idiv dword [rcx]}
testcase {0x48, 0xF7, 0x39}, {idiv qword [rcx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF6, 0x39}, {idiv{nf} byte [rcx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF7, 0x39}, {idiv{nf} word [rcx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF7, 0x39}, {idiv{nf} dword [rcx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF7, 0x39}, {idiv{nf} qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x39}, {idiv byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x39}, {idiv word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x39}, {idiv dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x39}, {idiv qword [r25]}
; --- imul instruction ---
; - imul : D:A = reg * A
; legacy
testcase {0xF6, 0x29}, {imul byte [rcx]}
testcase {0x66, 0xF7, 0x29}, {imul word [rcx]}
testcase {0xF7, 0x29}, {imul dword [rcx]}
testcase {0x48, 0xF7, 0x29}, {imul qword [rcx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF6, 0x29}, {imul{nf} byte [rcx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF7, 0x29}, {imul{nf} word [rcx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF7, 0x29}, {imul{nf} dword [rcx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF7, 0x29}, {imul{nf} qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x29}, {imul byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x29}, {imul word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x29}, {imul dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x29}, {imul qword [r25]}
; - imul : reg1 *= r/m2 -
; legacy
testcase {0x66, 0x0F, 0xAF, 0x0A}, {imul cx, [rdx]}
testcase {0x0F, 0xAF, 0x0A}, {imul ecx, [rdx]}
testcase {0x48, 0x0F, 0xAF, 0x0A}, {imul rcx, [rdx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xAF, 0x0A}, {imul{nf} cx, [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xAF, 0x0A}, {imul{nf} ecx, [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xAF, 0x0A}, {imul{nf} rcx, [rdx]}
; implicit evex through ND
testcase {0x62, 0xF4, 0x7D, 0x18, 0xAF, 0x0A}, {imul ax, cx, [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x18, 0xAF, 0x0A}, {imul eax, ecx, [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x18, 0xAF, 0x0A}, {imul rax, rcx, [rdx]}
; implicit rex2 through EGPRs
testcase {0x66, 0xD5, 0xD5, 0xAF, 0x0A}, {imul r25w, [r26]}
testcase {0xD5, 0xD5, 0xAF, 0x0A}, {imul r25d, [r26]}
testcase {0xD5, 0xDD, 0xAF, 0x0A}, {imul r25, [r26]}
; - imul : reg1 = r/m2 * imm3
; legacy
testcase {0x66, 0x6B, 0x0A, 0x02}, {imul cx, [rdx], byte 0x02}
testcase {0x6B, 0x0A, 0x02}, {imul ecx, [rdx], byte 0x02}
testcase {0x48, 0x6B, 0x0A, 0x02}, {imul rcx, [rdx], byte 0x02}
testcase {0x66, 0x69, 0x0A, 0x02, 0x02}, {imul cx, [rdx], word 0x0202}
testcase {0x69, 0x0A, 0x02, 0x02, 0x02, 0x02}, {imul ecx, [rdx], dword 0x02020202}
testcase {0x48, 0x69, 0x0A, 0x02, 0x02, 0x02, 0x02}, {imul rcx, [rdx], dword 0x02020202}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7D, 0x0C, 0x6B, 0x0A, 0x02},\
{imul{nf} cx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0x6B, 0x0A, 0x02},\
{imul{nf} ecx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0x6B, 0x0A, 0x02},\
{imul{nf} rcx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0x69, 0x0A, 0x02, 0x02},\
{imul{nf} cx, [rdx], word 0x0202}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0x69, 0x0A, 0x02, 0x02, 0x02, 0x02},\
{imul{nf} ecx, [rdx], dword 0x02020202}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0x69, 0x0A, 0x02, 0x02, 0x02, 0x02},\
{imul{nf} rcx, [rdx], dword 0x02020202}
; implicit evex through ZU
testcase {0x62, 0xF4, 0x7D, 0x18, 0x6B, 0x0A, 0x02},\
{imul{zu} cx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0x7C, 0x18, 0x6B, 0x0A, 0x02},\
{imul{zu} ecx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0xFC, 0x18, 0x6B, 0x0A, 0x02},\
{imul{zu} rcx, [rdx], byte 0x02}
testcase {0x62, 0xF4, 0x7D, 0x18, 0x69, 0x0A, 0x02, 0x02},\
{imul{zu} cx, [rdx], word 0x0202}
; --- inc instruction ---
; legacy inc
testcase {0xFE, 0x02}, {inc byte [rdx]}
testcase {0x66, 0xFF, 0x02}, {inc word [rdx]}
testcase {0xFF, 0x02}, {inc dword [rdx]}
testcase {0x48, 0xFF, 0x02}, {inc qword [rdx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xFE, 0x02}, {inc{nf} byte [rdx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xFF, 0x02}, {inc{nf} word [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xFF, 0x02}, {inc{nf} dword [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xFF, 0x02}, {inc{nf} qword [rdx]}
; implicit evex through ND and EGPRs
testcase {0x62, 0xF4, 0x34, 0x10, 0xFE, 0x02}, {inc r25b, byte [rdx]}
testcase {0x62, 0xF4, 0x35, 0x10, 0xFF, 0x02}, {inc r25w, word [rdx]}
testcase {0x62, 0xF4, 0x34, 0x10, 0xFF, 0x02}, {inc r25d, dword [rdx]}
testcase {0x62, 0xF4, 0xB4, 0x10, 0xFF, 0x02}, {inc r25, qword [rdx]}
; --- invept instruction ---
; legacy
testcase {0x66, 0x0F, 0x38, 0x80, 0x0A}, {invept rcx, oword [rdx]}
; apx through EGPR
testcase {0x62, 0x64, 0xFE, 0x08, 0xF0, 0x0A}, {invept r25, oword [rdx]}
; --- invpcid instruction ---
; legacy
testcase {0x66, 0x0F, 0x38, 0x82, 0x0A}, {invpcid rcx, oword [rdx]}
; apx through EGPR
testcase {0x62, 0x64, 0xFE, 0x08, 0xF2, 0x0A}, {invpcid r25, oword [rdx]}
; --- invvpid instruction ---
; legacy
testcase {0x66, 0x0F, 0x38, 0x81, 0x0A}, {invvpid rcx, oword [rdx]}
; apx through EGPR
testcase {0x62, 0x64, 0xFE, 0x08, 0xF1, 0x0A}, {invvpid r25, oword [rdx]}
; --- kmov instructions ---
; legacy - 0x90 variant
testcase {0xC5, 0xF9, 0x90, 0xCA}, {kmovb k1, k2}
testcase {0xC5, 0xF8, 0x90, 0xCA}, {kmovw k1, k2}
testcase {0xC4, 0xE1, 0xF9, 0x90, 0xCA}, {kmovd k1, k2}
testcase {0xC4, 0xE1, 0xF8, 0x90, 0xCA}, {kmovq k1, k2}
testcase {0xC5, 0xF9, 0x90, 0x0A}, {kmovb k1, [rdx]}
testcase {0xC5, 0xF8, 0x90, 0x0A}, {kmovw k1, [rdx]}
testcase {0xC4, 0xE1, 0xF9, 0x90, 0x0A}, {kmovd k1, [rdx]}
testcase {0xC4, 0xE1, 0xF8, 0x90, 0x0A}, {kmovq k1, [rdx]}
; legacy - 0x91 variant
testcase {0xC5, 0xF9, 0x91, 0x0A}, {kmovb [rdx], k1}
testcase {0xC5, 0xF8, 0x91, 0x0A}, {kmovw [rdx], k1}
testcase {0xC4, 0xE1, 0xF9, 0x91, 0x0A}, {kmovd [rdx], k1}
testcase {0xC4, 0xE1, 0xF8, 0x91, 0x0A}, {kmovq [rdx], k1}
; legacy - 0x92 variant
testcase {0xC5, 0xF9, 0x92, 0xCA}, {kmovb k1, dl}
testcase {0xC5, 0xF8, 0x92, 0xCA}, {kmovw k1, dx}
testcase {0xC5, 0xF9, 0x92, 0xCA}, {kmovb k1, edx}
testcase {0xC5, 0xF8, 0x92, 0xCA}, {kmovw k1, edx}
testcase {0xC5, 0xFB, 0x92, 0xCA}, {kmovd k1, edx}
testcase {0xC4, 0xE1, 0xFB, 0x92, 0xCA}, {kmovq k1, rdx}
; legacy - 0x93 variant
testcase {0xC5, 0xF9, 0x93, 0xCA}, {kmovb ecx, k2}
testcase {0xC5, 0xF8, 0x93, 0xCA}, {kmovw ecx, k2}
testcase {0xC5, 0xFB, 0x93, 0xCA}, {kmovd ecx, k2}
testcase {0xC4, 0xE1, 0xFB, 0x93, 0xCA}, {kmovq rcx, k2}
; implicit evex through EGPRs
testcase {0x62, 0xD9, 0x7D, 0x08, 0x90, 0x0A}, {kmovb k1, [r26]}
testcase {0x62, 0xD9, 0x7D, 0x08, 0x91, 0x0A}, {kmovb [r26], k1}
testcase {0x62, 0xD9, 0x7D, 0x08, 0x92, 0xCA}, {kmovb k1, r26d}
testcase {0x62, 0x61, 0x7D, 0x08, 0x93, 0xC9}, {kmovb r25d, k1}
testcase {0x62, 0xD9, 0x7C, 0x08, 0x90, 0x0A}, {kmovw k1, [r26]}
testcase {0x62, 0xD9, 0x7C, 0x08, 0x91, 0x0A}, {kmovw [r26], k1}
testcase {0x62, 0xD9, 0x7C, 0x08, 0x92, 0xCA}, {kmovw k1, r26d}
testcase {0x62, 0x61, 0x7C, 0x08, 0x93, 0xC9}, {kmovw r25d, k1}
testcase {0x62, 0xD9, 0xFD, 0x08, 0x90, 0x0A}, {kmovd k1, [r26]}
testcase {0x62, 0xD9, 0xFD, 0x08, 0x91, 0x0A}, {kmovd [r26], k1}
testcase {0x62, 0xD9, 0x7F, 0x08, 0x92, 0xCA}, {kmovd k1, r26d}
testcase {0x62, 0x61, 0x7F, 0x08, 0x93, 0xC9}, {kmovd r25d, k1}
testcase {0x62, 0xD9, 0xFC, 0x08, 0x90, 0x0A}, {kmovq k1, [r26]}
testcase {0x62, 0xD9, 0xFC, 0x08, 0x91, 0x0A}, {kmovq [r26], k1}
testcase {0x62, 0xD9, 0xFF, 0x08, 0x92, 0xCA}, {kmovq k1, r26}
testcase {0x62, 0x61, 0xFF, 0x08, 0x93, 0xC9}, {kmovq r25, k1}
; --- ldtilecfg instruction ---
; legacy
testcase {0xC4, 0xE2, 0x78, 0x49, 0x02}, {ldtilecfg [rdx]}
; apx
testcase {0x62, 0xDA, 0x7C, 0x08, 0x49, 0x02}, {ldtilecfg [r26]}
; --- lzcnt instruction ---
; legacy
testcase {0x66, 0xF3, 0x0F, 0xBD, 0x0A}, {lzcnt cx, [rdx]}
testcase {0xF3, 0x0F, 0xBD, 0x0A}, {lzcnt ecx, [rdx]}
testcase {0xF3, 0x48, 0x0F, 0xBD, 0x0A}, {lzcnt rcx, [rdx]}
; apx
testcase {0x66, 0xF3, 0xD5, 0xD5, 0xBD, 0x0A}, {lzcnt r25w, [r26]}
testcase {0xF3, 0xD5, 0xD5, 0xBD, 0x0A}, {lzcnt r25d, [r26]}
testcase {0xF3, 0xD5, 0xDD, 0xBD, 0x0A}, {lzcnt r25, [r26]}
testcase {0x62, 0x4C, 0x7D, 0x0C, 0xF5, 0x0A}, {lzcnt{nf} r25w, [r26]}
testcase {0x62, 0x4C, 0x7C, 0x0C, 0xF5, 0x0A}, {lzcnt{nf} r25d, [r26]}
testcase {0x62, 0x4C, 0xFC, 0x0C, 0xF5, 0x0A}, {lzcnt{nf} r25, [r26]}
; --- movbe instruction ---
; legacy
testcase {0x66, 0x0F, 0x38, 0xF0, 0x0A}, {movbe cx, [rdx]}
testcase {0x0F, 0x38, 0xF0, 0x0A}, {movbe ecx, [rdx]}
testcase {0x48, 0x0F, 0x38, 0xF0, 0x0A}, {movbe rcx, [rdx]}
testcase {0x66, 0x0F, 0x38, 0xF1, 0x0A}, {movbe [rdx], cx}
testcase {0x0F, 0x38, 0xF1, 0x0A}, {movbe [rdx], ecx}
testcase {0x48, 0x0F, 0x38, 0xF1, 0x0A}, {movbe [rdx], rcx}
; implicit evex through EGPRs
testcase {0x62, 0x4C, 0x7D, 0x08, 0x60, 0x0A}, {movbe r25w, [r26]}
testcase {0x62, 0x4C, 0x7C, 0x08, 0x60, 0x0A}, {movbe r25d, [r26]}
testcase {0x62, 0x4C, 0xFC, 0x08, 0x60, 0x0A}, {movbe r25, [r26]}
testcase {0x62, 0x4C, 0x7D, 0x08, 0x61, 0x0A}, {movbe [r26], r25w}
testcase {0x62, 0x4C, 0x7C, 0x08, 0x61, 0x0A}, {movbe [r26], r25d}
testcase {0x62, 0x4C, 0xFC, 0x08, 0x61, 0x0A}, {movbe [r26], r25}
; --- movdir64b instruction ---
; legacy
testcase {0x67, 0x66, 0x0F, 0x38, 0xF8, 0x0A}, {movdir64b ecx, [edx]}
testcase {0x66, 0x0F, 0x38, 0xF8, 0x0A}, {movdir64b rcx, [rdx]}
; apx
testcase {0x62, 0x4C, 0xFD, 0x08, 0xF8, 0x0A}, {movdir64b r25, [r26]}
; --- movdiri instruction ---
; legacy
testcase {0x0F, 0x38, 0xF9, 0x0A}, {movdiri [rdx], ecx}
testcase {0x48, 0x0F, 0x38, 0xF9, 0x0A}, {movdiri [rdx], rcx}
; implicit evex through EGPRs
testcase {0x62, 0x4C, 0x7C, 0x08, 0xF9, 0x0A}, {movdiri [r26], r25d}
testcase {0x62, 0x4C, 0xFC, 0x08, 0xF9, 0x0A}, {movdiri [r26], r25}
; --- movrs instruction ---
; legacy
testcase {0x0F, 0x38, 0x8A, 0x0A}, {movrs cl, [rdx]}
testcase {0x66, 0x0F, 0x38, 0x8B, 0x0A}, {movrs cx, [rdx]}
testcase {0x0F, 0x38, 0x8B, 0x0A}, {movrs ecx, [rdx]}
testcase {0x48, 0x0F, 0x38, 0x8B, 0x0A}, {movrs rcx, [rdx]}
; implicit evex through EGPRs
testcase {0x62, 0x4C, 0x7C, 0x08, 0x8A, 0x0A}, {movrs r25b, [r26]}
testcase {0x62, 0x4C, 0x7D, 0x08, 0x8B, 0x0A}, {movrs r25w, [r26]}
testcase {0x62, 0x4C, 0x7C, 0x08, 0x8B, 0x0A}, {movrs r25d, [r26]}
testcase {0x62, 0x4C, 0xFC, 0x08, 0x8B, 0x0A}, {movrs r25, [r26]}
; --- mul instruction ---
; - mul : D:A = reg * A
; legacy
testcase {0xF6, 0x21}, {mul byte [rcx]}
testcase {0x66, 0xF7, 0x21}, {mul word [rcx]}
testcase {0xF7, 0x21}, {mul dword [rcx]}
testcase {0x48, 0xF7, 0x21}, {mul qword [rcx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF6, 0x21}, {mul{nf} byte [rcx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF7, 0x21}, {mul{nf} word [rcx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF7, 0x21}, {mul{nf} dword [rcx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF7, 0x21}, {mul{nf} qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x21}, {mul byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x21}, {mul word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x21}, {mul dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x21}, {mul qword [r25]}
; --- mulx instruction ---
; legacy
testcase {0xC4, 0xE2, 0x2B, 0xF6, 0x0B}, {mulx ecx, r10d, [rbx]}
testcase {0xC4, 0xE2, 0xAB, 0xF6, 0x0B}, {mulx rcx, r10, [rbx]}
; implicit evex through EGPRs
testcase {0x62, 0xF2, 0x2F, 0x00, 0xF6, 0x0B}, {mulx ecx, r26d, [rbx]}
testcase {0x62, 0xF2, 0xAF, 0x00, 0xF6, 0x0B}, {mulx rcx, r26, [rbx]}
; --- neg instruction ---
; legacy neg
testcase {0xF6, 0x19}, {neg byte [rcx]}
testcase {0x66, 0xF7, 0x19}, {neg word [rcx]}
testcase {0xF7, 0x19}, {neg dword [rcx]}
testcase {0x48, 0xF7, 0x19}, {neg qword [rcx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF6, 0x19}, {neg{nf} byte [rcx]}
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF7, 0x19}, {neg{nf} word [rcx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF7, 0x19}, {neg{nf} dword [rcx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF7, 0x19}, {neg{nf} qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x19}, {neg byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x19}, {neg word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x19}, {neg dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x19}, {neg qword [r25]}
; implicit evex through ND
testcase {0x62, 0xF4, 0x6C, 0x18, 0xF6, 0x19}, {neg dl, byte [rcx]}
testcase {0x62, 0xF4, 0x6D, 0x18, 0xF7, 0x19}, {neg dx, word [rcx]}
testcase {0x62, 0xF4, 0x6C, 0x18, 0xF7, 0x19}, {neg edx, dword [rcx]}
testcase {0x62, 0xF4, 0xEC, 0x18, 0xF7, 0x19}, {neg rdx, qword [rcx]}
; --- not instruction ---
; legacy not
testcase {0xF6, 0x11}, {not byte [rcx]}
testcase {0x66, 0xF7, 0x11}, {not word [rcx]}
testcase {0xF7, 0x11}, {not dword [rcx]}
testcase {0x48, 0xF7, 0x11}, {not qword [rcx]}
; implicit rex2 through EGPRs
testcase {0xD5, 0x11, 0xF6, 0x11}, {not byte [r25]}
testcase {0x66, 0xD5, 0x11, 0xF7, 0x11}, {not word [r25]}
testcase {0xD5, 0x11, 0xF7, 0x11}, {not dword [r25]}
testcase {0xD5, 0x19, 0xF7, 0x11}, {not qword [r25]}
; implicit evex through ND
testcase {0x62, 0xF4, 0x6C, 0x18, 0xF6, 0x11}, {not dl, byte [rcx]}
testcase {0x62, 0xF4, 0x6D, 0x18, 0xF7, 0x11}, {not dx, word [rcx]}
testcase {0x62, 0xF4, 0x6C, 0x18, 0xF7, 0x11}, {not edx, dword [rcx]}
testcase {0x62, 0xF4, 0xEC, 0x18, 0xF7, 0x11}, {not rdx, qword [rcx]}
; --- pdep instruction ---
; legacy
testcase {0xC4, 0xE2, 0x33, 0xF5, 0x0A}, {pdep ecx, r9d, [rdx]}
testcase {0xC4, 0xE2, 0xB3, 0xF5, 0x0A}, {pdep rcx, r9, [rdx]}
; implicit evex through EGPRs
testcase {0x62, 0xF2, 0x37, 0x00, 0xF5, 0x0A}, {pdep ecx, r25d, [rdx]}
testcase {0x62, 0xF2, 0xB7, 0x00, 0xF5, 0x0A}, {pdep rcx, r25, [rdx]}
; --- pext instruction ---
; legacy
testcase {0xC4, 0xE2, 0x32, 0xF5, 0x0A}, {pext ecx, r9d, [rdx]}
testcase {0xC4, 0xE2, 0xB2, 0xF5, 0x0A}, {pext rcx, r9, [rdx]}
; implicit evex through EGPRs
testcase {0x62, 0xF2, 0x36, 0x00, 0xF5, 0x0A}, {pext ecx, r25d, [rdx]}
testcase {0x62, 0xF2, 0xB6, 0x00, 0xF5, 0x0A}, {pext rcx, r25, [rdx]}
; --- popcnt instruction ---
; legacy
testcase {0x66, 0xF3, 0x0F, 0xB8, 0x0A}, {popcnt cx, [rdx]}
testcase {0xF3, 0x0F, 0xB8, 0x0A}, {popcnt ecx, [rdx]}
testcase {0xF3, 0x48, 0x0F, 0xB8, 0x0A}, {popcnt rcx, [rdx]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7D, 0x0C ,0x88, 0x0A}, {popcnt{nf} cx, [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0x88, 0x0A}, {popcnt{nf} ecx, [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0x88, 0x0A}, {popcnt{nf} rcx, [rdx]}
; implicit evex through EGPRs
testcase {0x66, 0xF3, 0xD5, 0xC4, 0xB8, 0x0A}, {popcnt r25w, [rdx]}
testcase {0xF3, 0xD5, 0xC4, 0xB8, 0x0A}, {popcnt r25d, [rdx]}
testcase {0xF3, 0xD5, 0xCC, 0xB8, 0x0A}, {popcnt r25, [rdx]}
; --- rdmsr instruction ---
; legacy
testcase {0x0F, 0x32}, {rdmsr}
; apx
testcase {0x62, 0xDF, 0x7F, 0x08, 0xF6, 0xC1,\
0xFF, 0xFF, 0xFF, 0xFF}, {rdmsr r25, 0xFFFFFFFF}
; --- sttilecfg instruction ---
; legacy
testcase {0xC4, 0xE2, 0x79, 0x49, 0x02}, {sttilecfg [rdx]}
; apx
testcase {0x62, 0xDA, 0x7D, 0x08, 0x49, 0x02}, {sttilecfg [r26]}
; --- tileloadd[t1] instruction ---
; legacy
testcase {0xC4, 0xE2, 0x7B, 0x4B, 0x0C, 0x22}, {tileloadd tmm1, [rdx]}
testcase {0xC4, 0xE2, 0x79, 0x4B, 0x0C, 0x22}, {tileloaddt1 tmm1, [rdx]}
; apx
testcase {0x62, 0xDA, 0x7F, 0x08, 0x4B, 0x0C, 0x22}, {tileloadd tmm1, [r26]}
testcase {0x62, 0xDA, 0x7D, 0x08, 0x4B, 0x0C, 0x22}, {tileloaddt1 tmm1, [r26]}
; --- tileloaddrs[t1] instruction ---
; legacy
testcase {0xC4, 0xE2, 0x7B, 0x4A, 0x0C, 0x22}, {tileloaddrs tmm1, [rdx]}
testcase {0xC4, 0xE2, 0x79, 0x4A, 0x0C, 0x22}, {tileloaddrst1 tmm1, [rdx]}
; apx
testcase {0x62, 0xDA, 0x7F, 0x08, 0x4A, 0x0C, 0x22}, {tileloaddrs tmm1, [r26]}
testcase {0x62, 0xDA, 0x7D, 0x08, 0x4A, 0x0C, 0x22}, {tileloaddrst1 tmm1, [r26]}
; --- tilestored instruction ---
; legacy
testcase {0xC4, 0xE2, 0x7A, 0x4B, 0x0C, 0x22}, {tilestored [rdx], tmm1}
; apx
testcase {0x62, 0xDA, 0x7E, 0x08, 0x4B, 0x0C, 0x22}, {tilestored [r26], tmm1}
; --- tzcnt instruction ---
; legacy
testcase {0x66, 0xF3, 0x0F, 0xBC, 0x0A}, {tzcnt cx, [rdx]}
testcase {0xF3, 0x0F, 0xBC, 0x0A}, {tzcnt ecx, [rdx]}
testcase {0xF3, 0x48, 0x0F, 0xBC, 0x0A}, {tzcnt rcx, [rdx]}
; implicit rex2 through EGPRs
testcase {0x66, 0xF3, 0xD5, 0x91, 0xBC, 0x0A}, {tzcnt cx, [r26]}
testcase {0xF3, 0xD5, 0x91, 0xBC, 0x0A}, {tzcnt ecx, [r26]}
testcase {0xF3, 0xD5, 0x99, 0xBC, 0x0A}, {tzcnt rcx, [r26]}
; implicit evex through NF
testcase {0x62, 0xF4, 0x7D, 0x0C, 0xF4, 0x0A}, {tzcnt{nf} cx, [rdx]}
testcase {0x62, 0xF4, 0x7C, 0x0C, 0xF4, 0x0A}, {tzcnt{nf} ecx, [rdx]}
testcase {0x62, 0xF4, 0xFC, 0x0C, 0xF4, 0x0A}, {tzcnt{nf} rcx, [rdx]}
; --- urdmsr instruction ---
; legacy
testcase {0xF2, 0x0F, 0x38, 0xF8, 0xCA}, {urdmsr rdx, rcx}
testcase {0xC4, 0xE7, 0x7B, 0xF8, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF}, \
{urdmsr rdx, 0xFFFFFFFF}
; apx
testcase {0x62, 0xDC, 0x7F, 0x08, 0xF8, 0xCA}, {urdmsr r26, rcx}
testcase {0x62, 0xDF, 0x7F, 0x08, 0xF8, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF}, \
{urdmsr r26, 0xFFFFFFFF}
; --- uwrmsr instruction ---
; legacy
testcase {0xF3, 0x0F, 0x38, 0xF8, 0xCA}, {uwrmsr rdx, rcx}
testcase {0xC4, 0xE7, 0x7A, 0xF8, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF}, \
{uwrmsr rdx, 0xFFFFFFFF}
; apx
testcase {0x62, 0xDC, 0x7E, 0x08, 0xF8, 0xCA}, {uwrmsr r26, rcx}
testcase {0x62, 0xDF, 0x7E, 0x08, 0xF8, 0xC2, 0xFF, 0xFF, 0xFF, 0xFF}, \
{uwrmsr r26, 0xFFFFFFFF}
; --- wrmsrns instruction ---
; legacy
testcase {0x0F, 0x01, 0xC6}, {wrmsrns}
; apx
testcase {0x62, 0xDF, 0x7E, 0x08, 0xF6, 0xC2,\
0x00, 0x01, 0x00, 0x00}, {wrmsrns 0x100, r26}
; --- wrssd/wrssq instructions ---
; legacy
testcase {0x0F, 0x38, 0xF6, 0x0A}, {wrssd [rdx], ecx}
testcase {0x48, 0x0F, 0x38, 0xF6, 0x0A}, {wrssq [rdx], rcx}
; apx
testcase {0x62, 0xDC, 0x7C, 0x08, 0x66, 0x0A}, {wrssd [r26], ecx}
testcase {0x62, 0xDC, 0xFC, 0x08, 0x66, 0x0A}, {wrssq [r26], rcx}
; --- wrussd/wrussq instructions ---
; legacy
testcase {0x66, 0x0F, 0x38, 0xF5, 0x0A}, {wrussd [rdx], ecx}
testcase {0x66, 0x48, 0x0F, 0x38, 0xF5, 0x0A}, {wrussq [rdx], rcx}
; apx
testcase {0x62, 0xDC, 0x7D, 0x08, 0x65, 0x0A}, {wrussd [r26], ecx}
testcase {0x62, 0xDC, 0xFD, 0x08, 0x65, 0x0A}, {wrussq [r26], rcx}
; --- jmpabs instruction ---
testcase {0xD5, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0xFF, 0xFF}, {jmpabs 0xFFFF000000000000}
; --- setcc instruction ---
; implicit rex2 through EGPRs
testcase {0xD5, 0x91, 0x92, 0xC1}, {setb r25b}
testcase {0xD5, 0x91, 0x96, 0xC1}, {setbe r25b}
testcase {0xD5, 0x91, 0x9C, 0xC1}, {setl r25b}
testcase {0xD5, 0x91, 0x9E, 0xC1}, {setle r25b}
testcase {0xD5, 0x91, 0x93, 0xC1}, {setnb r25b}
testcase {0xD5, 0x91, 0x97, 0xC1}, {setnbe r25b}
testcase {0xD5, 0x91, 0x9D, 0xC1}, {setnl r25b}
testcase {0xD5, 0x91, 0x9F, 0xC1}, {setnle r25b}
testcase {0xD5, 0x91, 0x91, 0xC1}, {setno r25b}
testcase {0xD5, 0x91, 0x9B, 0xC1}, {setnp r25b}
testcase {0xD5, 0x91, 0x99, 0xC1}, {setns r25b}
testcase {0xD5, 0x91, 0x95, 0xC1}, {setnz r25b}
testcase {0xD5, 0x91, 0x90, 0xC1}, {seto r25b}
testcase {0xD5, 0x91, 0x9A, 0xC1}, {setp r25b}
testcase {0xD5, 0x91, 0x98, 0xC1}, {sets r25b}
testcase {0xD5, 0x91, 0x94, 0xC1}, {setz r25b}
; implicit evex through ND=ZU
testcase {0x62, 0xDC, 0x7F, 0x18, 0x42, 0xC1}, {setb{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x46, 0xC1}, {setbe{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4C, 0xC1}, {setl{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4E, 0xC1}, {setle{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x43, 0xC1}, {setnb{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x47, 0xC1}, {setnbe{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4D, 0xC1}, {setnl{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4F, 0xC1}, {setnle{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x41, 0xC1}, {setno{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4B, 0xC1}, {setnp{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x49, 0xC1}, {setns{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x45, 0xC1}, {setnz{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x40, 0xC1}, {seto{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x4A, 0xC1}, {setp{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x48, 0xC1}, {sets{zu} r25b}
testcase {0x62, 0xDC, 0x7F, 0x18, 0x44, 0xC1}, {setz{zu} r25b}
; --- pop[2][p] / push[2][p] --- instructions
testcase {0x62, 0xDC, 0x34, 0x10, 0x8F, 0xC2}, {pop2 r25, r26}
testcase {0x62, 0xDC, 0xB4, 0x10, 0x8F, 0xC2}, {pop2p r25, r26}
testcase {0xD5, 0x19, 0x59}, {popp r25}
testcase {0x62, 0xDC, 0x34, 0x10, 0xFF, 0xF2}, {push2 r25, r26}
testcase {0x62, 0xDC, 0xB4, 0x10, 0xFF, 0xF2}, {push2p r25, r26}
testcase {0xD5, 0x19, 0x51}, {pushp r25}