#include "macros.inc"
#include "fpu.h"
test_suite fp0_sqrt
#if XCHAL_HAVE_FP_SQRT
.macro sqrt_seq r, a, y, t1, hn, h2, t5, h
sqrt0.s \y, \a
const.s \t1, 0
maddn.s \t1, \y, \y
nexp01.s \hn, \a
const.s \r, 3
addexp.s \hn, \r
maddn.s \r, \t1, \hn
nexp01.s \t1, \a
neg.s \h2, \t1
maddn.s \y, \r, \y
const.s \r, 0
const.s \t5, 0
const.s \h, 0
maddn.s \r, \h2, \y
maddn.s \t5, \y, \hn
const.s \hn, 3
maddn.s \h, \hn, \y
maddn.s \t1, \r, \r
maddn.s \hn, \t5, \y
neg.s \y, \h
maddn.s \r, \t1, \y
maddn.s \h, \hn, \h
mksadj.s \y, \a
nexp01.s \a, \a
maddn.s \a, \r, \r
neg.s \t1, \h
addexpm.s \r, \y
addexp.s \t1, \y
divn.s \r, \a, \t1
.endm
.macro sqrt_s fr0, fr1
sqrt_seq \fr0, \fr1, f10, f11, f12, f13, f14, f15
.endm
.macro movfp fr, v
movi a2, \v
wfr \fr, a2
.endm
.macro check_res fr, r, sr
rfr a2, \fr
dump a2
movi a3, \r
assert eq, a2, a3
rur a2, fsr
movi a3, \sr
assert eq, a2, a3
.endm
test sqrt_s
movi a2, 1
wsr a2, cpenable
test_op1 sqrt_s, f0, f1, 0x40000000, \
0x3fb504f3, 0x3fb504f3, 0x3fb504f4, 0x3fb504f3, \
FSR_I, FSR_I, FSR_I, FSR_I
test_op1 sqrt_s, f3, f4, F32_1, \
F32_1, F32_1, F32_1, F32_1, \
FSR__, FSR__, FSR__, FSR__
test_op1 sqrt_s, f6, f7, F32_MINUS | F32_1, \
F32_DNAN, F32_DNAN, F32_DNAN, F32_DNAN, \
FSR_V, FSR_V, FSR_V, FSR_V
test_end
#endif
test_suite_end