nkeynes@357: .section .text nkeynes@357: .include "sh4/inc.s" nkeynes@357: ! nkeynes@357: ! Test ftrc nkeynes@357: nkeynes@357: .global _test_ftrc nkeynes@357: _test_ftrc: nkeynes@357: start_test nkeynes@357: nkeynes@357: xor r0,r0 nkeynes@357: lds r0, fpscr nkeynes@357: nkeynes@357: test_ftrc_1: ! Load 1.0 single precision nkeynes@357: add #1, r12 nkeynes@357: mov.l test_ftrc_1_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr0 nkeynes@357: ftrc fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: mov.l test_ftrc_1_result, r1 nkeynes@357: cmp/eq r0,r1 nkeynes@357: bt test_ftrc_2 nkeynes@357: test_ftrc_1_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_2 nkeynes@357: nop nkeynes@357: nkeynes@357: .align 4 nkeynes@357: test_ftrc_1_input: nkeynes@357: .long 0x3F800000 nkeynes@357: test_ftrc_1_result: nkeynes@357: .long 0x00000001 nkeynes@357: nkeynes@357: test_ftrc_2: ! Load -1.0 double precision nkeynes@357: add #1, r12 nkeynes@357: setpr nkeynes@357: mov.l test_ftrc_2_input_a, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr0 nkeynes@357: mov.l test_ftrc_2_input_b, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr1 nkeynes@357: ftrc fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: mov.l test_ftrc_2_result, r1 nkeynes@357: cmp/eq r0,r1 nkeynes@357: bt test_ftrc_3 nkeynes@357: test_ftrc_2_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_3 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_2_input_a: nkeynes@357: .long 0xBFF00000 nkeynes@357: test_ftrc_2_input_b: nkeynes@357: .long 0x00000000 nkeynes@357: test_ftrc_2_result: nkeynes@357: .long 0xFFFFFFFF nkeynes@357: nkeynes@357: test_ftrc_3: ! pr=0, sz=1 nkeynes@357: add #1, r12 nkeynes@357: clrpr nkeynes@357: mov.l test_ftrc_3_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr0 nkeynes@357: fschg nkeynes@357: ftrc fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: mov.l test_ftrc_3_result, r1 nkeynes@357: cmp/eq r0, r1 nkeynes@357: bt test_ftrc_4 nkeynes@357: test_ftrc_3_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_4 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_3_input: nkeynes@357: .long 0xCE4CCCCD nkeynes@357: test_ftrc_3_result: nkeynes@357: .long 0xCCCCCCC0 nkeynes@357: nkeynes@357: test_ftrc_4: ! pr=1, sz=1 nkeynes@357: add #1, r12 nkeynes@357: fldi0 fr0 nkeynes@357: fldi1 fr1 nkeynes@357: setpr nkeynes@357: mov.l test_ftrc_4_input_a, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr0 nkeynes@357: mov.l test_ftrc_4_input_b, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr1 nkeynes@357: ftrc fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: mov.l test_ftrc_4_result, r1 nkeynes@357: cmp/eq r0,r1 nkeynes@357: bt test_ftrc_5 nkeynes@357: test_ftrc_4_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_5 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_4_input_a: nkeynes@358: .long 0x40FFFF11 nkeynes@357: test_ftrc_4_input_b: nkeynes@358: .long 0x11111111 nkeynes@357: test_ftrc_4_result: nkeynes@358: .long 0x0001FFF1 nkeynes@357: nkeynes@357: nkeynes@357: test_ftrc_5: ! test w/ max +int, sz=0, pr=0, fr=1 nkeynes@357: add #1, r12 nkeynes@357: xor r0,r0 nkeynes@357: lds r0, fpscr nkeynes@357: fldi0 fr0 nkeynes@357: fldi0 fr1 nkeynes@357: frchg nkeynes@357: fldi0 fr0 nkeynes@357: fldi0 fr1 nkeynes@357: mov.l test_ftrc_5_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr0 nkeynes@357: ftrc fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: mov.l test_ftrc_5_result, r1 nkeynes@357: cmp/eq r0, r1 nkeynes@357: bf test_ftrc_5_fail nkeynes@357: flds fr1, fpul nkeynes@357: sts fpul, r0 nkeynes@357: tst r0, r0 nkeynes@357: bf test_ftrc_5_fail nkeynes@357: lds r0, fpscr nkeynes@357: flds fr0, fpul nkeynes@357: sts fpul, r0 nkeynes@357: tst r0, r0 nkeynes@357: bt test_ftrc_6 nkeynes@357: test_ftrc_5_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_6 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_5_input: nkeynes@357: .long 0x4F000000 nkeynes@357: test_ftrc_5_result: nkeynes@357: .long 0x7FFFFFFF nkeynes@357: nkeynes@357: test_ftrc_6: ! Test max -int nkeynes@357: add #1, r12 nkeynes@357: mov.l test_ftrc_6_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr5 nkeynes@357: ftrc fr5, fpul nkeynes@357: sts fpul, r2 nkeynes@357: mov.l test_ftrc_6_result, r1 nkeynes@357: cmp/eq r1, r2 nkeynes@357: bt test_ftrc_7 nkeynes@357: nkeynes@357: test_ftrc_6_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@357: bra test_ftrc_7 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_6_input: nkeynes@357: .long 0xCF000000 nkeynes@357: test_ftrc_6_result: nkeynes@357: .long 0x80000000 nkeynes@357: nkeynes@357: test_ftrc_7: ! Test >max +int nkeynes@357: add #1, r12 nkeynes@357: mov.l test_ftrc_7_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr7 nkeynes@357: ftrc fr7, fpul nkeynes@357: sts fpul, r2 nkeynes@357: mov.l test_ftrc_7_result, r1 nkeynes@357: cmp/eq r1, r2 nkeynes@357: bt test_ftrc_8 nkeynes@357: test_ftrc_7_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@358: bra test_ftrc_8 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_7_input: nkeynes@357: .long 0x7E111111 nkeynes@357: test_ftrc_7_result: nkeynes@357: .long 0x7FFFFFFF nkeynes@357: nkeynes@357: test_ftrc_8: ! test < min -int nkeynes@357: add #1, r12 nkeynes@357: mov.l test_ftrc_8_input, r0 nkeynes@357: lds r0, fpul nkeynes@357: fsts fpul, fr9 nkeynes@357: ftrc fr9, fpul nkeynes@357: sts fpul, r2 nkeynes@357: mov.l test_ftrc_8_result, r1 nkeynes@357: cmp/eq r1, r2 nkeynes@358: bt test_ftrc_9 nkeynes@357: test_ftrc_8_fail: nkeynes@357: fail test_ftrc_str_k nkeynes@358: bra test_ftrc_9 nkeynes@357: nop nkeynes@357: nkeynes@357: test_ftrc_8_input: nkeynes@357: .long 0xFE111111 nkeynes@357: test_ftrc_8_result: nkeynes@357: .long 0x80000000 nkeynes@357: nkeynes@358: test_ftrc_9: ! Test >max +int pr=1 nkeynes@358: add #1, r12 nkeynes@358: setpr nkeynes@358: mov.l test_ftrc_9_input_a, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr6 nkeynes@358: mov.l test_ftrc_9_input_b, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr7 nkeynes@358: ftrc fr6, fpul nkeynes@358: sts fpul, r2 nkeynes@358: mov.l test_ftrc_9_result, r1 nkeynes@358: cmp/eq r1, r2 nkeynes@358: bt test_ftrc_10 nkeynes@358: test_ftrc_9_fail: nkeynes@358: fail test_ftrc_str_k nkeynes@358: bra test_ftrc_10 nkeynes@358: nop nkeynes@357: nkeynes@358: test_ftrc_9_input_a: nkeynes@358: .long 0x41DFFFFF nkeynes@358: test_ftrc_9_input_b: nkeynes@358: .long 0xFFC00000 nkeynes@358: test_ftrc_9_result: nkeynes@358: .long 0x7FFFFFFF nkeynes@358: nkeynes@358: test_ftrc_10: ! test < min -int nkeynes@358: add #1, r12 nkeynes@358: mov.l test_ftrc_10_input_a, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr8 nkeynes@358: mov.l test_ftrc_10_input_b, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr9 nkeynes@358: ftrc fr8, fpul nkeynes@358: sts fpul, r2 nkeynes@358: mov.l test_ftrc_10_result, r1 nkeynes@358: cmp/eq r1, r2 nkeynes@358: bt test_ftrc_11 nkeynes@358: test_ftrc_10_fail: nkeynes@358: fail test_ftrc_str_k nkeynes@358: bra test_ftrc_11 nkeynes@358: nop nkeynes@358: nkeynes@358: test_ftrc_10_input_a: nkeynes@358: .long 0xFE111111 nkeynes@358: test_ftrc_10_input_b: nkeynes@358: .long 0x11111111 nkeynes@358: test_ftrc_10_result: nkeynes@358: .long 0x80000000 nkeynes@358: nkeynes@358: test_ftrc_11: ! test undefined instruction, pr=1 nkeynes@741: bra test_ftrc_12 nkeynes@358: add #1, r12 nkeynes@358: mov.l test_ftrc_11_input_a, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr0 nkeynes@358: mov.l test_ftrc_11_input_b, r1 nkeynes@358: lds r1, fpul nkeynes@358: fsts fpul, fr1 nkeynes@358: mov.l test_ftrc_11_input_c, r0 nkeynes@358: lds r0, fpul nkeynes@358: fsts fpul, fr2 nkeynes@358: xor r0, r0 nkeynes@358: not r0, r0 nkeynes@358: lds r0, fpul nkeynes@358: ftrc fr1, fpul nkeynes@358: sts fpul, r1 nkeynes@358: mov.l test_ftrc_11_result, r2 nkeynes@358: cmp/eq r1, r2 nkeynes@393: bt test_ftrc_12 nkeynes@358: test_ftrc_11_fail: nkeynes@358: fail test_ftrc_str_k nkeynes@393: bra test_ftrc_12 nkeynes@358: nop nkeynes@358: test_ftrc_11_input_a: nkeynes@358: .long 0x40FFFF11 nkeynes@358: test_ftrc_11_input_b: nkeynes@358: .long 0x11111111 nkeynes@358: test_ftrc_11_input_c: nkeynes@358: .long 0x42FFFF11 nkeynes@358: test_ftrc_11_result: nkeynes@358: .long 0x00000000 nkeynes@358: nkeynes@393: test_ftrc_12: ! single precision numeric tests (rounding) nkeynes@393: mov.l r11, @-r15 nkeynes@393: mov.l r10, @-r15 nkeynes@393: mova test_ftrc_12_data, r0 nkeynes@393: mov r0, r10 nkeynes@393: mov #4, r11 nkeynes@393: clrpr nkeynes@393: test_ftrc_12_loop: nkeynes@393: add #1, r12 nkeynes@393: fmov @r10+, fr5 nkeynes@393: ftrc fr5, fpul nkeynes@393: sts fpul, r4 nkeynes@393: mov.l @r10+, r5 nkeynes@393: cmp/eq r4, r5 nkeynes@393: bt test_ftrc_12_ok nkeynes@393: fail test_ftrc_str_k nkeynes@393: test_ftrc_12_ok: nkeynes@393: dt r11 nkeynes@393: bf test_ftrc_12_loop nkeynes@393: bra test_ftrc_end nkeynes@393: nop nkeynes@393: test_ftrc_12_data: nkeynes@393: .long 0x449a5314 nkeynes@393: .long 0x000004D2 nkeynes@393: .long 0xC5A9C785 nkeynes@393: .long 0xFFFFEAC8 nkeynes@393: .long 0x49098291 nkeynes@393: .long 0x00089829 nkeynes@393: .long 0xC2DA999A nkeynes@393: .long 0xFFFFFF93 nkeynes@393: nkeynes@357: test_ftrc_end: nkeynes@393: mov.l @r15+, r10 nkeynes@393: mov.l @r15+, r11 nkeynes@357: end_test test_ftrc_str_k nkeynes@357: nkeynes@357: test_ftrc_str: nkeynes@357: .string "FTRC" nkeynes@357: nkeynes@357: .align 4 nkeynes@357: test_ftrc_str_k: nkeynes@357: .long test_ftrc_str