From a3dcf24b1c204bcff76bcdd046dd1b9df4bedf83 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Tue, 23 Apr 2024 20:46:18 +0800 Subject: [PATCH] fpu bugs --- c/fpu.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/c/fpu.h b/c/fpu.h index 417bec1..12995c7 100644 --- a/c/fpu.h +++ b/c/fpu.h @@ -165,10 +165,10 @@ static inline bool dn_f32_f32_f32(float32_t * a, float32_t * b, float32_t * c, u if ((!is_nan_f32(*a)) && (!is_nan_f32(*b)) && (!is_nan_f32(*c))) { // neither input is a NaN if (is_denormal_f32(*a) || is_denormal_f32(*b) || is_denormal_f32(*c)) { // either input is denormalized fpscr->cause_fpu_error = 1; - return false; // do not continue + return true; // do not continue } } - return true; + return false; case 1: /* * When FPSCR.DN is 1, a positive denormalized number is treated as @@ -179,7 +179,7 @@ static inline bool dn_f32_f32_f32(float32_t * a, float32_t * b, float32_t * c, u if (is_denormal_f32(*a)) *a = flush_to_zero_f32(*a); if (is_denormal_f32(*b)) *b = flush_to_zero_f32(*b); if (is_denormal_f32(*c)) *c = flush_to_zero_f32(*c); - return true; + return false; default: assert(false); } @@ -197,10 +197,10 @@ static inline bool dn_f32_f32(float32_t * a, float32_t * b, uint32_t * fps) if ((!is_nan_f32(*a)) && (!is_nan_f32(*b))) { // neither input is a NaN if (is_denormal_f32(*a) || is_denormal_f32(*b)) { // either input is denormalized fpscr->cause_fpu_error = 1; - return false; // do not continue + return true; // do not continue } } - return true; + return false; case 1: /* * When FPSCR.DN is 1, a positive denormalized number is treated as @@ -210,7 +210,7 @@ static inline bool dn_f32_f32(float32_t * a, float32_t * b, uint32_t * fps) */ if (is_denormal_f32(*a)) *a = flush_to_zero_f32(*a); if (is_denormal_f32(*b)) *b = flush_to_zero_f32(*b); - return true; + return false; default: assert(false); } @@ -440,7 +440,7 @@ static inline float64_t fabs_d(float64_t op1) static inline float32_t fneg_s(float32_t op1) { - op1.v ^= 0x80000000'00000000; + op1.v ^= 0x80000000; return op1; } @@ -496,7 +496,7 @@ static inline bool fcmpgt_s(float32_t op2, float32_t op1, uint32_t * fps) if (dn_f32_f32(&op2, &op1, fps)) return false; set_rounding_mode(fps); - bool result = f32_le(op1, op2); + bool result = f32_le(op2, op1); update_fpscr(fps); return !result; } @@ -506,7 +506,7 @@ static inline bool fcmpgt_d(float64_t op2, float64_t op1, uint32_t * fps) if (dn_f64_f64(&op2, &op1, fps)) return false; set_rounding_mode(fps); - bool result = f64_le(op1, op2); + bool result = f64_le(op2, op1); update_fpscr(fps); return !result; }