| # sh testcase for fipr $fvm, $fvn |
| # mach: sh |
| # as(sh): -defsym sim_cpu=0 |
| |
| .include "testutils.inc" |
| |
| start |
| initv0: |
| set_grs_a5a5 |
| set_fprs_a5a5 |
| # Load 1 into fr0. |
| fldi1 fr0 |
| # Load 2 into fr1. |
| fldi1 fr1 |
| fadd fr1, fr1 |
| # Load 4 into fr2. |
| fldi1 fr2 |
| fadd fr2, fr2 |
| fadd fr2, fr2 |
| # Load 8 into fr3. |
| fmov fr2, fr3 |
| fadd fr2, fr3 |
| |
| initv8: |
| fldi1 fr8 |
| fldi0 fr9 |
| fldi1 fr10 |
| fldi0 fr11 |
| |
| fipr fv0, fv8 |
| test1: |
| # Result will be in fr11. |
| assert_fpreg_i 1, fr0 |
| assert_fpreg_i 2, fr1 |
| assert_fpreg_i 4, fr2 |
| assert_fpreg_i 8, fr3 |
| assert_fpreg_x 0xa5a5a5a5, fr4 |
| assert_fpreg_x 0xa5a5a5a5, fr5 |
| assert_fpreg_x 0xa5a5a5a5, fr6 |
| assert_fpreg_x 0xa5a5a5a5, fr7 |
| assert_fpreg_i 1, fr8 |
| assert_fpreg_i 0, fr9 |
| assert_fpreg_i 1, fr10 |
| assert_fpreg_i 5, fr11 |
| assert_fpreg_x 0xa5a5a5a5, fr12 |
| assert_fpreg_x 0xa5a5a5a5, fr13 |
| assert_fpreg_x 0xa5a5a5a5, fr14 |
| assert_fpreg_x 0xa5a5a5a5, fr15 |
| |
| test_grs_a5a5 |
| test_infp: |
| # Test positive infinity |
| fldi0 fr11 |
| mov.l infp, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be plus infinity |
| assert_fpreg_x 0x7f800000, fr11 |
| test_infm: |
| # Test negitive infinity |
| fldi0 fr11 |
| mov.l infm, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be plus infinity |
| assert_fpreg_x 0xff800000, fr11 |
| test_qnanp: |
| # Test positive qnan |
| fldi0 fr11 |
| mov.l qnanp, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be plus qnan (or greater) |
| flds fr11, fpul |
| sts fpul, r1 |
| cmp/ge r0, r1 |
| bt .L0 |
| fail |
| .L0: |
| test_snanp: |
| # Test positive snan |
| fldi0 fr11 |
| mov.l snanp, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be plus snan (or greater) |
| flds fr11, fpul |
| sts fpul, r1 |
| cmp/ge r0, r1 |
| bt .L1 |
| fail |
| .L1: |
| .if 0 |
| # Handling of nan and inf not implemented yet. |
| test_qnanm: |
| # Test negantive qnan |
| fldi0 fr11 |
| mov.l qnanm, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be minus qnan (or less) |
| flds fr11, fpul |
| sts fpul, r1 |
| cmp/ge r1, r0 |
| bt .L2 |
| fail |
| .L2: |
| test_snanm: |
| # Test negative snan |
| fldi0 fr11 |
| mov.l snanm, r0 |
| lds r0, fpul |
| fsts fpul, fr0 |
| fipr fv0, fv8 |
| # fr11 should be minus snan (or less) |
| flds fr11, fpul |
| sts fpul, r1 |
| cmp/ge r1, r0 |
| bt .L3 |
| fail |
| .L3: |
| .endif |
| pass |
| exit 0 |
| |
| .align 2 |
| qnanp: .long 0x7f800001 |
| qnanm: .long 0xff800001 |
| snanp: .long 0x7fc00000 |
| snanm: .long 0xffc00000 |
| infp: .long 0x7f800000 |
| infm: .long 0xff800000 |