From 7f781b835d12db4296325644e220e101560c3f9a Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Tue, 12 Mar 2024 15:11:25 +1100 Subject: [PATCH] tests/fpu: Add tests for ftdiv and ftsqrt Signed-off-by: Paul Mackerras --- tests/fpu/fpu.c | 60 +++++++++++++++++++++++++++++++++++++ tests/test_fpu.bin | Bin 31232 -> 31832 bytes tests/test_fpu.console_out | 1 + 3 files changed, 61 insertions(+) diff --git a/tests/fpu/fpu.c b/tests/fpu/fpu.c index 059d83b..79ba7fa 100644 --- a/tests/fpu/fpu.c +++ b/tests/fpu/fpu.c @@ -1665,6 +1665,65 @@ int fpu_test_25(void) return 0; } +struct ftvals { + unsigned long val_a; + unsigned long val_b; + int cr_ftdiv; + int cr_ftsqrt; +} ftvals[] = { + { 0x3ff0000000000000, 0x3ff0000000000000, 0, 0 }, + { 0x0000000000000000, 0x3ff0000000000000, 0, 6 }, + { 0xfff0000000000000, 0x3ff0000000000000, 6, 6 }, + { 0x7ff1234560000000, 0x3ff0000000000000, 2, 2 }, + { 0x3ff0000000000000, 0xfff0000000000000, 6, 0 }, + { 0x3ff0000000000000, 0x8000000000000000, 6, 0 }, + { 0x3ff0000000000000, 0x7ff9234560000000, 2, 0 }, + { 0x3ff0000000000000, 0x0020000000000000, 0, 0 }, + { 0x3ff0000000000000, 0x0010000000000000, 2, 0 }, + { 0x3ff0000000000000, 0x0001000000000000, 6, 0 }, + { 0x3ff0000000000000, 0x7fb1234500000000, 0, 0 }, + { 0x3ff0000000000000, 0x7fc1234500000000, 2, 0 }, + { 0x3ff0000000000000, 0x7fd1234500000000, 2, 0 }, + { 0x3ff0000000000000, 0x7fe1234500000000, 2, 0 }, + { 0x6000000000000000, 0x2000000000000000, 2, 0 }, + { 0x5ff0000000000000, 0x2000000000000000, 2, 0 }, + { 0x5fe0000000000000, 0x2000000000000000, 0, 0 }, + { 0x2000000000000000, 0x5fc0000000000000, 0, 0 }, + { 0x2000000000000000, 0x5fd0000000000000, 2, 0 }, + { 0x0360000000000000, 0x4320000000000000, 0, 0 }, + { 0x0350000000000000, 0x4310000000000000, 2, 2 }, + { 0x0010000000000000, 0x3fd0000000000000, 2, 2 }, + { 0x0001000000000000, 0x3fd0000000000000, 2, 6 }, + { 0xbff0000000000000, 0x3ff0000000000000, 0, 2 }, + { 0x3fd0000000000000, 0x0001000000000000, 6, 0 }, +}; + +int test26(long arg) +{ + long i; + int cr; + struct ftvals *vp = ftvals; + + set_fpscr(FPS_RN_NEAR); + for (i = 0; i < sizeof(ftvals) / sizeof(ftvals[0]); ++i, ++vp) { + asm("lfd 5,0(%1); lfd 6,8(%1); ftdiv 5,5,6; ftsqrt 4,5; mfcr %0" : + "=r" (cr) : "b" (&vp->val_a) : "cr4", "cr5"); + if (((cr >> 8) & 0xf) != vp->cr_ftdiv || + ((cr >> 12) & 0x1f) != vp->cr_ftsqrt) { + print_hex(i, 2, " "); + print_hex(cr, 8, " "); + return i + 1; + } + } + return 0; +} + +int fpu_test_26(void) +{ + enable_fp(); + return trapit(0, test26); +} + int fail = 0; void do_test(int num, int (*test)(void)) @@ -1715,6 +1774,7 @@ int main(void) do_test(23, fpu_test_23); do_test(24, fpu_test_24); do_test(25, fpu_test_25); + do_test(26, fpu_test_26); return fail; } diff --git a/tests/test_fpu.bin b/tests/test_fpu.bin index e4e2116694ee651e3e897429a5d913a5daedb2c8..cc6c1ccb06362188008b2c1a3cdc5936a329d9f3 100755 GIT binary patch delta 4768 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 LPj?7a!?XSeWNSL4 delta 3739 zcmai04Ny~87QXKp!cVho41ys*2mz7b7*oaYBLqYY;a8=O>l7uTR?!ihY29dp2{!E( z>N4W7-9K%0SDhupGP*cU>w=?QyHmUB#ugA(w5VVKk>X#AYxV89FHv8ZcKT-CJLmh( zx#ym9@44^2o(abOfQco6J*Q{)Nq#pGf3{i&71%ZEkxiy~xP=l8Mos1B-dldEuID z8SCeSlptk7smJQcXqd&UF{@!>OtAKGI}Mh{1GXtV2Rnjd75AERhOrplyw776xy`47 zlmX+-Id$&2;8u_>K;&F)r*OO()YEh!4-<*;3>P)QaevO@xSd&q^rxRKf~skmY=0s+ zr&Wo|mOJ$Ix8Y)l23+AHC=8y)Siu}z!qmXA;1YJI0N9XX(eeahgzp^uL7*A@iVcx`d4>gB8>B#FAwW{gWZywGY|P zSHZ~iM%G}4?eaWv#%hQD>NmXc2f2hbR6;;#o;YcPLto@(cZEt==^FSWvi)lu`i@(? zZ@5CjtcQ5TBBm6!C>F6TYvH6KPi$G|(C;7QJu<>1;@sC9`d28_fgxPP)WLQ19gCdeQnIaQdOB8I4OcNjdjXL$Z z3Qk1o=$H{SoK``IDoxyPSEnYcV3{hD8a`01V|%LMsVanRiG+}-tzv@qyGqy-#oND( zTBqo#KCJg6c6~nX2}5@1D@c_7xNoJkMhQ#QRj@mHT2X&>rCv&yiA$KV`F~tN_v5EF zEwSkX2p36R-&eRhwRGHO)sjknc%6q!!!3TpqiZp=3+_f|F|%QIOc-`L6vtFCL-0uq z$e3_q+~QdhLQbbkKZ2DrT5Us^o`mc)VDDv&qi$KcpjL|MrcTfk8JIAR{6HuTG; zn2w=7!RV8THbNqJzsWwd?7QF7IAOe9Pt5j7KGXTNxqwb|ZFYOsW>f(UaaACh87B+H z+JtGx{Rz{Kg-tWx{mIl9fA{mLC!^2LrS8wi`N`Bn_|yj$p*_uR?tGXk-2lspbw_Jhc_F)@cN6XE(Y`q>#*UWPNpSE)pKfYfNkfZgUL(Gt@)KX7W5ggVQ$Tmp5cUt~CU}ra&>G|OoWR$+s zZe-CwGzcw^mT?SuVMzxO3rlK3EG(%GF)hj6YtgkWaA&rSeG&+nbHkV>XwYS5yQ;5Y zXk2^DxBj+w?%NR4>F7D2Y0&i6A}6fp0QkSWie&;}vrfUvcfmU^=Xu3^d&E2D8;B>z zG$SXBxetCZXBGQI!pE$64;tpABn$Iw8upG^hgdki9q!C2VUykC4GpkjZi+@Y{>+f~ z_+yBL<40eDQ*(>i@|XAoj@Cm$iq0#6hu?Sy7(^@#po03861FM8J^mf|ZqoSpN#jE& zjW2^&=9RFY`Mbxz4WG{Qp1=H-_xweOh4a4)QTh^}M}EY35Vq)oMW@pb?1V=B5;NaO zc;aX?Z5i|g@thYkVqtSFMl5WuY{ay=gx!#g9BnZ7i$1z`J!Gf8$uvVpYGVGg(;qe9 zefrBi_}S?%qF8YH=OY%L{?}o4+Dvw;FTWV__h4(9cQ+iq$=6}09ZX}sk65@EF6d2r z%QoTu?hH+E*KZ%0;%7Z{gL zcZA)Je(tj%MgDI*_vUj>j@%!R`_*NxU@rC){YFuLJU2o73lu+m&l9M*0b}WEW^vop z3>yIPcfwefB2S9{a4jNYb(R=vsm^|C+9o3L zsX}fFF{DZ+aZ)b~#Resd5jPujf$mKFlRU|_8jAm(En?Os{fFc5!^vM#d{R5XU)@rk zA%t=Uyfct%5pZRwcOs_}aO+X;M=r+0QEA0{+yzxRvFyG}uqP*hZT}KZsnsU2qXaSr?3q155X;cR;a~y6Hf2r`V=cY_My7`zc7-QB9{B0dIeQo zKnw;fqp%M?SfmcMqT15;V#&2=-i_SHaB0yj@mbUkT?Lad4Gcz+*iTG|@oR*cnnF}Z z`(M;Tx3mJe2gv23POn0|Uq>$HI-D??lFy=QAK