summaryrefslogtreecommitdiffstats
path: root/winsup/mingw/mingwex
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/mingwex')
-rw-r--r--winsup/mingw/mingwex/math/sqrtf.c17
-rw-r--r--winsup/mingw/mingwex/math/sqrtl.c18
2 files changed, 29 insertions, 6 deletions
diff --git a/winsup/mingw/mingwex/math/sqrtf.c b/winsup/mingw/mingwex/math/sqrtf.c
index 55ca39dbe..b1029cad8 100644
--- a/winsup/mingw/mingwex/math/sqrtf.c
+++ b/winsup/mingw/mingwex/math/sqrtf.c
@@ -1,9 +1,20 @@
#include <math.h>
+#include <errno.h>
+
+extern float __QNANF;
float
sqrtf (float x)
{
- float res;
- asm ("fsqrt" : "=t" (res) : "0" (x));
- return res;
+ if (x < 0.0F )
+ {
+ errno = EDOM;
+ return __QNANF;
+ }
+ else
+ {
+ float res;
+ asm ("fsqrt" : "=t" (res) : "0" (x));
+ return res;
+ }
}
diff --git a/winsup/mingw/mingwex/math/sqrtl.c b/winsup/mingw/mingwex/math/sqrtl.c
index 0bd301390..dba68d878 100644
--- a/winsup/mingw/mingwex/math/sqrtl.c
+++ b/winsup/mingw/mingwex/math/sqrtl.c
@@ -1,8 +1,20 @@
#include <math.h>
+#include <errno.h>
+
+extern long double __QNANL;
+
long double
sqrtl (long double x)
{
- long double res;
- asm ("fsqrt" : "=t" (res) : "0" (x));
- return res;
+ if (x < 0.0L )
+ {
+ errno = EDOM;
+ return __QNANL;
+ }
+ else
+ {
+ long double res;
+ asm ("fsqrt" : "=t" (res) : "0" (x));
+ return res;
+ }
}