]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
Work around a SIGFPE for sqrt(-1) on Alpha; it should return NaN instead.
authorRhys Weatherley <rweather@southern-storm.com.au>
Mon, 7 Jun 2004 00:20:40 +0000 (00:20 +0000)
committerRhys Weatherley <rweather@southern-storm.com.au>
Mon, 7 Jun 2004 00:20:40 +0000 (00:20 +0000)
ChangeLog
jit/jit-intrinsic.c

index f24b8998568f8744849f92dccc75cf661a54aea3..940573b41d5e1a6f30d5dbd00fa9b3565afdadaa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,9 @@
        * jit/jit-interp.c: alignment problem with "push_const_float32"
        on 64-bit platforms.
 
+       * jit/jit-intrinsic.c: work around a SIGFPE for sqrt(-1) on Alpha;
+       it should return NaN instead.
+
 2004-06-06  Miroslaw Dobrzanski-Neumann  <mne@mosaic-ag.com>
 
        * jit/jit-alloc.c (jit_flush_exec): flush cache lines properly
index 04919b4be6eb594a2216888252c8940a3c8b12e7..b844df86c98366051d5e035f54e739a72ef1ff15 100644 (file)
@@ -1670,8 +1670,13 @@ jit_float32 jit_float32_sinh(jit_float32 value1)
 
 jit_float32 jit_float32_sqrt(jit_float32 value1)
 {
+       /* Some platforms give a SIGFPE for negative arguments (e.g. Alpha) */
+       if(value1 < (jit_float32)0.0)
+       {
+               return jit_float32_nan;
+       }
 #if defined(HAVE_SQRTF)
-       return (jit_float32)(sqrtf(value1));
+       return (jit_float32)(sqrt(value1));
 #elif defined(HAVE_SQRT)
        return (jit_float32)(sqrt(value1));
 #else
@@ -2249,6 +2254,11 @@ jit_float64 jit_float64_sinh(jit_float64 value1)
 
 jit_float64 jit_float64_sqrt(jit_float64 value1)
 {
+       /* Some platforms give a SIGFPE for negative arguments (e.g. Alpha) */
+       if(value1 < (jit_float64)0.0)
+       {
+               return jit_float64_nan;
+       }
 #if defined(HAVE_SQRT)
        return (jit_float64)(sqrt(value1));
 #else
@@ -2889,6 +2899,11 @@ jit_nfloat jit_nfloat_sinh(jit_nfloat value1)
 
 jit_nfloat jit_nfloat_sqrt(jit_nfloat value1)
 {
+       /* Some platforms give a SIGFPE for negative arguments (e.g. Alpha) */
+       if(value1 < (jit_nfloat)0.0)
+       {
+               return jit_nfloat_nan;
+       }
 #if defined(HAVE_SQRTL) && !defined(JIT_NFLOAT_IS_DOUBLE)
        return (jit_nfloat)(sqrtl(value1));
 #elif defined(HAVE_SQRT)