fegetenv and fegetexceptflag read MXCSR via __mingw_setfp_sse().
On i386 targets without SSE support, this can fault. Keep the SSE status
word zeroed and only read it when __mingw_has_sse() reports support.

Bug: https://sourceforge.net/p/mingw-w64/bugs/1026/
Signed-off-by: Xuntao Chi <[email protected]>
---
 mingw-w64-crt/misc/fegetenv.c        | 5 +++--
 mingw-w64-crt/misc/fegetexceptflag.c | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/mingw-w64-crt/misc/fegetenv.c b/mingw-w64-crt/misc/fegetenv.c
index c1169cda7..165832f5d 100644
--- a/mingw-w64-crt/misc/fegetenv.c
+++ b/mingw-w64-crt/misc/fegetenv.c
@@ -13,11 +13,12 @@
 int fegetenv(fenv_t *env)
 {
 #if defined(__i386__) || (defined(__x86_64__) && !defined(__arm64ec__))
-    unsigned int x87, sse;
+    unsigned int x87, sse = 0;
     __mingw_control87_2(0, 0, &x87, &sse);
     env->_Fe_ctl = fenv_encode(x87, sse);
     __mingw_setfp(NULL, 0, &x87, 0);
-    __mingw_setfp_sse(NULL, 0, &sse, 0);
+    if (__mingw_has_sse())
+        __mingw_setfp_sse(NULL, 0, &sse, 0);
     env->_Fe_stat = fenv_encode(x87, sse);
 #else
     env->_Fe_ctl = fenv_encode(0, __mingw_controlfp(0, 0));
diff --git a/mingw-w64-crt/misc/fegetexceptflag.c 
b/mingw-w64-crt/misc/fegetexceptflag.c
index cc9bdde4b..ed1eee627 100644
--- a/mingw-w64-crt/misc/fegetexceptflag.c
+++ b/mingw-w64-crt/misc/fegetexceptflag.c
@@ -15,9 +15,10 @@
 int fegetexceptflag(fexcept_t *status, int excepts)
 {
 #if defined(__i386__) || (defined(__x86_64__) && !defined(__arm64ec__))
-    unsigned int x87, sse;
+    unsigned int x87, sse = 0;
     __mingw_setfp(NULL, 0, &x87, 0);
-    __mingw_setfp_sse(NULL, 0, &sse, 0);
+    if (__mingw_has_sse())
+        __mingw_setfp_sse(NULL, 0, &sse, 0);
     *status = fenv_encode(x87 & excepts, sse & excepts);
 #else
     *status = fenv_encode(0, __mingw_statusfp() & excepts);
-- 
2.43.0



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to