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/csky/setjmp.S')
-rw-r--r--newlib/libc/machine/csky/setjmp.S79
1 files changed, 79 insertions, 0 deletions
diff --git a/newlib/libc/machine/csky/setjmp.S b/newlib/libc/machine/csky/setjmp.S
new file mode 100644
index 000000000..b93687319
--- /dev/null
+++ b/newlib/libc/machine/csky/setjmp.S
@@ -0,0 +1,79 @@
+/* Copyright (c) 2020 C-SKY Microsystems All rights reserved.
+
+ This copyrighted material is made available to anyone wishing to use,
+ modify, copy, or redistribute it subject to the terms and conditions
+ of the FreeBSD License. This program is distributed in the hope that
+ it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
+ including the implied warranties of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. A copy of this license is available at
+ http://www.opensource.org/licenses.
+*/
+
+ .section .text
+ .align 3
+ .globl setjmp
+ .type setjmp,@function
+ .globl longjmp
+ .type longjmp,@function
+
+setjmp:
+
+#if defined(__CK801__)
+ stw r4, (r0, 0)
+ stw r5, (r0, 4)
+ stw r6, (r0, 8)
+ stw r7, (r0, 12)
+ stw r8, (r0, 16)
+ stw r15, (r0, 20)
+ stw sp, (r0, 24)
+#elif defined(__CK802__)
+ stm r4-r11, (r0)
+ stw r15, (r0, 32)
+ stw sp, (r0, 36)
+#else
+ stm r4-r11, (r0)
+ stw r15, (r0, 32)
+ stw r16, (r0, 36)
+ stw r17, (r0, 40)
+ stw r26, (r0, 44)
+ stw r27, (r0, 48)
+ stw r28, (r0, 52)
+ stw r29, (r0, 56)
+ stw r30, (r0, 60)
+ stw r31, (r0, 64)
+ stw sp, (r0, 68)
+#endif
+ movi r0, 0
+ rts
+
+longjmp:
+#if defined(__CK801__)
+ ldw r4, (r0, 0)
+ ldw r5, (r0, 4)
+ ldw r6, (r0, 8)
+ ldw r7, (r0, 12)
+ ldw r8, (r0, 16)
+ ldw r15, (r0, 20)
+ ldw sp, (r0, 24)
+#elif defined(__CK802__)
+ ldm r4-r11, (r0)
+ ldw r15, (r0, 32)
+ ldw sp, (r0, 36)
+#else
+ ldm r4-r11, (r0)
+ ldw r15, (r0, 32)
+ ldw r16, (r0, 36)
+ ldw r17, (r0, 40)
+ ldw r26, (r0, 44)
+ ldw r27, (r0, 48)
+ ldw r28, (r0, 52)
+ ldw r29, (r0, 56)
+ ldw r30, (r0, 60)
+ ldw r31, (r0, 64)
+ ldw sp, (r0, 68)
+#endif
+ mov r0, r1
+ cmpnei r1, 0
+ bt 1f
+ movi r0, 1
+1: rts