diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp index a09da4c5f..0f2cd576a 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp @@ -2171,7 +2171,7 @@ void OpDispatchBuilder::PSIGN(OpcodeArgs, IR::OpSize ElementSize) { Ref Dest = LoadSourceFPR(Op, Op->Dest, Op->Flags); Ref Res = PSIGNImpl(Op, ElementSize, Dest, Src); - StoreResultFPR(Op, Res); + StoreResult_WithAVXInsert(VectorOpType::SSE, RegClass::FPR, Op, Res); } void OpDispatchBuilder::VPSIGN(OpcodeArgs, IR::OpSize ElementSize) { diff --git a/unittests/ASM/SSELanePreservation/psignb.asm b/unittests/ASM/SSELanePreservation/psignb.asm new file mode 100644 index 000000000..6df9c2d00 --- /dev/null +++ b/unittests/ASM/SSELanePreservation/psignb.asm @@ -0,0 +1,28 @@ +%ifdef CONFIG +{ + "HostFeatures": ["AVX"], + "RegData": { + "XMM0": ["0xfd14d271553fa4a5", "0x837c338836d0613e", "0xccdbcfc31f3ff0f3", "0x108390defebac4be"], + "XMM1": ["0x000043341a2a690b", "0x4549437e4c6a1278", "0", "0"], + "XMM2": ["0xc4be43cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"], + "XMM3": ["0x000043cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"] + } +} +%endif + +vmovaps ymm0, [rel .data] +vmovaps ymm1, [rel .data + (1 * 32)] +vmovaps ymm2, [rel .data + (2 * 32)] +vmovaps ymm3, [rel .data + (3 * 32)] + +psignb xmm0, xmm1 +vpsignb xmm1, xmm2, xmm3 + +hlt + +align 32 +.data: +dq 0xfdecd28fab3fa4a5, 0x7d7ccd8836d09fc2, 0xccdbcfc31f3ff0f3, 0x108390defebac4be +dq 0x43cc1ad6970b4549, 0xbd7eb46a1278f793, 0xef673dac6e4cbb7b, 0x5b3d85d342718be9 +dq 0xc4be43cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271 +dq 0x000043cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271 diff --git a/unittests/ASM/SSELanePreservation/psignd.asm b/unittests/ASM/SSELanePreservation/psignd.asm new file mode 100644 index 000000000..22e74e418 --- /dev/null +++ b/unittests/ASM/SSELanePreservation/psignd.asm @@ -0,0 +1,28 @@ +%ifdef CONFIG +{ + "HostFeatures": ["AVX"], + "RegData": { + "XMM0": ["0xfdecd28f54c05b5b", "0x8283327836d09fc2", "0xccdbcfc31f3ff0f3", "0x108390defebac4be"], + "XMM1": ["0xc4be43cc1ad6970b", "0x4549bd7e4b95ed88", "0", "0"], + "XMM2": ["0xc4be43cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"], + "XMM3": ["0x000043cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"] + } +} +%endif + +vmovaps ymm0, [rel .data] +vmovaps ymm1, [rel .data + (1 * 32)] +vmovaps ymm2, [rel .data + (2 * 32)] +vmovaps ymm3, [rel .data + (3 * 32)] + +psignd xmm0, xmm1 +vpsignd xmm1, xmm2, xmm3 + +hlt + +align 32 +.data: +dq 0xfdecd28fab3fa4a5, 0x7d7ccd8836d09fc2, 0xccdbcfc31f3ff0f3, 0x108390defebac4be +dq 0x43cc1ad6970b4549, 0xbd7eb46a1278f793, 0xef673dac6e4cbb7b, 0x5b3d85d342718be9 +dq 0xc4be43cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271 +dq 0x000043cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271 diff --git a/unittests/ASM/SSELanePreservation/psignw.asm b/unittests/ASM/SSELanePreservation/psignw.asm new file mode 100644 index 000000000..68f77036c --- /dev/null +++ b/unittests/ASM/SSELanePreservation/psignw.asm @@ -0,0 +1,28 @@ +%ifdef CONFIG +{ + "HostFeatures": ["AVX"], + "RegData": { + "XMM0": ["0xfdecd28f54c1a4a5", "0x8284327836d0603e", "0xccdbcfc31f3ff0f3", "0x108390defebac4be"], + "XMM1": ["0x000043cc1ad668f5", "0x454942824b961278", "0", "0"], + "XMM2": ["0xc4be43cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"], + "XMM3": ["0x000043cc1ad6970b", "0x4549bd7eb46a1278", "0xf793ef673dac6e4c", "0xbb7b5b3d85d34271"] + } +} +%endif + +vmovaps ymm0, [rel .data] +vmovaps ymm1, [rel .data + (1 * 32)] +vmovaps ymm2, [rel .data + (2 * 32)] +vmovaps ymm3, [rel .data + (3 * 32)] + +psignw xmm0, xmm1 +vpsignw xmm1, xmm2, xmm3 + +hlt + +align 32 +.data: +dq 0xfdecd28fab3fa4a5, 0x7d7ccd8836d09fc2, 0xccdbcfc31f3ff0f3, 0x108390defebac4be +dq 0x43cc1ad6970b4549, 0xbd7eb46a1278f793, 0xef673dac6e4cbb7b, 0x5b3d85d342718be9 +dq 0xc4be43cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271 +dq 0x000043cc1ad6970b, 0x4549bd7eb46a1278, 0xf793ef673dac6e4c, 0xbb7b5b3d85d34271