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();