forked from Vhex-Kernel-Core/fxlibc
47 lines
670 B
ArmAsm
47 lines
670 B
ArmAsm
.text
|
|
.global _setjmp
|
|
.type _setjmp, @function
|
|
|
|
.align 2
|
|
/*
|
|
** int setjmp(jmp_buf env)
|
|
** Store the calling environment in ENV, also saving the signal mask.
|
|
** Return 0.
|
|
**
|
|
** TODO: hande signal mask
|
|
*/
|
|
_setjmp:
|
|
! block interrupt
|
|
stc sr, r1
|
|
mov r1, r3
|
|
mov #0x10, r2
|
|
shll8 r2
|
|
shll16 r2
|
|
or r2, r1
|
|
ldc r1, sr
|
|
|
|
! save current context
|
|
! @note: r3 is the saved SR regsiter
|
|
add #52, r4
|
|
sts.l pr, @-r4
|
|
sts.l mach, @-r4
|
|
sts.l macl, @-r4
|
|
stc.l gbr, @-r4
|
|
mov.l r15, @-r4
|
|
mov.l r14, @-r4
|
|
mov.l r13, @-r4
|
|
mov.l r12, @-r4
|
|
mov.l r11, @-r4
|
|
mov.l r10, @-r4
|
|
mov.l r9, @-r4
|
|
mov.l r8, @-r4
|
|
mov.l r3, @-r4
|
|
|
|
! restore sr
|
|
ldc r3, sr
|
|
|
|
! return
|
|
rts
|
|
mov #0, r0
|
|
.end
|