15e33b037SMax Filippov#include "macros.inc" 2adbb3df0SMax Filippov#include "fpu.h" 35e33b037SMax Filippov 45e33b037SMax Filippovtest_suite lsc 55e33b037SMax Filippov 65e33b037SMax Filippov#if XCHAL_HAVE_FP 75e33b037SMax Filippov 85e33b037SMax Filippovtest lsi 95e33b037SMax Filippov movi a2, 1 105e33b037SMax Filippov wsr a2, cpenable 115e33b037SMax Filippov 125e33b037SMax Filippov movi a2, 1f 135e33b037SMax Filippov lsi f1, a2, 4 14adbb3df0SMax Filippov#if DFPU 15adbb3df0SMax Filippov lsi f2, a2, 8 16adbb3df0SMax Filippov lsip f0, a2, 8 17adbb3df0SMax Filippov#else 18adbb3df0SMax Filippov lsi f0, a2, 0 195e33b037SMax Filippov lsiu f2, a2, 8 20adbb3df0SMax Filippov#endif 215e33b037SMax Filippov movi a3, 1f + 8 225e33b037SMax Filippov assert eq, a2, a3 235e33b037SMax Filippov rfr a2, f0 245e33b037SMax Filippov movi a3, 0x3f800000 255e33b037SMax Filippov assert eq, a2, a3 265e33b037SMax Filippov rfr a2, f1 275e33b037SMax Filippov movi a3, 0x40000000 285e33b037SMax Filippov assert eq, a2, a3 295e33b037SMax Filippov rfr a2, f2 305e33b037SMax Filippov movi a3, 0x40400000 315e33b037SMax Filippov assert eq, a2, a3 325e33b037SMax Filippov.data 335e33b037SMax Filippov .align 4 345e33b037SMax Filippov1: 355e33b037SMax Filippov.float 1, 2, 3 365e33b037SMax Filippov.text 375e33b037SMax Filippovtest_end 385e33b037SMax Filippov 395e33b037SMax Filippovtest ssi 405e33b037SMax Filippov movi a2, 1f 415e33b037SMax Filippov movi a3, 0x40800000 425e33b037SMax Filippov wfr f3, a3 435e33b037SMax Filippov movi a3, 0x40a00000 445e33b037SMax Filippov wfr f4, a3 455e33b037SMax Filippov movi a3, 0x40c00000 465e33b037SMax Filippov wfr f5, a3 47adbb3df0SMax Filippov ssi f4, a2, 4 48adbb3df0SMax Filippov#if DFPU 49adbb3df0SMax Filippov ssi f5, a2, 8 50adbb3df0SMax Filippov ssip f3, a2, 8 51adbb3df0SMax Filippov#else 52adbb3df0SMax Filippov ssi f3, a2, 0 535e33b037SMax Filippov ssiu f5, a2, 8 54adbb3df0SMax Filippov#endif 555e33b037SMax Filippov movi a3, 1f + 8 565e33b037SMax Filippov assert eq, a2, a3 575e33b037SMax Filippov l32i a4, a2, -8 585e33b037SMax Filippov movi a3, 0x40800000 595e33b037SMax Filippov assert eq, a4, a3 605e33b037SMax Filippov l32i a4, a2, -4 615e33b037SMax Filippov movi a3, 0x40a00000 625e33b037SMax Filippov assert eq, a4, a3 635e33b037SMax Filippov l32i a4, a2, 0 645e33b037SMax Filippov movi a3, 0x40c00000 655e33b037SMax Filippov assert eq, a4, a3 665e33b037SMax Filippov.data 675e33b037SMax Filippov .align 4 685e33b037SMax Filippov1: 695e33b037SMax Filippov.float 0, 0, 0 705e33b037SMax Filippov.text 715e33b037SMax Filippovtest_end 725e33b037SMax Filippov 735e33b037SMax Filippovtest lsx 745e33b037SMax Filippov movi a2, 1f 755e33b037SMax Filippov movi a3, 0 76adbb3df0SMax Filippov movi a4, 4 77adbb3df0SMax Filippov movi a5, 8 78adbb3df0SMax Filippov lsx f7, a2, a4 79adbb3df0SMax Filippov#if DFPU 80adbb3df0SMax Filippov lsx f8, a2, a5 81adbb3df0SMax Filippov lsxp f6, a2, a5 82adbb3df0SMax Filippov#else 835e33b037SMax Filippov lsx f6, a2, a3 84adbb3df0SMax Filippov lsxu f8, a2, a5 85adbb3df0SMax Filippov#endif 865e33b037SMax Filippov movi a3, 1f + 8 875e33b037SMax Filippov assert eq, a2, a3 885e33b037SMax Filippov rfr a2, f6 895e33b037SMax Filippov movi a3, 0x40e00000 905e33b037SMax Filippov assert eq, a2, a3 915e33b037SMax Filippov rfr a2, f7 925e33b037SMax Filippov movi a3, 0x41000000 935e33b037SMax Filippov assert eq, a2, a3 945e33b037SMax Filippov rfr a2, f8 955e33b037SMax Filippov movi a3, 0x41100000 965e33b037SMax Filippov assert eq, a2, a3 975e33b037SMax Filippov.data 985e33b037SMax Filippov .align 4 995e33b037SMax Filippov1: 1005e33b037SMax Filippov.float 7, 8, 9 1015e33b037SMax Filippov.text 1025e33b037SMax Filippovtest_end 1035e33b037SMax Filippov 1045e33b037SMax Filippovtest ssx 1055e33b037SMax Filippov movi a2, 1f 1065e33b037SMax Filippov movi a4, 0x41200000 1075e33b037SMax Filippov wfr f9, a4 1085e33b037SMax Filippov movi a4, 0x41300000 1095e33b037SMax Filippov wfr f10, a4 1105e33b037SMax Filippov movi a4, 0x41400000 1115e33b037SMax Filippov wfr f11, a4 112adbb3df0SMax Filippov movi a3, 0 113adbb3df0SMax Filippov movi a4, 4 114adbb3df0SMax Filippov movi a5, 8 115adbb3df0SMax Filippov ssx f10, a2, a4 116adbb3df0SMax Filippov#if DFPU 117adbb3df0SMax Filippov ssx f11, a2, a5 118adbb3df0SMax Filippov ssxp f9, a2, a5 119adbb3df0SMax Filippov#else 120adbb3df0SMax Filippov ssx f9, a2, a3 121adbb3df0SMax Filippov ssxu f11, a2, a5 122adbb3df0SMax Filippov#endif 1235e33b037SMax Filippov movi a3, 1f + 8 1245e33b037SMax Filippov assert eq, a2, a3 1255e33b037SMax Filippov l32i a4, a2, -8 1265e33b037SMax Filippov movi a3, 0x41200000 1275e33b037SMax Filippov assert eq, a4, a3 1285e33b037SMax Filippov l32i a4, a2, -4 1295e33b037SMax Filippov movi a3, 0x41300000 1305e33b037SMax Filippov assert eq, a4, a3 1315e33b037SMax Filippov l32i a4, a2, 0 1325e33b037SMax Filippov movi a3, 0x41400000 1335e33b037SMax Filippov assert eq, a4, a3 1345e33b037SMax Filippov.data 1355e33b037SMax Filippov .align 4 1365e33b037SMax Filippov1: 1375e33b037SMax Filippov.float 0, 0, 0 1385e33b037SMax Filippov.text 1395e33b037SMax Filippovtest_end 1405e33b037SMax Filippov 1415e33b037SMax Filippov#endif 1425e33b037SMax Filippov 143*b2d84da9SMax Filippov#if XCHAL_HAVE_DFP 144*b2d84da9SMax Filippov 145*b2d84da9SMax Filippov#if XCHAL_HAVE_BE 146*b2d84da9SMax Filippov#define F64_HIGH_OFF 0 147*b2d84da9SMax Filippov#else 148*b2d84da9SMax Filippov#define F64_HIGH_OFF 4 149*b2d84da9SMax Filippov#endif 150*b2d84da9SMax Filippov 151*b2d84da9SMax Filippov.macro movdf fr, hi, lo 152*b2d84da9SMax Filippov movi a2, \hi 153*b2d84da9SMax Filippov movi a3, \lo 154*b2d84da9SMax Filippov wfrd \fr, a2, a3 155*b2d84da9SMax Filippov.endm 156*b2d84da9SMax Filippov 157*b2d84da9SMax Filippovtest ldi 158*b2d84da9SMax Filippov movi a2, 1 159*b2d84da9SMax Filippov wsr a2, cpenable 160*b2d84da9SMax Filippov 161*b2d84da9SMax Filippov movi a2, 1f 162*b2d84da9SMax Filippov ldi f1, a2, 8 163*b2d84da9SMax Filippov ldi f2, a2, 16 164*b2d84da9SMax Filippov ldip f0, a2, 16 165*b2d84da9SMax Filippov movi a3, 1f + 16 166*b2d84da9SMax Filippov assert eq, a2, a3 167*b2d84da9SMax Filippov rfrd a2, f0 168*b2d84da9SMax Filippov movi a3, 0x3ff00000 169*b2d84da9SMax Filippov assert eq, a2, a3 170*b2d84da9SMax Filippov rfrd a2, f1 171*b2d84da9SMax Filippov movi a3, 0x40000000 172*b2d84da9SMax Filippov assert eq, a2, a3 173*b2d84da9SMax Filippov rfrd a2, f2 174*b2d84da9SMax Filippov movi a3, 0x40080000 175*b2d84da9SMax Filippov assert eq, a2, a3 176*b2d84da9SMax Filippov.data 177*b2d84da9SMax Filippov .align 8 178*b2d84da9SMax Filippov1: 179*b2d84da9SMax Filippov.double 1, 2, 3 180*b2d84da9SMax Filippov.text 181*b2d84da9SMax Filippovtest_end 182*b2d84da9SMax Filippov 183*b2d84da9SMax Filippovtest sdi 184*b2d84da9SMax Filippov movdf f3, 0x40800000, 0 185*b2d84da9SMax Filippov movdf f4, 0x40a00000, 0 186*b2d84da9SMax Filippov movdf f5, 0x40c00000, 0 187*b2d84da9SMax Filippov movi a2, 1f 188*b2d84da9SMax Filippov sdi f4, a2, 8 189*b2d84da9SMax Filippov sdi f5, a2, 16 190*b2d84da9SMax Filippov sdip f3, a2, 16 191*b2d84da9SMax Filippov movi a3, 1f + 16 192*b2d84da9SMax Filippov assert eq, a2, a3 193*b2d84da9SMax Filippov l32i a4, a2, -16 + F64_HIGH_OFF 194*b2d84da9SMax Filippov movi a3, 0x40800000 195*b2d84da9SMax Filippov assert eq, a4, a3 196*b2d84da9SMax Filippov l32i a4, a2, -8 + F64_HIGH_OFF 197*b2d84da9SMax Filippov movi a3, 0x40a00000 198*b2d84da9SMax Filippov assert eq, a4, a3 199*b2d84da9SMax Filippov l32i a4, a2, F64_HIGH_OFF 200*b2d84da9SMax Filippov movi a3, 0x40c00000 201*b2d84da9SMax Filippov assert eq, a4, a3 202*b2d84da9SMax Filippov.data 203*b2d84da9SMax Filippov .align 8 204*b2d84da9SMax Filippov1: 205*b2d84da9SMax Filippov.double 0, 0, 0 206*b2d84da9SMax Filippov.text 207*b2d84da9SMax Filippovtest_end 208*b2d84da9SMax Filippov 209*b2d84da9SMax Filippovtest ldx 210*b2d84da9SMax Filippov movi a2, 1f 211*b2d84da9SMax Filippov movi a3, 0 212*b2d84da9SMax Filippov movi a4, 8 213*b2d84da9SMax Filippov movi a5, 16 214*b2d84da9SMax Filippov ldx f7, a2, a4 215*b2d84da9SMax Filippov ldx f8, a2, a5 216*b2d84da9SMax Filippov ldxp f6, a2, a5 217*b2d84da9SMax Filippov movi a3, 1f + 16 218*b2d84da9SMax Filippov assert eq, a2, a3 219*b2d84da9SMax Filippov rfrd a2, f6 220*b2d84da9SMax Filippov movi a3, 0x401c0000 221*b2d84da9SMax Filippov assert eq, a2, a3 222*b2d84da9SMax Filippov rfrd a2, f7 223*b2d84da9SMax Filippov movi a3, 0x40200000 224*b2d84da9SMax Filippov assert eq, a2, a3 225*b2d84da9SMax Filippov rfrd a2, f8 226*b2d84da9SMax Filippov movi a3, 0x40220000 227*b2d84da9SMax Filippov assert eq, a2, a3 228*b2d84da9SMax Filippov.data 229*b2d84da9SMax Filippov .align 8 230*b2d84da9SMax Filippov1: 231*b2d84da9SMax Filippov.double 7, 8, 9 232*b2d84da9SMax Filippov.text 233*b2d84da9SMax Filippovtest_end 234*b2d84da9SMax Filippov 235*b2d84da9SMax Filippovtest sdx 236*b2d84da9SMax Filippov movdf f9, 0x41200000, 0 237*b2d84da9SMax Filippov movdf f10, 0x41300000, 0 238*b2d84da9SMax Filippov movdf f11, 0x41400000, 0 239*b2d84da9SMax Filippov movi a2, 1f 240*b2d84da9SMax Filippov movi a3, 0 241*b2d84da9SMax Filippov movi a4, 8 242*b2d84da9SMax Filippov movi a5, 16 243*b2d84da9SMax Filippov sdx f10, a2, a4 244*b2d84da9SMax Filippov sdx f11, a2, a5 245*b2d84da9SMax Filippov sdxp f9, a2, a5 246*b2d84da9SMax Filippov movi a3, 1f + 16 247*b2d84da9SMax Filippov assert eq, a2, a3 248*b2d84da9SMax Filippov l32i a4, a2, -16 + F64_HIGH_OFF 249*b2d84da9SMax Filippov movi a3, 0x41200000 250*b2d84da9SMax Filippov assert eq, a4, a3 251*b2d84da9SMax Filippov l32i a4, a2, -8 + F64_HIGH_OFF 252*b2d84da9SMax Filippov movi a3, 0x41300000 253*b2d84da9SMax Filippov assert eq, a4, a3 254*b2d84da9SMax Filippov l32i a4, a2, F64_HIGH_OFF 255*b2d84da9SMax Filippov movi a3, 0x41400000 256*b2d84da9SMax Filippov assert eq, a4, a3 257*b2d84da9SMax Filippov.data 258*b2d84da9SMax Filippov .align 8 259*b2d84da9SMax Filippov1: 260*b2d84da9SMax Filippov.double 0, 0, 0 261*b2d84da9SMax Filippov.text 262*b2d84da9SMax Filippovtest_end 263*b2d84da9SMax Filippov 264*b2d84da9SMax Filippov#endif 265*b2d84da9SMax Filippov 2665e33b037SMax Filippovtest_suite_end 267