OSDN Git Service

2009-03-27 Vladimir Makarov <vmakarov@redhat.com>
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / ppc-asm.h
1 /* PowerPC asm definitions for GNU C.  */
2 /* Under winnt, 1) gas supports the following as names and 2) in particular
3    defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */
4
5 #define r0      0
6 #define sp      1
7 #define toc     2
8 #define r3      3
9 #define r4      4
10 #define r5      5
11 #define r6      6
12 #define r7      7
13 #define r8      8
14 #define r9      9
15 #define r10     10
16 #define r11     11
17 #define r12     12
18 #define r13     13
19 #define r14     14
20 #define r15     15
21 #define r16     16
22 #define r17     17
23 #define r18     18
24 #define r19     19
25 #define r20     20
26 #define r21     21
27 #define r22     22
28 #define r23     23
29 #define r24     24
30 #define r25     25
31 #define r26     26
32 #define r27     27
33 #define r28     28
34 #define r29     29
35 #define r30     30
36 #define r31     31
37
38 #define cr0     0
39 #define cr1     1
40 #define cr2     2
41 #define cr3     3
42 #define cr4     4
43 #define cr5     5
44 #define cr6     6
45 #define cr7     7
46
47 #define f0      0
48 #define f1      1
49 #define f2      2
50 #define f3      3
51 #define f4      4
52 #define f5      5
53 #define f6      6
54 #define f7      7
55 #define f8      8
56 #define f9      9
57 #define f10     10
58 #define f11     11
59 #define f12     12
60 #define f13     13
61 #define f14     14
62 #define f15     15
63 #define f16     16
64 #define f17     17
65 #define f18     18
66 #define f19     19
67 #define f20     20
68 #define f21     21
69 #define f22     22
70 #define f23     23
71 #define f24     24
72 #define f25     25
73 #define f26     26
74 #define f27     27
75 #define f28     28
76 #define f29     29
77 #define f30     30
78 #define f31     31
79
80 /*
81  * Macros to glue together two tokens.
82  */
83
84 #ifdef __STDC__
85 #define XGLUE(a,b) a##b
86 #else
87 #define XGLUE(a,b) a/**/b
88 #endif
89
90 #define GLUE(a,b) XGLUE(a,b)
91
92 /*
93  * Macros to begin and end a function written in assembler.  If -mcall-aixdesc
94  * or -mcall-nt, create a function descriptor with the given name, and create
95  * the real function with one or two leading periods respectively.
96  */
97
98 #if defined (__powerpc64__)
99 #define FUNC_NAME(name) GLUE(.,name)
100 #define JUMP_TARGET(name) FUNC_NAME(name)
101 #define FUNC_START(name) \
102         .section ".opd","aw"; \
103 name: \
104         .quad GLUE(.,name); \
105         .quad .TOC.@tocbase; \
106         .quad 0; \
107         .previous; \
108         .type GLUE(.,name),@function; \
109         .globl name; \
110         .globl GLUE(.,name); \
111 GLUE(.,name):
112
113 #define HIDDEN_FUNC(name) \
114   FUNC_START(name) \
115   .hidden name; \
116   .hidden GLUE(.,name);
117
118 #define FUNC_END(name) \
119 GLUE(.L,name): \
120         .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
121
122 #elif defined(_CALL_AIXDESC)
123
124 #ifdef _RELOCATABLE
125 #define DESC_SECTION ".got2"
126 #else
127 #define DESC_SECTION ".got1"
128 #endif
129
130 #define FUNC_NAME(name) GLUE(.,name)
131 #define JUMP_TARGET(name) FUNC_NAME(name)
132 #define FUNC_START(name) \
133         .section DESC_SECTION,"aw"; \
134 name: \
135         .long GLUE(.,name); \
136         .long _GLOBAL_OFFSET_TABLE_; \
137         .long 0; \
138         .previous; \
139         .type GLUE(.,name),@function; \
140         .globl name; \
141         .globl GLUE(.,name); \
142 GLUE(.,name):
143
144 #define HIDDEN_FUNC(name) \
145   FUNC_START(name) \
146   .hidden name; \
147   .hidden GLUE(.,name);
148
149 #define FUNC_END(name) \
150 GLUE(.L,name): \
151         .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
152
153 #else
154
155 #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
156 #if defined __PIC__ || defined __pic__
157 #define JUMP_TARGET(name) FUNC_NAME(name@plt)
158 #else
159 #define JUMP_TARGET(name) FUNC_NAME(name)
160 #endif
161 #define FUNC_START(name) \
162         .type FUNC_NAME(name),@function; \
163         .globl FUNC_NAME(name); \
164 FUNC_NAME(name):
165
166 #define HIDDEN_FUNC(name) \
167   FUNC_START(name) \
168   .hidden FUNC_NAME(name);
169
170 #define FUNC_END(name) \
171 GLUE(.L,name): \
172         .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
173 #endif
174
175 #if defined __linux__ && !defined __powerpc64__
176         .section .note.GNU-stack
177         .previous
178 #endif