# 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