Hello!
Attached patch avoids triggering denormal exceptions when FP insns are
used to check for non-zero denormal values.
2014-09-23 Uros Bizjak <[email protected]>
PR target/58757
* gcc.dg/c11-true_min-1.c (checkz): Add.
(main): Call checkz to check value for zero.
Patch was tested on x86_64 {,-m32} and alphaev68-linux-gnu.
OK for mainline?
Uros.
Index: gcc.dg/c11-true_min-1.c
===================================================================
--- gcc.dg/c11-true_min-1.c (revision 215476)
+++ gcc.dg/c11-true_min-1.c (working copy)
@@ -7,11 +7,25 @@
#include <float.h>
-int main(){
+int
+__attribute__((noinline, noclone))
+checkz (const char *ptr, int n)
+{
+ for ( ; n > 0; --n)
+ if (*(ptr++) != 0)
+ return 0;
+ return 1;
+}
+
+int main ()
+{
volatile float f = FLT_TRUE_MIN;
volatile double d = DBL_TRUE_MIN;
volatile long double l = LDBL_TRUE_MIN;
- if (f == 0 || d == 0 || l == 0)
+
+ if (checkz ((const char *) &f, sizeof(f))
+ || checkz ((const char *) &d, sizeof(d))
+ || checkz ((const char *) &l, sizeof (l)))
__builtin_abort ();
return 0;
}