📄 regtest.s
字号:
#include "leon.h"
#include "test.h"
.text
.align 4
.global _regtest
.proc 04
_regtest:
! flush all register windows
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
save %sp, -96, %sp
restore
restore
restore
restore
restore
restore
restore
restore
! save global and input registers
nop; nop
set regbuf, %l0
mov %psr, %l1
st %l1, [%l0]
st %g1, [%l0+4]
std %g2, [%l0+8]
std %g4, [%l0+16]
std %g6, [%l0+24]
std %i0, [%l0+32]
std %i2, [%l0+40]
std %i4, [%l0+48]
std %i6, [%l0+56]
mov %wim, %l2
st %l2, [%l0+64]
! test gloabal registers
mov 8, %g0
mov 1, %g1
mov 2, %g2
mov 3, %g3
mov 4, %g4
mov 5, %g5
mov 6, %g6
mov 7, %g7
mov %g0, %wim
andn %l1, 0x1f, %l2
mov %l2, %psr
nop; nop; nop
! fill all registers
set 0x01010101, %g1
mov %g0, %g2
mov %g0, %g3
1:
mov %g2, %l0
add %g1, %g2, %g2
mov %g2, %l1
add %g1, %g2, %g2
mov %g2, %l2
add %g1, %g2, %g2
mov %g2, %l3
add %g1, %g2, %g2
mov %g2, %l4
add %g1, %g2, %g2
mov %g2, %l5
add %g1, %g2, %g2
mov %g2, %l6
add %g1, %g2, %g2
mov %g2, %l7
add %g1, %g2, %g2
mov %g2, %o0
add %g1, %g2, %g2
mov %g2, %o1
add %g1, %g2, %g2
mov %g2, %o2
add %g1, %g2, %g2
mov %g2, %o3
add %g1, %g2, %g2
mov %g2, %o4
add %g1, %g2, %g2
mov %g2, %o5
add %g1, %g2, %g2
mov %g2, %o6
add %g1, %g2, %g2
mov %g2, %o7
add %g1, %g2, %g2
save
subcc %g3, 7, %g0
bne,a 1b
inc %g3
! check values
set 0x01010101, %g1
mov %g0, %g2
mov %g0, %g3
1:
cmp %l0, %g2
bne fail
add %g1, %g2, %g2
cmp %l1, %g2
bne fail
add %g1, %g2, %g2
cmp %l2, %g2
bne fail
add %g1, %g2, %g2
cmp %l3, %g2
bne fail
add %g1, %g2, %g2
cmp %l4, %g2
bne fail
add %g1, %g2, %g2
cmp %l5, %g2
bne fail
add %g1, %g2, %g2
cmp %l6, %g2
bne fail
add %g1, %g2, %g2
cmp %l7, %g2
bne fail
add %g1, %g2, %g2
cmp %o0, %g2
bne fail
add %g1, %g2, %g2
cmp %o1, %g2
bne fail
add %g1, %g2, %g2
cmp %o2, %g2
bne fail
add %g1, %g2, %g2
cmp %o3, %g2
bne fail
add %g1, %g2, %g2
cmp %o4, %g2
bne fail
add %g1, %g2, %g2
cmp %o5, %g2
bne fail
add %g1, %g2, %g2
cmp %o6, %g2
bne fail
add %g1, %g2, %g2
cmp %o7, %g2
bne fail
add %g1, %g2, %g2
save
subcc %g3, 7, %g0
bne,a 1b
inc %g3
subcc %g0, 0, %g0
bne fail
subcc %g4, 4, %g0
bne fail
subcc %g5, 5, %g0
bne fail
subcc %g6, 6, %g0
bne fail
subcc %g7, 7, %g0
bne fail
nop
testok:
set regbuf, %l0
mov 1, %o0
ba exit
st %o0, [%l0+32]
fail:
set regbuf, %l0
ba exit
st %g0, [%l0+32]
exit:
! restore state
set regbuf, %g1
ld [%g1], %g2
mov %g2, %psr
nop; nop; nop
ldd [%g1+8], %g2
ldd [%g1+16], %g4
ldd [%g1+24], %g6
ldd [%g1+32], %i0
ldd [%g1+40], %i2
ldd [%g1+48], %i4
ldd [%g1+56], %i6
ld [%g1+64], %l2
ld [%g1+4], %g1
mov %l2, %wim
nop; nop; nop
ret
restore
.align 8
.common regbuf, 80,"bss"
.align 32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -