aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--soft-fp/unorddf2.c5
-rw-r--r--soft-fp/unordsf2.c5
-rw-r--r--soft-fp/unordtf2.c5
5 files changed, 22 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 87a1238..db2c7eb 100644
--- 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 f72f059..d617ae7 100644
--- 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
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;
}