From d6b436a8151a23fe4e7bca92197f38373bcb4156 Mon Sep 17 00:00:00 2001 From: qazal <77887910+Qazalin@users.noreply.github.com> Date: Mon, 28 Apr 2025 10:46:42 +0300 Subject: [PATCH] remu bugfix with -0.0 negation (#10082) --- extra/remu/src/helpers.rs | 3 ++- extra/remu/src/thread.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/extra/remu/src/helpers.rs b/extra/remu/src/helpers.rs index 3d7f03bbcb..0534ea217e 100644 --- a/extra/remu/src/helpers.rs +++ b/extra/remu/src/helpers.rs @@ -56,7 +56,7 @@ where fn negate(&self, pos: usize, modifier: usize) -> T { match (modifier >> pos) & 1 { 1 => match self.is_zero() { - true => *self, + true => T::zero(), false => -*self, }, _ => *self, @@ -123,6 +123,7 @@ mod tests { assert_eq!(0.3_f32.negate(0, 0b110), 0.3_f32); assert_eq!(0.3_f32.negate(1, 0b010), -0.3_f32); assert_eq!(0.0_f32.negate(0, 0b001).to_bits(), 0); + assert_eq!((-0.0_f32).negate(0, 0b001).to_bits(), 0); } #[test] diff --git a/extra/remu/src/thread.rs b/extra/remu/src/thread.rs index eb716b0558..34e9009530 100644 --- a/extra/remu/src/thread.rs +++ b/extra/remu/src/thread.rs @@ -3019,7 +3019,7 @@ mod test_vop3 { #[test] fn test_v_cndmask_b32_e64_neg() { - [[0.0f32, 0.0], [1.0f32, -1.0], [-1.0f32, 1.0]].iter().for_each(|[input, ret]| { + [[0.0f32, 0.0], [-0.0f32, 0.0], [1.0f32, -1.0], [-1.0f32, 1.0]].iter().for_each(|[input, ret]| { let mut thread = _helper_test_thread(); thread.scalar_reg[0] = false as u32; thread.vec_reg[3] = input.to_bits();