xref: /qemu/tests/tcg/xtensa/test_fp0_div.S (revision 44423107e7b5731ef40c5c8632a5bad8b49d0838)
1*11029e94SMax Filippov#include "macros.inc"
2*11029e94SMax Filippov#include "fpu.h"
3*11029e94SMax Filippov
4*11029e94SMax Filippovtest_suite fp0_div
5*11029e94SMax Filippov
6*11029e94SMax Filippov#if XCHAL_HAVE_FP_DIV
7*11029e94SMax Filippov
8*11029e94SMax Filippov.macro  divs_seq q, a, b, r, y, y0, an, bn, e, ex
9*11029e94SMax Filippov    div0.s      \y0, \b
10*11029e94SMax Filippov    nexp01.s    \bn, \b
11*11029e94SMax Filippov    const.s     \e, 1
12*11029e94SMax Filippov    maddn.s     \e, \bn, \y0
13*11029e94SMax Filippov    mov.s       \y, \y0
14*11029e94SMax Filippov    mov.s       \ex, \b
15*11029e94SMax Filippov    nexp01.s    \an, \a
16*11029e94SMax Filippov    maddn.s     \y, \e, \y0
17*11029e94SMax Filippov    const.s     \e, 1
18*11029e94SMax Filippov    const.s     \q, 0
19*11029e94SMax Filippov    neg.s       \r, \an
20*11029e94SMax Filippov    maddn.s     \e, \bn, \y
21*11029e94SMax Filippov    maddn.s     \q, \r, \y0
22*11029e94SMax Filippov    mkdadj.s    \ex, \a
23*11029e94SMax Filippov    maddn.s     \y, \e, \y
24*11029e94SMax Filippov    maddn.s     \r, \bn, \q
25*11029e94SMax Filippov    const.s     \e, 1
26*11029e94SMax Filippov    maddn.s     \e, \bn, \y
27*11029e94SMax Filippov    maddn.s     \q, \r, \y
28*11029e94SMax Filippov    neg.s       \r, \an
29*11029e94SMax Filippov    maddn.s     \y, \e, \y
30*11029e94SMax Filippov    maddn.s     \r, \bn, \q
31*11029e94SMax Filippov    addexpm.s   \q, \ex
32*11029e94SMax Filippov    addexp.s    \y, \ex
33*11029e94SMax Filippov    divn.s      \q, \r, \y
34*11029e94SMax Filippov.endm
35*11029e94SMax Filippov
36*11029e94SMax Filippov.macro div_s fr0, fr1, fr2
37*11029e94SMax Filippov    divs_seq    \fr0, \fr1, \fr2, f9, f10, f11, f12, f13, f14, f15
38*11029e94SMax Filippov.endm
39*11029e94SMax Filippov
40*11029e94SMax Filippov.macro movfp fr, v
41*11029e94SMax Filippov    movi        a2, \v
42*11029e94SMax Filippov    wfr         \fr, a2
43*11029e94SMax Filippov.endm
44*11029e94SMax Filippov
45*11029e94SMax Filippov.macro check_res fr, r, sr
46*11029e94SMax Filippov    rfr         a2, \fr
47*11029e94SMax Filippov    dump        a2
48*11029e94SMax Filippov    movi        a3, \r
49*11029e94SMax Filippov    assert      eq, a2, a3
50*11029e94SMax Filippov    rur         a2, fsr
51*11029e94SMax Filippov    movi        a3, \sr
52*11029e94SMax Filippov    assert      eq, a2, a3
53*11029e94SMax Filippov.endm
54*11029e94SMax Filippov
55*11029e94SMax Filippovtest div_s
56*11029e94SMax Filippov    movi        a2, 1
57*11029e94SMax Filippov    wsr         a2, cpenable
58*11029e94SMax Filippov
59*11029e94SMax Filippov    test_op2    div_s, f0, f1, f2, 0x40000000, 0x40400000, \
60*11029e94SMax Filippov        0x3f2aaaab, 0x3f2aaaaa, 0x3f2aaaab, 0x3f2aaaaa, \
61*11029e94SMax Filippov             FSR_I,      FSR_I,      FSR_I,      FSR_I
62*11029e94SMax Filippov    test_op2    div_s, f3, f4, f5, F32_1, F32_0, \
63*11029e94SMax Filippov        F32_PINF, F32_PINF, F32_PINF, F32_PINF, \
64*11029e94SMax Filippov           FSR_Z,    FSR_Z,    FSR_Z,    FSR_Z
65*11029e94SMax Filippov    test_op2    div_s, f6, f7, f8, F32_0, F32_0, \
66*11029e94SMax Filippov        F32_DNAN, F32_DNAN, F32_DNAN, F32_DNAN, \
67*11029e94SMax Filippov           FSR_V,    FSR_V,    FSR_V,    FSR_V
68*11029e94SMax Filippov
69*11029e94SMax Filippov    /* MAX_FLOAT / 0.5 = +inf/MAX_FLOAT  */
70*11029e94SMax Filippov    test_op2    div_s, f0, f1, f2, F32_MAX, F32_0_5, \
71*11029e94SMax Filippov        F32_PINF, F32_MAX, F32_PINF, F32_MAX, \
72*11029e94SMax Filippov          FSR_OI,  FSR_OI,   FSR_OI,  FSR_OI
73*11029e94SMax Filippov
74*11029e94SMax Filippov    /* 0.5 / MAX_FLOAT = denorm  */
75*11029e94SMax Filippov    test_op2    div_s, f0, f1, f2, F32_0_5, F32_MAX, \
76*11029e94SMax Filippov        0x00100000, 0x00100000, 0x00100001, 0x00100000, \
77*11029e94SMax Filippov            FSR_UI,     FSR_UI,     FSR_UI,     FSR_UI
78*11029e94SMax Filippovtest_end
79*11029e94SMax Filippov
80*11029e94SMax Filippov#endif
81*11029e94SMax Filippov
82*11029e94SMax Filippovtest_suite_end
83