mirror of https://github.com/inolen/redream.git
151 lines
2.4 KiB
ArmAsm
151 lines
2.4 KiB
ArmAsm
test_ldcl_stcl_sr:
|
|
# write control value before swap
|
|
mov #13, r2
|
|
# swap banks
|
|
mov.l .ALT_SR, r0
|
|
ldc.l @r0+, sr
|
|
# overwrite control value to test swap
|
|
mov #99, r2
|
|
# write sr to mem
|
|
mov.l .DATA_ADDR, r1
|
|
add #4, r1
|
|
stc.l sr, @-r1
|
|
# swap back again
|
|
mov.l .DEFAULT_SR, r3
|
|
ldc.l @r3+, sr
|
|
# read result from mem
|
|
mov.l .DATA_ADDR, r0
|
|
mov.l @r0, r3
|
|
# r0 in alt bank should have been post-incremented to 4
|
|
stc r0_bank, r4
|
|
# r1 in alt bank should have been pre-decremented by 4
|
|
mov.l .DATA_ADDR, r5
|
|
stc r1_bank, r6
|
|
cmp/eq r6, r5
|
|
movt r5
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r2 13
|
|
# REGISTER_OUT r3 0x500000f0
|
|
# REGISTER_OUT r4 4
|
|
# REGISTER_OUT r5 1
|
|
|
|
test_ldcl_stcl_rbank:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
ldc.l @r1+, r3_bank
|
|
mov #99, r3
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
stc.l r3_bank, @-r2
|
|
cmp/eq r1, r2
|
|
movt r4
|
|
mov.l @r2, r5
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r4 1
|
|
# REGISTER_OUT r5 13
|
|
|
|
test_ldcl_stcl_gbr:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
ldc.l @r1+, gbr
|
|
stc.l gbr, @-r2
|
|
cmp/eq r2, r1
|
|
movt r3
|
|
mov.l @r2, r4
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r3 1
|
|
# REGISTER_OUT r4 13
|
|
|
|
test_ldcl_stcl_vbr:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
ldc.l @r1+, vbr
|
|
stc.l vbr, @-r2
|
|
cmp/eq r2, r1
|
|
movt r3
|
|
mov.l @r2, r4
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r3 1
|
|
# REGISTER_OUT r4 13
|
|
|
|
test_ldcl_stcl_ssr:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
ldc.l @r1+, ssr
|
|
stc.l ssr, @-r2
|
|
cmp/eq r2, r1
|
|
movt r3
|
|
mov.l @r2, r4
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r3 1
|
|
# REGISTER_OUT r4 13
|
|
|
|
test_ldcl_stcl_spc:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
ldc.l @r1+, spc
|
|
stc.l spc, @-r2
|
|
cmp/eq r2, r1
|
|
movt r3
|
|
mov.l @r2, r4
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r3 1
|
|
# REGISTER_OUT r4 13
|
|
|
|
# TODO
|
|
# STC.L SGR,@-Rn
|
|
|
|
test_ldcl_stcl_dbr:
|
|
# REGISTER_IN r0 13
|
|
mov.l .DATA_ADDR, r1
|
|
mov.l r0, @r1
|
|
mov.l .DATA_ADDR, r2
|
|
add #8, r2
|
|
ldc.l @r1+, dbr
|
|
stc.l dbr, @-r2
|
|
cmp/eq r2, r1
|
|
movt r3
|
|
mov.l @r2, r4
|
|
rts
|
|
nop
|
|
# REGISTER_OUT r3 1
|
|
# REGISTER_OUT r4 13
|
|
|
|
.align 4
|
|
.DATA:
|
|
.long 0x500000f0
|
|
.long 0x700000f0
|
|
.long 0x0
|
|
.long 0x0
|
|
|
|
.align 4
|
|
.DATA_ADDR:
|
|
.long .DATA+8
|
|
|
|
.align 4
|
|
.ALT_SR:
|
|
.long .DATA
|
|
|
|
.align 4
|
|
.DEFAULT_SR:
|
|
.long .DATA+4
|