summaryrefslogtreecommitdiff
path: root/lib/libm
diff options
context:
space:
mode:
authorMartynas Venckus <martynas@cvs.openbsd.org>2011-04-29 21:37:41 +0000
committerMartynas Venckus <martynas@cvs.openbsd.org>2011-04-29 21:37:41 +0000
commit0b05b97e06656f9592abd0da0dec56488e88bf54 (patch)
treeaeadbf032ac6e9ad91a990981a2b1b8667d1290b /lib/libm
parente2c007b61e4ab4e9e12d9d9ae455a7ffba1a7471 (diff)
Trick GCC (-O2) into actually raising the underflow exception on m88k.
Since the second division operand is a power of two, non-zero, non-nan, this got optimized (-O2) into multiplication. As a result the underflow exception wasn't being raised properly. Make the second operand a volatile to prevent incorrect optimizations. OK miod@.
Diffstat (limited to 'lib/libm')
-rw-r--r--lib/libm/arch/m88k/fenv.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/libm/arch/m88k/fenv.c b/lib/libm/arch/m88k/fenv.c
index 902914b9ade..e2aa8f989b2 100644
--- a/lib/libm/arch/m88k/fenv.c
+++ b/lib/libm/arch/m88k/fenv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fenv.c,v 1.2 2011/04/28 22:07:10 miod Exp $ */
+/* $OpenBSD: fenv.c,v 1.3 2011/04/29 21:37:40 martynas Exp $ */
/*
* Copyright (c) 2011 Martynas Venckus <martynas@openbsd.org>
@@ -109,8 +109,8 @@ feraiseexcept(int excepts)
d *= 2.0;
}
if (excepts & FE_UNDERFLOW) {
- d = 0x1p-1022;
- d /= 0x1p1023;
+ d = 0x1p1023;
+ d = 0x1p-1022 / d;
}
if (excepts & FE_INEXACT) {
d = 0x1p-1022;