| # Hitachi H8 testcase 'ldm', 'stm' |
| # mach(): all |
| # 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 |
| .align 4 |
| _stack: .long 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0 |
| .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
| .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
| .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
| _stack_top: |
| |
| start |
| |
| .if (sim_cpu == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr |
| stm_2reg: |
| set_grs_a5a5 |
| mov #_stack_top, er7 |
| mov #2, er2 |
| mov #3, er3 |
| |
| set_ccr_zero |
| stm er2-er3, @-sp |
| test_cc_clear |
| |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 1 |
| test_h_gr32 2 er2 |
| test_h_gr32 3 er3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_h_gr32 _stack_top-8, er7 |
| |
| mov @_stack_top-4, er0 |
| cmp #2, er0 |
| bne fail1 |
| |
| mov @_stack_top-8, er0 |
| cmp #3, er0 |
| bne fail1 |
| |
| mov @_stack_top-12, er0 |
| cmp #0, er0 |
| bne fail1 |
| |
| stm_3reg: |
| set_grs_a5a5 |
| mov #_stack_top, er7 |
| mov #4, er4 |
| mov #5, er5 |
| mov #6, er6 |
| |
| set_ccr_zero |
| stm er4-er6, @-sp |
| test_cc_clear |
| |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 1 |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_h_gr32 4 er4 |
| test_h_gr32 5 er5 |
| test_h_gr32 6 er6 |
| test_h_gr32 _stack_top-12, er7 |
| |
| mov @_stack_top-4, er0 |
| cmp #4, er0 |
| bne fail1 |
| |
| mov @_stack_top-8, er0 |
| cmp #5, er0 |
| bne fail1 |
| |
| mov @_stack_top-12, er0 |
| cmp #6, er0 |
| bne fail1 |
| |
| mov @_stack_top-16, er0 |
| cmp #0, er0 |
| bne fail1 |
| |
| stm_4reg: |
| set_grs_a5a5 |
| mov #_stack_top, er7 |
| mov #1, er0 |
| mov #2, er1 |
| mov #3, er2 |
| mov #4, er3 |
| |
| set_ccr_zero |
| stm er0-er3, @-sp |
| test_cc_clear |
| |
| test_h_gr32 1 er0 |
| test_h_gr32 2 er1 |
| test_h_gr32 3 er2 |
| test_h_gr32 4 er3 |
| test_gr_a5a5 4 ; Make sure other general regs not disturbed |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_h_gr32 _stack_top-16, er7 |
| |
| mov @_stack_top-4, er0 |
| cmp #1, er0 |
| bne fail1 |
| |
| mov @_stack_top-8, er0 |
| cmp #2, er0 |
| bne fail1 |
| |
| mov @_stack_top-12, er0 |
| cmp #3, er0 |
| bne fail1 |
| |
| mov @_stack_top-16, er0 |
| cmp #4, er0 |
| bne fail1 |
| |
| mov @_stack_top-20, er0 |
| cmp #0, er0 |
| bne fail1 |
| |
| ldm_2reg: |
| set_grs_a5a5 |
| mov #_stack, er7 |
| |
| set_ccr_zero |
| ldm @sp+, er2-er3 |
| test_cc_clear |
| |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 1 |
| test_h_gr32 1 er2 |
| test_h_gr32 0 er3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_h_gr32 _stack+8, er7 |
| |
| ldm_3reg: |
| set_grs_a5a5 |
| mov #_stack+4, er7 |
| |
| set_ccr_zero |
| ldm @sp+, er4-er6 |
| test_cc_clear |
| |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 1 |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_h_gr32 3 er4 |
| test_h_gr32 2 er5 |
| test_h_gr32 1 er6 |
| test_h_gr32 _stack+16, er7 |
| |
| ldm_4reg: |
| set_grs_a5a5 |
| mov #_stack+4, er7 |
| |
| set_ccr_zero |
| ldm @sp+, er0-er3 |
| test_cc_clear |
| |
| test_h_gr32 4 er0 |
| test_h_gr32 3 er1 |
| test_h_gr32 2 er2 |
| test_h_gr32 1 er3 |
| test_gr_a5a5 4 ; Make sure other general regs not disturbed |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_h_gr32 _stack+20, er7 |
| .endif |
| |
| pushpop: |
| set_grs_a5a5 |
| .if (sim_cpu == h8300) |
| mov #_stack_top, r7 |
| mov #12, r1 |
| mov #34, r2 |
| mov #56, r3 |
| push r1 |
| push r2 |
| push r3 |
| pop r4 |
| pop r5 |
| pop r6 |
| |
| test_gr_a5a5 0 ; Make sure other general _reg_ not disturbed |
| test_h_gr16 12 r1 |
| test_h_gr16 34 r2 |
| test_h_gr16 56 r3 |
| test_h_gr16 56 r4 |
| test_h_gr16 34 r5 |
| test_h_gr16 12 r6 |
| mov #_stack_top, r0 |
| cmp.w r0, r7 |
| bne fail1 |
| .else |
| mov #_stack_top, er7 |
| mov #12, er1 |
| mov #34, er2 |
| mov #56, er3 |
| push er1 |
| push er2 |
| push er3 |
| pop er4 |
| pop er5 |
| pop er6 |
| |
| test_gr_a5a5 0 ; Make sure other general _reg_ not disturbed |
| test_h_gr32 12 er1 |
| test_h_gr32 34 er2 |
| test_h_gr32 56 er3 |
| test_h_gr32 56 er4 |
| test_h_gr32 34 er5 |
| test_h_gr32 12 er6 |
| test_h_gr32 _stack_top, er7 |
| .endif |
| |
| pass |
| |
| exit 0 |
| |
| fail1: fail |