source: trunk/libs/newlib/src/newlib/libc/machine/bfin/longjmp.S

Last change on this file was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 2.3 KB
Line 
1/*
2 * longjmp for the Blackfin processor
3 *
4 * Copyright (C) 2006 Analog Devices, Inc.
5 *
6 * The authors hereby grant permission to use, copy, modify, distribute,
7 * and license this software and its documentation for any purpose, provided
8 * that existing copyright notices are retained in all copies and that this
9 * notice is included verbatim in any distributions. No written agreement,
10 * license, or royalty fee is required for any of the authorized uses.
11 * Modifications to this software may be copyrighted by their authors
12 * and need not follow the licensing terms described here, provided that
13 * the new terms are clearly indicated on the first page of each file where
14 * they apply.
15 */
16
17#define _ASM
18#define _SETJMP_H
19
20
21.text;
22.align 4;
23.globl _longjmp;
24.type _longjmp, STT_FUNC;
25_longjmp:
26        P0 = R0;
27        R0 = [P0 + 0x00];
28        [--SP] = R0;            /* Put P0 on the stack */
29       
30        P1 = [P0 + 0x04];
31        P2 = [P0 + 0x08];
32        P3 = [P0 + 0x0C];
33        P4 = [P0 + 0x10];
34        P5 = [P0 + 0x14];
35       
36        FP = [P0 + 0x18];
37        R0 = [SP++];            /* Grab P0 from old stack */
38        SP = [P0 + 0x1C];       /* Update Stack Pointer */
39        [--SP] = R0;            /* Put P0 on new stack */
40        [--SP] = R1;            /* Put VAL arg on new stack */
41
42        R0 = [P0 + 0x20];       /* Data Registers */
43        R1 = [P0 + 0x24];
44        R2 = [P0 + 0x28];
45        R3 = [P0 + 0x2C];
46        R4 = [P0 + 0x30];
47        R5 = [P0 + 0x34];
48        R6 = [P0 + 0x38];
49        R7 = [P0 + 0x3C];
50
51        R0 = [P0 + 0x40];
52        ASTAT = R0;
53
54        R0 = [P0 + 0x44];       /* Loop Counters */
55        LC0 = R0;
56        R0 = [P0 + 0x48];
57        LC1 = R0;
58
59        R0 = [P0 + 0x4C];       /* Accumulators */
60        A0.W = R0;
61        R0 = [P0 + 0x50];
62        A0.X = R0;
63        R0 = [P0 + 0x54];
64        A1.W = R0;
65        R0 = [P0 + 0x58];
66        A1.X = R0;
67
68        R0 = [P0 + 0x5C];       /* Index Registers */
69        I0 = R0;
70        R0 = [P0 + 0x60];
71        I1 = R0;
72        R0 = [P0 + 0x64];
73        I2 = R0;
74        R0 = [P0 + 0x68];
75        I3 = R0;
76
77        R0 = [P0 + 0x6C];       /* Modifier Registers */
78        M0 = R0;
79        R0 = [P0 + 0x70];
80        M1 = R0;
81        R0 = [P0 + 0x74];
82        M2 = R0;
83        R0 = [P0 + 0x78];
84        M3 = R0;
85
86        R0 = [P0 + 0x7C];       /* Length Registers */
87        L0 = R0;
88        R0 = [P0 + 0x80];
89        L1 = R0;
90        R0 = [P0 + 0x84];
91        L2 = R0;
92        R0 = [P0 + 0x88];
93        L3 = R0;
94
95        R0 = [P0 + 0x8C];       /* Base Registers */
96        B0 = R0;
97        R0 = [P0 + 0x90];
98        B1 = R0;
99        R0 = [P0 + 0x94];
100        B2 = R0;
101        R0 = [P0 + 0x98];
102        B3 = R0;
103
104        R0 = [P0 + 0x9C];       /* Return Address (PC) */
105        RETS = R0;
106       
107        R0 = [SP++];
108        P0 = [SP++];
109
110        CC = R0 == 0;
111        IF !CC JUMP 1f;
112        R0 = 1;
1131:
114        RTS;
115.size _longjmp, .-_longjmp;
Note: See TracBrowser for help on using the repository browser.