From 6de765a7d4224b2f6af16f9661d457563f96510a Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Mon, 7 Jun 2004 00:20:40 +0000 Subject: [PATCH] Work around a SIGFPE for sqrt(-1) on Alpha; it should return NaN instead. --- ChangeLog | 3 +++ jit/jit-intrinsic.c | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f24b899..940573b 100644 --- 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 * jit/jit-alloc.c (jit_flush_exec): flush cache lines properly diff --git a/jit/jit-intrinsic.c b/jit/jit-intrinsic.c index 04919b4..b844df8 100644 --- a/jit/jit-intrinsic.c +++ b/jit/jit-intrinsic.c @@ -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) -- 2.47.3