91 lines
1.5 KiB
ArmAsm
91 lines
1.5 KiB
ArmAsm
# sh testcase for fdiv
|
|
# mach: sh
|
|
# as(sh): -defsym sim_cpu=0
|
|
|
|
.include "testutils.inc"
|
|
|
|
start
|
|
fdiv_single:
|
|
# Single test
|
|
set_grs_a5a5
|
|
set_fprs_a5a5
|
|
single_prec
|
|
# 1.0 / 0.0 should be INF
|
|
# (and not crash the sim).
|
|
fldi0 fr0
|
|
fldi1 fr1
|
|
fdiv fr0, fr1
|
|
assert_fpreg_x 0x7f800000, fr1
|
|
|
|
# 0.0 / 1.0 == 0.0.
|
|
fldi0 fr0
|
|
fldi1 fr1
|
|
fdiv fr1, fr0
|
|
assert_fpreg_x 0, fr0
|
|
|
|
# 2.0 / 1.0 == 2.0.
|
|
fldi1 fr1
|
|
fldi1 fr2
|
|
fadd fr2, fr2
|
|
fdiv fr1, fr2
|
|
assert_fpreg_i 2, fr2
|
|
|
|
# (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
|
|
fldi1 fr1
|
|
fldi1 fr2
|
|
fadd fr2, fr2
|
|
fdiv fr2, fr1
|
|
# fr1 should contain 0.5.
|
|
fadd fr1, fr1
|
|
assert_fpreg_i 1, fr1
|
|
test_grs_a5a5
|
|
assert_fpreg_i 2, fr2
|
|
test_fpr_a5a5 fr3
|
|
test_fpr_a5a5 fr4
|
|
test_fpr_a5a5 fr5
|
|
test_fpr_a5a5 fr6
|
|
test_fpr_a5a5 fr7
|
|
test_fpr_a5a5 fr8
|
|
test_fpr_a5a5 fr9
|
|
test_fpr_a5a5 fr10
|
|
test_fpr_a5a5 fr11
|
|
test_fpr_a5a5 fr12
|
|
test_fpr_a5a5 fr13
|
|
test_fpr_a5a5 fr14
|
|
test_fpr_a5a5 fr15
|
|
|
|
fdiv_double:
|
|
# Double test
|
|
set_grs_a5a5
|
|
set_fprs_a5a5
|
|
# (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
|
|
fldi1 fr1
|
|
fldi1 fr2
|
|
# This add must be in single precision. The rest must be in double.
|
|
fadd fr2, fr2
|
|
double_prec
|
|
_s2d fr1, dr0
|
|
_s2d fr2, dr2
|
|
fdiv dr2, dr0
|
|
# dr0 should contain 0.5.
|
|
# double it, expect 1.0.
|
|
fadd dr0, dr0
|
|
assert_dpreg_i 1, dr0
|
|
assert_dpreg_i 2, dr2
|
|
test_grs_a5a5
|
|
test_fpr_a5a5 fr4
|
|
test_fpr_a5a5 fr5
|
|
test_fpr_a5a5 fr6
|
|
test_fpr_a5a5 fr7
|
|
test_fpr_a5a5 fr8
|
|
test_fpr_a5a5 fr9
|
|
test_fpr_a5a5 fr10
|
|
test_fpr_a5a5 fr11
|
|
test_fpr_a5a5 fr12
|
|
test_fpr_a5a5 fr13
|
|
test_fpr_a5a5 fr14
|
|
test_fpr_a5a5 fr15
|
|
|
|
pass
|
|
exit 0
|
|
|