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

95 lines
2.7 KiB
ArmAsm

/* A setjmp.c for FT32
Copyright (C) 2014 FTDI (support@ftdichip.com)
The authors hereby grant permission to use, copy, modify, distribute,
and license this software and its documentation for any purpose, provided
that existing copyright notices are retained in all copies and that this
notice is included verbatim in any distributions. No written agreement,
license, or royalty fee is required for any of the authorized uses.
Modifications to this software may be copyrighted by their authors
and need not follow the licensing terms described here, provided that
the new terms are clearly indicated on the first page of each file where
they apply. */
# setjmp/longjmp for FT32.
# Total jumpbuf size is 108 bytes, or 27 words.
#
.text
.global setjmp
.type setjmp,@function
setjmp:
pop.l $r5 # return address in $r5
sti.l $r0,0,$r5
sti.l $r0,4,$r6
sti.l $r0,8,$r7
sti.l $r0,12,$r8
sti.l $r0,16,$r9
sti.l $r0,20,$r10
sti.l $r0,24,$r11
sti.l $r0,28,$r12
sti.l $r0,32,$r13
sti.l $r0,36,$r14
sti.l $r0,40,$r15
sti.l $r0,44,$r16
sti.l $r0,48,$r17
sti.l $r0,52,$r18
sti.l $r0,56,$r19
sti.l $r0,60,$r20
sti.l $r0,64,$r21
sti.l $r0,68,$r22
sti.l $r0,72,$r23
sti.l $r0,76,$r24
sti.l $r0,80,$r25
sti.l $r0,84,$r26
sti.l $r0,88,$r27
sti.l $r0,92,$r28
sti.l $r0,96,$r29
sti.l $r0,100,$r30
sti.l $r0,104,$r31
ldk.l $r0,0
jmpi $r5
.Lend1:
.size setjmp,.Lend1-setjmp
.global longjmp
.type longjmp,@function
longjmp:
cmp.l $r1,0
jmpc nz,.nonz
ldk.l $r1,1
.nonz:
ldi.l $r5,$r0,0
ldi.l $r6,$r0,4
ldi.l $r7,$r0,8
ldi.l $r8,$r0,12
ldi.l $r9,$r0,16
ldi.l $r10,$r0,20
ldi.l $r11,$r0,24
ldi.l $r12,$r0,28
ldi.l $r13,$r0,32
ldi.l $r14,$r0,36
ldi.l $r15,$r0,40
ldi.l $r16,$r0,44
ldi.l $r17,$r0,48
ldi.l $r18,$r0,52
ldi.l $r19,$r0,56
ldi.l $r20,$r0,60
ldi.l $r21,$r0,64
ldi.l $r22,$r0,68
ldi.l $r23,$r0,72
ldi.l $r24,$r0,76
ldi.l $r25,$r0,80
ldi.l $r26,$r0,84
ldi.l $r27,$r0,88
ldi.l $r28,$r0,92
ldi.l $r29,$r0,96
ldi.l $r30,$r0,100
ldi.l $r31,$r0,104
move.l $r0,$r1
jmpi $r5
.Lend2:
.size longjmp,.Lend2-longjmp