mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-24 07:31:32 +00:00
95 lines
2.9 KiB
ArmAsm
95 lines
2.9 KiB
ArmAsm
|
/*
|
||
|
* setjmp/longjmp for LatticeMico32.
|
||
|
* Contributed by Jon Beniston <jon@beniston.com>
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
|
* SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
.section .text
|
||
|
.align 4
|
||
|
|
||
|
.globl setjmp
|
||
|
.type setjmp,@function
|
||
|
.globl longjmp
|
||
|
.type longjmp,@function
|
||
|
|
||
|
/* setjmp: save all callee saves into jmp_buf
|
||
|
r1 - Address of jmp_buf
|
||
|
*/
|
||
|
|
||
|
setjmp:
|
||
|
sw (r1+0), r11
|
||
|
sw (r1+4), r12
|
||
|
sw (r1+8), r13
|
||
|
sw (r1+12), r14
|
||
|
sw (r1+16), r15
|
||
|
sw (r1+20), r16
|
||
|
sw (r1+24), r17
|
||
|
sw (r1+28), r18
|
||
|
sw (r1+32), r19
|
||
|
sw (r1+36), r20
|
||
|
sw (r1+40), r21
|
||
|
sw (r1+44), r22
|
||
|
sw (r1+48), r23
|
||
|
sw (r1+52), r24
|
||
|
sw (r1+56), r25
|
||
|
sw (r1+60), gp
|
||
|
sw (r1+64), fp
|
||
|
sw (r1+68), sp
|
||
|
sw (r1+72), ra
|
||
|
mvi r1, 0
|
||
|
ret
|
||
|
|
||
|
/* longjmp: restore all callee saves from jmp_buf
|
||
|
r1 - Address of jmb_buf
|
||
|
r2 - Value to return with
|
||
|
*/
|
||
|
|
||
|
.global longjmp
|
||
|
.type longjmp,@function
|
||
|
.align 4
|
||
|
|
||
|
longjmp:
|
||
|
lw r11, (r1+0)
|
||
|
lw r12, (r1+4)
|
||
|
lw r13, (r1+8)
|
||
|
lw r14, (r1+12)
|
||
|
lw r15, (r1+16)
|
||
|
lw r16, (r1+20)
|
||
|
lw r17, (r1+24)
|
||
|
lw r18, (r1+28)
|
||
|
lw r19, (r1+32)
|
||
|
lw r20, (r1+36)
|
||
|
lw r21, (r1+40)
|
||
|
lw r22, (r1+44)
|
||
|
lw r23, (r1+48)
|
||
|
lw r24, (r1+52)
|
||
|
lw r25, (r1+56)
|
||
|
lw gp, (r1+60)
|
||
|
lw fp, (r1+64)
|
||
|
lw sp, (r1+68)
|
||
|
lw ra, (r1+72)
|
||
|
mv r1, r2
|
||
|
ret
|
||
|
|
||
|
|