URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 157 |
Rev 223 |
SYS_exit = 1
|
SYS_exit = 1
|
SYS_write = 4
|
SYS_write = 4
|
|
|
.bss
|
.bss
|
.space 64
|
.space 64
|
_stack:
|
_stack:
|
|
|
.data
|
.data
|
pass_text:
|
pass_text:
|
.string "pass\n"
|
.string "pass\n"
|
fail_text:
|
fail_text:
|
.string "fail\n"
|
.string "fail\n"
|
|
|
.text
|
.text
|
.global _start
|
.global _start
|
_start:
|
_start:
|
movhi hi(_stack), r0, sp
|
movhi hi(_stack), r0, sp
|
movea lo(_stack), sp, sp
|
movea lo(_stack), sp, sp
|
jr start_test
|
jr start_test
|
|
|
.macro seti val reg
|
.macro seti val reg
|
movhi hi(\val),r0,\reg
|
movhi hi(\val),r0,\reg
|
movea lo(\val),\reg,\reg
|
movea lo(\val),\reg,\reg
|
.endm
|
.endm
|
|
|
_pass_1:
|
_pass_1:
|
mov SYS_write,r6
|
mov SYS_write,r6
|
mov 1,r7
|
mov 1,r7
|
seti pass_text,r8
|
seti pass_text,r8
|
mov 5,r9
|
mov 5,r9
|
trap 31
|
trap 31
|
|
|
mov 0, r7
|
mov 0, r7
|
jr _exit
|
jr _exit
|
|
|
_fail_1:
|
_fail_1:
|
mov SYS_write,r6
|
mov SYS_write,r6
|
mov 1,r7
|
mov 1,r7
|
seti fail_text,r8
|
seti fail_text,r8
|
mov 5,r9
|
mov 5,r9
|
trap 31
|
trap 31
|
|
|
mov 1, r7
|
mov 1, r7
|
jr _exit
|
jr _exit
|
|
|
_exit:
|
_exit:
|
mov SYS_exit, r6
|
mov SYS_exit, r6
|
mov 0, r8
|
mov 0, r8
|
mov 0, r9
|
mov 0, r9
|
trap 31
|
trap 31
|
|
|
_pass:
|
_pass:
|
jr _pass_1
|
jr _pass_1
|
|
|
_fail:
|
_fail:
|
jr _fail_1
|
jr _fail_1
|
|
|
.macro pass
|
.macro pass
|
jr _pass
|
jr _pass
|
.endm
|
.endm
|
.macro fail
|
.macro fail
|
jr _fail
|
jr _fail
|
.endm
|
.endm
|
|
|
# These pass or fail if the given flag is set or not set
|
# 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
|
# Currently, it assumed that the code of any test is going to
|
# be less than 256 bytes. Else, we'll have to use a
|
# be less than 256 bytes. Else, we'll have to use a
|
# branch-around-jump design instead.
|
# branch-around-jump design instead.
|
|
|
.macro pass_c
|
.macro pass_c
|
bc _pass
|
bc _pass
|
.endm
|
.endm
|
.macro fail_c
|
.macro fail_c
|
bc _fail
|
bc _fail
|
.endm
|
.endm
|
.macro pass_nc
|
.macro pass_nc
|
bnc _pass
|
bnc _pass
|
.endm
|
.endm
|
.macro fail_nc
|
.macro fail_nc
|
bnc _fail
|
bnc _fail
|
.endm
|
.endm
|
|
|
.macro pass_z
|
.macro pass_z
|
bz _pass
|
bz _pass
|
.endm
|
.endm
|
.macro fail_z
|
.macro fail_z
|
bz _fail
|
bz _fail
|
.endm
|
.endm
|
.macro pass_nz
|
.macro pass_nz
|
bnz _pass
|
bnz _pass
|
.endm
|
.endm
|
.macro fail_nz
|
.macro fail_nz
|
bnz _fail
|
bnz _fail
|
.endm
|
.endm
|
|
|
.macro pass_v
|
.macro pass_v
|
bv _pass
|
bv _pass
|
.endm
|
.endm
|
.macro fail_v
|
.macro fail_v
|
bv _fail
|
bv _fail
|
.endm
|
.endm
|
.macro pass_nv
|
.macro pass_nv
|
bnv _pass
|
bnv _pass
|
.endm
|
.endm
|
.macro fail_nv
|
.macro fail_nv
|
bnv _fail
|
bnv _fail
|
.endm
|
.endm
|
|
|
.macro pass_s
|
.macro pass_s
|
bn _pass
|
bn _pass
|
.endm
|
.endm
|
.macro fail_s
|
.macro fail_s
|
bn _fail
|
bn _fail
|
.endm
|
.endm
|
.macro pass_ns
|
.macro pass_ns
|
bp _pass
|
bp _pass
|
.endm
|
.endm
|
.macro fail_ns
|
.macro fail_ns
|
bp _fail
|
bp _fail
|
.endm
|
.endm
|
|
|
.macro pass_sat
|
.macro pass_sat
|
bsa _pass
|
bsa _pass
|
.endm
|
.endm
|
.macro fail_sat
|
.macro fail_sat
|
bsa _fail
|
bsa _fail
|
.endm
|
.endm
|
.macro pass_nsat
|
.macro pass_nsat
|
bsa 1f
|
bsa 1f
|
br _pass
|
br _pass
|
1:
|
1:
|
.endm
|
.endm
|
.macro fail_nsat
|
.macro fail_nsat
|
bsa 1f
|
bsa 1f
|
br _fail
|
br _fail
|
1:
|
1:
|
.endm
|
.endm
|
|
|
# These pass/fail if the given register has/hasn't the specified value in it.
|
# These pass/fail if the given register has/hasn't the specified value in it.
|
|
|
.macro pass_req reg val
|
.macro pass_req reg val
|
seti \val,r10
|
seti \val,r10
|
cmp r10,\reg
|
cmp r10,\reg
|
be _pass
|
be _pass
|
.endm
|
.endm
|
|
|
.macro pass_rne reg val
|
.macro pass_rne reg val
|
seti \val,r10
|
seti \val,r10
|
cmp r10,\reg
|
cmp r10,\reg
|
bne _pass
|
bne _pass
|
.endm
|
.endm
|
|
|
.macro fail_req reg val
|
.macro fail_req reg val
|
seti \val,r10
|
seti \val,r10
|
cmp r10,\reg
|
cmp r10,\reg
|
be _fail
|
be _fail
|
.endm
|
.endm
|
|
|
.macro fail_rne reg val
|
.macro fail_rne reg val
|
seti \val,r10
|
seti \val,r10
|
cmp r10,\reg
|
cmp r10,\reg
|
bne _fail
|
bne _fail
|
.endm
|
.endm
|
|
|
# convenience version
|
# convenience version
|
.macro reg reg val
|
.macro reg reg val
|
seti \val,r10
|
seti \val,r10
|
cmp r10,\reg
|
cmp r10,\reg
|
bne _fail
|
bne _fail
|
.endm
|
.endm
|
|
|
z = 1
|
z = 1
|
nz = 0
|
nz = 0
|
s = 2
|
s = 2
|
ns = 0
|
ns = 0
|
v = 4
|
v = 4
|
nv = 0
|
nv = 0
|
c = 8
|
c = 8
|
nc = 0
|
nc = 0
|
sat = 16
|
sat = 16
|
nsat = 0
|
nsat = 0
|
|
|
# sat c v s z
|
# sat c v s z
|
|
|
.macro flags fval
|
.macro flags fval
|
stsr psw, r10
|
stsr psw, r10
|
movea +(\fval), r0, r9
|
movea +(\fval), r0, r9
|
andi 31, r10, r10
|
andi 31, r10, r10
|
cmp r9, r10
|
cmp r9, r10
|
bne _fail
|
bne _fail
|
.endm
|
.endm
|
|
|
.macro noflags
|
.macro noflags
|
stsr psw, r10
|
stsr psw, r10
|
andi ~0x1f, r10, r10
|
andi ~0x1f, r10, r10
|
ldsr r10, psw
|
ldsr r10, psw
|
.endm
|
.endm
|
|
|
.macro allflags
|
.macro allflags
|
stsr psw, r10
|
stsr psw, r10
|
ori 0x1f, r10, r10
|
ori 0x1f, r10, r10
|
ldsr r10, psw
|
ldsr r10, psw
|
.endm
|
.endm
|
|
|
start_test:
|
start_test:
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.