qemu/tests/tcg/xtensa/test_fp1.S
<<
>>
Prefs
   1#include "macros.inc"
   2
   3test_suite fp1
   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_ord_ex op, br, fr0, fr1, v0, v1, r
  13    movi    a2, 0
  14    wur     a2, fsr
  15    movfp   \fr0, \v0
  16    movfp   \fr1, \v1
  17    \op     \br, \fr0, \fr1
  18    movi    a2, 0
  19    movi    a3, 1
  20    movt    a2, a3, \br
  21    assert  eqi, a2, \r
  22    rur     a2, fsr
  23    assert  eqi, a2, 0
  24.endm
  25
  26.macro test_ord op, br, fr0, fr1, v0, v1, r
  27    movi    a2, 0
  28    wur     a2, fcr
  29    test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r
  30    movi    a2, 0x7c
  31    wur     a2, fcr
  32    test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r
  33.endm
  34
  35.macro test_ord_all op, aa, ab, ba, aPI, PIa, aN, Na, II, IN, NI
  36    test_ord \op  b0,  f0,  f1, 0x3f800000, 0x3f800000, \aa
  37    test_ord \op  b1,  f2,  f3, 0x3f800000, 0x3fc00000, \ab
  38    test_ord \op  b2,  f4,  f5, 0x3fc00000, 0x3f800000, \ba
  39    test_ord \op  b3,  f6,  f7, 0x3f800000, 0x7f800000, \aPI
  40    test_ord \op  b4,  f8,  f9, 0x7f800000, 0x3f800000, \PIa
  41    test_ord \op  b5, f10, f11, 0x3f800000, 0xffc00001, \aN
  42    test_ord \op  b6, f12, f13, 0x3f800000, 0xff800001, \aN
  43    test_ord \op  b7, f14, f15, 0x3f800000, 0x7f800001, \aN
  44    test_ord \op  b8,  f0,  f1, 0x3f800000, 0x7fc00000, \aN
  45    test_ord \op  b9,  f2,  f3, 0xffc00001, 0x3f800000, \Na
  46    test_ord \op b10,  f4,  f5, 0xff800001, 0x3f800000, \Na
  47    test_ord \op b11,  f6,  f7, 0x7f800001, 0x3f800000, \Na
  48    test_ord \op b12,  f8,  f9, 0x7fc00000, 0x3f800000, \Na
  49    test_ord \op b13, f10, f11, 0x7f800000, 0x7f800000, \II
  50    test_ord \op b14, f12, f13, 0x7f800000, 0x7fc00000, \IN
  51    test_ord \op b15, f14, f15, 0x7fc00000, 0x7f800000, \NI
  52.endm
  53
  54test un_s
  55    movi    a2, 1
  56    wsr     a2, cpenable
  57    test_ord_all un.s, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1
  58test_end
  59
  60test oeq_s
  61    test_ord_all oeq.s, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0
  62test_end
  63
  64test ueq_s
  65    test_ord_all ueq.s, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1
  66test_end
  67
  68test olt_s
  69    test_ord_all olt.s, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0
  70test_end
  71
  72test ult_s
  73    test_ord_all ult.s, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1
  74test_end
  75
  76test ole_s
  77    test_ord_all ole.s, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0
  78test_end
  79
  80test ule_s
  81    test_ord_all ule.s, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1
  82test_end
  83
  84.macro test_cond op, fr0, fr1, cr, v0, v1, r
  85    movfp   \fr0, \v0
  86    movfp   \fr1, \v1
  87    \op     \fr0, \fr1, \cr
  88    rfr     a2, \fr0
  89    movi    a3, \r
  90    assert  eq, a2, a3
  91.endm
  92
  93test moveqz_s
  94    movi    a3, 0
  95    test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
  96    movi    a3, 1
  97    test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0
  98test_end
  99
 100test movnez_s
 101    movi    a3, 0
 102    test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0
 103    movi    a3, 1
 104    test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
 105test_end
 106
 107test movltz_s
 108    movi    a3, -1
 109    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
 110    movi    a3, 0
 111    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
 112    movi    a3, 1
 113    test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
 114test_end
 115
 116test movgez_s
 117    movi    a3, -1
 118    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0
 119    movi    a3, 0
 120    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
 121    movi    a3, 1
 122    test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
 123test_end
 124
 125test movf_s
 126    olt.s   b0, f0, f0
 127    test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
 128    ueq.s   b0, f0, f0
 129    test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0
 130test_end
 131
 132test movt_s
 133    ueq.s   b0, f0, f0
 134    test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
 135    olt.s   b0, f0, f0
 136    test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0
 137test_end
 138
 139#endif
 140
 141test_suite_end
 142