forked from mirror/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.7 KiB
ArmAsm
77 lines
1.7 KiB
ArmAsm
#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
|