URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 1008 |
Rev 1765 |
# setjmp/longjmp for m32r. The jmpbuf looks like this:
|
# setjmp/longjmp for m32r. The jmpbuf looks like this:
|
#
|
#
|
# Register jmpbuf offset
|
# Register jmpbuf offset
|
# reserved 0x00
|
# reserved 0x00
|
# R8 0x04
|
# R8 0x04
|
# R9 0x08
|
# R9 0x08
|
# R10 0x0c
|
# R10 0x0c
|
# R11 0x10
|
# R11 0x10
|
# R12 0x14
|
# R12 0x14
|
# R13 (FP) 0x18
|
# R13 (FP) 0x18
|
# R14 (LR) 0x1c
|
# R14 (LR) 0x1c
|
# R15 (SP) 0x20
|
# R15 (SP) 0x20
|
# reserved 0x24
|
# reserved 0x24
|
|
|
.text
|
.text
|
.global setjmp
|
.global setjmp
|
setjmp:
|
setjmp:
|
;addi r0, #-4 ; commented out as first word is reserved
|
;addi r0, #-4 ; commented out as first word is reserved
|
;st r1, @+r0
|
;st r1, @+r0
|
st r8, @+r0
|
st r8, @+r0
|
st r9, @+r0
|
st r9, @+r0
|
st r10, @+r0
|
st r10, @+r0
|
st r11, @+r0
|
st r11, @+r0
|
st r12, @+r0
|
st r12, @+r0
|
st r13, @+r0
|
st r13, @+r0
|
st r14, @+r0
|
st r14, @+r0
|
st r15, @+r0
|
st r15, @+r0
|
|
|
# Return 0 to caller.
|
# Return 0 to caller.
|
ldi r0, #0
|
ldi r0, #0
|
jmp lr
|
jmp lr
|
|
|
.global longjmp
|
.global longjmp
|
longjmp:
|
longjmp:
|
addi r0, #4 ; first word is reserved
|
addi r0, #4 ; first word is reserved
|
;ld r1, @r0+
|
;ld r1, @r0+
|
ld r8, @r0+
|
ld r8, @r0+
|
ld r9, @r0+
|
ld r9, @r0+
|
ld r10, @r0+
|
ld r10, @r0+
|
ld r11, @r0+
|
ld r11, @r0+
|
ld r12, @r0+
|
ld r12, @r0+
|
ld r13, @r0+
|
ld r13, @r0+
|
ld r2, @r0+ ; return address
|
ld r2, @r0+ ; return address
|
ld r15, @r0+
|
ld r15, @r0+
|
|
|
# If caller attempted to return 0, return 1 instead.
|
# If caller attempted to return 0, return 1 instead.
|
|
|
mv r0, r1
|
mv r0, r1
|
bnez r0, .Lnonzero
|
bnez r0, .Lnonzero
|
ldi r0, #1
|
ldi r0, #1
|
.Lnonzero:
|
.Lnonzero:
|
jmp r2
|
jmp r2
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.