From bec3cfff149109f4ff2da976db3b31a614a5c8cb Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Mon, 7 Sep 2020 01:29:47 +0300 Subject: [PATCH 1/3] X86Tables: Fix MOVD SRC/DST size --- .../Source/Interface/Core/X86Tables/SecondaryTables.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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}}, From 6e28d316df25da62a99060efa377c06fee128c12 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 13 Sep 2020 22:08:12 -0700 Subject: [PATCH 2/3] Adds MOVD unit test to ensure zext 32bit needs to zext to 64bit mmx 64bit is regular move --- unittests/ASM/TwoByte/0F_6E_2.asm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 unittests/ASM/TwoByte/0F_6E_2.asm 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 From 4f05fe36b63cf045ee5a0373208bfaaa7e698404 Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Tue, 15 Sep 2020 13:12:59 +0300 Subject: [PATCH 3/3] asm tests: 0F_6E also checks mm,mem forms --- unittests/ASM/TwoByte/0F_6E.asm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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