diff --git a/External/FEXCore/Source/Interface/Core/X86Tables/SecondaryTables.cpp b/External/FEXCore/Source/Interface/Core/X86Tables/SecondaryTables.cpp index 2a26ebe08..198540dcb 100644 --- a/External/FEXCore/Source/Interface/Core/X86Tables/SecondaryTables.cpp +++ b/External/FEXCore/Source/Interface/Core/X86Tables/SecondaryTables.cpp @@ -105,7 +105,7 @@ void InitializeSecondaryTables() { {0x6A, 1, X86InstInfo{"PUNPCKHDQ", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x6B, 1, X86InstInfo{"PACKSSDW", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x6C, 2, X86InstInfo{"", TYPE_INVALID, FLAGS_NONE, 0, nullptr}}, - {0x6E, 1, X86InstInfo{"MOVD", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_SRC_GPR | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, + {0x6E, 1, X86InstInfo{"MOVD", TYPE_INST, GenFlagsDstSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_SRC_GPR | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x6F, 1, X86InstInfo{"MOVQ", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x70, 1, X86InstInfo{"PSHUFW", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 1, nullptr}}, @@ -117,7 +117,7 @@ void InitializeSecondaryTables() { {0x76, 1, X86InstInfo{"PCMPEQD", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x77, 1, X86InstInfo{"EMMS", TYPE_INST, FLAGS_NONE, 0, nullptr}}, {0x78, 6, X86InstInfo{"", TYPE_INVALID, FLAGS_NONE, 0, nullptr}}, - {0x7E, 1, X86InstInfo{"MOVD", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_MOD_DST | FLAGS_SF_DST_GPR | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, + {0x7E, 1, X86InstInfo{"MOVD", TYPE_INST, GenFlagsSrcSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_MOD_DST | FLAGS_SF_DST_GPR | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x7F, 1, X86InstInfo{"MOVQ", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_MODRM | FLAGS_SF_MOD_DST | FLAGS_XMM_FLAGS | FLAGS_SF_MMX, 0, nullptr}}, {0x80, 1, X86InstInfo{"JO", TYPE_INST, GenFlagsSameSize(SIZE_64BIT) | FLAGS_SETS_RIP | FLAGS_SRC_SEXT | FLAGS_DISPLACE_SIZE_DIV_2 | FLAGS_NO_OVERLAY, 4, nullptr}}, diff --git a/unittests/ASM/TwoByte/0F_6E.asm b/unittests/ASM/TwoByte/0F_6E.asm index c9c748406..eb2c4e2f5 100644 --- a/unittests/ASM/TwoByte/0F_6E.asm +++ b/unittests/ASM/TwoByte/0F_6E.asm @@ -2,7 +2,9 @@ { "RegData": { "MM0": ["0x0000000045464748", "0x0"], - "MM1": ["0x5152535455565758", "0x0"] + "MM1": ["0x5152535455565758", "0x0"], + "MM2": ["0x0000000045464748", "0x0"], + "MM3": ["0x5152535455565758", "0x0"] }, "MemoryRegions": { "0x100000000": "4096" @@ -26,9 +28,13 @@ mov rax, 0x0 mov [rdx + 8 * 4], rax mov [rdx + 8 * 5], rax -mov eax, dword [rdx + 8 * 0] +mov rax, qword [rdx + 8 * 0] mov rbx, qword [rdx + 8 * 1] movd mm0, eax movq mm1, rbx + +movd mm2, dword [rdx + 8 * 0] +movq mm3, qword [rdx + 8 * 1] + hlt diff --git a/unittests/ASM/TwoByte/0F_6E_2.asm b/unittests/ASM/TwoByte/0F_6E_2.asm new file mode 100644 index 000000000..a51568197 --- /dev/null +++ b/unittests/ASM/TwoByte/0F_6E_2.asm @@ -0,0 +1,15 @@ +%ifdef CONFIG +{ + "RegData": { + "MM0": ["0x0000000045464748", "0x0"], + "MM1": ["0x5152535455565758", "0x0"] + } +} +%endif + +mov rax, 0x4142434445464748 +mov rbx, 0x5152535455565758 + +movd mm0, eax +movq mm1, rbx +hlt