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=../..
|
M2DIR=../..
|
||||||
include $(M2DIR)/software/common.mak
|
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
|
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