From 9ac71cfbf2a666b3ff5e75fbaa3c9e99cee19597 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Fri, 5 Apr 2024 09:34:14 +1100 Subject: [PATCH] tests/fpu: Add more floating multiply-add tests Add more tests to check that the result sign computations are correct. Signed-off-by: Paul Mackerras --- tests/fpu/fpu.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ tests/test_fpu.bin | Bin 31832 -> 32896 bytes 2 files changed, 71 insertions(+) diff --git a/tests/fpu/fpu.c b/tests/fpu/fpu.c index 79ba7fa..c13110f 100644 --- a/tests/fpu/fpu.c +++ b/tests/fpu/fpu.c @@ -1496,34 +1496,105 @@ struct fmavals { unsigned long nfma; unsigned long nfms; } fmavals[] = { + /* +0 * +0 +- +0 -> +0, +0, -0, -0 */ { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x8000000000000000, 0x8000000000000000 }, + /* +0 * NaNC +- +0 -> NaNC, NaNC, NaNC, NaNC */ { 0x0000000000000000, 0x7ffc000000000000, 0x0000000000000000, 0x7ffc000000000000, 0x7ffc000000000000, 0x7ffc000000000000, 0x7ffc000000000000 }, + /* +0 * NaNC +- NaNB -> NaNB, NaNB, NaNB, NaNB */ { 0x0000000000000000, 0x7ffc000000000000, 0x7ffb000000000000, 0x7ffb000000000000, 0x7ffb000000000000, 0x7ffb000000000000, 0x7ffb000000000000 }, + /* NaNA * NaNC +- NaNB -> NaNA, NaNA, NaNA, NaNA */ { 0x7ffa000000000000, 0x7ffc000000000000, 0x7ffb000000000000, 0x7ffa000000000000, 0x7ffa000000000000, 0x7ffa000000000000, 0x7ffa000000000000 }, + /* +1.0 * -0 +- +finite B -> +B, -B, -B, +B */ { 0x3ff0000000000000, 0x8000000000000000, 0x678123456789abcd, 0x678123456789abcd, 0xe78123456789abcd, 0xe78123456789abcd, 0x678123456789abcd }, + /* +1.0 * -1.0 +- (B = +3.818e+190) -> +B, -B, -B, +B */ { 0x3ff0000000000000, 0xbff0000000000000, 0x678123456789abcd, 0x678123456789abcd, 0xe78123456789abcd, 0xe78123456789abcd, 0x678123456789abcd }, + /* +inf * -1.0 +- +finite B -> -inf, -inf, +inf, +inf */ { 0x7ff0000000000000, 0xbff0000000000000, 0x678123456789abcd, 0xfff0000000000000, 0xfff0000000000000, 0x7ff0000000000000, 0x7ff0000000000000 }, + /* +inf * +0 +- +finite B -> NaNQ, NaNQ, NaNQ, NaNQ */ { 0x7ff0000000000000, 0x0000000000000000, 0x678123456789abcd, 0x7ff8000000000000, 0x7ff8000000000000, 0x7ff8000000000000, 0x7ff8000000000000 }, + /* +1.0 * +1.0 +- 1.00000012 -> +2.00000012, +1.2e-7, -2.00000012, -1.2e-7 */ { 0x3ff0000000000000, 0x3ff0000000000000, 0x3ff0000020000000, 0x4000000010000000, 0xbe80000000000000, 0xc000000010000000, 0x3e80000000000000 }, + /* +(1 + 2^-52) * +(1 + 2^-52) +- +1.0 -> +(2 + 2^-51), +2^-51, -(2 + 2^-51), -2^-51 */ { 0x3ff0000000000001, 0x3ff0000000000001, 0x3ff0000000000000, 0x4000000000000001, 0x3cc0000000000000, 0xc000000000000001, 0xbcc0000000000000 }, + /* +(1 + 3*2^-52) * +(1 + 2^-51) +- +1.0 -> +(2 + 2^-50), +5 * 2^-52 + 2^-101, -, - */ { 0x3ff0000000000003, 0x3ff0000000000002, 0x3ff0000000000000, 0x4000000000000002, 0x3cd4000000000002, 0xc000000000000002, 0xbcd4000000000002 }, + /* +2.443e-77 * 2.828 +- 6.909e-77 -> -1.402e-93, +1.382e-76, +1.402e-93, -1.382e-76 */ { 0x3006a09e667f3bcc, 0x4006a09e667f3bcd, 0xb020000000000000, 0xaca765753908cd20, 0x3030000000000000, 0x2ca765753908cd20, 0xb030000000000000 }, + /* +2.443e-77 * 2.828 +- 6.909e-77 -> +9.446e-93, +1.382e-76, -9.446e-93, -1.382e-76 */ { 0x3006a09e667f3bcd, 0x4006a09e667f3bcd, 0xb020000000000000, 0x2cd3b3efbf5e2229, 0x3030000000000000, 0xacd3b3efbf5e2229, 0xb030000000000000 }, + /* +2.443e-77 * 2.828 +- -1.1055e-75 -> -1.0364e-75, +1.1746e-75, +1.0364e-75, -1.1746e-75 */ { 0x3006a09e667f3bcc, 0x4006a09e667f3bcd, 0xb060003450000000, 0xb05e0068a0000000, 0x3061003450000000, 0x305e0068a0000000, 0xb061003450000000 }, + /* +2 * +3 +- 3 -> +9, +3, -9, -3 */ + { 0x4000000000000000, 0x4008000000000000, 0x4008000000000000, + 0x4022000000000000, 0x4008000000000000, 0xc022000000000000, 0xc008000000000000 }, + /* +2 * +3 +- 5 -> +11, +1, -11, -1 */ + { 0x4000000000000000, 0x4008000000000000, 0x4014000000000000, + 0x4026000000000000, 0x3ff0000000000000, 0xc026000000000000, 0xbff0000000000000 }, + /* +2 * +3 +- 7 -> +13, -1, -13, +1 */ + { 0x4000000000000000, 0x4008000000000000, 0x401c000000000000, + 0x402a000000000000, 0xbff0000000000000, 0xc02a000000000000, 0x3ff0000000000000 }, + /* +2 * +3 +- 9 -> +15, -3, -15, +3 */ + { 0x4000000000000000, 0x4008000000000000, 0x4022000000000000, + 0x402e000000000000, 0xc008000000000000, 0xc02e000000000000, 0x4008000000000000 }, + /* +2 * +3 +- -3 -> +3, +9, -3, -9 */ + { 0x4000000000000000, 0x4008000000000000, 0xc008000000000000, + 0x4008000000000000, 0x4022000000000000, 0xc008000000000000, 0xc022000000000000 }, + /* +2 * +3 +- -5 -> +1, +11, -1, -11 */ + { 0x4000000000000000, 0x4008000000000000, 0xc014000000000000, + 0x3ff0000000000000, 0x4026000000000000, 0xbff0000000000000, 0xc026000000000000 }, + /* +2 * +3 +- -7 -> -1, +13, +1, -13 */ + { 0x4000000000000000, 0x4008000000000000, 0xc01c000000000000, + 0xbff0000000000000, 0x402a000000000000, 0x3ff0000000000000, 0xc02a000000000000 }, + /* +2 * +3 +- -9 -> -3, +15, +3, -15 */ + { 0x4000000000000000, 0x4008000000000000, 0xc022000000000000, + 0xc008000000000000, 0x402e000000000000, 0x4008000000000000, 0xc02e000000000000 }, + /* +2 * -3 +- 3 -> -3, -9, +3, +9 */ + { 0x4000000000000000, 0xc008000000000000, 0x4008000000000000, + 0xc008000000000000, 0xc022000000000000, 0x4008000000000000, 0x4022000000000000 }, + /* +2 * -3 +- 5 -> -1, -11, +1, +11 */ + { 0x4000000000000000, 0xc008000000000000, 0x4014000000000000, + 0xbff0000000000000, 0xc026000000000000, 0x3ff0000000000000, 0x4026000000000000 }, + /* +2 * -3 +- 7 -> +1, -13, -1, +13 */ + { 0x4000000000000000, 0xc008000000000000, 0x401c000000000000, + 0x3ff0000000000000, 0xc02a000000000000, 0xbff0000000000000, 0x402a000000000000 }, + /* +2 * -3 +- 9 -> +3, -15, -3, +15 */ + { 0x4000000000000000, 0xc008000000000000, 0x4022000000000000, + 0x4008000000000000, 0xc02e000000000000, 0xc008000000000000, 0x402e000000000000 }, + /* -2 * +3 +- -3 -> -9, -3, +9, +3 */ + { 0xc000000000000000, 0x4008000000000000, 0xc008000000000000, + 0xc022000000000000, 0xc008000000000000, 0x4022000000000000, 0x4008000000000000 }, + /* -2 * +3 +- -5 -> -11, -1, +11, +1 */ + { 0xc000000000000000, 0x4008000000000000, 0xc014000000000000, + 0xc026000000000000, 0xbff0000000000000, 0x4026000000000000, 0x3ff0000000000000 }, + /* -2 * +3 +- -7 -> -13, +1, +13, -1 */ + { 0xc000000000000000, 0x4008000000000000, 0xc01c000000000000, + 0xc02a000000000000, 0x3ff0000000000000, 0x402a000000000000, 0xbff0000000000000 }, + /* -2 * +3 +- -9 -> -15, +3, +15, -3 */ + { 0xc000000000000000, 0x4008000000000000, 0xc022000000000000, + 0xc02e000000000000, 0x4008000000000000, 0x402e000000000000, 0xc008000000000000 }, + /* -2 * +3 +- +0 -> -6, -6, +6, +6 */ + { 0xc000000000000000, 0x4008000000000000, 0x0000000000000000, + 0xc018000000000000, 0xc018000000000000, 0x4018000000000000, 0x4018000000000000 }, + /* +2 * -3 +- -0 -> -6, -6, +6, +6 */ + { 0x4000000000000000, 0xc008000000000000, 0x8000000000000000, + 0xc018000000000000, 0xc018000000000000, 0x4018000000000000, 0x4018000000000000 }, + /* 2^-1026 * (1.5 * 2^1023) +- -0 -> (1.5 * 2^-3), ditto, -ditto, -ditto */ + { 0x0001000000000000, 0x7fe8000000000000, 0x8000000000000000, + 0x3fc8000000000000, 0x3fc8000000000000, 0xbfc8000000000000, 0xbfc8000000000000 }, }; int test23(long arg) diff --git a/tests/test_fpu.bin b/tests/test_fpu.bin index cc6c1ccb06362188008b2c1a3cdc5936a329d9f3..24878af7125b68dfa588e23782443a3a7f773f65 100755 GIT binary patch delta 3912 zcmaJ@3s6+o89rx0VU@K!1zBKU1a>#PU+x0S-UWeWkynFNnUJ{VX?zqqNeUI+g)$v+ zqyc}^Av0;J9d#K zX#HLfA;VXXe~8oOf8^#VD=aKNJF-Mks>GB6SH@~g zvDL5fJzU4V2~UW?!S%Hu$%?J9} zytw2{;ylCaW_kX%cAoFC6Ea>B4jW?aG#n1aZd|x&ZLg*8OSrT&3qDK=9bFk0N~sr` zmS)o==w4b)&%t@bNQjEBrlqhJF%|Y9j>A;^Yjh2CCREdAID@zbl*_8=3TQ$!!W)RQ za077!Oo`QW540n`2PY8+fU2wMlTd>=GCHUR8ak3noG=re09>+G)rJpLCzfae+LJYO z3I>yxCv{-6i|!xtl!cjADTy*8iF9+TiOH%ZhEAABE{JY55a%&WmgPT@w!H&SfjK2h zG1~?$DOEHU_NA!dR$2IuhKIGb|9Cjt@UY1}JnV8WCVtDokn>&acq|r<{&-0w!DEeU zjg7h7MxwhrHm0@Z5NaJ8Gr6_ohK1Q0i32y+-DUfEUxP%Au$N0?#^henlq|^krQZ5J zoY3U65N;y9AL6uj8U?Ggc1Hb5`#dG^KpT%GiPLSRAH$$d5dNlnei>;$U?YP3n9$2fjVP+P#W#VcsvY!#_#Aw=r%1^480A1G;N{J zg2}v*a-*-C4~Nh~aAd_Na|x!dCrOW^L+$Aj-=OuSvu&qJ2$uRHypmnU^>@BRj@fvtw`A;jNmOxpdn(l^Qc(PA^cLZ21? z+@lp=t;t#b#+L^}!n;1Y!S>eT=L>(?g|o4~)QC1-pMLNpYV1W=fG0Btd(d(33(qui z2NgeKXQ-5&SPSx>3Eb8I$07GVa*j{<+QLb`HV1pg?6HrdS4&RNsDj2`OaBA5cu(mv z{P}N#eKu`~Z~Y_;EY&Vyp$z%-eQX}^!MC=p%DJak%ihA15@&xW*{8UhM2L-O!`-_p zT-$o_a5E2<%#aVhva2icLo*Uex`rFLZ3B3(IP2;R#UI&6xe&rxBZ9cddCySKY4BsW zh09k7Q7AK{xQ=r5zjuUETj(X8#}`%@k%&ycf?T6W5yo+N#r~D&M;_st@qPpx^2hOubE-TWzg*Mh8fpPmg$BQ0nTXFq9pWz7jCdUS5wF3K z3XLN4Be+zNLNj0*sb)~E(9kZ(MBEQ`h!tAZnN`^sR%=yu zrtykYqB^C6{D!`zs94e%<=DP%(GpVrkLwE^i*XHBwhN(zOu$L>Ylf++5=Hah;bv8y zG6$uX7ZB16?&^FD{PpVeIOjE<*CNjb(bE6tbE+$LxnMHusFSVy@y-|#Ty)qV|iQ~J+-nX1jg}y(ZkkA z_!Ljh_Qr*y8I50rc{tQ@gmc0anDxQWeo2>RAqu2qzgSMx)1-L@|BbPc=4VLA%xQ5B z_VXlhqF|P0+0g74d3m8=N4;d9CC%Y}B8)6)mIDj+lkFtkL-d^BM`S@SEfDM&EAetb zflQ^$(*B2ElI$nh1ril1iE-lka$@0raew@uDhhJ% z#3w=$Bt9^6qLLuZ!6hYLN%sfMob)Ws(hmfgG|2&YMT2uvW`X&%#Gi)CG=5aG#+v$H DLkTV0 delta 2865 zcmZuydr*_v6~8wmKm?S4kw<_8LITMG$?{AHAps18hk&E3!nnIeo0dv#$&Q`IAxNaK z0~WTj$3NH^w5wCxUCef5fOfX7j<(gxcGu#xZgpfV?0{qHy3J~Bv7%qkP2vDfznS~{ z?){x}&pnU(a3AK~T%t-s%tk_LY*)f+4&vYLcGcJj*^OKqa&5@9*-7V+GLN1gYRRR` z(^Yh-@Uvpe78?(lA`#j~SKaIMd-JV$`vj%0q zs(-(Wkg?m7|3~&sy&GjmZV#`>!u$*Mc;H%e4zKSFJdZBc`g}6u99O3I`Bdn)>R?NY z%8t$E<5Hil%@ca|xY@|+fwYaeVnsHw zUgA=hIPR2*1qb7+=uWtVxC?{{Rn!Vw5wqYu#ATRAJPWGC zDmn}f#H;WL;xV9-D!Lo05zkHxNr3Vv(}@*)G4WtdmWiA=C=K1aou&rTGza^WrSt&| zCKn|gz=9Vpf7DePrfL!rVOA13Y~Dds`qEH&6U-&&$Jpe=I*tLe94sggIdLZ_Q*wC3 z0k5T0(s($YB6;J#T{7bmH~-YfU3xk;rm{tli@MVx(=Jv?9NSrv7#~gO60?;_QlCT+ znK6@;>Cc^0*|db}nXZh?>u_vmoD6l?nmd06o235rDy3=+(jhen!jGisr(s;0$K1G! z^oM}^jEZ5a%*3d7W#3H*cZ}+yiCfpZ%+*qINVl7$>L$bXx{iS;wS(S*!BoHMwbX!W zII31ZU8}kiwxs=pPQm50ZOm$-JeU3ew#c_dMLYJQZMt+FV;O{xXZR`eCbql1yS^>HVa$guC+R?*2Ew*QA6>!d8k zXA;{zCPTe4HjW3QGA?Q@V^hW{*D$EhqIvS~Kr}~#ffEUwP`(?Jow(K^_i<=ZD4{i@ zFKUfP@GL{p^s-&%U-M(GwiNv$B-!ud%Q|fB0@NWy;+N})&Amnk_GiZN;uFxDec;O+ zpx2>ORm5vQ1HV@NkhX$C-A2j8korsr)q^o7juN=8j};Qfc|$nneHt7&Cd!BL9C^&~ z7-BuVD!F|hz}=iZLZ(I>oWToQH4S(!Pii`1UKg!wW40ZgqmZL54yxWUpjE8~ck@YY zZ46dnP08BdgXh{KiEKkTAN{`T@qMnA4To=YW9cLa^4=7P*RN=`zXRQQl}ziiJhhlDGU#Q6GwB=sg_C!l z1!4Z10#Ve;oU4QIc77q7b0J?%XTY1^ASjDmkq-~RYXyG!I|XVUiG<%4)C(LDD+=KQ zpe)Q~23iW$G#`2k8w8{4R>}L}VL+}dQe#cF7B%3JIaws(h4;aQBLB>XC>eodT?37R z{kk79V|R2l{s@{ESOlf|z?qYGy1=O4AzV*NvzDHBn}^}LR+4Z&EO3!JN5kU@*dtq_fLm} zyJqH@7czVk$!@2l%f)efO0=ls_M{C>p^P0U0TxgPLx#9)GiLr4vZr|+sClY{mDY;f zW#o)sa4Gss=t=8m>mK#M zH^z=tqqj;=;8qctK1IE2CJEv{OcDz|Mjk$KjWw7%k7A$qyPAW1yo6VCA;heYe2I%* zGlm+o6z%OZ=SBHf7iI-L7&F)NS$AT|%%|ezFE|blum6iiWLh&IDvvcr{+Z)E0Rdr> z?bv>aoNN`>iv6?5r3X3ocVW8-w(<02-+@KM z0T5WEc&-$PvtU8wgB>vodJ%hI)FKtne#vo3L5F4d|5peh3vkOK7ij;+adki|<#anJ zDmD1HHdSh}({Bb-R4Xhazn~|0o7Xpr$`0AqttaJwzY|&(fi_s$KF74q!8p!qg!xJX zVsaJ3=BhmEgTbl{@#fi;^l5R%f`E`lm_~UCJgcgpb5LfjQ1#5M_{S1I8A`|ia+|Tw zzB+7Ik^2-rwl;|47dY;ipC|q@WrYzk45I2-Ou3?3L))RLIu9f7$9_6|Qf