qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

test_fp1.S (4296B)


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