TestHarnessRunner: Reconverge YMM registers if AVX is supported

The TestHarness infrastructure doesn't understand the difference between
converged versus split view.

So fetch the split view immediately and reconverge the view manually
inside of the state object so it continues working with the split ymm
view.
This commit is contained in:
Ryan Houdek authored and Alyssa Rosenzweig committed 2024-06-21 17:13:56 -04:00
1 parent f5fea8af96
commit d0852cf1bb
1 file changed
+11
@@ -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 {