| # sh testcase for ftrc |
| # mach: sh |
| # as(sh): -defsym sim_cpu=0 |
| |
| .include "testutils.inc" |
| |
| start |
| ftrc_single: |
| set_grs_a5a5 |
| set_fprs_a5a5 |
| # ftrc(0.0) = 0. |
| fldi0 fr0 |
| ftrc fr0, fpul |
| # check results. |
| mov #0, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt .L0 |
| fail |
| .L0: |
| # ftrc(1.5) = 1. |
| fldi1 fr0 |
| fldi1 fr1 |
| fldi1 fr2 |
| # double it. |
| fadd fr2, fr2 |
| # form the fraction. |
| fdiv fr2, fr1 |
| fadd fr1, fr0 |
| # now we've got 1.5 in fr0. |
| ftrc fr0, fpul |
| # check results. |
| mov #1, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt .L1 |
| fail |
| .L1: |
| # ftrc(-1.5) = -1. |
| fldi1 fr0 |
| fneg fr0 |
| fldi1 fr1 |
| fldi1 fr2 |
| # double it. |
| fadd fr2, fr2 |
| # form the fraction. |
| fdiv fr2, fr1 |
| fneg fr1 |
| # -1 + -0.5 = -1.5. |
| fadd fr1, fr0 |
| # now we've got 1.5 in fr0. |
| ftrc fr0, fpul |
| # check results. |
| mov #1, r0 |
| neg r0, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt ftrc_double |
| fail |
| |
| ftrc_double: |
| double_prec |
| # ftrc(0.0) = 0. |
| fldi0 fr0 |
| _s2d fr0, dr0 |
| ftrc dr0, fpul |
| # check results. |
| mov #0, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt .L10 |
| fail |
| .L10: |
| # ftrc(1.5) = 1. |
| fldi1 fr0 |
| fldi1 fr2 |
| fldi1 fr4 |
| # double it. |
| single_prec |
| fadd fr4, fr4 |
| # form 0.5. |
| fdiv fr4, fr2 |
| fadd fr2, fr0 |
| double_prec |
| # now we've got 1.5 in fr0, so do some single->double |
| # conversions and perform the ftrc. |
| _s2d fr0, dr0 |
| _s2d fr2, dr2 |
| _s2d fr4, dr4 |
| ftrc dr0, fpul |
| |
| # check results. |
| mov #1, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt .L11 |
| fail |
| .L11: |
| # ftrc(-1.5) = -1. |
| fldi1 fr0 |
| fneg fr0 |
| fldi1 fr2 |
| fldi1 fr4 |
| single_prec |
| # double it. |
| fadd fr4, fr4 |
| # form the fraction. |
| fdiv fr4, fr2 |
| fneg fr2 |
| # -1 + -0.5 = -1.5. |
| fadd fr2, fr0 |
| double_prec |
| # now we've got 1.5 in fr0, so do some single->double |
| # conversions and perform the ftrc. |
| _s2d fr0, dr0 |
| _s2d fr2, dr2 |
| _s2d fr4, dr4 |
| ftrc dr0, fpul |
| |
| # check results. |
| mov #1, r0 |
| neg r0, r0 |
| sts fpul, r1 |
| cmp/eq r0, r1 |
| bt .L12 |
| fail |
| .L12: |
| assertreg0 -1 |
| assertreg -1, r1 |
| test_gr_a5a5 r2 |
| test_gr_a5a5 r3 |
| test_gr_a5a5 r4 |
| test_gr_a5a5 r5 |
| test_gr_a5a5 r6 |
| test_gr_a5a5 r7 |
| test_gr_a5a5 r8 |
| test_gr_a5a5 r9 |
| test_gr_a5a5 r10 |
| test_gr_a5a5 r11 |
| test_gr_a5a5 r12 |
| test_gr_a5a5 r13 |
| test_gr_a5a5 r14 |
| |
| assert_dpreg_i 2, dr4 |
| 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 |