| # Hitachi H8 testcase 'movmd' |
| # mach(): h8sx |
| # as(h8300): --defsym sim_cpu=0 |
| # as(h8300h): --defsym sim_cpu=1 |
| # as(h8300s): --defsym sim_cpu=2 |
| # as(h8sx): --defsym sim_cpu=3 |
| # ld(h8300h): -m h8300helf |
| # ld(h8300s): -m h8300self |
| # ld(h8sx): -m h8300sxelf |
| |
| .include "testutils.inc" |
| |
| .data |
| byte_src: |
| .byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 |
| byte_dst: |
| .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
| |
| .align 2 |
| word_src: |
| .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 |
| word_dst: |
| .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
| |
| .align 4 |
| long_src: |
| .long 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 |
| long_dst: |
| .long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
| |
| start |
| .if (sim_cpu == h8sx) |
| movmd_b:# |
| # Byte block transfer |
| # |
| set_grs_a5a5 |
| |
| mov #byte_src, er5 |
| mov #byte_dst, er6 |
| mov #10, r4 |
| set_ccr_zero |
| ;; movmd.b |
| movmd.b |
| ;;; .word 0x7b94 |
| |
| test_cc_clear |
| test_gr_a5a5 0 |
| test_gr_a5a5 1 |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_h_gr32 0xa5a50000 er4 |
| test_h_gr32 byte_src+10 er5 |
| test_h_gr32 byte_dst+10 er6 |
| test_gr_a5a5 7 |
| |
| # |
| # Now make sure exactly 10 bytes were transferred. |
| memcmp byte_src byte_dst 10 |
| cmp.b #0, @byte_dst+10 |
| beq .L0 |
| fail |
| .L0: |
| |
| movmd_w:# |
| # Word block transfer |
| # |
| set_grs_a5a5 |
| |
| mov #word_src, er5 |
| mov #word_dst, er6 |
| mov #10, r4 |
| set_ccr_zero |
| ;; movmd.w |
| movmd.w |
| ;;; .word 0x7ba4 |
| |
| test_cc_clear |
| test_gr_a5a5 0 |
| test_gr_a5a5 1 |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_h_gr32 0xa5a50000 er4 |
| test_h_gr32 word_src+20 er5 |
| test_h_gr32 word_dst+20 er6 |
| test_gr_a5a5 7 |
| |
| # |
| # Now make sure exactly 20 bytes were transferred. |
| memcmp word_src word_dst 20 |
| cmp.w #0, @word_dst+20 |
| beq .L1 |
| fail |
| .L1: |
| |
| movmd_l:# |
| # Long block transfer |
| # |
| set_grs_a5a5 |
| |
| mov #long_src, er5 |
| mov #long_dst, er6 |
| mov #10, r4 |
| set_ccr_zero |
| ;; movmd.b |
| movmd.l |
| ;;; .word 0x7bb4 |
| |
| test_cc_clear |
| test_gr_a5a5 0 |
| test_gr_a5a5 1 |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_h_gr32 0xa5a50000 er4 |
| test_h_gr32 long_src+40 er5 |
| test_h_gr32 long_dst+40 er6 |
| test_gr_a5a5 7 |
| |
| # |
| # Now make sure exactly 40 bytes were transferred. |
| memcmp long_src long_dst 40 |
| cmp.l #0, @long_dst+40 |
| beq .L2 |
| fail |
| .L2: |
| |
| .endif |
| pass |
| |
| exit 0 |