From 2f29daab2d53a286dd81122933c9d80c7b025527 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Sat, 6 Dec 2025 11:15:11 +1100 Subject: [PATCH] FPU: Fix setting of r.x for single-precision operations The fp_rounding function expects r.x to have been set based on the lower 31 bits of r.r, not 29 as presently done, so change 28 to SP_RBIT-1 (SP_RBIT is 31). Also add a test to check. Signed-off-by: Paul Mackerras --- fpu.vhdl | 2 +- tests/fpu/fpu.c | 1 + tests/test_fpu.bin | Bin 33104 -> 33136 bytes 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fpu.vhdl b/fpu.vhdl index 4662c9b..0246faf 100644 --- a/fpu.vhdl +++ b/fpu.vhdl @@ -3239,7 +3239,7 @@ begin -- If shifting right, test if bits of R will be shifted out of significance if r.longmask = '1' then - mshift := to_signed(28, EXP_BITS); + mshift := to_signed(SP_RBIT - 1, EXP_BITS); else mshift := to_signed(-1, EXP_BITS); end if; diff --git a/tests/fpu/fpu.c b/tests/fpu/fpu.c index ed2b619..b89674f 100644 --- a/tests/fpu/fpu.c +++ b/tests/fpu/fpu.c @@ -680,6 +680,7 @@ struct roundvals { { FPS_RN_NEAR, 0x38012345b0000000, 0x38012345c0000000, FPS_FR|FPS_FI }, { FPS_RN_NEAR, 0x37c12345b0000000, 0x37c1234400000000, FPS_FI }, { FPS_RN_NEAR, 0x0000008800000088, 0, FPS_FI }, + { FPS_RN_NEAR, 0xc2000000c2000000, 0xc2000000c0000000, FPS_FI }, }; int test8(long arg) diff --git a/tests/test_fpu.bin b/tests/test_fpu.bin index 35d5f45ff2e11747fcad8d954deb7de6fd06b1e0..e75740c0a82a2075a48977cfa7e0d1a7b3563f8b 100755 GIT binary patch delta 4616 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 P7M>c+ruTL=bp`wn59n60 delta 4596 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 aMjGMmw6`X@Keon~Mb~&r|M`{^5&s3pv`tL_