From 9806b6c055e56e00cbd8e7001e8c08098a6f9315 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 2 May 2015 14:07:28 +0000 Subject: [PATCH] [CRT] Implement _setjmp / longjmp on ARM svn path=/trunk/; revision=67511 --- reactos/lib/sdk/crt/setjmp/arm/setjmp.s | 62 +++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 reactos/lib/sdk/crt/setjmp/arm/setjmp.s diff --git a/reactos/lib/sdk/crt/setjmp/arm/setjmp.s b/reactos/lib/sdk/crt/setjmp/arm/setjmp.s new file mode 100644 index 00000000000..cb1ddbb8960 --- /dev/null +++ b/reactos/lib/sdk/crt/setjmp/arm/setjmp.s @@ -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 + +/* 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 */