mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
libbase: use __builtin_setjmp and __builtin_longjmp
This commit is contained in:
parent
503a2f00b5
commit
14d53526be
4 changed files with 4 additions and 166 deletions
|
@ -5,12 +5,10 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _JBLEN 19
|
typedef void *jmp_buf[5];
|
||||||
|
|
||||||
typedef int jmp_buf[_JBLEN];
|
#define setjmp __builtin_setjmp
|
||||||
|
#define longjmp __builtin_longjmp
|
||||||
int setjmp(jmp_buf env);
|
|
||||||
void longjmp(jmp_buf env, int val);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
MSCDIR=../..
|
MSCDIR=../..
|
||||||
include $(MSCDIR)/software/common.mak
|
include $(MSCDIR)/software/common.mak
|
||||||
|
|
||||||
OBJECTS=setjmp-$(CPU).o exception.o libc.o errno.o crc16.o crc32.o console.o system.o id.o uart.o time.o qsort.o strtod.o
|
OBJECTS=exception.o libc.o errno.o crc16.o crc32.o console.o system.o id.o uart.o time.o qsort.o strtod.o
|
||||||
|
|
||||||
all: crt0-$(CPU).o libbase.a libbase-nofloat.a
|
all: crt0-$(CPU).o libbase.a libbase-nofloat.a
|
||||||
|
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/* setjmp.S. Implementation of setjmp.
|
|
||||||
|
|
||||||
Copyright (C) 2010, Embecosm Limited <info@embecosm.com>
|
|
||||||
|
|
||||||
Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
|
|
||||||
|
|
||||||
Licensed under 2-clause BSD.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
|
||||||
/*!setjmp
|
|
||||||
|
|
||||||
All processor state is saved in the buffer provided. We need not save r0
|
|
||||||
(it will always be zero) and we need not save r11 (it will always be
|
|
||||||
overridden here, and in longjmp).
|
|
||||||
|
|
||||||
@todo We should prefer to save and restore the status register, but this is
|
|
||||||
not directly possible in user code. There is some merit in code to
|
|
||||||
set the flag, since in compiled C code, that might be expected to hold
|
|
||||||
a value. We leave a space for this information for future enhancement.
|
|
||||||
|
|
||||||
@param[out] env(r3) A buffer to save all the current processor state.
|
|
||||||
|
|
||||||
@return zero.*/
|
|
||||||
/* -------------------------------------------------------------------------- */
|
|
||||||
.align 4
|
|
||||||
.global setjmp
|
|
||||||
.type setjmp,@function
|
|
||||||
setjmp:
|
|
||||||
l.sw 4(r3),r1 /* Slot 0 saved for flag in future */
|
|
||||||
l.sw 8(r3),r2
|
|
||||||
l.sw 12(r3),r3
|
|
||||||
l.sw 16(r3),r4
|
|
||||||
l.sw 20(r3),r5
|
|
||||||
l.sw 24(r3),r6
|
|
||||||
l.sw 28(r3),r7
|
|
||||||
l.sw 32(r3),r8
|
|
||||||
l.sw 36(r3),r9
|
|
||||||
l.sw 40(r3),r10 /* Skip r11 */
|
|
||||||
l.sw 44(r3),r12
|
|
||||||
l.sw 48(r3),r13
|
|
||||||
l.sw 52(r3),r14
|
|
||||||
l.sw 56(r3),r15
|
|
||||||
l.sw 60(r3),r16
|
|
||||||
l.sw 64(r3),r17
|
|
||||||
l.sw 68(r3),r18
|
|
||||||
l.sw 72(r3),r19
|
|
||||||
l.sw 76(r3),r20
|
|
||||||
l.sw 80(r3),r21
|
|
||||||
l.sw 84(r3),r22
|
|
||||||
l.sw 88(r3),r23
|
|
||||||
l.sw 92(r3),r24
|
|
||||||
l.sw 96(r3),r25
|
|
||||||
l.sw 100(r3),r26
|
|
||||||
l.sw 104(r3),r27
|
|
||||||
l.sw 108(r3),r28
|
|
||||||
l.sw 112(r3),r29
|
|
||||||
l.sw 116(r3),r30
|
|
||||||
l.sw 120(r3),r31
|
|
||||||
|
|
||||||
|
|
||||||
l.jr r9
|
|
||||||
l.addi r11,r0,0 /* Zero result */
|
|
||||||
|
|
||||||
|
|
||||||
.size setjmp, .-setjmp
|
|
Loading…
Reference in a new issue