Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/xstormy16/setjmp.S')
-rw-r--r--newlib/libc/machine/xstormy16/setjmp.S57
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