diff --git a/Source/Tools/TestHarnessRunner/TestHarnessRunner.cpp b/Source/Tools/TestHarnessRunner/TestHarnessRunner.cpp index 72eebb9dc..0e7888889 100644 --- a/Source/Tools/TestHarnessRunner/TestHarnessRunner.cpp +++ b/Source/Tools/TestHarnessRunner/TestHarnessRunner.cpp @@ -323,6 +323,17 @@ int main(int argc, char** argv, char** const envp) { FEX::HLE::_SyscallHandler->TM.DestroyThread(ParentThread, true); SyscallHandler.reset(); + + if (SupportsAVX) { + ///< Reconstruct the XMM registers even if they are in split view, then remerge them. + __uint128_t XMM_Low[FEXCore::Core::CPUState::NUM_XMMS]; + __uint128_t YMM_High[FEXCore::Core::CPUState::NUM_XMMS]; + CTX->ReconstructXMMRegisters(ParentThread->Thread, XMM_Low, YMM_High); + for (size_t i = 0; i < FEXCore::Core::CPUState::NUM_XMMS; ++i) { + memcpy(&State.xmm.avx.data[i][0], &XMM_Low[i], sizeof(__uint128_t)); + memcpy(&State.xmm.avx.data[i][2], &YMM_High[i], sizeof(__uint128_t)); + } + } } #ifndef _WIN32 else {