From: Paul Gofman <pgofman@codeweavers.com> --- dlls/ntdll/tests/exception.c | 14 +++----------- dlls/ntdll/unix/signal_x86_64.c | 1 + dlls/ntdll/unix/thread.c | 1 + 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index dfc4985cf85..b114b82cd4b 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -6552,16 +6552,8 @@ static void test_set_context_mxcsr(void) ctx->ContextFlags = CONTEXT_ALL | CONTEXT_XSTATE; bret = GetThreadContext( thread, ctx ); ok( bret, "got error %lu.\n", GetLastError() ); - todo_wine ok( ctx->MxCsr == 0x1f81, "got %#lx.\n", ctx->MxCsr ); - todo_wine ok( xs->MxCsr == 0x1f81, "got %#lx.\n", ctx->MxCsr ); - - if (ctx->MxCsr == 0x1f82) - { - ctx->ContextFlags = CONTEXT_FLOATING_POINT; - xs->MxCsr = 0x1f81; - bret = SetThreadContext( thread, ctx ); - ok( bret, "got error %lu.\n", GetLastError() ); - } + ok( ctx->MxCsr == 0x1f81, "got %#lx.\n", ctx->MxCsr ); + ok( xs->MxCsr == 0x1f81, "got %#lx.\n", ctx->MxCsr ); ctx->MxCsr = 0x1f83; xs->MxCsr = 0x1f84; @@ -6611,7 +6603,7 @@ static void test_set_context_mxcsr(void) set_context_mxcsr_test_ctx_flags = 0; mxcsr = 0x1f85; func_ptr( &mxcsr ); - todo_wine ok( mxcsr == 0x1f81, "got %#lx.\n", mxcsr ); + ok( mxcsr == 0x1f81, "got %#lx.\n", mxcsr ); set_context_mxcsr_test_ctx_flags &= ~CONTEXT_FLOATING_POINT | CONTEXT_AMD64; mxcsr = 0x1f85; diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 0c62e8a1ad4..8f6f1908ae4 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -1189,6 +1189,7 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context ) if (flags & CONTEXT_FLOATING_POINT) { frame->xsave = context->FltSave; + frame->xsave.MxCsr = context->MxCsr; frame->xstate.Mask |= XSTATE_MASK_LEGACY; } if (flags & CONTEXT_XSTATE) diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c index cba34ed8ca7..dafc6ae6079 100644 --- a/dlls/ntdll/unix/thread.c +++ b/dlls/ntdll/unix/thread.c @@ -448,6 +448,7 @@ static NTSTATUS context_to_server( struct context_data *to, USHORT to_machine, c { to->flags |= SERVER_CTX_FLOATING_POINT; memcpy( to->fp.x86_64_regs.fpregs, &from->FltSave, sizeof(to->fp.x86_64_regs.fpregs) ); + ((XSAVE_FORMAT *)to->fp.x86_64_regs.fpregs)->MxCsr = from->MxCsr; } if (flags & CONTEXT_AMD64_DEBUG_REGISTERS) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10248