I don't consider myself expert on this topic. But while _exploring_ something, I found these (MxCsr and FpCsr) are missing from JUMP_BUFFER. Is this right? wine also don't have these. Wondering why? Thought attached.
From cb1ff23556cbbdeb286f1fc26872d7b887044477 Mon Sep 17 00:00:00 2001 From: Biswapriyo Nath <nathbap...@gmail.com> Date: Tue, 15 Jun 2021 21:30:25 +0530 Subject: [PATCH] crt: Add missing members in setjmp for x86_64.
--- mingw-w64-crt/misc/setjmp.S | 2 ++ mingw-w64-headers/crt/setjmp.h | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mingw-w64-crt/misc/setjmp.S b/mingw-w64-crt/misc/setjmp.S index b2058e9..0c06b86 100644 --- a/mingw-w64-crt/misc/setjmp.S +++ b/mingw-w64-crt/misc/setjmp.S @@ -50,6 +50,8 @@ __MINGW_USYMBOL(__intrinsic_setjmpex): movq %r15,0x48(%rcx) /* jmp_buf->R15 */ movq (%rsp),%rax movq %rax,0x50(%rcx) /* jmp_buf->Rip */ + stmxcsr 0x58(%rcx) /* jmp_buf->MxCsr */ + fnstcw 0x5c(%rcx) /* jmp_buf->FpCsr */ movdqa %xmm6,0x60(%rcx) /* jmp_buf->Xmm6 */ movdqa %xmm7,0x70(%rcx) /* jmp_buf->Xmm7 */ movdqa %xmm8,0x80(%rcx) /* jmp_buf->Xmm8 */ diff --git a/mingw-w64-headers/crt/setjmp.h b/mingw-w64-headers/crt/setjmp.h index eb772a3..4b69efa 100644 --- a/mingw-w64-headers/crt/setjmp.h +++ b/mingw-w64-headers/crt/setjmp.h @@ -128,7 +128,9 @@ extern "C" { __MINGW_EXTENSION unsigned __int64 R14; __MINGW_EXTENSION unsigned __int64 R15; __MINGW_EXTENSION unsigned __int64 Rip; - __MINGW_EXTENSION unsigned __int64 Spare; + unsigned long MxCsr; + unsigned short FpCsr; + unsigned short Spare; SETJMP_FLOAT128 Xmm6; SETJMP_FLOAT128 Xmm7; SETJMP_FLOAT128 Xmm8; -- 2.32.0
_______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public