]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
soft-fp: make __unord* raise "invalid" for signaling NaNs (bug 16036).
authorJoseph Myers <joseph@codesourcery.com>
Sat, 12 Oct 2013 12:23:28 +0000 (12:23 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Sat, 12 Oct 2013 12:23:28 +0000 (12:23 +0000)
ChangeLog
NEWS
soft-fp/unorddf2.c
soft-fp/unordsf2.c
soft-fp/unordtf2.c

index 87a12388fa8c1059e5c9734dfec280db94e8a28d..db2c7eb697d759be0d798a3afe9eb5b634cf6e56 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2013-10-12  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #16036]
+       * soft-fp/unorddf2.c (__unorddf2): Raise "invalid" exception for
+       signaling NaN arguments.
+       * soft-fp/unordsf2.c (__unordsf2): Likewise.
+       * soft-fp/unordtf2.c (__unordtf2): Likewise.
+
        [BZ #14910]
        * soft-fp/gedf2.c (__gedf2): Raise "invalid" exception for all
        unordered operands.
diff --git a/NEWS b/NEWS
index f72f0598c3ad4b1214d162817d87bf5e524967ef..d617ae74c1b23a3314a2ec9a41a6b53396d4b1c3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,7 +14,7 @@ Version 2.19
   15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754, 15760, 15797,
   15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890,
   15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939,
-  15963, 15966, 15988, 16032, 16034.
+  15963, 15966, 15988, 16032, 16034, 16036.
 
 * CVE-2012-4412 The strcoll implementation caches indices and rules for
   large collation sequences to optimize multiple passes.  This cache
index 2e77f2d8ff74b588ee6be65ac2a6becfb04515ba..bc4efa30b0ec3a7c3ee1d87fa7e04517b781de16 100644 (file)
 
 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;
 }
index b5b5322c16892bade976ec35113f208c2e505f30..217975f0007ca2a4bb6fe136252a2142951078c8 100644 (file)
 
 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;
 }
index 1a85c252c1ac99587174c26dbbfa84fd7c801789..3650cf461b781fafe569b0ba90785b7da0de865e 100644 (file)
 
 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;
 }