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 */