ppc-asm.h revision 302408
121173Sjkh/* PowerPC asm definitions for GNU C.  */
250479Speter/* Under winnt, 1) gas supports the following as names and 2) in particular
350479Speter   defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */
421173Sjkh
521173Sjkh#define r0	0
621173Sjkh#define sp	1
721173Sjkh#define toc	2
821173Sjkh#define r3	3
921173Sjkh#define r4	4
1021173Sjkh#define r5	5
1121173Sjkh#define r6	6
1221173Sjkh#define r7	7
1321173Sjkh#define r8	8
14159363Strhodes#define r9	9
15159363Strhodes#define r10	10
16159363Strhodes#define r11	11
17159363Strhodes#define r12	12
18159363Strhodes#define r13	13
19159363Strhodes#define r14	14
20159363Strhodes#define r15	15
2164057Salex#define r16	16
2264057Salex#define r17	17
2364057Salex#define r18	18
2421173Sjkh#define r19     19
2564057Salex#define r20	20
2664057Salex#define r21	21
27100446Swosch#define r22	22
2821369Smax#define r23	23
2964057Salex#define r24	24
3093217Sru#define r25	25
3164057Salex#define r26	26
3221173Sjkh#define r27	27
3393217Sru#define r28	28
3421173Sjkh#define r29	29
3521173Sjkh#define r30	30
3664047Salex#define r31	31
3764047Salex
3864047Salex#define cr0	0
3964047Salex#define cr1	1
4021173Sjkh#define cr2	2
4121173Sjkh#define cr3	3
4221173Sjkh#define cr4	4
4321173Sjkh#define cr5	5
4493217Sru#define cr6	6
4521173Sjkh#define cr7	7
46215293Sjoel
47215293Sjoel#define f0	0
48215293Sjoel#define f1	1
4921173Sjkh#define f2	2
5021173Sjkh#define f3	3
5164047Salex#define f4	4
5221173Sjkh#define f5	5
5393217Sru#define f6	6
5421173Sjkh#define f7	7
5521173Sjkh#define f8	8
5621173Sjkh#define f9	9
5721173Sjkh#define f10	10
5821173Sjkh#define f11	11
5921173Sjkh#define f12	12
6021173Sjkh#define f13	13
6121173Sjkh#define f14	14
6293217Sru#define f15	15
6337283Sjkh#define f16	16
6421173Sjkh#define f17	17
6521173Sjkh#define f18	18
6621173Sjkh#define f19     19
6721173Sjkh#define f20	20
6821173Sjkh#define f21	21
6921173Sjkh#define f22	22
70156171Sceri#define f23	23
71156171Sceri#define f24	24
7221173Sjkh#define f25	25
7321173Sjkh#define f26	26
7465298Smarkm#define f27	27
7521173Sjkh#define f28	28
7621173Sjkh#define f29	29
7721173Sjkh#define f30	30
7821173Sjkh#define f31	31
7921173Sjkh
8021173Sjkh/*
8121173Sjkh * Macros to glue together two tokens.
8221173Sjkh */
8321173Sjkh
8421173Sjkh#ifdef __STDC__
8521173Sjkh#define XGLUE(a,b) a##b
8621173Sjkh#else
8721173Sjkh#define XGLUE(a,b) a/**/b
8821173Sjkh#endif
8921173Sjkh
90100446Swosch#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