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