diff options
Diffstat (limited to 'newlib/libc/machine/xstormy16/setjmp.S')
-rw-r--r-- | newlib/libc/machine/xstormy16/setjmp.S | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/newlib/libc/machine/xstormy16/setjmp.S b/newlib/libc/machine/xstormy16/setjmp.S new file mode 100644 index 000000000..f2f7210cd --- /dev/null +++ b/newlib/libc/machine/xstormy16/setjmp.S @@ -0,0 +1,57 @@ +;; xstormy16 +;; Copyright (C) 2001 by Red Hat, Incorporated. All rights reserved. +;; +;; Permission to use, copy, modify, and distribute this software +;; is freely granted, provided that this notice is preserved. +;; + .file "setjmp.S" + + .section .text + .align 1 + .global setjmp + .type setjmp,@function +setjmp: + mov r0,r10 + mov (r2++),r0 + mov r0,r11 + mov (r2++),r0 + mov r0,r12 + mov (r2++),r0 + mov r0,r13 + mov (r2++),r0 + pop r0 ; PC high word + pop r1 ; PC low word + mov (r2++), r0 + mov (r2++), r1 + mov r3,sp + mov (r2++),r3 + mov.w r2,#0 + mov r8, r0 + mov r9, r1 + jmp r8, r9 + .size setjmp,.-setjmp + + .global longjmp + .type longjmp,@function +longjmp: + mov r0,(r2++) + mov r10,r0 + mov r0,(r2++) + mov r11,r0 + mov r0,(r2++) + mov r12,r0 + mov r0,(r2++) + mov r13,r0 + mov r0,(r2++) + mov r8, r0 + mov r1,(r2++) + mov r9, r1 + mov r4,(r2++) + mov sp,r4 +;; status arg (r3) to longjmp is return value +;; if it's zero, return 1 + bnz r3, #0, 0f + mov.w r3,#1 +0: mov r2, r3 + jmp r8,r9 + .size longjmp,.-longjmp |