diff --git a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 4800e823f..345e76d9a 100644 --- a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -5802,7 +5802,7 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() { {OPD(1, 0b01, 0xD4), 1, &OpDispatchBuilder::AVXVectorALUOp}, {OPD(1, 0b01, 0xD5), 1, &OpDispatchBuilder::AVXVectorALUOp}, {OPD(1, 0b01, 0xD6), 1, &OpDispatchBuilder::MOVQOp}, - {OPD(1, 0b01, 0xD7), 1, &OpDispatchBuilder::UnimplementedOp}, + {OPD(1, 0b01, 0xD7), 1, &OpDispatchBuilder::MOVMSKOpOne}, {OPD(1, 0b01, 0xD8), 1, &OpDispatchBuilder::AVXVectorALUOp}, {OPD(1, 0b01, 0xD9), 1, &OpDispatchBuilder::AVXVectorALUOp}, diff --git a/External/FEXCore/Source/Interface/Core/X86Tables/VEXTables.cpp b/External/FEXCore/Source/Interface/Core/X86Tables/VEXTables.cpp index 6b7acf577..2bfabeff4 100644 --- a/External/FEXCore/Source/Interface/Core/X86Tables/VEXTables.cpp +++ b/External/FEXCore/Source/Interface/Core/X86Tables/VEXTables.cpp @@ -207,7 +207,7 @@ void InitializeVEXTables() { {OPD(1, 0b01, 0xD4), 1, X86InstInfo{"VPADDQ", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}}, {OPD(1, 0b01, 0xD5), 1, X86InstInfo{"VPMULLW", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}}, {OPD(1, 0b01, 0xD6), 1, X86InstInfo{"VMOVQ", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_MOD_DST | FLAGS_XMM_FLAGS, 0, nullptr}}, - {OPD(1, 0b01, 0xD7), 1, X86InstInfo{"VPMOVMSKB", TYPE_UNDEC, FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_DST_GPR | FLAGS_SF_MOD_REG_ONLY, 0, nullptr}}, + {OPD(1, 0b01, 0xD7), 1, X86InstInfo{"VPMOVMSKB", TYPE_INST, GenFlagsSizes(SIZE_32BIT, SIZE_128BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_DST_GPR | FLAGS_SF_MOD_REG_ONLY, 0, nullptr}}, {OPD(1, 0b01, 0xD8), 1, X86InstInfo{"VPSUBUSB", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}}, {OPD(1, 0b01, 0xD9), 1, X86InstInfo{"VPSUBUSW", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}}, diff --git a/unittests/ASM/VEX/vpmovmskb.asm b/unittests/ASM/VEX/vpmovmskb.asm new file mode 100644 index 000000000..94ae20d5e --- /dev/null +++ b/unittests/ASM/VEX/vpmovmskb.asm @@ -0,0 +1,71 @@ +%ifdef CONFIG +{ + "HostFeatures": ["AVX"], + "RegData": { + "RAX": "0x0", + "RBX": "0x0", + "RCX": "0xFFFF", + "RSI": "0xF0F0", + "RDI": "0x55AA", + "R8": "0x0", + "R9": "0x0", + "R10": "0xFFFFFFFF", + "R11": "0xF0F0F0F0", + "R12": "0x55AA55AA", + "XMM0": ["0x4142434445464748", "0x5152535455565758", "0x6162636465666768", "0x7172737475767778"], + "XMM1": ["0x0000000000000000", "0x0000000000000000", "0x0000000000000000", "0x0000000000000000"], + "XMM2": ["0xFFFFFFFFFFFFFFFF", "0xFFFFFFFFFFFFFFFF", "0xFFFFFFFFFFFFFFFF", "0xFFFFFFFFFFFFFFFF"], + "XMM3": ["0x8080808000000000", "0x8080808000000000", "0x8080808000000000", "0x8080808000000000"], + "XMM4": ["0x8000800080008000", "0x0080008000800080", "0x8000800080008000", "0x0080008000800080"] + } +} +%endif + +lea rdx, [rel .data] + +vmovapd ymm0, [rdx] +vmovapd ymm1, [rdx + 32] +vmovapd ymm2, [rdx + 32 * 2] +vmovapd ymm3, [rdx + 32 * 3] +vmovapd ymm4, [rdx + 32 * 4] + +vpmovmskb eax, xmm0 +vpmovmskb ebx, xmm1 +vpmovmskb ecx, xmm2 +vpmovmskb esi, xmm3 +vpmovmskb edi, xmm4 + +vpmovmskb r8, ymm0 +vpmovmskb r9, ymm1 +vpmovmskb r10, ymm2 +vpmovmskb r11, ymm3 +vpmovmskb r12, ymm4 + +hlt + +align 32 +.data: +dq 0x4142434445464748 +dq 0x5152535455565758 +dq 0x6162636465666768 +dq 0x7172737475767778 + +dq 0x0000000000000000 +dq 0x0000000000000000 +dq 0x0000000000000000 +dq 0x0000000000000000 + +dq 0xFFFFFFFFFFFFFFFF +dq 0xFFFFFFFFFFFFFFFF +dq 0xFFFFFFFFFFFFFFFF +dq 0xFFFFFFFFFFFFFFFF + +dq 0x8080808000000000 +dq 0x8080808000000000 +dq 0x8080808000000000 +dq 0x8080808000000000 + +dq 0x8000800080008000 +dq 0x0080008000800080 +dq 0x8000800080008000 +dq 0x0080008000800080