diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:23:28 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:23:28 +0000 |
commit | b7ea74f0747456c99421f14f963082b1dcb6c30d (patch) | |
tree | 2e9b1f6ee28bba4c53a305e11217c98af3b431d4 /soft-fp | |
parent | 8a50944770a5c638b6718bd942798b871153757f (diff) | |
download | glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.zip glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.tar.gz glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.tar.bz2 |
soft-fp: make __unord* raise "invalid" for signaling NaNs (bug 16036).
Diffstat (limited to 'soft-fp')
-rw-r--r-- | soft-fp/unorddf2.c | 5 | ||||
-rw-r--r-- | soft-fp/unordsf2.c | 5 | ||||
-rw-r--r-- | soft-fp/unordtf2.c | 5 |
3 files changed, 15 insertions, 0 deletions
diff --git a/soft-fp/unorddf2.c b/soft-fp/unorddf2.c index 2e77f2d..bc4efa3 100644 --- a/soft-fp/unorddf2.c +++ b/soft-fp/unorddf2.c @@ -32,12 +32,17 @@ CMPtype __unorddf2(DFtype a, DFtype b) { + FP_DECL_EX; FP_DECL_D(A); FP_DECL_D(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); FP_CMP_UNORD_D(r, A, B); + if (r && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } diff --git a/soft-fp/unordsf2.c b/soft-fp/unordsf2.c index b5b5322..217975f 100644 --- a/soft-fp/unordsf2.c +++ b/soft-fp/unordsf2.c @@ -32,13 +32,18 @@ CMPtype __unordsf2(SFtype a, SFtype b) { + FP_DECL_EX; FP_DECL_S(A); FP_DECL_S(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); FP_CMP_UNORD_S(r, A, B); + if (r && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } diff --git a/soft-fp/unordtf2.c b/soft-fp/unordtf2.c index 1a85c25..3650cf4 100644 --- a/soft-fp/unordtf2.c +++ b/soft-fp/unordtf2.c @@ -32,13 +32,18 @@ CMPtype __unordtf2(TFtype a, TFtype b) { + FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_UNORD_Q(r, A, B); + if (r && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } |