From 7b1febcbd3f2a5e52c1c446778c0877e7e124f8b Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Tue, 18 Nov 2025 22:49:45 +0000 Subject: [PATCH] tests/fpu: Check setting of FR and FI in FPSCR by frsp instruction Signed-off-by: Paul Mackerras --- tests/fpu/fpu.c | 54 +++++++++++++++++++++++++++------------------ tests/test_fpu.bin | Bin 32896 -> 33072 bytes 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/tests/fpu/fpu.c b/tests/fpu/fpu.c index 5e45038..4ecfd2a 100644 --- a/tests/fpu/fpu.c +++ b/tests/fpu/fpu.c @@ -21,6 +21,8 @@ #define FPS_VE 0x80 #define FPS_VXCVI 0x100 #define FPS_VXSOFT 0x400 +#define FPS_FI 0x20000 +#define FPS_FR 0x40000 extern int trapit(long arg, int (*func)(long)); extern void do_rfid(unsigned long msr); @@ -653,29 +655,30 @@ struct roundvals { unsigned long fpscr; unsigned long dpval; unsigned long spval; + unsigned long fpscr_fir; } roundvals[] = { - { FPS_RN_NEAR, 0, 0 }, - { FPS_RN_CEIL, 0x8000000000000000, 0x8000000000000000 }, - { FPS_RN_NEAR, 0x402123456789abcd, 0x4021234560000000 }, - { FPS_RN_ZERO, 0x402123456789abcd, 0x4021234560000000 }, - { FPS_RN_CEIL, 0x402123456789abcd, 0x4021234580000000 }, - { FPS_RN_FLOOR, 0x402123456789abcd, 0x4021234560000000 }, - { FPS_RN_NEAR, 0x402123457689abcd, 0x4021234580000000 }, - { FPS_RN_ZERO, 0x402123457689abcd, 0x4021234560000000 }, - { FPS_RN_CEIL, 0x402123457689abcd, 0x4021234580000000 }, - { FPS_RN_FLOOR, 0x402123457689abcd, 0x4021234560000000 }, - { FPS_RN_NEAR, 0x4021234570000000, 0x4021234580000000 }, - { FPS_RN_NEAR, 0x4021234550000000, 0x4021234540000000 }, - { FPS_RN_NEAR, 0x7ff123456789abcd, 0x7ff9234560000000 }, - { FPS_RN_ZERO, 0x7ffa3456789abcde, 0x7ffa345660000000 }, - { FPS_RN_FLOOR, 0x7ff0000000000000, 0x7ff0000000000000 }, - { FPS_RN_NEAR, 0x47e1234550000000, 0x47e1234540000000 }, - { FPS_RN_NEAR, 0x47f1234550000000, 0x7ff0000000000000 }, - { FPS_RN_ZERO, 0x47f1234550000000, 0x47efffffe0000000 }, - { FPS_RN_CEIL, 0x47f1234550000000, 0x7ff0000000000000 }, - { FPS_RN_FLOOR, 0x47f1234550000000, 0x47efffffe0000000 }, - { FPS_RN_NEAR, 0x38012345b0000000, 0x38012345c0000000 }, - { FPS_RN_NEAR, 0x37c12345b0000000, 0x37c1234400000000 }, + { FPS_RN_NEAR|FPS_FI|FPS_FR, 0, 0, 0 }, + { FPS_RN_CEIL|FPS_FI|FPS_FR, 0x8000000000000000, 0x8000000000000000, 0 }, + { FPS_RN_NEAR|FPS_FR, 0x402123456789abcd, 0x4021234560000000, FPS_FI }, + { FPS_RN_ZERO|FPS_FR, 0x402123456789abcd, 0x4021234560000000, FPS_FI }, + { FPS_RN_CEIL, 0x402123456789abcd, 0x4021234580000000, FPS_FR|FPS_FI }, + { FPS_RN_FLOOR, 0x402123456789abcd, 0x4021234560000000, FPS_FI }, + { FPS_RN_NEAR, 0x402123457689abcd, 0x4021234580000000, FPS_FR|FPS_FI }, + { FPS_RN_ZERO|FPS_FR|FPS_FI, 0x402123457689abcd, 0x4021234560000000, FPS_FI }, + { FPS_RN_CEIL|FPS_FR, 0x402123457689abcd, 0x4021234580000000, FPS_FR|FPS_FI }, + { FPS_RN_FLOOR, 0x402123457689abcd, 0x4021234560000000, FPS_FI }, + { FPS_RN_NEAR, 0x4021234570000000, 0x4021234580000000, FPS_FR|FPS_FI }, + { FPS_RN_NEAR, 0x4021234550000000, 0x4021234540000000, FPS_FI }, + { FPS_RN_NEAR|FPS_FR|FPS_FI, 0x7ff123456789abcd, 0x7ff9234560000000, 0 }, + { FPS_RN_ZERO|FPS_FR, 0x7ffa3456789abcde, 0x7ffa345660000000, 0 }, + { FPS_RN_FLOOR|FPS_FR|FPS_FI, 0x7ff0000000000000, 0x7ff0000000000000, 0 }, + { FPS_RN_NEAR, 0x47e1234550000000, 0x47e1234540000000, FPS_FI }, + { FPS_RN_NEAR, 0x47f1234550000000, 0x7ff0000000000000, FPS_FR|FPS_FI }, + { FPS_RN_ZERO, 0x47f1234550000000, 0x47efffffe0000000, FPS_FI }, + { FPS_RN_CEIL, 0x47f1234550000000, 0x7ff0000000000000, FPS_FR|FPS_FI }, + { FPS_RN_FLOOR, 0x47f1234550000000, 0x47efffffe0000000, FPS_FI }, + { FPS_RN_NEAR, 0x38012345b0000000, 0x38012345c0000000, FPS_FR|FPS_FI }, + { FPS_RN_NEAR, 0x37c12345b0000000, 0x37c1234400000000, FPS_FI }, }; int test8(long arg) @@ -696,6 +699,13 @@ int test8(long arg) } if (check_fprf(result, true, fpscr)) return i + 0x101; + if ((fpscr & (FPS_FR|FPS_FI)) != roundvals[i].fpscr_fir) { + print_string("\r\n"); + print_hex(i, 4, " "); + print_hex(fpscr, 8, " "); + print_hex(roundvals[i].fpscr_fir, 8, " "); + return i + 0x201; + } } return 0; } diff --git a/tests/test_fpu.bin b/tests/test_fpu.bin index b2a293c223beb4f42d028d6301a081fde8194082..09be7e4f66691e241c7320c43798fda38093f4d8 100755 GIT binary patch delta 6298 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 BKl1

4>L%D(Z@pA#zBrD5(L}e;KJ;(HDX4Z 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