51 lines
850 B
ArmAsm
51 lines
850 B
ArmAsm
/* 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
|