newlib-cygwin/newlib/libc/machine/csky/setjmp.S

80 lines
1.7 KiB
ArmAsm

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