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