libbase: setjmp/longjmp
This commit is contained in:
parent
8e0461121f
commit
598498ec2b
|
@ -0,0 +1,12 @@
|
|||
#ifndef __SETJMP_H
|
||||
#define __SETJMP_H
|
||||
|
||||
#define _JBLEN 19
|
||||
|
||||
typedef int jmp_buf[_JBLEN];
|
||||
|
||||
int setjmp(jmp_buf env);
|
||||
void longjmp(jmp_buf env, int val);
|
||||
|
||||
#endif /* __SETJMP_H */
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
M2DIR=../..
|
||||
include $(M2DIR)/software/common.mak
|
||||
|
||||
OBJECTS=divsi3.o libc.o crc16.o crc32.o console.o timer.o system.o board.o uart.o softfloat.o softfloat-glue.o vsnprintf.o atof.o
|
||||
OBJECTS=divsi3.o setjmp.o libc.o crc16.o crc32.o console.o timer.o system.o board.o uart.o softfloat.o softfloat-glue.o vsnprintf.o atof.o
|
||||
|
||||
all: libbase.a
|
||||
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* 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
|
||||
|
||||
|
Loading…
Reference in New Issue