blob: e4966984aa5e32a495173bd0dd9979e0584fc7d1 [file] [log] [blame]
SYS_exit = 1
SYS_write = 4
.bss
.space 64
_stack:
.data
pass_text:
.string "pass\n"
fail_text:
.string "fail\n"
.text
.global _start
_start:
movhi hi(_stack), r0, sp
movea lo(_stack), sp, sp
jr start_test
.macro seti val reg
movhi hi(\val),r0,\reg
movea lo(\val),\reg,\reg
.endm
_pass_1:
mov SYS_write,r6
mov 1,r7
seti pass_text,r8
mov 5,r9
trap 31
mov 0, r7
jr _exit
_fail_1:
mov SYS_write,r6
mov 1,r7
seti fail_text,r8
mov 5,r9
trap 31
mov 1, r7
jr _exit
_exit:
mov SYS_exit, r6
mov 0, r8
mov 0, r9
trap 31
_pass:
jr _pass_1
_fail:
jr _fail_1
.macro pass
jr _pass
.endm
.macro fail
jr _fail
.endm
# These pass or fail if the given flag is set or not set
# Currently, it assumed that the code of any test is going to
# be less than 256 bytes. Else, we'll have to use a
# branch-around-jump design instead.
.macro pass_c
bc _pass
.endm
.macro fail_c
bc _fail
.endm
.macro pass_nc
bnc _pass
.endm
.macro fail_nc
bnc _fail
.endm
.macro pass_z
bz _pass
.endm
.macro fail_z
bz _fail
.endm
.macro pass_nz
bnz _pass
.endm
.macro fail_nz
bnz _fail
.endm
.macro pass_v
bv _pass
.endm
.macro fail_v
bv _fail
.endm
.macro pass_nv
bnv _pass
.endm
.macro fail_nv
bnv _fail
.endm
.macro pass_s
bn _pass
.endm
.macro fail_s
bn _fail
.endm
.macro pass_ns
bp _pass
.endm
.macro fail_ns
bp _fail
.endm
.macro pass_sat
bsa _pass
.endm
.macro fail_sat
bsa _fail
.endm
.macro pass_nsat
bsa 1f
br _pass
1:
.endm
.macro fail_nsat
bsa 1f
br _fail
1:
.endm
# These pass/fail if the given register has/hasn't the specified value in it.
.macro pass_req reg val
seti \val,r10
cmp r10,\reg
be _pass
.endm
.macro pass_rne reg val
seti \val,r10
cmp r10,\reg
bne _pass
.endm
.macro fail_req reg val
seti \val,r10
cmp r10,\reg
be _fail
.endm
.macro fail_rne reg val
seti \val,r10
cmp r10,\reg
bne _fail
.endm
# convenience version
.macro reg reg val
seti \val,r10
cmp r10,\reg
bne _fail
.endm
z = 1
nz = 0
s = 2
ns = 0
v = 4
nv = 0
c = 8
nc = 0
sat = 16
nsat = 0
# sat c v s z
.macro flags fval
stsr psw, r10
movea +(\fval), r0, r9
andi 31, r10, r10
cmp r9, r10
bne _fail
.endm
.macro noflags
stsr psw, r10
andi ~0x1f, r10, r10
ldsr r10, psw
.endm
.macro allflags
stsr psw, r10
ori 0x1f, r10, r10
ldsr r10, psw
.endm
start_test: