95 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			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
 |