]>
Commit | Line | Data |
---|---|---|
20effc67 TL |
1 | /* PowerPC asm definitions for GNU C. |
2 | ||
3 | Copyright (C) 2002-2017 Free Software Foundation, Inc. | |
4 | ||
5 | This file is part of GCC. | |
6 | ||
7 | GCC is free software; you can redistribute it and/or modify it under | |
8 | the terms of the GNU General Public License as published by the Free | |
9 | Software Foundation; either version 3, or (at your option) any later | |
10 | version. | |
11 | ||
12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
16 | ||
17 | Under Section 7 of GPL version 3, you are granted additional | |
18 | permissions described in the GCC Runtime Library Exception, version | |
19 | 3.1, as published by the Free Software Foundation. | |
20 | ||
21 | You should have received a copy of the GNU General Public License and | |
22 | a copy of the GCC Runtime Library Exception along with this program; | |
23 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
24 | <http://www.gnu.org/licenses/>. */ | |
25 | ||
26 | /* Under winnt, 1) gas supports the following as names and 2) in particular | |
27 | defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ | |
28 | ||
29 | #define r0 0 | |
30 | #define sp 1 | |
31 | #define toc 2 | |
32 | #define r3 3 | |
33 | #define r4 4 | |
34 | #define r5 5 | |
35 | #define r6 6 | |
36 | #define r7 7 | |
37 | #define r8 8 | |
38 | #define r9 9 | |
39 | #define r10 10 | |
40 | #define r11 11 | |
41 | #define r12 12 | |
42 | #define r13 13 | |
43 | #define r14 14 | |
44 | #define r15 15 | |
45 | #define r16 16 | |
46 | #define r17 17 | |
47 | #define r18 18 | |
48 | #define r19 19 | |
49 | #define r20 20 | |
50 | #define r21 21 | |
51 | #define r22 22 | |
52 | #define r23 23 | |
53 | #define r24 24 | |
54 | #define r25 25 | |
55 | #define r26 26 | |
56 | #define r27 27 | |
57 | #define r28 28 | |
58 | #define r29 29 | |
59 | #define r30 30 | |
60 | #define r31 31 | |
61 | ||
62 | #define cr0 0 | |
63 | #define cr1 1 | |
64 | #define cr2 2 | |
65 | #define cr3 3 | |
66 | #define cr4 4 | |
67 | #define cr5 5 | |
68 | #define cr6 6 | |
69 | #define cr7 7 | |
70 | ||
71 | #define f0 0 | |
72 | #define f1 1 | |
73 | #define f2 2 | |
74 | #define f3 3 | |
75 | #define f4 4 | |
76 | #define f5 5 | |
77 | #define f6 6 | |
78 | #define f7 7 | |
79 | #define f8 8 | |
80 | #define f9 9 | |
81 | #define f10 10 | |
82 | #define f11 11 | |
83 | #define f12 12 | |
84 | #define f13 13 | |
85 | #define f14 14 | |
86 | #define f15 15 | |
87 | #define f16 16 | |
88 | #define f17 17 | |
89 | #define f18 18 | |
90 | #define f19 19 | |
91 | #define f20 20 | |
92 | #define f21 21 | |
93 | #define f22 22 | |
94 | #define f23 23 | |
95 | #define f24 24 | |
96 | #define f25 25 | |
97 | #define f26 26 | |
98 | #define f27 27 | |
99 | #define f28 28 | |
100 | #define f29 29 | |
101 | #define f30 30 | |
102 | #define f31 31 | |
103 | ||
104 | #ifdef __VSX__ | |
105 | #define f32 32 | |
106 | #define f33 33 | |
107 | #define f34 34 | |
108 | #define f35 35 | |
109 | #define f36 36 | |
110 | #define f37 37 | |
111 | #define f38 38 | |
112 | #define f39 39 | |
113 | #define f40 40 | |
114 | #define f41 41 | |
115 | #define f42 42 | |
116 | #define f43 43 | |
117 | #define f44 44 | |
118 | #define f45 45 | |
119 | #define f46 46 | |
120 | #define f47 47 | |
121 | #define f48 48 | |
122 | #define f49 49 | |
123 | #define f50 30 | |
124 | #define f51 51 | |
125 | #define f52 52 | |
126 | #define f53 53 | |
127 | #define f54 54 | |
128 | #define f55 55 | |
129 | #define f56 56 | |
130 | #define f57 57 | |
131 | #define f58 58 | |
132 | #define f59 59 | |
133 | #define f60 60 | |
134 | #define f61 61 | |
135 | #define f62 62 | |
136 | #define f63 63 | |
137 | #endif | |
138 | ||
139 | #ifdef __ALTIVEC__ | |
140 | #define v0 0 | |
141 | #define v1 1 | |
142 | #define v2 2 | |
143 | #define v3 3 | |
144 | #define v4 4 | |
145 | #define v5 5 | |
146 | #define v6 6 | |
147 | #define v7 7 | |
148 | #define v8 8 | |
149 | #define v9 9 | |
150 | #define v10 10 | |
151 | #define v11 11 | |
152 | #define v12 12 | |
153 | #define v13 13 | |
154 | #define v14 14 | |
155 | #define v15 15 | |
156 | #define v16 16 | |
157 | #define v17 17 | |
158 | #define v18 18 | |
159 | #define v19 19 | |
160 | #define v20 20 | |
161 | #define v21 21 | |
162 | #define v22 22 | |
163 | #define v23 23 | |
164 | #define v24 24 | |
165 | #define v25 25 | |
166 | #define v26 26 | |
167 | #define v27 27 | |
168 | #define v28 28 | |
169 | #define v29 29 | |
170 | #define v30 30 | |
171 | #define v31 31 | |
172 | #endif | |
173 | ||
174 | #ifdef __VSX__ | |
175 | #define vs0 0 | |
176 | #define vs1 1 | |
177 | #define vs2 2 | |
178 | #define vs3 3 | |
179 | #define vs4 4 | |
180 | #define vs5 5 | |
181 | #define vs6 6 | |
182 | #define vs7 7 | |
183 | #define vs8 8 | |
184 | #define vs9 9 | |
185 | #define vs10 10 | |
186 | #define vs11 11 | |
187 | #define vs12 12 | |
188 | #define vs13 13 | |
189 | #define vs14 14 | |
190 | #define vs15 15 | |
191 | #define vs16 16 | |
192 | #define vs17 17 | |
193 | #define vs18 18 | |
194 | #define vs19 19 | |
195 | #define vs20 20 | |
196 | #define vs21 21 | |
197 | #define vs22 22 | |
198 | #define vs23 23 | |
199 | #define vs24 24 | |
200 | #define vs25 25 | |
201 | #define vs26 26 | |
202 | #define vs27 27 | |
203 | #define vs28 28 | |
204 | #define vs29 29 | |
205 | #define vs30 30 | |
206 | #define vs31 31 | |
207 | #define vs32 32 | |
208 | #define vs33 33 | |
209 | #define vs34 34 | |
210 | #define vs35 35 | |
211 | #define vs36 36 | |
212 | #define vs37 37 | |
213 | #define vs38 38 | |
214 | #define vs39 39 | |
215 | #define vs40 40 | |
216 | #define vs41 41 | |
217 | #define vs42 42 | |
218 | #define vs43 43 | |
219 | #define vs44 44 | |
220 | #define vs45 45 | |
221 | #define vs46 46 | |
222 | #define vs47 47 | |
223 | #define vs48 48 | |
224 | #define vs49 49 | |
225 | #define vs50 30 | |
226 | #define vs51 51 | |
227 | #define vs52 52 | |
228 | #define vs53 53 | |
229 | #define vs54 54 | |
230 | #define vs55 55 | |
231 | #define vs56 56 | |
232 | #define vs57 57 | |
233 | #define vs58 58 | |
234 | #define vs59 59 | |
235 | #define vs60 60 | |
236 | #define vs61 61 | |
237 | #define vs62 62 | |
238 | #define vs63 63 | |
239 | #endif | |
240 | ||
241 | /* | |
242 | * Macros to glue together two tokens. | |
243 | */ | |
244 | ||
245 | #ifdef __STDC__ | |
246 | #define XGLUE(a,b) a##b | |
247 | #else | |
248 | #define XGLUE(a,b) a/**/b | |
249 | #endif | |
250 | ||
251 | #define GLUE(a,b) XGLUE(a,b) | |
252 | ||
253 | /* | |
254 | * Macros to begin and end a function written in assembler. If -mcall-aixdesc | |
255 | * or -mcall-nt, create a function descriptor with the given name, and create | |
256 | * the real function with one or two leading periods respectively. | |
257 | */ | |
258 | ||
259 | #if defined(__powerpc64__) && _CALL_ELF == 2 | |
260 | ||
261 | /* Defining "toc" above breaks @toc in assembler code. */ | |
262 | #undef toc | |
263 | ||
264 | #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) | |
265 | #define JUMP_TARGET(name) FUNC_NAME(name) | |
266 | #define FUNC_START(name) \ | |
267 | .type FUNC_NAME(name),@function; \ | |
268 | .globl FUNC_NAME(name); \ | |
269 | FUNC_NAME(name): \ | |
270 | 0: addis 2,12,(.TOC.-0b)@ha; \ | |
271 | addi 2,2,(.TOC.-0b)@l; \ | |
272 | .localentry FUNC_NAME(name),.-FUNC_NAME(name) | |
273 | ||
274 | #define HIDDEN_FUNC(name) \ | |
275 | FUNC_START(name) \ | |
276 | .hidden FUNC_NAME(name); | |
277 | ||
278 | #define FUNC_END(name) \ | |
279 | .size FUNC_NAME(name),.-FUNC_NAME(name) | |
280 | ||
281 | #elif defined (__powerpc64__) | |
282 | ||
283 | #define FUNC_NAME(name) GLUE(.,name) | |
284 | #define JUMP_TARGET(name) FUNC_NAME(name) | |
285 | #define FUNC_START(name) \ | |
286 | .section ".opd","aw"; \ | |
287 | name: \ | |
288 | .quad GLUE(.,name); \ | |
289 | .quad .TOC.@tocbase; \ | |
290 | .quad 0; \ | |
291 | .previous; \ | |
292 | .type GLUE(.,name),@function; \ | |
293 | .globl name; \ | |
294 | .globl GLUE(.,name); \ | |
295 | GLUE(.,name): | |
296 | ||
297 | #define HIDDEN_FUNC(name) \ | |
298 | FUNC_START(name) \ | |
299 | .hidden name; \ | |
300 | .hidden GLUE(.,name); | |
301 | ||
302 | #define FUNC_END(name) \ | |
303 | GLUE(.L,name): \ | |
304 | .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) | |
305 | ||
306 | #elif defined(_CALL_AIXDESC) | |
307 | ||
308 | #ifdef _RELOCATABLE | |
309 | #define DESC_SECTION ".got2" | |
310 | #else | |
311 | #define DESC_SECTION ".got1" | |
312 | #endif | |
313 | ||
314 | #define FUNC_NAME(name) GLUE(.,name) | |
315 | #define JUMP_TARGET(name) FUNC_NAME(name) | |
316 | #define FUNC_START(name) \ | |
317 | .section DESC_SECTION,"aw"; \ | |
318 | name: \ | |
319 | .long GLUE(.,name); \ | |
320 | .long _GLOBAL_OFFSET_TABLE_; \ | |
321 | .long 0; \ | |
322 | .previous; \ | |
323 | .type GLUE(.,name),@function; \ | |
324 | .globl name; \ | |
325 | .globl GLUE(.,name); \ | |
326 | GLUE(.,name): | |
327 | ||
328 | #define HIDDEN_FUNC(name) \ | |
329 | FUNC_START(name) \ | |
330 | .hidden name; \ | |
331 | .hidden GLUE(.,name); | |
332 | ||
333 | #define FUNC_END(name) \ | |
334 | GLUE(.L,name): \ | |
335 | .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) | |
336 | ||
337 | #else | |
338 | ||
339 | #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) | |
340 | #if defined __PIC__ || defined __pic__ | |
341 | #define JUMP_TARGET(name) FUNC_NAME(name@plt) | |
342 | #else | |
343 | #define JUMP_TARGET(name) FUNC_NAME(name) | |
344 | #endif | |
345 | #define FUNC_START(name) \ | |
346 | .type FUNC_NAME(name),@function; \ | |
347 | .globl FUNC_NAME(name); \ | |
348 | FUNC_NAME(name): | |
349 | ||
350 | #define HIDDEN_FUNC(name) \ | |
351 | FUNC_START(name) \ | |
352 | .hidden FUNC_NAME(name); | |
353 | ||
354 | #define FUNC_END(name) \ | |
355 | GLUE(.L,name): \ | |
356 | .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) | |
357 | #endif | |
358 | ||
359 | #ifdef IN_GCC | |
360 | /* For HAVE_GAS_CFI_DIRECTIVE. */ | |
361 | #include "auto-host.h" | |
362 | ||
363 | #ifdef HAVE_GAS_CFI_DIRECTIVE | |
364 | # define CFI_STARTPROC .cfi_startproc | |
365 | # define CFI_ENDPROC .cfi_endproc | |
366 | # define CFI_OFFSET(reg, off) .cfi_offset reg, off | |
367 | # define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg | |
368 | # define CFI_RESTORE(reg) .cfi_restore reg | |
369 | #else | |
370 | # define CFI_STARTPROC | |
371 | # define CFI_ENDPROC | |
372 | # define CFI_OFFSET(reg, off) | |
373 | # define CFI_DEF_CFA_REGISTER(reg) | |
374 | # define CFI_RESTORE(reg) | |
375 | #endif | |
376 | #endif | |
377 | ||
378 | #if defined __linux__ | |
379 | .section .note.GNU-stack | |
380 | .previous | |
381 | #endif |