blob: 001f6d3545766a33dd6b3f53903376cdd80ac087 [file] [log] [blame]
# 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