1#include "macros.inc" 2 3test_suite fp0_conv 4 5#if XCHAL_HAVE_FP 6 7.macro movfp fr, v 8 movi a2, \v 9 wfr \fr, a2 10.endm 11 12.macro test_ftoi_ex op, r0, fr0, v, c, r 13 movi a2, 0 14 wur a2, fsr 15 movfp \fr0, \v 16 \op \r0, \fr0, \c 17 dump \r0 18 movi a3, \r 19 assert eq, \r0, a3 20 rur a2, fsr 21 assert eqi, a2, 0 22.endm 23 24.macro test_ftoi op, r0, fr0, v, c, r 25 movi a2, 0 26 wur a2, fcr 27 test_ftoi_ex \op, \r0, \fr0, \v, \c, \r 28 movi a2, 0x7c 29 wur a2, fcr 30 test_ftoi_ex \op, \r0, \fr0, \v, \c, \r 31.endm 32 33 34.macro test_itof_ex op, fr0, ar0, v, c, r 35 movi a2, 0 36 wur a2, fsr 37 movi \ar0, \v 38 \op \fr0, \ar0, \c 39 40 rfr a2, \fr0 41 dump a2 42 movi a3, \r 43 assert eq, a2, a3 44 rur a2, fsr 45 assert eqi, a2, 0 46.endm 47 48.macro test_itof_rm op, fr0, ar0, v, c, rm, r 49 movi a2, \rm 50 wur a2, fcr 51 test_itof_ex \op, \fr0, \ar0, \v, \c, \r 52 movi a2, (\rm) | 0x7c 53 wur a2, fcr 54 test_itof_ex \op, \fr0, \ar0, \v, \c, \r 55.endm 56 57.macro test_itof op, fr0, ar0, v, c, r0, r1, r2, r3 58 test_itof_rm \op, \fr0, \ar0, \v, \c, 0, \r0 59 test_itof_rm \op, \fr0, \ar0, \v, \c, 1, \r1 60 test_itof_rm \op, \fr0, \ar0, \v, \c, 2, \r2 61 test_itof_rm \op, \fr0, \ar0, \v, \c, 3, \r3 62.endm 63 64test round_s 65 movi a2, 1 66 wsr a2, cpenable 67 68 /* NaN */ 69 test_ftoi round.s, a2, f0, 0xffc00001, 0, 0x7fffffff 70 test_ftoi round.s, a2, f0, 0xff800001, 0, 0x7fffffff 71 72 /* -inf */ 73 test_ftoi round.s, a2, f0, 0xff800000, 0, 0x80000000 74 75 /* negative overflow */ 76 test_ftoi round.s, a2, f0, 0xceffffff, 1, 0x80000000 77 test_ftoi round.s, a2, f0, 0xcf000000, 0, 0x80000000 78 test_ftoi round.s, a2, f0, 0xceffffff, 0, 0x80000080 79 80 /* negative */ 81 test_ftoi round.s, a2, f0, 0xbfa00000, 1, -2 /* -1.25 * 2 */ 82 test_ftoi round.s, a2, f0, 0xbfc00000, 0, -2 /* -1.5 */ 83 test_ftoi round.s, a2, f0, 0xbf800000, 1, -2 /* -1 * 2 */ 84 test_ftoi round.s, a2, f0, 0xbf800000, 0, -1 /* -1 */ 85 test_ftoi round.s, a2, f0, 0xbf400000, 0, -1 /* -0.75 */ 86 test_ftoi round.s, a2, f0, 0xbf000000, 0, 0 /* -0.5 */ 87 88 /* positive */ 89 test_ftoi round.s, a2, f0, 0x3f000000, 0, 0 /* 0.5 */ 90 test_ftoi round.s, a2, f0, 0x3f400000, 0, 1 /* 0.75 */ 91 test_ftoi round.s, a2, f0, 0x3f800000, 0, 1 /* 1 */ 92 test_ftoi round.s, a2, f0, 0x3f800000, 1, 2 /* 1 * 2 */ 93 test_ftoi round.s, a2, f0, 0x3fc00000, 0, 2 /* 1.5 */ 94 test_ftoi round.s, a2, f0, 0x3fa00000, 1, 2 /* 1.25 * 2 */ 95 96 /* positive overflow */ 97 test_ftoi round.s, a2, f0, 0x4effffff, 0, 0x7fffff80 98 test_ftoi round.s, a2, f0, 0x4f000000, 0, 0x7fffffff 99 test_ftoi round.s, a2, f0, 0x4effffff, 1, 0x7fffffff 100 101 /* +inf */ 102 test_ftoi round.s, a2, f0, 0x7f800000, 0, 0x7fffffff 103 104 /* NaN */ 105 test_ftoi round.s, a2, f0, 0x7f800001, 0, 0x7fffffff 106 test_ftoi round.s, a2, f0, 0x7fc00000, 0, 0x7fffffff 107test_end 108 109test trunc_s 110 /* NaN */ 111 test_ftoi trunc.s, a2, f0, 0xffc00001, 0, 0x7fffffff 112 test_ftoi trunc.s, a2, f0, 0xff800001, 0, 0x7fffffff 113 114 /* -inf */ 115 test_ftoi trunc.s, a2, f0, 0xff800000, 0, 0x80000000 116 117 /* negative overflow */ 118 test_ftoi trunc.s, a2, f0, 0xceffffff, 1, 0x80000000 119 test_ftoi trunc.s, a2, f0, 0xcf000000, 0, 0x80000000 120 test_ftoi trunc.s, a2, f0, 0xceffffff, 0, 0x80000080 121 122 /* negative */ 123 test_ftoi trunc.s, a2, f0, 0xbfa00000, 1, -2 /* -1.25 * 2 */ 124 test_ftoi trunc.s, a2, f0, 0xbfc00000, 0, -1 /* -1.5 */ 125 test_ftoi trunc.s, a2, f0, 0xbf800000, 1, -2 /* -1 * 2 */ 126 test_ftoi trunc.s, a2, f0, 0xbf800000, 0, -1 /* -1 */ 127 test_ftoi trunc.s, a2, f0, 0xbf400000, 0, 0 /* -0.75 */ 128 test_ftoi trunc.s, a2, f0, 0xbf000000, 0, 0 /* -0.5 */ 129 130 /* positive */ 131 test_ftoi trunc.s, a2, f0, 0x3f000000, 0, 0 /* 0.5 */ 132 test_ftoi trunc.s, a2, f0, 0x3f400000, 0, 0 /* 0.75 */ 133 test_ftoi trunc.s, a2, f0, 0x3f800000, 0, 1 /* 1 */ 134 test_ftoi trunc.s, a2, f0, 0x3f800000, 1, 2 /* 1 * 2 */ 135 test_ftoi trunc.s, a2, f0, 0x3fc00000, 0, 1 /* 1.5 */ 136 test_ftoi trunc.s, a2, f0, 0x3fa00000, 1, 2 /* 1.25 * 2 */ 137 138 /* positive overflow */ 139 test_ftoi trunc.s, a2, f0, 0x4effffff, 0, 0x7fffff80 140 test_ftoi trunc.s, a2, f0, 0x4f000000, 0, 0x7fffffff 141 test_ftoi trunc.s, a2, f0, 0x4effffff, 1, 0x7fffffff 142 143 /* +inf */ 144 test_ftoi trunc.s, a2, f0, 0x7f800000, 0, 0x7fffffff 145 146 /* NaN */ 147 test_ftoi trunc.s, a2, f0, 0x7f800001, 0, 0x7fffffff 148 test_ftoi trunc.s, a2, f0, 0x7fc00000, 0, 0x7fffffff 149test_end 150 151test floor_s 152 /* NaN */ 153 test_ftoi floor.s, a2, f0, 0xffc00001, 0, 0x7fffffff 154 test_ftoi floor.s, a2, f0, 0xff800001, 0, 0x7fffffff 155 156 /* -inf */ 157 test_ftoi floor.s, a2, f0, 0xff800000, 0, 0x80000000 158 159 /* negative overflow */ 160 test_ftoi floor.s, a2, f0, 0xceffffff, 1, 0x80000000 161 test_ftoi floor.s, a2, f0, 0xcf000000, 0, 0x80000000 162 test_ftoi floor.s, a2, f0, 0xceffffff, 0, 0x80000080 163 164 /* negative */ 165 test_ftoi floor.s, a2, f0, 0xbfa00000, 1, -3 /* -1.25 * 2 */ 166 test_ftoi floor.s, a2, f0, 0xbfc00000, 0, -2 /* -1.5 */ 167 test_ftoi floor.s, a2, f0, 0xbf800000, 1, -2 /* -1 * 2 */ 168 test_ftoi floor.s, a2, f0, 0xbf800000, 0, -1 /* -1 */ 169 test_ftoi floor.s, a2, f0, 0xbf400000, 0, -1 /* -0.75 */ 170 test_ftoi floor.s, a2, f0, 0xbf000000, 0, -1 /* -0.5 */ 171 172 /* positive */ 173 test_ftoi floor.s, a2, f0, 0x3f000000, 0, 0 /* 0.5 */ 174 test_ftoi floor.s, a2, f0, 0x3f400000, 0, 0 /* 0.75 */ 175 test_ftoi floor.s, a2, f0, 0x3f800000, 0, 1 /* 1 */ 176 test_ftoi floor.s, a2, f0, 0x3f800000, 1, 2 /* 1 * 2 */ 177 test_ftoi floor.s, a2, f0, 0x3fc00000, 0, 1 /* 1.5 */ 178 test_ftoi floor.s, a2, f0, 0x3fa00000, 1, 2 /* 1.25 * 2 */ 179 180 /* positive overflow */ 181 test_ftoi floor.s, a2, f0, 0x4effffff, 0, 0x7fffff80 182 test_ftoi floor.s, a2, f0, 0x4f000000, 0, 0x7fffffff 183 test_ftoi floor.s, a2, f0, 0x4effffff, 1, 0x7fffffff 184 185 /* +inf */ 186 test_ftoi floor.s, a2, f0, 0x7f800000, 0, 0x7fffffff 187 188 /* NaN */ 189 test_ftoi floor.s, a2, f0, 0x7f800001, 0, 0x7fffffff 190 test_ftoi floor.s, a2, f0, 0x7fc00000, 0, 0x7fffffff 191test_end 192 193test ceil_s 194 /* NaN */ 195 test_ftoi ceil.s, a2, f0, 0xffc00001, 0, 0x7fffffff 196 test_ftoi ceil.s, a2, f0, 0xff800001, 0, 0x7fffffff 197 198 /* -inf */ 199 test_ftoi ceil.s, a2, f0, 0xff800000, 0, 0x80000000 200 201 /* negative overflow */ 202 test_ftoi ceil.s, a2, f0, 0xceffffff, 1, 0x80000000 203 test_ftoi ceil.s, a2, f0, 0xcf000000, 0, 0x80000000 204 test_ftoi ceil.s, a2, f0, 0xceffffff, 0, 0x80000080 205 206 /* negative */ 207 test_ftoi ceil.s, a2, f0, 0xbfa00000, 1, -2 /* -1.25 * 2 */ 208 test_ftoi ceil.s, a2, f0, 0xbfc00000, 0, -1 /* -1.5 */ 209 test_ftoi ceil.s, a2, f0, 0xbf800000, 1, -2 /* -1 * 2 */ 210 test_ftoi ceil.s, a2, f0, 0xbf800000, 0, -1 /* -1 */ 211 test_ftoi ceil.s, a2, f0, 0xbf400000, 0, 0 /* -0.75 */ 212 test_ftoi ceil.s, a2, f0, 0xbf000000, 0, 0 /* -0.5 */ 213 214 /* positive */ 215 test_ftoi ceil.s, a2, f0, 0x3f000000, 0, 1 /* 0.5 */ 216 test_ftoi ceil.s, a2, f0, 0x3f400000, 0, 1 /* 0.75 */ 217 test_ftoi ceil.s, a2, f0, 0x3f800000, 0, 1 /* 1 */ 218 test_ftoi ceil.s, a2, f0, 0x3f800000, 1, 2 /* 1 * 2 */ 219 test_ftoi ceil.s, a2, f0, 0x3fc00000, 0, 2 /* 1.5 */ 220 test_ftoi ceil.s, a2, f0, 0x3fa00000, 1, 3 /* 1.25 * 2 */ 221 222 /* positive overflow */ 223 test_ftoi ceil.s, a2, f0, 0x4effffff, 0, 0x7fffff80 224 test_ftoi ceil.s, a2, f0, 0x4f000000, 0, 0x7fffffff 225 test_ftoi ceil.s, a2, f0, 0x4effffff, 1, 0x7fffffff 226 227 /* +inf */ 228 test_ftoi ceil.s, a2, f0, 0x7f800000, 0, 0x7fffffff 229 230 /* NaN */ 231 test_ftoi ceil.s, a2, f0, 0x7f800001, 0, 0x7fffffff 232 test_ftoi ceil.s, a2, f0, 0x7fc00000, 0, 0x7fffffff 233test_end 234 235test utrunc_s 236 /* NaN */ 237 test_ftoi utrunc.s, a2, f0, 0xffc00001, 0, 0xffffffff 238 test_ftoi utrunc.s, a2, f0, 0xff800001, 0, 0xffffffff 239 240 /* -inf */ 241 test_ftoi utrunc.s, a2, f0, 0xff800000, 0, 0x80000000 242 243 /* negative overflow */ 244 test_ftoi utrunc.s, a2, f0, 0xceffffff, 1, 0x80000000 245 test_ftoi utrunc.s, a2, f0, 0xcf000000, 0, 0x80000000 246 test_ftoi utrunc.s, a2, f0, 0xceffffff, 0, 0x80000080 247 248 /* negative */ 249 test_ftoi utrunc.s, a2, f0, 0xbfa00000, 1, -2 /* -1.25 * 2 */ 250 test_ftoi utrunc.s, a2, f0, 0xbfc00000, 0, -1 /* -1.5 */ 251 test_ftoi utrunc.s, a2, f0, 0xbf800000, 1, -2 /* -1 * 2 */ 252 test_ftoi utrunc.s, a2, f0, 0xbf800000, 0, -1 /* -1 */ 253 test_ftoi utrunc.s, a2, f0, 0xbf400000, 0, 0 /* -0.75 */ 254 test_ftoi utrunc.s, a2, f0, 0xbf000000, 0, 0 /* -0.5 */ 255 256 /* positive */ 257 test_ftoi utrunc.s, a2, f0, 0x3f000000, 0, 0 /* 0.5 */ 258 test_ftoi utrunc.s, a2, f0, 0x3f400000, 0, 0 /* 0.75 */ 259 test_ftoi utrunc.s, a2, f0, 0x3f800000, 0, 1 /* 1 */ 260 test_ftoi utrunc.s, a2, f0, 0x3f800000, 1, 2 /* 1 * 2 */ 261 test_ftoi utrunc.s, a2, f0, 0x3fc00000, 0, 1 /* 1.5 */ 262 test_ftoi utrunc.s, a2, f0, 0x3fa00000, 1, 2 /* 1.25 * 2 */ 263 264 /* positive overflow */ 265 test_ftoi utrunc.s, a2, f0, 0x4effffff, 0, 0x7fffff80 266 test_ftoi utrunc.s, a2, f0, 0x4f000000, 0, 0x80000000 267 test_ftoi utrunc.s, a2, f0, 0x4effffff, 1, 0xffffff00 268 test_ftoi utrunc.s, a2, f0, 0x4f800000, 1, 0xffffffff 269 270 /* +inf */ 271 test_ftoi utrunc.s, a2, f0, 0x7f800000, 0, 0xffffffff 272 273 /* NaN */ 274 test_ftoi utrunc.s, a2, f0, 0x7f800001, 0, 0xffffffff 275 test_ftoi utrunc.s, a2, f0, 0x7fc00000, 0, 0xffffffff 276test_end 277 278test float_s 279 test_itof float.s, f0, a2, -1, 0, \ 280 0xbf800000, 0xbf800000, 0xbf800000, 0xbf800000 281 test_itof float.s, f0, a2, 0, 0, 0, 0, 0, 0 282 test_itof float.s, f0, a2, 1, 1, \ 283 0x3f000000, 0x3f000000, 0x3f000000, 0x3f000000 284 test_itof float.s, f0, a2, 1, 0, \ 285 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000 286 test_itof float.s, f0, a2, 0x7fffffff, 0, \ 287 0x4f000000, 0x4effffff, 0x4f000000, 0x4effffff 288test_end 289 290test ufloat_s 291 test_itof ufloat.s, f0, a2, 0, 0, 0, 0, 0, 0 292 test_itof ufloat.s, f0, a2, 1, 1, \ 293 0x3f000000, 0x3f000000, 0x3f000000, 0x3f000000 294 test_itof ufloat.s, f0, a2, 1, 0, \ 295 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000 296 test_itof ufloat.s, f0, a2, 0x7fffffff, 0, \ 297 0x4f000000, 0x4effffff, 0x4f000000, 0x4effffff 298 test_itof ufloat.s, f0, a2, 0xffffffff, 0, \ 299 0x4f800000, 0x4f7fffff, 0x4f800000, 0x4f7fffff 300test_end 301 302#endif 303 304test_suite_end 305