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