diff options
Diffstat (limited to 'newlib/libc/machine/tic80/setjmp.S')
-rw-r--r-- | newlib/libc/machine/tic80/setjmp.S | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/newlib/libc/machine/tic80/setjmp.S b/newlib/libc/machine/tic80/setjmp.S new file mode 100644 index 00000000000..1946344a54b --- /dev/null +++ b/newlib/libc/machine/tic80/setjmp.S @@ -0,0 +1,50 @@ +/* These are predefined by new versions of GNU cpp. */ + +#ifndef __USER_LABEL_PREFIX__ +#define __USER_LABEL_PREFIX__ _ +#endif + +/* ANSI concatenation macros. */ + +#define CONCAT1(a, b) CONCAT2(a, b) +#define CONCAT2(a, b) a ## b + +/* Use the right prefix for global labels. */ + +#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x) + + .global SYM (setjmp) + .global SYM (_setjmp) + .global SYM (longjmp) + + .section .text,"x" + .align 4 +SYM (_setjmp): +SYM (setjmp): + st.d 0(r2),r20 + st.d 8(r2),r22 + st.d 16(r2),r24 + st.d 24(r2),r26 + st.d 32(r2),r28 + st.d 40(r2),r30 + st 48(r2),r1 + jsr r31(r0),r0 + addu 0,r0,r2 + + .section .text,"x" + .align 4 +SYM (longjmp): + ld.d 0(r2),r20 + ld.d 8(r2),r22 + ld.d 16(r2),r24 + ld.d 24(r2),r26 + ld.d 32(r2),r28 + ld.d 40(r2),r30 + bcnd L1,r4,ne0.w + ld 48(r2),r1 + + jsr r31(r0),r0 + addu 1,r0,r2 +L1: + jsr r31(r0),r0 + addu r4,r0,r2 |