diff options
Diffstat (limited to 'newlib/libc/machine/csky/setjmp.S')
-rw-r--r-- | newlib/libc/machine/csky/setjmp.S | 79 |
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 |