You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/04/27 15:21:09 UTC

[incubator-nuttx] branch master updated: arm/arch_setjmp.S: armv6m support setjmp, longjmp

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new cbab540169 arm/arch_setjmp.S: armv6m support setjmp, longjmp
cbab540169 is described below

commit cbab5401690fef045f381cc5d1d876389826ee46
Author: wangbowen6 <wa...@xiaomi.com>
AuthorDate: Wed Apr 27 00:13:56 2022 +0800

    arm/arch_setjmp.S: armv6m support setjmp, longjmp
    
    Signed-off-by: wangbowen6 <wa...@xiaomi.com>
---
 libs/libc/machine/arm/gnu/arch_setjmp.S | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/libs/libc/machine/arm/gnu/arch_setjmp.S b/libs/libc/machine/arm/gnu/arch_setjmp.S
index e110dc20b3..cae0f259fe 100644
--- a/libs/libc/machine/arm/gnu/arch_setjmp.S
+++ b/libs/libc/machine/arm/gnu/arch_setjmp.S
@@ -65,7 +65,20 @@ setjmp:
 	/* Store callee-saved Core registers */
 
 	mov		ip, sp				/* Move sp to ip so we can save it */
+
+#ifdef CONFIG_ARCH_ARMV6M
+	stmia		r0!, {r4-r7}			/* Save R4 ~ R7 */
+
+	mov		r2, r8
+	mov		r3, r9
+	mov		r4, r10
+	mov		r5, r11
+	mov		r6, ip
+	mov		r7, lr
+	stmia		r0!, {r2-r7}			/* Save R8 ~ R11, IP, LR */
+#else
 	stmia		r0!, {r4-r11, ip, lr}
+#endif
 
 #ifdef CONFIG_ARCH_FPU
 	vstmia		r0!, {s16-s31}			/* Save the callee-saved FP registers */
@@ -81,7 +94,7 @@ setjmp:
 
 	/* we're done, we're out of here */
 
-	mov		r0, #0
+	movs		r0, #0
 	bx		lr
 
 	.size	setjmp, .-setjmp
@@ -113,7 +126,24 @@ longjmp:
 
 	/* Load callee-saved Core registers */
 
+#ifdef CONFIG_ARCH_ARMV6M
+	ldmia		r0!, {r4-r7}			/* Restore R4 ~ R7 */
+
+	ldmia		r0!, {r2-r3}			/* Restore R8, R9 */
+	mov		r8, r2
+	mov		r9, r3
+
+	ldmia		r0!, {r2-r3}			/* Restore R10, R11 */
+	mov		r10, r2
+	mov		r11, r3
+
+	ldmia		r0!, {r2-r3}			/* Restore IP, LR */
+	mov		ip, r2
+	mov		lr, r3
+#else
 	ldmia		r0!, {r4-r11, ip, lr}
+#endif
+
 	mov		sp, ip				/* Restore sp */
 
 #ifdef CONFIG_ARCH_FPU