| # Hitachi H8 testcase 'exts.l, extu.l' |
| # mach(): h8300h 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 |
| .align 4 |
| pos: .long 0xffff0001 |
| neg: .long 0x00008000 |
| |
| pos2: .long 0xffffff01 |
| neg2: .long 0x00000080 |
| |
| .text |
| |
| exts_l_reg32_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l ern32 |
| mov.w #1, r0 |
| exts.l er0 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 0x00000001 er0 ; result of sign extend |
| 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 |
| |
| exts_l_reg32_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l ern32 |
| mov.w #0xffff, r0 |
| exts.l er0 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 0xffffffff er0 ; result of sign extend |
| 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 |
| |
| extu_l_reg32_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l ern32 |
| mov.w #0xffff, r0 |
| extu.l er0 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 0x0000ffff er0 ; result of zero extend |
| 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) |
| exts_l_ind_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32 |
| mov.l #pos, er1 |
| exts.l @er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00000001, @pos |
| beq .Lslindp |
| fail |
| .Lslindp: |
| mov.l #0xffff0001, @pos ; Restore initial value |
| |
| exts_l_ind_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32 |
| mov.l #neg, er1 |
| exts.l @er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0xffff8000, @neg |
| beq .Lslindn |
| fail |
| .Lslindn: |
| ;;; Note: leave the value as 0xffff8000, so that extu has work to do. |
| |
| extu_l_ind_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @ern32 |
| mov.l #neg, er1 |
| extu.l @er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Lulindn |
| fail |
| .Lulindn: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| exts_l_postinc_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32+ |
| mov.l #pos, er1 |
| exts.l @er1+ |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos+4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00000001, @pos |
| beq .Lslpostincp |
| fail |
| .Lslpostincp: |
| mov.l #0xffff0001, @pos ; Restore initial value |
| |
| exts_l_postinc_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32+ |
| mov.l #neg, er1 |
| exts.l @er1+ |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 neg+4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0xffff8000, @neg |
| beq .Lslpostincn |
| fail |
| .Lslpostincn: |
| ;;; Note: leave the value as 0xffff8000, so that extu has work to do. |
| |
| extu_l_postinc_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @ern32+ |
| mov.l #neg, er1 |
| extu.l @er1+ |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg+4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Lulpostincn |
| fail |
| .Lulpostincn: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| exts_l_postdec_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32- |
| mov.l #pos, er1 |
| exts.l @er1- |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos-4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00000001, @pos |
| beq .Lslpostdecp |
| fail |
| .Lslpostdecp: |
| mov.l #0xffff0001, @pos ; Restore initial value |
| |
| exts_l_postdec_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @ern32- |
| mov.l #neg, er1 |
| exts.l @er1- |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 neg-4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0xffff8000, @neg |
| beq .Lslpostdecn |
| fail |
| .Lslpostdecn: |
| ;;; Note: leave the value as 0xffff8000, so that extu has work to do. |
| |
| extu_l_postdec_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @ern32- |
| mov.l #neg, er1 |
| extu.l @er1- |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg-4 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Lulpostdecn |
| fail |
| .Lulpostdecn: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| exts_l_preinc_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @+ern32 |
| mov.l #pos-4, er1 |
| exts.l @+er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00000001, @pos |
| beq .Lslpreincp |
| fail |
| .Lslpreincp: |
| mov.l #0xffff0001, @pos ; Restore initial value |
| |
| exts_l_preinc_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @+ern32 |
| mov.l #neg-4, er1 |
| exts.l @+er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0xffff8000, @neg |
| beq .Lslpreincn |
| fail |
| .Lslpreincn: |
| ;;; Note: leave the value as 0xffff8000, so that extu has work to do. |
| |
| extu_l_preinc_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @+ern32 |
| mov.l #neg-4, er1 |
| extu.l @+er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Lulpreincn |
| fail |
| .Lulpreincn: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| exts_l_predec_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @-ern32 |
| mov.l #pos+4, er1 |
| exts.l @-er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00000001, @pos |
| beq .Lslpredecp |
| fail |
| .Lslpredecp: |
| mov.l #0xffff0001, @pos ; Restore initial value |
| |
| exts_l_predec_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l @-ern32 |
| mov.l #neg+4, er1 |
| exts.l @-er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_zero_clear |
| test_ovf_clear |
| test_carry_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0xffff8000, @neg |
| beq .Lslpredecn |
| fail |
| .Lslpredecn: |
| ;;; Note: leave the value as 0xffff8000, so that extu has work to do. |
| |
| extu_l_predec_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @-ern32 |
| mov.l #neg+4, er1 |
| extu.l @-er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Lulpredecn |
| fail |
| .Lulpredecn: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| extu_l_disp2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @(dd:2, ern32) |
| mov.l #neg-8, er1 |
| extu.l @(8:2, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg-8 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Luldisp2n |
| fail |
| .Luldisp2n: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| extu_l_disp16_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @(dd:16, ern32) |
| mov.l #neg-44, er1 |
| extu.l @(44:16, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg-44 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Luldisp16n |
| fail |
| .Luldisp16n: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| extu_l_disp32_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @(dd:32, ern32) |
| mov.l #neg+444, er1 |
| extu.l @(-444:32, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg+444 er1 ; er1 still contains target address |
| 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 |
| cmp.l #0x00008000, @neg |
| beq .Luldisp32n |
| fail |
| .Luldisp32n: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| extu_l_abs16_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @aa:16 |
| extu.l @neg:16 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| 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_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| cmp.l #0x00008000, @neg |
| beq .Lulabs16n |
| fail |
| .Lulabs16n: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| extu_l_abs32_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l @aa:32 |
| extu.l @neg:32 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| 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_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| cmp.l #0x00008000, @neg |
| beq .Lulabs32n |
| fail |
| .Lulabs32n: |
| ;;; Note: leave the value as 0x00008000, so that extu has work to do. |
| |
| |
| |
| # |
| # exts #2, nn |
| # |
| |
| exts_l_reg32_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, ern32 |
| mov.b #1, r0l |
| exts.l #2, er0 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 0x00000001 er0 ; result of sign extend |
| 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 |
| |
| exts_l_reg32_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, ern32 |
| mov.b #0xff, r0l |
| exts.l #2, er0 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 0xffffffff er0 ; result of sign extend |
| 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 |
| |
| extu_l_reg32_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, ern32 |
| mov.b #0xff, r0l |
| extu.l #2, er0 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 0x000000ff er0 ; result of zero extend |
| 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 |
| |
| exts_l_ind_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32 |
| mov.l #pos2, er1 |
| exts.l #2, @er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos2 er1 ; result of sign extend |
| 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 |
| cmp.l #0x00000001, @pos2 |
| beq .Lslindp2 |
| fail |
| .Lslindp2: |
| mov.l #0xffffff01, @pos2 ; Restore initial value |
| |
| exts_l_ind_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32 |
| mov.l #neg2, er1 |
| exts.l #2, @er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 neg2 er1 ; result of sign extend |
| 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 |
| cmp.l #0xffffff80, @neg2 |
| beq .Lslindn2 |
| fail |
| .Lslindn2: |
| ;;; Note: leave the value as 0xffffff80, so that extu has work to do. |
| |
| extu_l_ind_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @ern32 |
| mov.l #neg2, er1 |
| extu.l #2, @er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulindn2 |
| fail |
| .Lulindn2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| exts_l_postinc_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32+ |
| mov.l #pos2, er1 |
| exts.l #2, @er1+ |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos2+4 er1 ; result of sign extend |
| 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 |
| cmp.l #0x00000001, @pos2 |
| beq .Lslpostincp2 |
| fail |
| .Lslpostincp2: |
| mov.l #0xffffff01, @pos2 ; Restore initial value |
| |
| exts_l_postinc_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32+ |
| mov.l #neg2, er1 |
| exts.l #2, @er1+ |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 neg2+4 er1 ; result of sign extend |
| 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 |
| cmp.l #0xffffff80, @neg2 |
| beq .Lslpostincn2 |
| fail |
| .Lslpostincn2: |
| ;;; Note: leave the value as 0xffffff80, so that extu has work to do. |
| |
| extu_l_postinc_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @ern32+ |
| mov.l #neg2, er1 |
| extu.l #2, @er1+ |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2+4 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulpostincn2 |
| fail |
| .Lulpostincn2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| exts_l_postdec_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32- |
| mov.l #pos2, er1 |
| exts.l #2, @er1- |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos2-4 er1 ; result of sign extend |
| 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 |
| cmp.l #0x00000001, @pos2 |
| beq .Lslpostdecp2 |
| fail |
| .Lslpostdecp2: |
| mov.l #0xffffff01, @pos2 ; Restore initial value |
| |
| exts_l_postdec_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @ern32- |
| mov.l #neg2, er1 |
| exts.l #2, @er1- |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 neg2-4 er1 ; result of sign extend |
| 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 |
| cmp.l #0xffffff80, @neg2 |
| beq .Lslpostdecn2 |
| fail |
| .Lslpostdecn2: |
| ;;; Note: leave the value as 0xffffff80, so that extu has work to do. |
| |
| extu_l_postdec_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @ern32- |
| mov.l #neg2, er1 |
| extu.l #2, @er1- |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2-4 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulpostdecn2 |
| fail |
| .Lulpostdecn2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| exts_l_preinc_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @+ern32 |
| mov.l #pos2-4, er1 |
| exts.l #2, @+er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos2 er1 ; result of sign extend |
| 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 |
| cmp.l #0x00000001, @pos2 |
| beq .Lslpreincp2 |
| fail |
| .Lslpreincp2: |
| mov.l #0xffffff01, @pos2 ; Restore initial value |
| |
| exts_l_preinc_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @+ern32 |
| mov.l #neg2-4, er1 |
| exts.l #2, @+er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 neg2 er1 ; result of sign extend |
| 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 |
| cmp.l #0xffffff80, @neg2 |
| beq .Lslpreincn2 |
| fail |
| .Lslpreincn2: |
| ;;; Note: leave the value as 0xffffff80, so that extu has work to do. |
| |
| extu_l_preinc_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @+ern32 |
| mov.l #neg2-4, er1 |
| extu.l #2, @+er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulpreincn2 |
| fail |
| .Lulpreincn2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| exts_l_predec_2_p: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @-ern32 |
| mov.l #pos2+4, er1 |
| exts.l #2, @-er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 pos2 er1 ; result of sign extend |
| 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 |
| cmp.l #0x00000001, @pos2 |
| beq .Lslpredecp2 |
| fail |
| .Lslpredecp2: |
| mov.l #0xffffff01, @pos2 ; Restore initial value |
| |
| exts_l_predec_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; exts.l #2, @-ern32 |
| mov.l #neg2+4, er1 |
| exts.l #2, @-er1 |
| |
| ;; Test ccr H=0 N=1 Z=0 V=0 C=0 |
| test_neg_set |
| test_ovf_clear |
| test_zero_clear |
| test_carry_clear |
| |
| test_h_gr32 neg2 er1 ; result of sign extend |
| 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 |
| cmp.l #0xffffff80, @neg2 |
| beq .Lslpredecn2 |
| fail |
| .Lslpredecn2: |
| ;;; Note: leave the value as 0xffffff80, so that extu has work to do. |
| |
| extu_l_predec_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @-ern32 |
| mov.l #neg2+4, er1 |
| extu.l #2, @-er1 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulpredecn2 |
| fail |
| .Lulpredecn2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| extu_l_disp2_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @(dd:2, ern32) |
| mov.l #neg2-8, er1 |
| extu.l #2, @(8:2, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2-8 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Luldisp2n2 |
| fail |
| .Luldisp2n2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| extu_l_disp16_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @(dd:16, ern32) |
| mov.l #neg2-44, er1 |
| extu.l #2, @(44:16, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2-44 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Luldisp16n2 |
| fail |
| .Luldisp16n2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| extu_l_disp32_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @(dd:32, ern32) |
| mov.l #neg2+444, er1 |
| extu.l #2, @(-444:32, er1) |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| test_cc_clear |
| |
| test_h_gr32 neg2+444 er1 ; result of zero extend |
| 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 |
| cmp.l #0x00000080, @neg2 |
| beq .Luldisp32n2 |
| fail |
| .Luldisp32n2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| extu_l_abs16_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @aa:16 |
| extu.l #2, @neg2:16 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| 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_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulabs16n2 |
| fail |
| .Lulabs16n2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| extu_l_abs32_2_n: |
| set_grs_a5a5 |
| set_ccr_zero |
| ;; extu.l #2, @aa:32 |
| extu.l #2, @neg2:32 |
| |
| ;; Test ccr H=0 N=0 Z=0 V=0 C=0 |
| 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_gr_a5a5 4 |
| test_gr_a5a5 5 |
| test_gr_a5a5 6 |
| test_gr_a5a5 7 |
| cmp.l #0x00000080, @neg2 |
| beq .Lulabs32n2 |
| fail |
| .Lulabs32n2: |
| ;;; Note: leave the value as 0x00000080, like it started out. |
| |
| .endif |
| |
| pass |
| |
| exit 0 |
| |
| |
| |
| |