]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - fold.c
Arithmetic exception flag and a plethora of tests.
[xonotic/gmqcc.git] / fold.c
diff --git a/fold.c b/fold.c
index 1cd8dfa21aeda2757d751f33bc784a2669d22b90..98bbdb745ec27a48fe7e44a45f9c0f2070e0bc89 100644 (file)
--- a/fold.c
+++ b/fold.c
@@ -48,11 +48,11 @@ typedef union {
 } sfloat_cast_t;
 
 typedef enum {
-    SFLOAT_INVALID   = 1,
-    SFLOAT_DIVBYZERO = 4,
-    SFLOAT_OVERFLOW  = 8,
-    SFLOAT_UNDERFLOW = 16,
-    SFLOAT_INEXACT   = 32
+    SFLOAT_INVALID   = 1 << 0,
+    SFLOAT_DIVBYZERO = 1 << 1,
+    SFLOAT_OVERFLOW  = 1 << 2,
+    SFLOAT_UNDERFLOW = 1 << 3,
+    SFLOAT_INEXACT   = 1 << 4
 } sfloat_exceptionflags_t;
 
 typedef enum {
@@ -820,6 +820,9 @@ static bool fold_check_except_float(sfloat_t (*callback)(sfloat_state_t *, sfloa
     sfloat_cast_t ca;
     sfloat_cast_t cb;
 
+    if (!OPTS_FLAG(ARITHMETIC_EXCEPTIONS))
+        return false;
+
     s.roundingmode   = SFLOAT_ROUND_NEAREST_EVEN;
     s.tiny           = SFLOAT_TBEFORE;
     s.exceptionflags = 0;