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