nkeynes@358: .section .text nkeynes@358: .include "sh4/inc.s" nkeynes@358: ! nkeynes@358: ! Test fmov (all variants) nkeynes@358: ! (not arithmetic) nkeynes@358: nkeynes@358: .global _test_fmov nkeynes@358: _test_fmov: nkeynes@358: start_test nkeynes@358: nkeynes@358: xor r0,r0 nkeynes@358: lds r0, fpscr nkeynes@358: nkeynes@358: test_fmov_1: ! single precision reg-to-reg nkeynes@358: add #1, r12 nkeynes@358: nkeynes@358: fldi0 fr0 nkeynes@358: fldi1 fr1 nkeynes@358: flds fr0, fpul nkeynes@358: sts fpul, r0 nkeynes@358: tst r0, r0 nkeynes@358: bf test_fmov_1_fail nkeynes@358: fmov fr1, fr0 nkeynes@358: flds fr0, fpul nkeynes@358: sts fpul, r0 nkeynes@358: mov.l test_fmov_1_result, r1 nkeynes@358: cmp/eq r0, r1 nkeynes@358: bt test_fmov_2 nkeynes@358: test_fmov_1_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_2 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_1_result: nkeynes@358: .long 0x3F800000 nkeynes@358: nkeynes@358: test_fmov_2: ! reg-to-reg double prec nkeynes@358: add #1, r12 nkeynes@358: mov.l test_fmov_2_input_a, r1 nkeynes@358: lds r1, fpul nkeynes@358: fsts fpul, fr4 nkeynes@358: mov.l test_fmov_2_input_b, r3 nkeynes@358: lds r3, fpul nkeynes@358: fsts fpul, fr5 nkeynes@358: fldi0 fr8 nkeynes@358: fldi0 fr9 nkeynes@358: fschg nkeynes@358: flds fr8, fpul nkeynes@358: sts fpul, r0 nkeynes@358: tst r0, r0 nkeynes@358: bf test_fmov_2_fail nkeynes@358: flds fr9, fpul nkeynes@358: sts fpul, r0 nkeynes@358: tst r0, r0 nkeynes@358: bf test_fmov_2_fail nkeynes@358: fmov fr4, fr8 nkeynes@358: flds fr8, fpul nkeynes@358: sts fpul, r0 nkeynes@358: flds fr9, fpul nkeynes@358: sts fpul, r2 nkeynes@358: cmp/eq r0, r1 nkeynes@358: bf test_fmov_2_fail nkeynes@358: cmp/eq r2, r3 nkeynes@358: bt test_fmov_3 nkeynes@358: test_fmov_2_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_3 nkeynes@358: nop nkeynes@358: test_fmov_2_input_a: nkeynes@358: .long 0x12345678 nkeynes@358: test_fmov_2_input_b: nkeynes@358: .long 0x9ABCDEF0 nkeynes@358: nkeynes@358: test_fmov_3: ! double size DRm to XDn nkeynes@358: add #1, r12 nkeynes@358: frchg nkeynes@358: fldi0 fr8 nkeynes@358: fldi0 fr9 nkeynes@358: frchg nkeynes@358: fldi0 fr8 nkeynes@358: fldi0 fr9 nkeynes@358: mov.l test_fmov_3_input_a, r2 nkeynes@358: lds r2, fpul nkeynes@358: fsts fpul, fr2 nkeynes@358: mov.l test_fmov_3_input_b, r3 nkeynes@358: lds r3, fpul nkeynes@358: fsts fpul, fr3 nkeynes@358: nkeynes@358: fmov fr2, fr9 nkeynes@358: flds fr8, fpul nkeynes@358: sts fpul, r0 nkeynes@358: flds fr9, fpul nkeynes@358: sts fpul, r1 nkeynes@358: tst r0, r0 nkeynes@358: bf test_fmov_3_fail nkeynes@358: tst r1, r1 nkeynes@358: bf test_fmov_3_fail nkeynes@358: frchg nkeynes@358: flds fr8, fpul nkeynes@358: sts fpul, r0 nkeynes@358: flds fr9, fpul nkeynes@358: sts fpul, r1 nkeynes@358: cmp/eq r0, r2 nkeynes@358: bf test_fmov_3_fail nkeynes@358: cmp/eq r1, r3 nkeynes@358: bt test_fmov_4 nkeynes@358: nkeynes@358: test_fmov_3_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_4 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_3_input_a: nkeynes@358: .long 0x86421357 nkeynes@358: test_fmov_3_input_b: nkeynes@358: .long 0x97532468 nkeynes@358: nkeynes@358: test_fmov_4: ! double size XDm to DRn nkeynes@358: add #1, r12 nkeynes@358: mov.l test_fmov_4_input_a, r2 nkeynes@358: lds r2, fpul nkeynes@358: fsts fpul, fr6 nkeynes@358: mov.l test_fmov_4_input_b, r3 nkeynes@358: lds r3, fpul nkeynes@358: fsts fpul, fr7 nkeynes@358: fldi0 fr0 nkeynes@358: fldi0 fr1 nkeynes@358: frchg nkeynes@358: fldi0 fr6 nkeynes@358: fldi0 fr7 nkeynes@358: nkeynes@358: fmov fr7, fr0 nkeynes@358: flds fr0, fpul nkeynes@358: sts fpul, r0 nkeynes@358: flds fr1, fpul nkeynes@358: sts fpul, r1 nkeynes@358: cmp/eq r0, r2 nkeynes@358: bf test_fmov_4_fail nkeynes@358: cmp/eq r1, r3 nkeynes@358: bf test_fmov_4_fail nkeynes@358: frchg nkeynes@358: flds fr0, fpul nkeynes@358: sts fpul, r0 nkeynes@358: flds fr1, fpul nkeynes@358: sts fpul, r1 nkeynes@358: tst r0, r0 nkeynes@358: bf test_fmov_4_fail nkeynes@358: tst r1, r1 nkeynes@358: bt test_fmov_5 nkeynes@358: nkeynes@358: test_fmov_4_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_5 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_4_input_a: nkeynes@358: .long 0xACADACA0 nkeynes@358: test_fmov_4_input_b: nkeynes@358: .long 0x12233445 nkeynes@358: nkeynes@358: nkeynes@358: test_fmov_5: ! double size @Rm to DRn, DRm to @Rn nkeynes@358: add #1, r12 nkeynes@358: mova test_fmov_5_data_a, r0 nkeynes@358: mov r0, r4 nkeynes@358: xor r1, r1 nkeynes@358: mov.l r1, @r0 nkeynes@358: add #4, r0 nkeynes@358: mov.l r1, @r0 nkeynes@358: mova test_fmov_5_input_a, r0 nkeynes@358: fmov @r0, fr8 nkeynes@358: mov.l test_fmov_5_input_a, r0 nkeynes@358: mov.l test_fmov_5_input_b, r1 nkeynes@358: flds fr8, fpul nkeynes@358: sts fpul, r5 nkeynes@358: flds fr9, fpul nkeynes@358: sts fpul, r6 nkeynes@358: cmp/eq r0, r5 nkeynes@358: bf test_fmov_5_fail nkeynes@358: cmp/eq r1, r6 nkeynes@358: bf test_fmov_5_fail nkeynes@358: fmov fr8, @r4 nkeynes@358: mov.l test_fmov_5_data_a, r2 nkeynes@358: mov.l test_fmov_5_data_b, r3 nkeynes@358: cmp/eq r0, r2 nkeynes@358: bf test_fmov_5_fail nkeynes@358: cmp/eq r1, r3 nkeynes@358: bt test_fmov_6 nkeynes@358: test_fmov_5_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_6 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_5_input_a: nkeynes@358: .long 0xFEEDBEEF nkeynes@358: test_fmov_5_input_b: nkeynes@358: .long 0xDEAD1234 nkeynes@358: test_fmov_5_data_a: nkeynes@358: .long 0 nkeynes@358: test_fmov_5_data_b: nkeynes@358: .long 0 nkeynes@358: nkeynes@358: test_fmov_6: ! double size @Rm+ to DRn, DRm to @-Rn nkeynes@358: add #1, r12 nkeynes@358: mova test_fmov_6_data_a, r0 nkeynes@358: mov r0, r4 nkeynes@358: xor r1, r1 nkeynes@358: mov.l r1, @r4 nkeynes@358: add #4, r4 nkeynes@358: mov.l r1, @r4 nkeynes@358: add #4, r4 nkeynes@358: mova test_fmov_6_input_a, r0 nkeynes@358: mov r0, r7 nkeynes@358: fmov @r7+, fr10 nkeynes@358: mov.l test_fmov_6_input_a, r0 nkeynes@358: mov.l test_fmov_6_input_b, r1 nkeynes@358: flds fr10, fpul nkeynes@358: sts fpul, r5 nkeynes@358: flds fr11, fpul nkeynes@358: sts fpul, r6 nkeynes@358: cmp/eq r0, r5 nkeynes@358: bf test_fmov_6_fail nkeynes@358: cmp/eq r1, r6 nkeynes@358: bf test_fmov_6_fail nkeynes@358: fmov fr10, @-r4 nkeynes@358: mov.l test_fmov_6_data_a, r2 nkeynes@358: mov.l test_fmov_6_data_b, r3 nkeynes@358: cmp/eq r0, r2 nkeynes@358: bf test_fmov_6_fail nkeynes@358: cmp/eq r1, r3 nkeynes@358: bf test_fmov_6_fail nkeynes@358: mova test_fmov_6_data_a, r0 nkeynes@358: cmp/eq r0, r4 nkeynes@358: bf test_fmov_6_fail nkeynes@358: cmp/eq r0, r7 nkeynes@358: bt test_fmov_7 nkeynes@358: test_fmov_6_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_7 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_6_input_a: nkeynes@358: .long 0x42318576 nkeynes@358: test_fmov_6_input_b: nkeynes@358: .long 0xF0AFD34F nkeynes@358: test_fmov_6_data_a: nkeynes@358: .long 0 nkeynes@358: test_fmov_6_data_b: nkeynes@358: .long 0 nkeynes@358: nkeynes@358: test_fmov_7: ! double size @Rm,@R0 to DRn, DRm to @Rn,@R0 nkeynes@358: add #1, r12 nkeynes@358: mova test_fmov_7_data_a, r0 nkeynes@358: mov r0, r4 nkeynes@358: xor r1, r1 nkeynes@358: mov.l r1, @r4 nkeynes@358: add #4, r4 nkeynes@358: mov.l r1, @r4 nkeynes@358: add #48, r4 nkeynes@358: mova test_fmov_7_input_a, r0 nkeynes@358: mov r0, r7 nkeynes@358: xor r0, r0 nkeynes@358: add #-31, r7 nkeynes@358: add #31, r0 nkeynes@358: fmov @(r0,r7), fr10 nkeynes@358: mov.l test_fmov_7_input_a, r0 nkeynes@358: mov.l test_fmov_7_input_b, r1 nkeynes@358: flds fr10, fpul nkeynes@358: sts fpul, r5 nkeynes@358: flds fr11, fpul nkeynes@358: sts fpul, r6 nkeynes@358: cmp/eq r0, r5 nkeynes@358: bf test_fmov_7_fail nkeynes@358: cmp/eq r1, r6 nkeynes@358: bf test_fmov_7_fail nkeynes@358: xor r0, r0 nkeynes@358: add #-52, r0 nkeynes@358: fmov fr10, @(r0,r4) nkeynes@358: mov.l test_fmov_7_input_a, r0 nkeynes@358: mov.l test_fmov_7_data_a, r2 nkeynes@358: mov.l test_fmov_7_data_b, r3 nkeynes@358: cmp/eq r0, r2 nkeynes@358: bf test_fmov_7_fail nkeynes@358: cmp/eq r1, r3 nkeynes@358: bf test_fmov_7_fail nkeynes@358: mova test_fmov_7_data_a, r0 nkeynes@358: add #52, r0 nkeynes@358: cmp/eq r0, r4 nkeynes@358: bf test_fmov_7_fail nkeynes@358: mova test_fmov_7_input_a, r0 nkeynes@358: add #-31, r0 nkeynes@358: cmp/eq r0, r7 nkeynes@358: bt test_fmov_8 nkeynes@358: test_fmov_7_fail: nkeynes@358: fail test_fmov_str_k nkeynes@358: bra test_fmov_8 nkeynes@358: nop nkeynes@358: nkeynes@358: test_fmov_7_input_a: nkeynes@358: .long 0xABBACADA nkeynes@358: test_fmov_7_input_b: nkeynes@358: .long 0x43546576 nkeynes@358: test_fmov_7_data_a: nkeynes@358: .long 0 nkeynes@358: test_fmov_7_data_b: nkeynes@358: .long 0 nkeynes@358: nkeynes@358: test_fmov_8: nkeynes@358: nkeynes@358: test_fmov_end: nkeynes@358: xor r0, r0 nkeynes@358: lds r0, fpscr nkeynes@358: end_test test_fmov_str_k nkeynes@358: nkeynes@358: test_fmov_str: nkeynes@358: .string "FMOV" nkeynes@358: nkeynes@358: .align 4 nkeynes@358: test_fmov_str_k: nkeynes@358: .long test_fmov_str