From 8a50944770a5c638b6718bd942798b871153757f Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Sat, 12 Oct 2013 12:22:14 +0000 Subject: [PATCH] soft-fp: make ordered comparisons raise "invalid" for quiet NaNs (bug 14910). --- ChangeLog | 9 +++++++++ NEWS | 12 ++++++------ soft-fp/gedf2.c | 2 +- soft-fp/gesf2.c | 2 +- soft-fp/getf2.c | 2 +- soft-fp/ledf2.c | 2 +- soft-fp/lesf2.c | 2 +- soft-fp/letf2.c | 2 +- 8 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b2e470..87a1238 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2013-10-12 Joseph Myers + [BZ #14910] + * soft-fp/gedf2.c (__gedf2): Raise "invalid" exception for all + unordered operands. + * soft-fp/gesf2.c (__gesf2): Likewise. + * soft-fp/getf2.c (__getf2): Likewise. + * soft-fp/ledf2.c (__ledf2): Likewise. + * soft-fp/lesf2.c (__lesf2): Likewise. + * soft-fp/letf2.c (__letf2): Likewise. + * soft-fp/eqdf2.c (__eqdf2): Use FP_INIT_EXCEPTIONS. * soft-fp/eqsf2.c (__eqsf2): Likewise. * soft-fp/eqtf2.c (__eqtf2): Likewise. diff --git a/NEWS b/NEWS index 74231dc..f72f059 100644 --- a/NEWS +++ b/NEWS @@ -9,12 +9,12 @@ Version 2.19 * The following bugs are resolved with this release: - 156, 431, 13982, 13985, 14155, 14547, 14699, 15048, 15362, 15400, 15427, - 15522, 15531, 15532, 15608, 15609, 15610, 15632, 15640, 15680, 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. + 156, 431, 13982, 13985, 14155, 14547, 14699, 14910, 15048, 15362, 15400, + 15427, 15522, 15531, 15532, 15608, 15609, 15610, 15632, 15640, 15680, + 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. * 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/gedf2.c b/soft-fp/gedf2.c index a36f572..fa2b525 100644 --- a/soft-fp/gedf2.c +++ b/soft-fp/gedf2.c @@ -41,7 +41,7 @@ CMPtype __gedf2(DFtype a, DFtype b) FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); FP_CMP_D(r, A, B, -2); - if (r == -2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) + if (r == -2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c index 899fcc5..4778937 100644 --- a/soft-fp/gesf2.c +++ b/soft-fp/gesf2.c @@ -41,7 +41,7 @@ CMPtype __gesf2(SFtype a, SFtype b) FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); FP_CMP_S(r, A, B, -2); - if (r == -2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) + if (r == -2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; diff --git a/soft-fp/getf2.c b/soft-fp/getf2.c index d9cb26d..4c544d4 100644 --- a/soft-fp/getf2.c +++ b/soft-fp/getf2.c @@ -41,7 +41,7 @@ CMPtype __getf2(TFtype a, TFtype b) FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, A, B, -2); - if (r == -2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) + if (r == -2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; diff --git a/soft-fp/ledf2.c b/soft-fp/ledf2.c index 6922d2f..7d54e98 100644 --- a/soft-fp/ledf2.c +++ b/soft-fp/ledf2.c @@ -41,7 +41,7 @@ CMPtype __ledf2(DFtype a, DFtype b) FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); FP_CMP_D(r, A, B, 2); - if (r == 2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) + if (r == 2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c index cee5614..954a418 100644 --- a/soft-fp/lesf2.c +++ b/soft-fp/lesf2.c @@ -41,7 +41,7 @@ CMPtype __lesf2(SFtype a, SFtype b) FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); FP_CMP_S(r, A, B, 2); - if (r == 2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) + if (r == 2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; diff --git a/soft-fp/letf2.c b/soft-fp/letf2.c index 7644b26..76d6119 100644 --- a/soft-fp/letf2.c +++ b/soft-fp/letf2.c @@ -41,7 +41,7 @@ CMPtype __letf2(TFtype a, TFtype b) FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, A, B, 2); - if (r == 2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) + if (r == 2) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; -- 2.7.4