2003-04-14 00:44:57 +08:00
|
|
|
# Hitachi H8 testcase 'ldc'
|
|
|
|
# mach(): all
|
|
|
|
# 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"
|
|
|
|
.data
|
|
|
|
byte_pre:
|
|
|
|
.byte 0
|
|
|
|
byte_src:
|
|
|
|
.byte 0xff
|
|
|
|
byte_post:
|
|
|
|
.byte 0
|
|
|
|
|
|
|
|
start
|
|
|
|
|
|
|
|
ldc_imm8_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0xff, ccr ; set all ccr flags high, immediate operand
|
|
|
|
bcs .L1 ; carry flag set?
|
|
|
|
fail
|
|
|
|
.L1: bvs .L2 ; overflow flag set?
|
|
|
|
fail
|
|
|
|
.L2: beq .L3 ; zero flag set?
|
|
|
|
fail
|
|
|
|
.L3: bmi .L4 ; neg flag set?
|
|
|
|
fail
|
|
|
|
.L4:
|
|
|
|
ldc #0, ccr ; set all ccr flags low, immediate operand
|
|
|
|
bcc .L5 ; carry flag clear?
|
|
|
|
fail
|
|
|
|
.L5: bvc .L6 ; overflow flag clear?
|
|
|
|
fail
|
|
|
|
.L6: bne .L7 ; zero flag clear?
|
|
|
|
fail
|
|
|
|
.L7: bpl .L8 ; neg flag clear?
|
|
|
|
fail
|
|
|
|
.L8:
|
|
|
|
test_cc_clear
|
|
|
|
test_grs_a5a5
|
|
|
|
|
|
|
|
ldc_reg8_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #0xff, r0h
|
|
|
|
ldc r0h, ccr ; set all ccr flags high, reg operand
|
|
|
|
bcs .L11 ; carry flag set?
|
|
|
|
fail
|
|
|
|
.L11: bvs .L12 ; overflow flag set?
|
|
|
|
fail
|
|
|
|
.L12: beq .L13 ; zero flag set?
|
|
|
|
fail
|
|
|
|
.L13: bmi .L14 ; neg flag set?
|
|
|
|
fail
|
|
|
|
.L14:
|
|
|
|
mov #0, r0h
|
|
|
|
ldc r0h, ccr ; set all ccr flags low, reg operand
|
|
|
|
bcc .L15 ; carry flag clear?
|
|
|
|
fail
|
|
|
|
.L15: bvc .L16 ; overflow flag clear?
|
|
|
|
fail
|
|
|
|
.L16: bne .L17 ; zero flag clear?
|
|
|
|
fail
|
|
|
|
.L17: bpl .L18 ; neg flag clear?
|
|
|
|
fail
|
|
|
|
.L18:
|
|
|
|
test_cc_clear
|
|
|
|
test_h_gr16 0x00a5 r0 ; Register 0 modified by test procedure.
|
|
|
|
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 == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr
|
|
|
|
ldc_imm8_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
ldc #0x87, exr ; set exr to 0x87
|
|
|
|
|
|
|
|
stc exr, r0l ; retrieve and check exr value
|
|
|
|
cmp.b #0x87, r0l
|
|
|
|
beq .L19
|
|
|
|
fail
|
|
|
|
.L19:
|
|
|
|
test_h_gr16 0xa587 r0 ; Register 0 modified by test procedure.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_reg8_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
mov #0x87, r0h
|
|
|
|
ldc r0h, exr ; set exr to 0x87
|
|
|
|
|
|
|
|
stc exr, r0l ; retrieve and check exr value
|
|
|
|
cmp.b #0x87, r0l
|
|
|
|
beq .L21
|
|
|
|
fail
|
|
|
|
.L21:
|
|
|
|
test_h_gr16 0x8787 r0 ; Register 0 modified by test procedure.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_abs16_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc @byte_src:16, ccr ; abs16 src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_abs16_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
ldc @byte_src:16, exr ; abs16 src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_abs32_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc @byte_src:32, ccr ; abs32 src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_abs32_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
ldc @byte_src:32, exr ; abs32 src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
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
|
|
|
|
|
|
|
|
ldc_disp16_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #byte_pre, er1
|
|
|
|
ldc @(1:16, er1), ccr ; disp16 src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_pre, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_disp16_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
mov #byte_post, er1
|
|
|
|
ldc @(-1:16, er1), exr ; disp16 src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_post, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_disp32_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #byte_pre, er1
|
|
|
|
ldc @(1:32, er1), ccr ; disp32 src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_pre, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_disp32_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
mov #byte_post, er1
|
|
|
|
ldc @(-1:32, er1), exr ; disp16 src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_post, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_postinc_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #byte_src, er1
|
|
|
|
ldc @er1+, ccr ; postinc src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
2003-05-14 Michael Snyder <msnyder@redhat.com>
* addb.s, addw.s, addl.s, addw.s, addx.s, andb.s, andw.s, andl.s,
bfld.s, brabc.s, bra.s, bset.s, cmpb.s, cmpw.s, cmpl.s, daa.s,
das.s, dec.s, extw.s, extl.s, inc.s, jmp.s, ldc.s, ldm.s, mac.s,
mova.s, movb.s, movw.s, movl.s, movmd.s, movsd.s, neg.s, nop.s,
not.s, orb.s, orw.s, orl.s, rotl.s, rotr.s, rotxl.s, rotxr.s,
shal.s, shar.s, shll.s, shlr.s, stc.s, subb.s, subw.s, subl.s,
xorb.s, xorw.s, xorl.s: New files.
* allinsn.exp: New file.
2003-05-15 05:07:55 +08:00
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_src+2, er1 ; er1 still contains address
|
2003-04-14 00:44:57 +08:00
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_postinc_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
mov #byte_src, er1
|
|
|
|
ldc @er1+, exr ; postinc src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
2003-05-14 Michael Snyder <msnyder@redhat.com>
* addb.s, addw.s, addl.s, addw.s, addx.s, andb.s, andw.s, andl.s,
bfld.s, brabc.s, bra.s, bset.s, cmpb.s, cmpw.s, cmpl.s, daa.s,
das.s, dec.s, extw.s, extl.s, inc.s, jmp.s, ldc.s, ldm.s, mac.s,
mova.s, movb.s, movw.s, movl.s, movmd.s, movsd.s, neg.s, nop.s,
not.s, orb.s, orw.s, orl.s, rotl.s, rotr.s, rotxl.s, rotxr.s,
shal.s, shar.s, shll.s, shlr.s, stc.s, subb.s, subw.s, subl.s,
xorb.s, xorw.s, xorl.s: New files.
* allinsn.exp: New file.
2003-05-15 05:07:55 +08:00
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_src+2, er1 ; er1 still contains address
|
2003-04-14 00:44:57 +08:00
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_ind_ccr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #byte_src, er1
|
|
|
|
ldc @er1, ccr ; postinc src
|
|
|
|
stc ccr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_src, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_ind_exr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
ldc #0, exr
|
|
|
|
mov #byte_src, er1
|
|
|
|
ldc @er1, exr ; postinc src
|
|
|
|
stc exr, r0l ; copy into general reg
|
|
|
|
|
|
|
|
test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
|
|
|
|
test_h_gr32 byte_src, er1 ; er1 still contains address
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
.endif
|
|
|
|
|
|
|
|
.if (sim_cpu == h8sx) ; New vbr and sbr registers for h8sx
|
|
|
|
ldc_reg_sbr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #0xaaaaaaaa, er0
|
|
|
|
ldc er0, sbr ; set sbr to 0xaaaaaaaa
|
|
|
|
stc sbr, er1 ; retreive and check sbr value
|
|
|
|
|
|
|
|
test_h_gr32 0xaaaaaaaa er1
|
|
|
|
test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
ldc_reg_vbr:
|
|
|
|
set_grs_a5a5
|
|
|
|
set_ccr_zero
|
|
|
|
|
|
|
|
mov #0xaaaaaaaa, er0
|
|
|
|
ldc er0, vbr ; set sbr to 0xaaaaaaaa
|
|
|
|
stc vbr, er1 ; retreive and check sbr value
|
|
|
|
|
|
|
|
test_h_gr32 0xaaaaaaaa er1
|
|
|
|
test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
|
|
|
|
test_gr_a5a5 2 ; Make sure other general regs not disturbed
|
|
|
|
test_gr_a5a5 3
|
|
|
|
test_gr_a5a5 4
|
|
|
|
test_gr_a5a5 5
|
|
|
|
test_gr_a5a5 6
|
|
|
|
test_gr_a5a5 7
|
|
|
|
|
|
|
|
.endif
|
|
|
|
pass
|
|
|
|
|
|
|
|
exit 0
|