xref: /qemu/tests/tcg/xtensa/test_fp0_sqrt.S (revision 44423107e7b5731ef40c5c8632a5bad8b49d0838)
1*11029e94SMax Filippov#include "macros.inc"
2*11029e94SMax Filippov#include "fpu.h"
3*11029e94SMax Filippov
4*11029e94SMax Filippovtest_suite fp0_sqrt
5*11029e94SMax Filippov
6*11029e94SMax Filippov#if XCHAL_HAVE_FP_SQRT
7*11029e94SMax Filippov
8*11029e94SMax Filippov.macro  sqrt_seq r, a, y, t1, hn, h2, t5, h
9*11029e94SMax Filippov    sqrt0.s     \y, \a
10*11029e94SMax Filippov    const.s     \t1, 0
11*11029e94SMax Filippov    maddn.s     \t1, \y, \y
12*11029e94SMax Filippov    nexp01.s    \hn, \a
13*11029e94SMax Filippov    const.s     \r, 3
14*11029e94SMax Filippov    addexp.s    \hn, \r
15*11029e94SMax Filippov    maddn.s     \r, \t1, \hn
16*11029e94SMax Filippov    nexp01.s    \t1, \a
17*11029e94SMax Filippov    neg.s       \h2, \t1
18*11029e94SMax Filippov    maddn.s     \y, \r, \y
19*11029e94SMax Filippov    const.s     \r, 0
20*11029e94SMax Filippov    const.s     \t5, 0
21*11029e94SMax Filippov    const.s     \h, 0
22*11029e94SMax Filippov    maddn.s     \r, \h2, \y
23*11029e94SMax Filippov    maddn.s     \t5, \y, \hn
24*11029e94SMax Filippov    const.s     \hn, 3
25*11029e94SMax Filippov    maddn.s     \h, \hn, \y
26*11029e94SMax Filippov    maddn.s     \t1, \r, \r
27*11029e94SMax Filippov    maddn.s     \hn, \t5, \y
28*11029e94SMax Filippov    neg.s       \y, \h
29*11029e94SMax Filippov    maddn.s     \r, \t1, \y
30*11029e94SMax Filippov    maddn.s     \h, \hn, \h
31*11029e94SMax Filippov    mksadj.s    \y, \a
32*11029e94SMax Filippov    nexp01.s    \a, \a
33*11029e94SMax Filippov    maddn.s     \a, \r, \r
34*11029e94SMax Filippov    neg.s       \t1, \h
35*11029e94SMax Filippov    addexpm.s   \r, \y
36*11029e94SMax Filippov    addexp.s    \t1, \y
37*11029e94SMax Filippov    divn.s      \r, \a, \t1
38*11029e94SMax Filippov.endm
39*11029e94SMax Filippov
40*11029e94SMax Filippov.macro sqrt_s fr0, fr1
41*11029e94SMax Filippov    sqrt_seq    \fr0, \fr1, f10, f11, f12, f13, f14, f15
42*11029e94SMax Filippov.endm
43*11029e94SMax Filippov
44*11029e94SMax Filippov.macro movfp fr, v
45*11029e94SMax Filippov    movi        a2, \v
46*11029e94SMax Filippov    wfr         \fr, a2
47*11029e94SMax Filippov.endm
48*11029e94SMax Filippov
49*11029e94SMax Filippov.macro check_res fr, r, sr
50*11029e94SMax Filippov    rfr         a2, \fr
51*11029e94SMax Filippov    dump        a2
52*11029e94SMax Filippov    movi        a3, \r
53*11029e94SMax Filippov    assert      eq, a2, a3
54*11029e94SMax Filippov    rur         a2, fsr
55*11029e94SMax Filippov    movi        a3, \sr
56*11029e94SMax Filippov    assert      eq, a2, a3
57*11029e94SMax Filippov.endm
58*11029e94SMax Filippov
59*11029e94SMax Filippovtest sqrt_s
60*11029e94SMax Filippov    movi        a2, 1
61*11029e94SMax Filippov    wsr         a2, cpenable
62*11029e94SMax Filippov
63*11029e94SMax Filippov    test_op1    sqrt_s, f0, f1, 0x40000000, \
64*11029e94SMax Filippov        0x3fb504f3, 0x3fb504f3, 0x3fb504f4, 0x3fb504f3, \
65*11029e94SMax Filippov             FSR_I,      FSR_I,      FSR_I,      FSR_I
66*11029e94SMax Filippov    test_op1    sqrt_s, f3, f4, F32_1, \
67*11029e94SMax Filippov        F32_1, F32_1, F32_1, F32_1, \
68*11029e94SMax Filippov        FSR__, FSR__, FSR__, FSR__
69*11029e94SMax Filippov    test_op1    sqrt_s, f6, f7, F32_MINUS | F32_1, \
70*11029e94SMax Filippov        F32_DNAN, F32_DNAN, F32_DNAN, F32_DNAN, \
71*11029e94SMax Filippov           FSR_V,    FSR_V,    FSR_V,    FSR_V
72*11029e94SMax Filippovtest_end
73*11029e94SMax Filippov
74*11029e94SMax Filippov#endif
75*11029e94SMax Filippov
76*11029e94SMax Filippovtest_suite_end
77