2009-05-13 Paul Brook <paul@codesourcery.com>

* libc/machine/arm/setjmp.S: Add ARMv6-M implementation.
This commit is contained in:
Jeff Johnston 2009-05-13 18:28:49 +00:00
parent 40c66067fb
commit eba36c51fa
2 changed files with 54 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2009-05-13 Paul Brook <paul@codesourcery.com>
* libc/machine/arm/setjmp.S: Add ARMv6-M implementation.
2009-05-13 Corinna Vinschen <corinna@vinschen.de>
* libc/locale/locale.c (setlocale): Don't build on Cygwin.

View File

@ -55,6 +55,55 @@
For Thumb-2 do everything in Thumb mode. */
#if defined(__ARM_ARCH_6M__)
/* ARMv6-M has to be implemented in Thumb mode. */
.thumb
.thumb_func
.globl SYM (setjmp)
TYPE (setjmp)
SYM (setjmp):
/* Save registers in jump buffer. */
stmia r0!, {r4, r5, r6, r7}
mov r1, r8
mov r2, r9
mov r3, r10
mov r4, fp
mov r5, sp
mov r6, lr
stmia r0!, {r1, r2, r3, r4, r5, r6}
sub r0, r0, #40
/* Restore callee-saved low regs. */
ldmia r0!, {r4, r5, r6, r7}
/* Return zero. */
mov r0, #0
bx lr
.thumb_func
.globl SYM (longjmp)
TYPE (longjmp)
SYM (longjmp):
/* Restore High regs. */
add r0, r0, #16
ldmia r0!, {r2, r3, r4, r5, r6}
mov r8, r2
mov r9, r3
mov r10, r4
mov fp, r5
mov sp, r6
ldmia r0!, {r3} /* lr */
/* Restore low regs. */
sub r0, r0, #40
ldmia r0!, {r4, r5, r6, r7}
/* Return the result argument, or 1 if it is zero. */
mov r0, r1
bne 1f
mov r0, #1
1:
bx r3
#else
#ifdef __APCS_26__
#define RET movs pc, lr
#elif defined(__thumb2__)
@ -169,4 +218,4 @@ SYM (\name):
moveq a1, #1
FUNC_END longjmp
#endif