| # Hitachi H8 testcase 'rotl' |
| # mach(): h8300s 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" |
| |
| start |
| |
| .data |
| byte_dest: .byte 0xa5 |
| .align 2 |
| word_dest: .word 0xa5a5 |
| .align 4 |
| long_dest: .long 0xa5a5a5a5 |
| |
| .text |
| |
| rotl_b_reg8_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.b r0l ; shift left arithmetic by one |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| test_h_gr16 0xa54b r0 ; 1010 0101 -> 0100 1011 |
| .if (sim_cpu) |
| test_h_gr32 0xa5a5a54b er0 |
| .endif |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_b_ind_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov #byte_dest, er0 |
| rotl.b @er0 ; shift right arithmetic by one, indirect |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 byte_dest er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbind1 |
| fail |
| .Lbind1: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexb16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.b @(byte_dest-5:16, r0.b) ; indexed byte/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexb161 |
| fail |
| .Lbindexb161: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexw16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.b @(byte_dest-256:16, r0.w) ; indexed byte/word |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexw161 |
| fail |
| .Lbindexw161: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexl16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.b @(byte_dest+1:16, er0.l) ; indexed byte/long |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexl161 |
| fail |
| .Lbindexl161: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexb32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.b @(byte_dest-5:32, r1.b) ; indexed byte/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexb321 |
| fail |
| .Lbindexb321: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexw32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.b @(byte_dest-256:32, r1.w) ; indexed byte/word |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexw321 |
| fail |
| .Lbindexw321: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexl32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.b @(byte_dest+1:32, er1.l) ; indexed byte/long |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 0100 1011 |
| cmp.b #0x4b, @byte_dest |
| beq .Lbindexl321 |
| fail |
| .Lbindexl321: |
| mov.b #0xa5, @byte_dest |
| |
| .endif |
| |
| rotl_b_reg8_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.b #2, r0l ; shift left arithmetic by two |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr16 0xa596 r0 ; 1010 0101 -> 1001 0110 |
| .if (sim_cpu) |
| test_h_gr32 0xa5a5a596 er0 |
| .endif |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_b_ind_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov #byte_dest, er0 |
| rotl.b #2, @er0 ; shift right arithmetic by one, indirect |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 byte_dest er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbind2 |
| fail |
| .Lbind2: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexb16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.b #2, @(byte_dest-5:16, r0.b) ; indexed byte/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexb162 |
| fail |
| .Lbindexb162: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexw16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.b #2, @(byte_dest-256:16, r0.w) ; indexed byte/word |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexw162 |
| fail |
| .Lbindexw162: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexl16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.b #2, @(byte_dest+1:16, er0.l) ; indexed byte/long |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexl162 |
| fail |
| .Lbindexl162: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexb32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.b #2, @(byte_dest-5:32, r1.b) ; indexed byte/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexb322 |
| fail |
| .Lbindexb322: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexw32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.b #2, @(byte_dest-256:32, r1.w) ; indexed byte/word |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexw322 |
| fail |
| .Lbindexw322: |
| mov.b #0xa5, @byte_dest |
| |
| rotl_b_indexl32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.b #2, @(byte_dest+1:32, er1.l) ; indexed byte/long |
| |
| test_carry_clear ; H=0 N=1 Z=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 -> 1001 0110 |
| cmp.b #0x96, @byte_dest |
| beq .Lbindexl322 |
| fail |
| .Lbindexl322: |
| mov.b #0xa5, @byte_dest |
| |
| .endif |
| |
| .if (sim_cpu) ; Not available in h8300 mode |
| rotl_w_reg16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.w r0 ; shift left arithmetic by one |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| test_h_gr16 0x4b4b r0 ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| test_h_gr32 0xa5a54b4b er0 |
| |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_w_indexb16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.w @(word_dest-10:16, r0.b) ; indexed word/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexb161 |
| fail |
| .Lwindexb161: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexw16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.w @(word_dest-512:16, r0.w) ; indexed word/word |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexw161 |
| fail |
| .Lwindexw161: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexl16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.w @(word_dest+2:16, er0.l) ; indexed word/long |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexl161 |
| fail |
| .Lwindexl161: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexb32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.w @(word_dest-10:32, r1.b) ; indexed word/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexb321 |
| fail |
| .Lwindexb321: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexw32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.w @(word_dest-512:32, r1.w) ; indexed word/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexw321 |
| fail |
| .Lwindexw321: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexl32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.w @(word_dest+2:32, er1.l) ; indexed word/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 0100 1011 0100 1011 |
| cmp.w #0x4b4b, @word_dest |
| beq .Lwindexl321 |
| fail |
| .Lwindexl321: |
| mov.w #0xa5a5, @word_dest |
| .endif |
| |
| rotl_w_reg16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.w #2, r0 ; shift left arithmetic by two |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| test_h_gr16 0x9696 r0 ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| test_h_gr32 0xa5a59696 er0 |
| |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_w_indexb16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.w #2, @(word_dest-10:16, r0.b) ; indexed word/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexb162 |
| fail |
| .Lwindexb162: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexw16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.w #2, @(word_dest-512:16, r0.w) ; indexed word/word |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexw162 |
| fail |
| .Lwindexw162: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexl16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.w #2, @(word_dest+2:16, er0.l) ; indexed word/long |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexl162 |
| fail |
| .Lwindexl162: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexb32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.w #2, @(word_dest-10:32, r1.b) ; indexed word/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexb322 |
| fail |
| .Lwindexb322: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexw32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.w #2, @(word_dest-512:32, r1.w) ; indexed word/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexw322 |
| fail |
| .Lwindexw322: |
| mov.w #0xa5a5, @word_dest |
| |
| rotl_w_indexl32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.w #2, @(word_dest+2:32, er1.l) ; indexed word/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 -> 1001 0110 1001 0110 |
| cmp.w #0x9696, @word_dest |
| beq .Lwindexl322 |
| fail |
| .Lwindexl322: |
| mov.w #0xa5a5, @word_dest |
| .endif |
| |
| rotl_l_reg32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.l er0 ; shift left arithmetic by one |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| test_h_gr32 0x4b4b4b4b er0 |
| |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_l_indexb16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.l @(long_dest-20:16, er0.b) ; indexed long/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexb161 |
| fail |
| .Llindexb161: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexw16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.l @(long_dest-1024:16, er0.w) ; indexed long/word |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexw161 |
| fail |
| .Llindexw161: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexl16_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.l @(long_dest+4:16, er0.l) ; indexed long/long |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexl161 |
| fail |
| .Llindexl161: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexb32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.l @(long_dest-20:32, er1.b) ; indexed long/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexb321 |
| fail |
| .Llindexb321: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexw32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.l @(long_dest-1024:32, er1.w) ; indexed long/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexw321 |
| fail |
| .Llindexw321: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexl32_1: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.l @(long_dest+4:32, er1.l) ; indexed long/byte |
| |
| test_carry_set ; H=0 N=0 Z=0 V=0 C=1 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_clear |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 0100 1011 0100 1011 0100 1011 0100 1011 |
| cmp.l #0x4b4b4b4b, @long_dest |
| beq .Llindexl321 |
| fail |
| .Llindexl321: |
| mov.l #0xa5a5a5a5, @long_dest |
| .endif |
| |
| rotl_l_reg32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| rotl.l #2, er0 ; shift left arithmetic by two |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| test_h_gr32 0x96969696 er0 |
| |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| |
| .if (sim_cpu == h8sx) |
| rotl_l_indexb16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r0l |
| rotl.l #2, @(long_dest-20:16, er0.b) ; indexed long/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexb162 |
| fail |
| .Llindexb162: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexw16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r0 |
| rotl.l #2, @(long_dest-1024:16, er0.w) ; indexed long/word |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexw162 |
| fail |
| .Llindexw162: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexl16_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er0 |
| rotl.l #2, @(long_dest+4:16, er0.l) ; indexed long/long |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er0 |
| test_gr_a5a5 1 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexl162 |
| fail |
| .Llindexl162: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexb32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.b #5, r1l |
| rotl.l #2, @(long_dest-20:32, er1.b) ; indexed long/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a5a505 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexb322 |
| fail |
| .Llindexb322: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexw32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.w #256, r1 |
| rotl.l #2, @(long_dest-1024:32, er1.w) ; indexed long/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xa5a50100 er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexw322 |
| fail |
| .Llindexw322: |
| mov.l #0xa5a5a5a5, @long_dest |
| |
| rotl_l_indexl32_2: |
| set_grs_a5a5 ; Fill all general regs with a fixed pattern |
| set_ccr_zero |
| |
| mov.l #0xffffffff, er1 |
| rotl.l #2, @(long_dest+4:32, er1.l) ; indexed long/byte |
| |
| test_carry_clear ; H=0 N=1 Z=0 V=0 C=0 |
| test_zero_clear |
| test_ovf_clear |
| test_neg_set |
| |
| test_h_gr32 0xffffffff er1 |
| test_gr_a5a5 0 ; Make sure other general regs not disturbed |
| test_gr_a5a5 2 |
| test_gr_a5a5 3 |
| test_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| ; 1010 0101 1010 0101 1010 0101 1010 0101 |
| ; -> 1001 0110 1001 0110 1001 0110 1001 0110 |
| cmp.l #0x96969696, @long_dest |
| beq .Llindexl322 |
| fail |
| .Llindexl322: |
| mov.l #0xa5a5a5a5, @long_dest |
| .endif |
| .endif |
| |
| pass |
| |
| exit 0 |
| |