blob: b1eb491b42768421f152ce155ff6662875496f37 [file] [log] [blame]
# Hitachi H8 testcase 'exts.w, extu.w'
# 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 2
pos: .word 0xff01
neg: .word 0x0080
.text
exts_w_reg16_p:
set_grs_a5a5
set_ccr_zero
;; exts.w rn16
mov.b #1, r0l
exts.w r0
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 0xa5a50001 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_w_reg16_n:
set_grs_a5a5
set_ccr_zero
;; exts.w rn16
mov.b #0xff, r0l
exts.w r0
;; 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 0xa5a5ffff 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_w_reg16_n:
set_grs_a5a5
set_ccr_zero
;; extu.w rn16
mov.b #0xff, r0l
extu.w r0
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 0xa5a500ff 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_w_ind_p:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern
mov.l #pos, er1
exts.w @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.w #0x0001, @pos
beq .Lswindp
fail
.Lswindp:
mov.w #0xff01, @pos ; Restore initial value
exts_w_ind_n:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern
mov.l #neg, er1
exts.w @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.w #0xff80, @neg
beq .Lswindn
fail
.Lswindn:
;; Note: leave the value as 0xff80, so that extu has work to do.
extu_w_ind_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @ern
mov.l #neg, er1
extu.w @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.w #0x0080, @neg
beq .Luwindn
fail
.Luwindn:
;; Note: leave the value as 0x0080, like it started out.
exts_w_postinc_p:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern+
mov.l #pos, er1
exts.w @er1+
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 pos+2 er1 ; er1 still contains target address plus 2
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.w #0x0001, @pos
beq .Lswpostincp
fail
.Lswpostincp:
mov.w #0xff01, @pos ; Restore initial value
exts_w_postinc_n:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern+
mov.l #neg, er1
exts.w @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+2 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.w #0xff80, @neg
beq .Lswpostincn
fail
.Lswpostincn:
;; Note: leave the value as 0xff80, so that extu has work to do.
extu_w_postinc_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @ern+
mov.l #neg, er1
extu.w @er1+
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 neg+2 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.w #0x0080, @neg
beq .Luwpostincn
fail
.Luwpostincn:
;; Note: leave the value as 0x0080, like it started out.
exts_w_postdec_p:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern-
mov.l #pos, er1
exts.w @er1-
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 pos-2 er1 ; er1 still contains target address plus 2
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.w #0x0001, @pos
beq .Lswpostdecp
fail
.Lswpostdecp:
mov.w #0xff01, @pos ; Restore initial value
exts_w_postdec_n:
set_grs_a5a5
set_ccr_zero
;; exts.w @ern-
mov.l #neg, er1
exts.w @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-2 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.w #0xff80, @neg
beq .Lswpostdecn
fail
.Lswpostdecn:
;; Note: leave the value as 0xff80, so that extu has work to do.
extu_w_postdec_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @ern-
mov.l #neg, er1
extu.w @er1-
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 neg-2 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.w #0x0080, @neg
beq .Luwpostdecn
fail
.Luwpostdecn:
;; Note: leave the value as 0x0080, like it started out.
exts_w_preinc_p:
set_grs_a5a5
set_ccr_zero
;; exts.w @+ern
mov.l #pos-2, er1
exts.w @+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 plus 2
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.w #0x0001, @pos
beq .Lswpreincp
fail
.Lswpreincp:
mov.w #0xff01, @pos ; Restore initial value
exts_w_preinc_n:
set_grs_a5a5
set_ccr_zero
;; exts.w @+ern
mov.l #neg-2, er1
exts.w @+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.w #0xff80, @neg
beq .Lswpreincn
fail
.Lswpreincn:
;; Note: leave the value as 0xff80, so that extu has work to do.
extu_w_preinc_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @+ern
mov.l #neg-2, er1
extu.w @+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.w #0x0080, @neg
beq .Luwpreincn
fail
.Luwpreincn:
;; Note: leave the value as 0x0080, like it started out.
exts_w_predec_p:
set_grs_a5a5
set_ccr_zero
;; exts.w @-ern
mov.l #pos+2, er1
exts.w @-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 plus 2
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.w #0x0001, @pos
beq .Lswpredecp
fail
.Lswpredecp:
mov.w #0xff01, @pos ; Restore initial value
exts_w_predec_n:
set_grs_a5a5
set_ccr_zero
;; exts.w @-ern
mov.l #neg+2, er1
exts.w @-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.w #0xff80, @neg
beq .Lswpredecn
fail
.Lswpredecn:
;; Note: leave the value as 0xff80, so that extu has work to do.
extu_w_predec_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @-ern
mov.l #neg+2, er1
extu.w @-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.w #0x0080, @neg
beq .Luwpredecn
fail
.Luwpredecn:
;; Note: leave the value as 0x0080, like it started out.
extu_w_disp2_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @(dd:2, ern)
mov.l #neg-2, er1
extu.w @(2:2, er1)
;; Test ccr H=0 N=0 Z=0 V=0 C=0
test_cc_clear
test_h_gr32 neg-2 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.w #0x0080, @neg
beq .Luwdisp2n
fail
.Luwdisp2n:
;; Note: leave the value as 0x0080, like it started out.
extu_w_disp16_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @(dd:16, ern)
mov.l #neg-44, er1
extu.w @(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.w #0x0080, @neg
beq .Luwdisp16n
fail
.Luwdisp16n:
;; Note: leave the value as 0x0080, like it started out.
extu_w_disp32_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @(dd:32, ern)
mov.l #neg+444, er1
extu.w @(-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.w #0x0080, @neg
beq .Luwdisp32n
fail
.Luwdisp32n:
;; Note: leave the value as 0x0080, like it started out.
extu_w_abs16_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @aa:16
extu.w @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.w #0x0080, @neg
beq .Luwabs16n
fail
.Luwabs16n:
;; Note: leave the value as 0x0080, like it started out.
extu_w_abs32_n:
set_grs_a5a5
set_ccr_zero
;; extu.w @aa:32
extu.w @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.w #0x0080, @neg
beq .Luwabs32n
fail
.Luwabs32n:
;; Note: leave the value as 0x0080, like it started out.
.endif
pass
exit 0