111
|
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__ && !defined __powerpc64__
|
|
379 .section .note.GNU-stack
|
|
380 .previous
|
|
381 #endif
|