$OpenBSD: patch-runtime_flangrti_aarch64-Linux_flt_env_c,v 1.1 2018/06/27 00:09:26 bcallah Exp $

Workaround glibc nonsense

Index: runtime/flangrti/aarch64-Linux/flt_env.c
--- runtime/flangrti/aarch64-Linux/flt_env.c.orig
+++ runtime/flangrti/aarch64-Linux/flt_env.c
@@ -21,7 +21,6 @@
 
 #include <stdint.h>
 #include <fenv.h>
-#include <fpu_control.h>
 
 int
 __fenv_fegetround(void)
@@ -115,14 +114,14 @@ __fenv_feupdateenv(fenv_t *env)
 int
 __fenv_fesetzerodenorm(int uflow)
 {
-  uint64_t cw;
+  fenv_t fenv;
 
-  _FPU_GETCW(cw);
+  fegetenv(&fenv);
   if (uflow)
-    cw |= (1ULL << 24);
+    fenv |= (1ULL << 24);
   else
-    cw &= ~(1ULL << 24);
-  _FPU_SETCW(cw);
+    fenv &= ~(1ULL << 24);
+  fesetenv(&fenv);
   return 0;
 }
 
@@ -133,10 +132,10 @@ __fenv_fesetzerodenorm(int uflow)
 int
 __fenv_fegetzerodenorm(void)
 {
-  uint64_t cw;
+  fenv_t fenv;
 
-  _FPU_GETCW(cw);
-  return (cw & (1ULL << 24)) ? 1 : 0;
+  fegetenv(&fenv);
+  return (fenv & (1ULL << 24)) ? 1 : 0;
 }
 
 /** \brief
@@ -150,16 +149,16 @@ __fenv_fegetzerodenorm(void)
 void
 __fenv_mask_fz(int mask, int *psv)
 {
-  uint64_t tmp;
+  fenv_t tmp;
 
-  _FPU_GETCW(tmp);
+  fegetenv(&tmp);
   if (psv)
     *psv = ((tmp & (1ULL << 24)) ? 1 : 0);
   if (mask)
     tmp |= (1ULL << 24);
   else
     tmp &= ~(1ULL << 24);
-  _FPU_SETCW(tmp);
+  fesetenv(&tmp);
 }
 
 /** \brief
@@ -168,12 +167,12 @@ __fenv_mask_fz(int mask, int *psv)
 void
 __fenv_restore_fz(int sv)
 {
-  uint64_t tmp;
+  fenv_t tmp;
 
-  _FPU_GETCW(tmp);
+  fegetenv(&tmp);
   if (sv)
     tmp |= (1ULL << 24);
   else
     tmp &= ~(1ULL << 24);
-  _FPU_SETCW(tmp);
+  fesetenv(&tmp);
 }
