]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/ppc-asm.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / ppc-asm.h
CommitLineData
ad41bd84
JM
1/* PowerPC asm definitions for GNU C.
2
8d9254fc 3Copyright (C) 2002-2020 Free Software Foundation, Inc.
ad41bd84
JM
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 3, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
16
17Under Section 7 of GPL version 3, you are granted additional
18permissions described in the GCC Runtime Library Exception, version
193.1, as published by the Free Software Foundation.
20
21You should have received a copy of the GNU General Public License and
22a copy of the GCC Runtime Library Exception along with this program;
23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24<http://www.gnu.org/licenses/>. */
25
a0d66c8d 26/* Under winnt, 1) gas supports the following as names and 2) in particular
8e05e5dd
MM
27 defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */
28
482cfaf8
MM
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
eaf1bcf1
MM
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
29e6733c 90#define f19 19
eaf1bcf1
MM
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
482cfaf8 103
29e6733c
MM
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
fc3605f1 123#define f50 50
29e6733c
MM
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
fc3605f1 225#define vs50 50
29e6733c
MM
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
482cfaf8
MM
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
b54214fe
UW
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); \
269FUNC_NAME(name): \
2700: 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
482cfaf8 283#define FUNC_NAME(name) GLUE(.,name)
8a155ecc 284#define JUMP_TARGET(name) FUNC_NAME(name)
482cfaf8 285#define FUNC_START(name) \
9739c90c 286 .section ".opd","aw"; \
482cfaf8 287name: \
9739c90c
JJ
288 .quad GLUE(.,name); \
289 .quad .TOC.@tocbase; \
290 .quad 0; \
482cfaf8
MM
291 .previous; \
292 .type GLUE(.,name),@function; \
293 .globl name; \
294 .globl GLUE(.,name); \
295GLUE(.,name):
296
1590a115
NF
297#define HIDDEN_FUNC(name) \
298 FUNC_START(name) \
299 .hidden name; \
300 .hidden GLUE(.,name);
301
482cfaf8
MM
302#define FUNC_END(name) \
303GLUE(.L,name): \
304 .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
305
9739c90c
JJ
306#elif defined(_CALL_AIXDESC)
307
308#ifdef _RELOCATABLE
309#define DESC_SECTION ".got2"
310#else
311#define DESC_SECTION ".got1"
312#endif
313
710fdaad 314#define FUNC_NAME(name) GLUE(.,name)
34d1b01d 315#define JUMP_TARGET(name) FUNC_NAME(name)
710fdaad 316#define FUNC_START(name) \
9739c90c 317 .section DESC_SECTION,"aw"; \
710fdaad 318name: \
9739c90c
JJ
319 .long GLUE(.,name); \
320 .long _GLOBAL_OFFSET_TABLE_; \
321 .long 0; \
710fdaad
DE
322 .previous; \
323 .type GLUE(.,name),@function; \
324 .globl name; \
325 .globl GLUE(.,name); \
326GLUE(.,name):
327
1590a115
NF
328#define HIDDEN_FUNC(name) \
329 FUNC_START(name) \
330 .hidden name; \
331 .hidden GLUE(.,name);
332
710fdaad
DE
333#define FUNC_END(name) \
334GLUE(.L,name): \
335 .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
336
482cfaf8 337#else
9739c90c 338
79f4e1c0 339#define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
8a155ecc
FS
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
482cfaf8 345#define FUNC_START(name) \
79f4e1c0
GK
346 .type FUNC_NAME(name),@function; \
347 .globl FUNC_NAME(name); \
348FUNC_NAME(name):
482cfaf8 349
1590a115
NF
350#define HIDDEN_FUNC(name) \
351 FUNC_START(name) \
352 .hidden FUNC_NAME(name);
353
482cfaf8
MM
354#define FUNC_END(name) \
355GLUE(.L,name): \
79f4e1c0 356 .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
482cfaf8 357#endif
3edc56a9 358
16702e19 359#ifdef IN_GCC
ff35822b
JJ
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
16702e19 376#endif
ff35822b 377
3edc56a9
JJ
378#if defined __linux__ && !defined __powerpc64__
379 .section .note.GNU-stack
380 .previous
381#endif