[CRT]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 2 May 2015 14:07:28 +0000 (14:07 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 2 May 2015 14:07:28 +0000 (14:07 +0000)
Implement _setjmp / longjmp on ARM

svn path=/trunk/; revision=67511

reactos/lib/sdk/crt/setjmp/arm/setjmp.s [new file with mode: 0644]

diff --git a/reactos/lib/sdk/crt/setjmp/arm/setjmp.s b/reactos/lib/sdk/crt/setjmp/arm/setjmp.s
new file mode 100644 (file)
index 0000000..cb1ddbb
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * COPYRIGHT:         BSD - See COPYING.ARM in the top level directory
+ * PROJECT:           ReactOS CRT library
+ * PURPOSE:           Implementation of _setjmp / longjmp
+ * PROGRAMMER:        Timo Kreuzer (timo.kreuzer@reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <kxarm.h>
+
+/* CODE **********************************************************************/
+    TEXTAREA
+
+    LEAF_ENTRY _setjmp
+
+    mov r1, sp
+
+    /* Store r1 (->Frame) and r4 - r11 */
+    stmia r0!, {r1,r4-r11}
+
+    /* Store r1 (->Sp), lr (->Pc), fp (->Fpscr) */
+    stmia r0!, {r1,lr,fp}
+
+    /* Store NEON registers */
+    vst1.64 {d0}, [r0]!
+    vst1.64 {d1}, [r0]!
+    vst1.64 {d2}, [r0]!
+    vst1.64 {d3}, [r0]!
+    vst1.64 {d4}, [r0]!
+    vst1.64 {d5}, [r0]!
+    vst1.64 {d6}, [r0]!
+    vst1.64 {d7}, [r0]!
+
+    /* Return 0 */
+    mov r0, #0
+    bx lr
+    LEAF_END _setjmp
+
+    LEAF_ENTRY longjmp
+
+    ldmia r0!, {r1,r4-r11}
+    ldmia r0!, {r1,lr,fp}
+    mov sp, r1
+
+    /* Load NEON registers */
+    vld1.64 {d0}, [r0]!
+    vld1.64 {d1}, [r0]!
+    vld1.64 {d2}, [r0]!
+    vld1.64 {d3}, [r0]!
+    vld1.64 {d4}, [r0]!
+    vld1.64 {d5}, [r0]!
+    vld1.64 {d6}, [r0]!
+    vld1.64 {d7}, [r0]!
+
+    /* Return 1 */
+    mov r0, #1
+    bx lr
+    LEAF_END longjmp
+
+    END
+/* EOF */