📄 extw.s
字号:
# 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 2pos: .word 0xff01neg: .word 0x0080 .textexts_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 7exts_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 7extu_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 valueexts_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 valueexts_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 valueexts_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 valueexts_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 valueexts_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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -