OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [newlib/] [libc/] [machine/] [powerpc/] [setjmp.S] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1009 ivang
/* This is a simple version of setjmp and longjmp for the PowerPC.
2
   Ian Lance Taylor, Cygnus Support, 9 Feb 1994.  */
3
 
4
#include "ppc-asm.h"
5
 
6
FUNC_START(setjmp)
7
        addi    3,3,7           # align to 8 byte boundary
8
        rlwinm  3,3,0,0,28
9
        stw     1,0(3)          # offset 0
10
        stwu    2,4(3)          # offset 4
11
        stwu    13,4(3)         # offset 8
12
        stwu    14,4(3)         # offset 12
13
        stwu    15,4(3)         # offset 16
14
        stwu    16,4(3)         # offset 20
15
        stwu    17,4(3)         # offset 24
16
        stwu    18,4(3)         # offset 28
17
        stwu    19,4(3)         # offset 32
18
        stwu    20,4(3)         # offset 36
19
        stwu    21,4(3)         # offset 40
20
        stwu    22,4(3)         # offset 44
21
        stwu    23,4(3)         # offset 48
22
        stwu    24,4(3)         # offset 52
23
        stwu    25,4(3)         # offset 56
24
        stwu    26,4(3)         # offset 60
25
        stwu    27,4(3)         # offset 64
26
        stwu    28,4(3)         # offset 68
27
        stwu    29,4(3)         # offset 72
28
        stwu    30,4(3)         # offset 76
29
        stwu    31,4(3)         # offset 80
30
        mflr    4
31
        stwu    4,4(3)          # offset 84
32
        mfcr    4
33
        stwu    4,4(3)          # offset 88
34
                                # one word pad to get floating point aligned on 8 byte boundary
35
#ifndef _SOFT_FLOAT
36
        stfdu   14,8(3)         # offset 96
37
        stfdu   15,8(3)         # offset 104
38
        stfdu   16,8(3)         # offset 112
39
        stfdu   17,8(3)         # offset 120
40
        stfdu   18,8(3)         # offset 128
41
        stfdu   19,8(3)         # offset 136
42
        stfdu   20,8(3)         # offset 144
43
        stfdu   21,8(3)         # offset 152
44
        stfdu   22,8(3)         # offset 160
45
        stfdu   23,8(3)         # offset 168
46
        stfdu   24,8(3)         # offset 176
47
        stfdu   25,8(3)         # offset 184
48
        stfdu   26,8(3)         # offset 192
49
        stfdu   27,8(3)         # offset 200
50
        stfdu   28,8(3)         # offset 208
51
        stfdu   29,8(3)         # offset 216
52
        stfdu   30,8(3)         # offset 224
53
        stfdu   31,8(3)         # offset 232
54
#endif
55
 
56
        /* This requires a total of 21 * 4 + 18 * 8 + 4 + 4 + 4
57
           bytes == 60 * 4 bytes == 240 bytes.  */
58
 
59
        li      3,0
60
        blr
61
FUNC_END(setjmp)
62
 
63
 
64
FUNC_START(longjmp)
65
        addi    3,3,7           # align to 8 byte boundary
66
        rlwinm  3,3,0,0,28
67
        lwz     1,0(3)          # offset 0
68
        lwzu    2,4(3)          # offset 4
69
        lwzu    13,4(3)         # offset 8
70
        lwzu    14,4(3)         # offset 12
71
        lwzu    15,4(3)         # offset 16
72
        lwzu    16,4(3)         # offset 20
73
        lwzu    17,4(3)         # offset 24
74
        lwzu    18,4(3)         # offset 28
75
        lwzu    19,4(3)         # offset 32
76
        lwzu    20,4(3)         # offset 36
77
        lwzu    21,4(3)         # offset 40
78
        lwzu    22,4(3)         # offset 44
79
        lwzu    23,4(3)         # offset 48
80
        lwzu    24,4(3)         # offset 52
81
        lwzu    25,4(3)         # offset 56
82
        lwzu    26,4(3)         # offset 60
83
        lwzu    27,4(3)         # offset 64
84
        lwzu    28,4(3)         # offset 68
85
        lwzu    29,4(3)         # offset 72
86
        lwzu    30,4(3)         # offset 76
87
        lwzu    31,4(3)         # offset 80
88
        lwzu    5,4(3)          # offset 84
89
        mtlr    5
90
        lwzu    5,4(3)          # offset 88
91
        mtcrf   255,5
92
                                # one word pad to get floating point aligned on 8 byte boundary
93
#ifndef _SOFT_FLOAT
94
        lfdu    14,8(3)         # offset 96
95
        lfdu    15,8(3)         # offset 104
96
        lfdu    16,8(3)         # offset 112
97
        lfdu    17,8(3)         # offset 120
98
        lfdu    18,8(3)         # offset 128
99
        lfdu    19,8(3)         # offset 136
100
        lfdu    20,8(3)         # offset 144
101
        lfdu    21,8(3)         # offset 152
102
        lfdu    22,8(3)         # offset 160
103
        lfdu    23,8(3)         # offset 168
104
        lfdu    24,8(3)         # offset 176
105
        lfdu    25,8(3)         # offset 184
106
        lfdu    26,8(3)         # offset 192
107
        lfdu    27,8(3)         # offset 200
108
        lfdu    28,8(3)         # offset 208
109
        lfdu    29,8(3)         # offset 216
110
        lfdu    30,8(3)         # offset 224
111
        lfdu    31,8(3)         # offset 232
112
#endif
113
 
114
        mr.     3,4
115
        bclr+   4,2
116
        li      3,1
117
        blr
118
FUNC_END(longjmp)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.