xref: /aosp_15_r20/external/libffi/src/powerpc/aix.S (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan/* -----------------------------------------------------------------------
2*1fd5a2e1SPrashanth Swaminathan   aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
3*1fd5a2e1SPrashanth Swaminathan   based on darwin.S by John Hornkvist
4*1fd5a2e1SPrashanth Swaminathan
5*1fd5a2e1SPrashanth Swaminathan   PowerPC Assembly glue.
6*1fd5a2e1SPrashanth Swaminathan
7*1fd5a2e1SPrashanth Swaminathan   Permission is hereby granted, free of charge, to any person obtaining
8*1fd5a2e1SPrashanth Swaminathan   a copy of this software and associated documentation files (the
9*1fd5a2e1SPrashanth Swaminathan   ``Software''), to deal in the Software without restriction, including
10*1fd5a2e1SPrashanth Swaminathan   without limitation the rights to use, copy, modify, merge, publish,
11*1fd5a2e1SPrashanth Swaminathan   distribute, sublicense, and/or sell copies of the Software, and to
12*1fd5a2e1SPrashanth Swaminathan   permit persons to whom the Software is furnished to do so, subject to
13*1fd5a2e1SPrashanth Swaminathan   the following conditions:
14*1fd5a2e1SPrashanth Swaminathan
15*1fd5a2e1SPrashanth Swaminathan   The above copyright notice and this permission notice shall be included
16*1fd5a2e1SPrashanth Swaminathan   in all copies or substantial portions of the Software.
17*1fd5a2e1SPrashanth Swaminathan
18*1fd5a2e1SPrashanth Swaminathan   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
19*1fd5a2e1SPrashanth Swaminathan   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*1fd5a2e1SPrashanth Swaminathan   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21*1fd5a2e1SPrashanth Swaminathan   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
22*1fd5a2e1SPrashanth Swaminathan   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23*1fd5a2e1SPrashanth Swaminathan   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24*1fd5a2e1SPrashanth Swaminathan   OTHER DEALINGS IN THE SOFTWARE.
25*1fd5a2e1SPrashanth Swaminathan   ----------------------------------------------------------------------- */
26*1fd5a2e1SPrashanth Swaminathan
27*1fd5a2e1SPrashanth Swaminathan	.set r0,0
28*1fd5a2e1SPrashanth Swaminathan	.set r1,1
29*1fd5a2e1SPrashanth Swaminathan	.set r2,2
30*1fd5a2e1SPrashanth Swaminathan	.set r3,3
31*1fd5a2e1SPrashanth Swaminathan	.set r4,4
32*1fd5a2e1SPrashanth Swaminathan	.set r5,5
33*1fd5a2e1SPrashanth Swaminathan	.set r6,6
34*1fd5a2e1SPrashanth Swaminathan	.set r7,7
35*1fd5a2e1SPrashanth Swaminathan	.set r8,8
36*1fd5a2e1SPrashanth Swaminathan	.set r9,9
37*1fd5a2e1SPrashanth Swaminathan	.set r10,10
38*1fd5a2e1SPrashanth Swaminathan	.set r11,11
39*1fd5a2e1SPrashanth Swaminathan	.set r12,12
40*1fd5a2e1SPrashanth Swaminathan	.set r13,13
41*1fd5a2e1SPrashanth Swaminathan	.set r14,14
42*1fd5a2e1SPrashanth Swaminathan	.set r15,15
43*1fd5a2e1SPrashanth Swaminathan	.set r16,16
44*1fd5a2e1SPrashanth Swaminathan	.set r17,17
45*1fd5a2e1SPrashanth Swaminathan	.set r18,18
46*1fd5a2e1SPrashanth Swaminathan	.set r19,19
47*1fd5a2e1SPrashanth Swaminathan	.set r20,20
48*1fd5a2e1SPrashanth Swaminathan	.set r21,21
49*1fd5a2e1SPrashanth Swaminathan	.set r22,22
50*1fd5a2e1SPrashanth Swaminathan	.set r23,23
51*1fd5a2e1SPrashanth Swaminathan	.set r24,24
52*1fd5a2e1SPrashanth Swaminathan	.set r25,25
53*1fd5a2e1SPrashanth Swaminathan	.set r26,26
54*1fd5a2e1SPrashanth Swaminathan	.set r27,27
55*1fd5a2e1SPrashanth Swaminathan	.set r28,28
56*1fd5a2e1SPrashanth Swaminathan	.set r29,29
57*1fd5a2e1SPrashanth Swaminathan	.set r30,30
58*1fd5a2e1SPrashanth Swaminathan	.set r31,31
59*1fd5a2e1SPrashanth Swaminathan	.set f0,0
60*1fd5a2e1SPrashanth Swaminathan	.set f1,1
61*1fd5a2e1SPrashanth Swaminathan	.set f2,2
62*1fd5a2e1SPrashanth Swaminathan	.set f3,3
63*1fd5a2e1SPrashanth Swaminathan	.set f4,4
64*1fd5a2e1SPrashanth Swaminathan	.set f5,5
65*1fd5a2e1SPrashanth Swaminathan	.set f6,6
66*1fd5a2e1SPrashanth Swaminathan	.set f7,7
67*1fd5a2e1SPrashanth Swaminathan	.set f8,8
68*1fd5a2e1SPrashanth Swaminathan	.set f9,9
69*1fd5a2e1SPrashanth Swaminathan	.set f10,10
70*1fd5a2e1SPrashanth Swaminathan	.set f11,11
71*1fd5a2e1SPrashanth Swaminathan	.set f12,12
72*1fd5a2e1SPrashanth Swaminathan	.set f13,13
73*1fd5a2e1SPrashanth Swaminathan	.set f14,14
74*1fd5a2e1SPrashanth Swaminathan	.set f15,15
75*1fd5a2e1SPrashanth Swaminathan	.set f16,16
76*1fd5a2e1SPrashanth Swaminathan	.set f17,17
77*1fd5a2e1SPrashanth Swaminathan	.set f18,18
78*1fd5a2e1SPrashanth Swaminathan	.set f19,19
79*1fd5a2e1SPrashanth Swaminathan	.set f20,20
80*1fd5a2e1SPrashanth Swaminathan	.set f21,21
81*1fd5a2e1SPrashanth Swaminathan
82*1fd5a2e1SPrashanth Swaminathan	.extern .ffi_prep_args
83*1fd5a2e1SPrashanth Swaminathan
84*1fd5a2e1SPrashanth Swaminathan#define LIBFFI_ASM
85*1fd5a2e1SPrashanth Swaminathan#include <fficonfig.h>
86*1fd5a2e1SPrashanth Swaminathan#include <ffi.h>
87*1fd5a2e1SPrashanth Swaminathan#define JUMPTARGET(name) name
88*1fd5a2e1SPrashanth Swaminathan#define L(x) x
89*1fd5a2e1SPrashanth Swaminathan	.file "aix.S"
90*1fd5a2e1SPrashanth Swaminathan	.toc
91*1fd5a2e1SPrashanth Swaminathan
92*1fd5a2e1SPrashanth Swaminathan	/* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes,
93*1fd5a2e1SPrashanth Swaminathan	 *		     unsigned int flags, unsigned int *rvalue,
94*1fd5a2e1SPrashanth Swaminathan	 *		     void (*fn)(),
95*1fd5a2e1SPrashanth Swaminathan	 *		     void (*prep_args)(extended_cif*, unsigned *const));
96*1fd5a2e1SPrashanth Swaminathan	 * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args
97*1fd5a2e1SPrashanth Swaminathan	 */
98*1fd5a2e1SPrashanth Swaminathan
99*1fd5a2e1SPrashanth Swaminathan.csect .text[PR]
100*1fd5a2e1SPrashanth Swaminathan	.align 2
101*1fd5a2e1SPrashanth Swaminathan	.globl ffi_call_AIX
102*1fd5a2e1SPrashanth Swaminathan	.globl .ffi_call_AIX
103*1fd5a2e1SPrashanth Swaminathan.csect ffi_call_AIX[DS]
104*1fd5a2e1SPrashanth Swaminathanffi_call_AIX:
105*1fd5a2e1SPrashanth Swaminathan#ifdef __64BIT__
106*1fd5a2e1SPrashanth Swaminathan	.llong .ffi_call_AIX, TOC[tc0], 0
107*1fd5a2e1SPrashanth Swaminathan	.csect .text[PR]
108*1fd5a2e1SPrashanth Swaminathan.ffi_call_AIX:
109*1fd5a2e1SPrashanth Swaminathan	.function .ffi_call_AIX,.ffi_call_AIX,16,044,LFE..0-LFB..0
110*1fd5a2e1SPrashanth Swaminathan	.bf __LINE__
111*1fd5a2e1SPrashanth Swaminathan	.line 1
112*1fd5a2e1SPrashanth SwaminathanLFB..0:
113*1fd5a2e1SPrashanth Swaminathan	/* Save registers we use.  */
114*1fd5a2e1SPrashanth Swaminathan	mflr	r0
115*1fd5a2e1SPrashanth Swaminathan
116*1fd5a2e1SPrashanth Swaminathan	std	r28,-32(r1)
117*1fd5a2e1SPrashanth Swaminathan	std	r29,-24(r1)
118*1fd5a2e1SPrashanth Swaminathan	std	r30,-16(r1)
119*1fd5a2e1SPrashanth Swaminathan	std	r31, -8(r1)
120*1fd5a2e1SPrashanth Swaminathan
121*1fd5a2e1SPrashanth Swaminathan	std	r0, 16(r1)
122*1fd5a2e1SPrashanth SwaminathanLCFI..0:
123*1fd5a2e1SPrashanth Swaminathan	mr	r28, r1		/* our AP.  */
124*1fd5a2e1SPrashanth Swaminathan	stdux	r1, r1, r4
125*1fd5a2e1SPrashanth SwaminathanLCFI..1:
126*1fd5a2e1SPrashanth Swaminathan
127*1fd5a2e1SPrashanth Swaminathan	/* Save arguments over call...  */
128*1fd5a2e1SPrashanth Swaminathan	mr	r31, r5	/* flags, */
129*1fd5a2e1SPrashanth Swaminathan	mr	r30, r6	/* rvalue, */
130*1fd5a2e1SPrashanth Swaminathan	mr	r29, r7	/* function address.  */
131*1fd5a2e1SPrashanth Swaminathan	std	r2, 40(r1)
132*1fd5a2e1SPrashanth Swaminathan
133*1fd5a2e1SPrashanth Swaminathan	/* Call ffi_prep_args.  */
134*1fd5a2e1SPrashanth Swaminathan	mr	r4, r1
135*1fd5a2e1SPrashanth Swaminathan	bl	.ffi_prep_args
136*1fd5a2e1SPrashanth Swaminathan	nop
137*1fd5a2e1SPrashanth Swaminathan
138*1fd5a2e1SPrashanth Swaminathan	/* Now do the call.  */
139*1fd5a2e1SPrashanth Swaminathan	ld	r0, 0(r29)
140*1fd5a2e1SPrashanth Swaminathan	ld	r2, 8(r29)
141*1fd5a2e1SPrashanth Swaminathan	ld	r11, 16(r29)
142*1fd5a2e1SPrashanth Swaminathan	/* Set up cr1 with bits 4-7 of the flags.  */
143*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x40, r31
144*1fd5a2e1SPrashanth Swaminathan	mtctr	r0
145*1fd5a2e1SPrashanth Swaminathan	/* Load all those argument registers.  */
146*1fd5a2e1SPrashanth Swaminathan	/* We have set up a nice stack frame, just load it into registers. */
147*1fd5a2e1SPrashanth Swaminathan	ld	r3, 40+(1*8)(r1)
148*1fd5a2e1SPrashanth Swaminathan	ld	r4, 40+(2*8)(r1)
149*1fd5a2e1SPrashanth Swaminathan	ld	r5, 40+(3*8)(r1)
150*1fd5a2e1SPrashanth Swaminathan	ld	r6, 40+(4*8)(r1)
151*1fd5a2e1SPrashanth Swaminathan	nop
152*1fd5a2e1SPrashanth Swaminathan	ld	r7, 40+(5*8)(r1)
153*1fd5a2e1SPrashanth Swaminathan	ld	r8, 40+(6*8)(r1)
154*1fd5a2e1SPrashanth Swaminathan	ld	r9, 40+(7*8)(r1)
155*1fd5a2e1SPrashanth Swaminathan	ld	r10,40+(8*8)(r1)
156*1fd5a2e1SPrashanth Swaminathan
157*1fd5a2e1SPrashanth SwaminathanL1:
158*1fd5a2e1SPrashanth Swaminathan	/* Load all the FP registers.  */
159*1fd5a2e1SPrashanth Swaminathan	bf	6,L2 /* 2f + 0x18 */
160*1fd5a2e1SPrashanth Swaminathan	lfd	f1,-32-(13*8)(r28)
161*1fd5a2e1SPrashanth Swaminathan	lfd	f2,-32-(12*8)(r28)
162*1fd5a2e1SPrashanth Swaminathan	lfd	f3,-32-(11*8)(r28)
163*1fd5a2e1SPrashanth Swaminathan	lfd	f4,-32-(10*8)(r28)
164*1fd5a2e1SPrashanth Swaminathan	nop
165*1fd5a2e1SPrashanth Swaminathan	lfd	f5,-32-(9*8)(r28)
166*1fd5a2e1SPrashanth Swaminathan	lfd	f6,-32-(8*8)(r28)
167*1fd5a2e1SPrashanth Swaminathan	lfd	f7,-32-(7*8)(r28)
168*1fd5a2e1SPrashanth Swaminathan	lfd	f8,-32-(6*8)(r28)
169*1fd5a2e1SPrashanth Swaminathan	nop
170*1fd5a2e1SPrashanth Swaminathan	lfd	f9,-32-(5*8)(r28)
171*1fd5a2e1SPrashanth Swaminathan	lfd	f10,-32-(4*8)(r28)
172*1fd5a2e1SPrashanth Swaminathan	lfd	f11,-32-(3*8)(r28)
173*1fd5a2e1SPrashanth Swaminathan	lfd	f12,-32-(2*8)(r28)
174*1fd5a2e1SPrashanth Swaminathan	nop
175*1fd5a2e1SPrashanth Swaminathan	lfd	f13,-32-(1*8)(r28)
176*1fd5a2e1SPrashanth Swaminathan
177*1fd5a2e1SPrashanth SwaminathanL2:
178*1fd5a2e1SPrashanth Swaminathan	/* Make the call.  */
179*1fd5a2e1SPrashanth Swaminathan	bctrl
180*1fd5a2e1SPrashanth Swaminathan	ld	r2, 40(r1)
181*1fd5a2e1SPrashanth Swaminathan
182*1fd5a2e1SPrashanth Swaminathan	/* Now, deal with the return value.  */
183*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x01, r31
184*1fd5a2e1SPrashanth Swaminathan
185*1fd5a2e1SPrashanth Swaminathan	bt	30, L(done_return_value)
186*1fd5a2e1SPrashanth Swaminathan	bt	29, L(fp_return_value)
187*1fd5a2e1SPrashanth Swaminathan	std	r3, 0(r30)
188*1fd5a2e1SPrashanth Swaminathan
189*1fd5a2e1SPrashanth Swaminathan	/* Fall through...  */
190*1fd5a2e1SPrashanth Swaminathan
191*1fd5a2e1SPrashanth SwaminathanL(done_return_value):
192*1fd5a2e1SPrashanth Swaminathan	/* Restore the registers we used and return.  */
193*1fd5a2e1SPrashanth Swaminathan	mr	r1, r28
194*1fd5a2e1SPrashanth Swaminathan	ld	r0, 16(r28)
195*1fd5a2e1SPrashanth Swaminathan	ld	r28, -32(r1)
196*1fd5a2e1SPrashanth Swaminathan	mtlr	r0
197*1fd5a2e1SPrashanth Swaminathan	ld	r29, -24(r1)
198*1fd5a2e1SPrashanth Swaminathan	ld	r30, -16(r1)
199*1fd5a2e1SPrashanth Swaminathan	ld	r31, -8(r1)
200*1fd5a2e1SPrashanth Swaminathan	blr
201*1fd5a2e1SPrashanth Swaminathan
202*1fd5a2e1SPrashanth SwaminathanL(fp_return_value):
203*1fd5a2e1SPrashanth Swaminathan	bf	28, L(float_return_value)
204*1fd5a2e1SPrashanth Swaminathan	stfd	f1, 0(r30)
205*1fd5a2e1SPrashanth Swaminathan	bf	31, L(done_return_value)
206*1fd5a2e1SPrashanth Swaminathan	stfd	f2, 8(r30)
207*1fd5a2e1SPrashanth Swaminathan	b	L(done_return_value)
208*1fd5a2e1SPrashanth SwaminathanL(float_return_value):
209*1fd5a2e1SPrashanth Swaminathan	stfs	f1, 0(r30)
210*1fd5a2e1SPrashanth Swaminathan	b	L(done_return_value)
211*1fd5a2e1SPrashanth SwaminathanLFE..0:
212*1fd5a2e1SPrashanth Swaminathan#else /* ! __64BIT__ */
213*1fd5a2e1SPrashanth Swaminathan
214*1fd5a2e1SPrashanth Swaminathan	.long .ffi_call_AIX, TOC[tc0], 0
215*1fd5a2e1SPrashanth Swaminathan	.csect .text[PR]
216*1fd5a2e1SPrashanth Swaminathan.ffi_call_AIX:
217*1fd5a2e1SPrashanth Swaminathan	.function .ffi_call_AIX,.ffi_call_AIX,16,044,LFE..0-LFB..0
218*1fd5a2e1SPrashanth Swaminathan	.bf __LINE__
219*1fd5a2e1SPrashanth Swaminathan	.line 1
220*1fd5a2e1SPrashanth SwaminathanLFB..0:
221*1fd5a2e1SPrashanth Swaminathan	/* Save registers we use.  */
222*1fd5a2e1SPrashanth Swaminathan	mflr	r0
223*1fd5a2e1SPrashanth Swaminathan
224*1fd5a2e1SPrashanth Swaminathan	stw	r28,-16(r1)
225*1fd5a2e1SPrashanth Swaminathan	stw	r29,-12(r1)
226*1fd5a2e1SPrashanth Swaminathan	stw	r30, -8(r1)
227*1fd5a2e1SPrashanth Swaminathan	stw	r31, -4(r1)
228*1fd5a2e1SPrashanth Swaminathan
229*1fd5a2e1SPrashanth Swaminathan	stw	r0, 8(r1)
230*1fd5a2e1SPrashanth SwaminathanLCFI..0:
231*1fd5a2e1SPrashanth Swaminathan	mr	r28, r1		/* out AP.  */
232*1fd5a2e1SPrashanth Swaminathan	stwux	r1, r1, r4
233*1fd5a2e1SPrashanth SwaminathanLCFI..1:
234*1fd5a2e1SPrashanth Swaminathan
235*1fd5a2e1SPrashanth Swaminathan	/* Save arguments over call...  */
236*1fd5a2e1SPrashanth Swaminathan	mr	r31, r5	/* flags, */
237*1fd5a2e1SPrashanth Swaminathan	mr	r30, r6	/* rvalue, */
238*1fd5a2e1SPrashanth Swaminathan	mr	r29, r7	/* function address, */
239*1fd5a2e1SPrashanth Swaminathan	stw	r2, 20(r1)
240*1fd5a2e1SPrashanth Swaminathan
241*1fd5a2e1SPrashanth Swaminathan	/* Call ffi_prep_args.  */
242*1fd5a2e1SPrashanth Swaminathan	mr	r4, r1
243*1fd5a2e1SPrashanth Swaminathan	bl	.ffi_prep_args
244*1fd5a2e1SPrashanth Swaminathan	nop
245*1fd5a2e1SPrashanth Swaminathan
246*1fd5a2e1SPrashanth Swaminathan	/* Now do the call.  */
247*1fd5a2e1SPrashanth Swaminathan	lwz	r0, 0(r29)
248*1fd5a2e1SPrashanth Swaminathan	lwz	r2, 4(r29)
249*1fd5a2e1SPrashanth Swaminathan	lwz	r11, 8(r29)
250*1fd5a2e1SPrashanth Swaminathan	/* Set up cr1 with bits 4-7 of the flags.  */
251*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x40, r31
252*1fd5a2e1SPrashanth Swaminathan	mtctr	r0
253*1fd5a2e1SPrashanth Swaminathan	/* Load all those argument registers.  */
254*1fd5a2e1SPrashanth Swaminathan	/* We have set up a nice stack frame, just load it into registers. */
255*1fd5a2e1SPrashanth Swaminathan	lwz	r3, 20+(1*4)(r1)
256*1fd5a2e1SPrashanth Swaminathan	lwz	r4, 20+(2*4)(r1)
257*1fd5a2e1SPrashanth Swaminathan	lwz	r5, 20+(3*4)(r1)
258*1fd5a2e1SPrashanth Swaminathan	lwz	r6, 20+(4*4)(r1)
259*1fd5a2e1SPrashanth Swaminathan	nop
260*1fd5a2e1SPrashanth Swaminathan	lwz	r7, 20+(5*4)(r1)
261*1fd5a2e1SPrashanth Swaminathan	lwz	r8, 20+(6*4)(r1)
262*1fd5a2e1SPrashanth Swaminathan	lwz	r9, 20+(7*4)(r1)
263*1fd5a2e1SPrashanth Swaminathan	lwz	r10,20+(8*4)(r1)
264*1fd5a2e1SPrashanth Swaminathan
265*1fd5a2e1SPrashanth SwaminathanL1:
266*1fd5a2e1SPrashanth Swaminathan	/* Load all the FP registers.  */
267*1fd5a2e1SPrashanth Swaminathan	bf	6,L2 /* 2f + 0x18 */
268*1fd5a2e1SPrashanth Swaminathan	lfd	f1,-16-(13*8)(r28)
269*1fd5a2e1SPrashanth Swaminathan	lfd	f2,-16-(12*8)(r28)
270*1fd5a2e1SPrashanth Swaminathan	lfd	f3,-16-(11*8)(r28)
271*1fd5a2e1SPrashanth Swaminathan	lfd	f4,-16-(10*8)(r28)
272*1fd5a2e1SPrashanth Swaminathan	nop
273*1fd5a2e1SPrashanth Swaminathan	lfd	f5,-16-(9*8)(r28)
274*1fd5a2e1SPrashanth Swaminathan	lfd	f6,-16-(8*8)(r28)
275*1fd5a2e1SPrashanth Swaminathan	lfd	f7,-16-(7*8)(r28)
276*1fd5a2e1SPrashanth Swaminathan	lfd	f8,-16-(6*8)(r28)
277*1fd5a2e1SPrashanth Swaminathan	nop
278*1fd5a2e1SPrashanth Swaminathan	lfd	f9,-16-(5*8)(r28)
279*1fd5a2e1SPrashanth Swaminathan	lfd	f10,-16-(4*8)(r28)
280*1fd5a2e1SPrashanth Swaminathan	lfd	f11,-16-(3*8)(r28)
281*1fd5a2e1SPrashanth Swaminathan	lfd	f12,-16-(2*8)(r28)
282*1fd5a2e1SPrashanth Swaminathan	nop
283*1fd5a2e1SPrashanth Swaminathan	lfd	f13,-16-(1*8)(r28)
284*1fd5a2e1SPrashanth Swaminathan
285*1fd5a2e1SPrashanth SwaminathanL2:
286*1fd5a2e1SPrashanth Swaminathan	/* Make the call.  */
287*1fd5a2e1SPrashanth Swaminathan	bctrl
288*1fd5a2e1SPrashanth Swaminathan	lwz	r2, 20(r1)
289*1fd5a2e1SPrashanth Swaminathan
290*1fd5a2e1SPrashanth Swaminathan	/* Now, deal with the return value.  */
291*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x01, r31
292*1fd5a2e1SPrashanth Swaminathan
293*1fd5a2e1SPrashanth Swaminathan	bt	30, L(done_return_value)
294*1fd5a2e1SPrashanth Swaminathan	bt	29, L(fp_return_value)
295*1fd5a2e1SPrashanth Swaminathan	stw	r3, 0(r30)
296*1fd5a2e1SPrashanth Swaminathan	bf	28, L(done_return_value)
297*1fd5a2e1SPrashanth Swaminathan	stw	r4, 4(r30)
298*1fd5a2e1SPrashanth Swaminathan
299*1fd5a2e1SPrashanth Swaminathan	/* Fall through...  */
300*1fd5a2e1SPrashanth Swaminathan
301*1fd5a2e1SPrashanth SwaminathanL(done_return_value):
302*1fd5a2e1SPrashanth Swaminathan	/* Restore the registers we used and return.  */
303*1fd5a2e1SPrashanth Swaminathan	mr	r1, r28
304*1fd5a2e1SPrashanth Swaminathan	lwz	r0, 8(r28)
305*1fd5a2e1SPrashanth Swaminathan	lwz	r28,-16(r1)
306*1fd5a2e1SPrashanth Swaminathan	mtlr	r0
307*1fd5a2e1SPrashanth Swaminathan	lwz	r29,-12(r1)
308*1fd5a2e1SPrashanth Swaminathan	lwz	r30, -8(r1)
309*1fd5a2e1SPrashanth Swaminathan	lwz	r31, -4(r1)
310*1fd5a2e1SPrashanth Swaminathan	blr
311*1fd5a2e1SPrashanth Swaminathan
312*1fd5a2e1SPrashanth SwaminathanL(fp_return_value):
313*1fd5a2e1SPrashanth Swaminathan	bf	28, L(float_return_value)
314*1fd5a2e1SPrashanth Swaminathan	stfd	f1, 0(r30)
315*1fd5a2e1SPrashanth Swaminathan	b	L(done_return_value)
316*1fd5a2e1SPrashanth SwaminathanL(float_return_value):
317*1fd5a2e1SPrashanth Swaminathan	stfs	f1, 0(r30)
318*1fd5a2e1SPrashanth Swaminathan	b	L(done_return_value)
319*1fd5a2e1SPrashanth SwaminathanLFE..0:
320*1fd5a2e1SPrashanth Swaminathan#endif
321*1fd5a2e1SPrashanth Swaminathan	.ef __LINE__
322*1fd5a2e1SPrashanth Swaminathan	.long 0
323*1fd5a2e1SPrashanth Swaminathan	.byte 0,0,0,1,128,4,0,0
324*1fd5a2e1SPrashanth Swaminathan/* END(ffi_call_AIX) */
325*1fd5a2e1SPrashanth Swaminathan
326*1fd5a2e1SPrashanth Swaminathan	/* void ffi_call_go_AIX(extended_cif *ecif, unsigned long bytes,
327*1fd5a2e1SPrashanth Swaminathan	 *		        unsigned int flags, unsigned int *rvalue,
328*1fd5a2e1SPrashanth Swaminathan	 *		        void (*fn)(),
329*1fd5a2e1SPrashanth Swaminathan	 *		        void (*prep_args)(extended_cif*, unsigned *const),
330*1fd5a2e1SPrashanth Swaminathan	 *                      void *closure);
331*1fd5a2e1SPrashanth Swaminathan	 * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args, r9=closure
332*1fd5a2e1SPrashanth Swaminathan	 */
333*1fd5a2e1SPrashanth Swaminathan
334*1fd5a2e1SPrashanth Swaminathan.csect .text[PR]
335*1fd5a2e1SPrashanth Swaminathan	.align 2
336*1fd5a2e1SPrashanth Swaminathan	.globl ffi_call_go_AIX
337*1fd5a2e1SPrashanth Swaminathan	.globl .ffi_call_go_AIX
338*1fd5a2e1SPrashanth Swaminathan.csect ffi_call_go_AIX[DS]
339*1fd5a2e1SPrashanth Swaminathanffi_call_go_AIX:
340*1fd5a2e1SPrashanth Swaminathan#ifdef __64BIT__
341*1fd5a2e1SPrashanth Swaminathan	.llong .ffi_call_go_AIX, TOC[tc0], 0
342*1fd5a2e1SPrashanth Swaminathan	.csect .text[PR]
343*1fd5a2e1SPrashanth Swaminathan.ffi_call_go_AIX:
344*1fd5a2e1SPrashanth Swaminathan	.function .ffi_call_go_AIX,.ffi_call_go_AIX,16,044,LFE..1-LFB..1
345*1fd5a2e1SPrashanth Swaminathan	.bf __LINE__
346*1fd5a2e1SPrashanth Swaminathan	.line 1
347*1fd5a2e1SPrashanth SwaminathanLFB..1:
348*1fd5a2e1SPrashanth Swaminathan	/* Save registers we use.  */
349*1fd5a2e1SPrashanth Swaminathan	mflr	r0
350*1fd5a2e1SPrashanth Swaminathan
351*1fd5a2e1SPrashanth Swaminathan	std	r28,-32(r1)
352*1fd5a2e1SPrashanth Swaminathan	std	r29,-24(r1)
353*1fd5a2e1SPrashanth Swaminathan	std	r30,-16(r1)
354*1fd5a2e1SPrashanth Swaminathan	std	r31, -8(r1)
355*1fd5a2e1SPrashanth Swaminathan
356*1fd5a2e1SPrashanth Swaminathan	std	r9, 8(r1)	/* closure, saved in cr field. */
357*1fd5a2e1SPrashanth Swaminathan	std	r0, 16(r1)
358*1fd5a2e1SPrashanth SwaminathanLCFI..2:
359*1fd5a2e1SPrashanth Swaminathan	mr	r28, r1		/* our AP.  */
360*1fd5a2e1SPrashanth Swaminathan	stdux	r1, r1, r4
361*1fd5a2e1SPrashanth SwaminathanLCFI..3:
362*1fd5a2e1SPrashanth Swaminathan
363*1fd5a2e1SPrashanth Swaminathan	/* Save arguments over call...  */
364*1fd5a2e1SPrashanth Swaminathan	mr	r31, r5	/* flags, */
365*1fd5a2e1SPrashanth Swaminathan	mr	r30, r6	/* rvalue, */
366*1fd5a2e1SPrashanth Swaminathan	mr	r29, r7	/* function address,  */
367*1fd5a2e1SPrashanth Swaminathan	std	r2, 40(r1)
368*1fd5a2e1SPrashanth Swaminathan
369*1fd5a2e1SPrashanth Swaminathan	/* Call ffi_prep_args.  */
370*1fd5a2e1SPrashanth Swaminathan	mr	r4, r1
371*1fd5a2e1SPrashanth Swaminathan	bl	.ffi_prep_args
372*1fd5a2e1SPrashanth Swaminathan	nop
373*1fd5a2e1SPrashanth Swaminathan
374*1fd5a2e1SPrashanth Swaminathan	/* Now do the call.  */
375*1fd5a2e1SPrashanth Swaminathan	ld	r0, 0(r29)
376*1fd5a2e1SPrashanth Swaminathan	ld	r2, 8(r29)
377*1fd5a2e1SPrashanth Swaminathan	ld      r11, 8(r28)	/* closure */
378*1fd5a2e1SPrashanth Swaminathan	/* Set up cr1 with bits 4-7 of the flags.  */
379*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x40, r31
380*1fd5a2e1SPrashanth Swaminathan	mtctr	r0
381*1fd5a2e1SPrashanth Swaminathan	/* Load all those argument registers.  */
382*1fd5a2e1SPrashanth Swaminathan	/* We have set up a nice stack frame, just load it into registers. */
383*1fd5a2e1SPrashanth Swaminathan	ld	r3, 40+(1*8)(r1)
384*1fd5a2e1SPrashanth Swaminathan	ld	r4, 40+(2*8)(r1)
385*1fd5a2e1SPrashanth Swaminathan	ld	r5, 40+(3*8)(r1)
386*1fd5a2e1SPrashanth Swaminathan	ld	r6, 40+(4*8)(r1)
387*1fd5a2e1SPrashanth Swaminathan	nop
388*1fd5a2e1SPrashanth Swaminathan	ld	r7, 40+(5*8)(r1)
389*1fd5a2e1SPrashanth Swaminathan	ld	r8, 40+(6*8)(r1)
390*1fd5a2e1SPrashanth Swaminathan	ld	r9, 40+(7*8)(r1)
391*1fd5a2e1SPrashanth Swaminathan	ld	r10,40+(8*8)(r1)
392*1fd5a2e1SPrashanth Swaminathan
393*1fd5a2e1SPrashanth Swaminathan	b	L1
394*1fd5a2e1SPrashanth SwaminathanLFE..1:
395*1fd5a2e1SPrashanth Swaminathan#else /* ! __64BIT__ */
396*1fd5a2e1SPrashanth Swaminathan
397*1fd5a2e1SPrashanth Swaminathan	.long .ffi_call_go_AIX, TOC[tc0], 0
398*1fd5a2e1SPrashanth Swaminathan	.csect .text[PR]
399*1fd5a2e1SPrashanth Swaminathan.ffi_call_go_AIX:
400*1fd5a2e1SPrashanth Swaminathan	.function .ffi_call_go_AIX,.ffi_call_go_AIX,16,044,LFE..1-LFB..1
401*1fd5a2e1SPrashanth Swaminathan	.bf __LINE__
402*1fd5a2e1SPrashanth Swaminathan	.line 1
403*1fd5a2e1SPrashanth Swaminathan	/* Save registers we use.  */
404*1fd5a2e1SPrashanth SwaminathanLFB..1:
405*1fd5a2e1SPrashanth Swaminathan	mflr	r0
406*1fd5a2e1SPrashanth Swaminathan
407*1fd5a2e1SPrashanth Swaminathan	stw	r28,-16(r1)
408*1fd5a2e1SPrashanth Swaminathan	stw	r29,-12(r1)
409*1fd5a2e1SPrashanth Swaminathan	stw	r30, -8(r1)
410*1fd5a2e1SPrashanth Swaminathan	stw	r31, -4(r1)
411*1fd5a2e1SPrashanth Swaminathan
412*1fd5a2e1SPrashanth Swaminathan	stw	r9, 4(r1)	/* closure, saved in cr field.  */
413*1fd5a2e1SPrashanth Swaminathan	stw	r0, 8(r1)
414*1fd5a2e1SPrashanth SwaminathanLCFI..2:
415*1fd5a2e1SPrashanth Swaminathan	mr	r28, r1		/* out AP.  */
416*1fd5a2e1SPrashanth Swaminathan	stwux	r1, r1, r4
417*1fd5a2e1SPrashanth SwaminathanLCFI..3:
418*1fd5a2e1SPrashanth Swaminathan
419*1fd5a2e1SPrashanth Swaminathan	/* Save arguments over call...  */
420*1fd5a2e1SPrashanth Swaminathan	mr	r31, r5	/* flags, */
421*1fd5a2e1SPrashanth Swaminathan	mr	r30, r6	/* rvalue, */
422*1fd5a2e1SPrashanth Swaminathan	mr	r29, r7	/* function address, */
423*1fd5a2e1SPrashanth Swaminathan	stw	r2, 20(r1)
424*1fd5a2e1SPrashanth Swaminathan
425*1fd5a2e1SPrashanth Swaminathan	/* Call ffi_prep_args.  */
426*1fd5a2e1SPrashanth Swaminathan	mr	r4, r1
427*1fd5a2e1SPrashanth Swaminathan	bl	.ffi_prep_args
428*1fd5a2e1SPrashanth Swaminathan	nop
429*1fd5a2e1SPrashanth Swaminathan
430*1fd5a2e1SPrashanth Swaminathan	/* Now do the call.  */
431*1fd5a2e1SPrashanth Swaminathan	lwz	r0, 0(r29)
432*1fd5a2e1SPrashanth Swaminathan	lwz	r2, 4(r29)
433*1fd5a2e1SPrashanth Swaminathan	lwz	r11, 4(r28)	/* closure */
434*1fd5a2e1SPrashanth Swaminathan	/* Set up cr1 with bits 4-7 of the flags.  */
435*1fd5a2e1SPrashanth Swaminathan	mtcrf	0x40, r31
436*1fd5a2e1SPrashanth Swaminathan	mtctr	r0
437*1fd5a2e1SPrashanth Swaminathan	/* Load all those argument registers.  */
438*1fd5a2e1SPrashanth Swaminathan	/* We have set up a nice stack frame, just load it into registers. */
439*1fd5a2e1SPrashanth Swaminathan	lwz	r3, 20+(1*4)(r1)
440*1fd5a2e1SPrashanth Swaminathan	lwz	r4, 20+(2*4)(r1)
441*1fd5a2e1SPrashanth Swaminathan	lwz	r5, 20+(3*4)(r1)
442*1fd5a2e1SPrashanth Swaminathan	lwz	r6, 20+(4*4)(r1)
443*1fd5a2e1SPrashanth Swaminathan	nop
444*1fd5a2e1SPrashanth Swaminathan	lwz	r7, 20+(5*4)(r1)
445*1fd5a2e1SPrashanth Swaminathan	lwz	r8, 20+(6*4)(r1)
446*1fd5a2e1SPrashanth Swaminathan	lwz	r9, 20+(7*4)(r1)
447*1fd5a2e1SPrashanth Swaminathan	lwz	r10,20+(8*4)(r1)
448*1fd5a2e1SPrashanth Swaminathan
449*1fd5a2e1SPrashanth Swaminathan	b	L1
450*1fd5a2e1SPrashanth SwaminathanLFE..1:
451*1fd5a2e1SPrashanth Swaminathan#endif
452*1fd5a2e1SPrashanth Swaminathan	.ef __LINE__
453*1fd5a2e1SPrashanth Swaminathan	.long 0
454*1fd5a2e1SPrashanth Swaminathan	.byte 0,0,0,1,128,4,0,0
455*1fd5a2e1SPrashanth Swaminathan/* END(ffi_call_go_AIX) */
456*1fd5a2e1SPrashanth Swaminathan
457*1fd5a2e1SPrashanth Swaminathan.csect .text[PR]
458*1fd5a2e1SPrashanth Swaminathan	.align 2
459*1fd5a2e1SPrashanth Swaminathan	.globl ffi_call_DARWIN
460*1fd5a2e1SPrashanth Swaminathan	.globl .ffi_call_DARWIN
461*1fd5a2e1SPrashanth Swaminathan.csect ffi_call_DARWIN[DS]
462*1fd5a2e1SPrashanth Swaminathanffi_call_DARWIN:
463*1fd5a2e1SPrashanth Swaminathan#ifdef __64BIT__
464*1fd5a2e1SPrashanth Swaminathan	.llong .ffi_call_DARWIN, TOC[tc0], 0
465*1fd5a2e1SPrashanth Swaminathan#else
466*1fd5a2e1SPrashanth Swaminathan	.long .ffi_call_DARWIN, TOC[tc0], 0
467*1fd5a2e1SPrashanth Swaminathan#endif
468*1fd5a2e1SPrashanth Swaminathan	.csect .text[PR]
469*1fd5a2e1SPrashanth Swaminathan.ffi_call_DARWIN:
470*1fd5a2e1SPrashanth Swaminathan	blr
471*1fd5a2e1SPrashanth Swaminathan	.long 0
472*1fd5a2e1SPrashanth Swaminathan	.byte 0,0,0,0,0,0,0,0
473*1fd5a2e1SPrashanth Swaminathan/* END(ffi_call_DARWIN) */
474*1fd5a2e1SPrashanth Swaminathan
475*1fd5a2e1SPrashanth Swaminathan/* EH frame stuff.  */
476*1fd5a2e1SPrashanth Swaminathan
477*1fd5a2e1SPrashanth Swaminathan#define LR_REGNO		0x41		/* Link Register (65), see rs6000.md */
478*1fd5a2e1SPrashanth Swaminathan#ifdef __64BIT__
479*1fd5a2e1SPrashanth Swaminathan#define PTRSIZE			8
480*1fd5a2e1SPrashanth Swaminathan#define LOG2_PTRSIZE		3
481*1fd5a2e1SPrashanth Swaminathan#define FDE_ENCODING		0x1c		/* DW_EH_PE_pcrel|DW_EH_PE_sdata8 */
482*1fd5a2e1SPrashanth Swaminathan#define EH_DATA_ALIGN_FACT	0x78		/* LEB128 -8 */
483*1fd5a2e1SPrashanth Swaminathan#else
484*1fd5a2e1SPrashanth Swaminathan#define PTRSIZE			4
485*1fd5a2e1SPrashanth Swaminathan#define LOG2_PTRSIZE		2
486*1fd5a2e1SPrashanth Swaminathan#define FDE_ENCODING		0x1b		/* DW_EH_PE_pcrel|DW_EH_PE_sdata4 */
487*1fd5a2e1SPrashanth Swaminathan#define EH_DATA_ALIGN_FACT	0x7c		/* LEB128 -4 */
488*1fd5a2e1SPrashanth Swaminathan#endif
489*1fd5a2e1SPrashanth Swaminathan	.csect	_unwind.ro_[RO],4
490*1fd5a2e1SPrashanth Swaminathan	.align	LOG2_PTRSIZE
491*1fd5a2e1SPrashanth Swaminathan	.globl	_GLOBAL__F_libffi_src_powerpc_aix
492*1fd5a2e1SPrashanth Swaminathan_GLOBAL__F_libffi_src_powerpc_aix:
493*1fd5a2e1SPrashanth SwaminathanLframe..1:
494*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LECIE..1-LSCIE..1	/* CIE Length */
495*1fd5a2e1SPrashanth SwaminathanLSCIE..1:
496*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,0			/* CIE Identifier Tag */
497*1fd5a2e1SPrashanth Swaminathan	.byte	0x3			/* CIE Version */
498*1fd5a2e1SPrashanth Swaminathan	.byte	"zR"			/* CIE Augmentation */
499*1fd5a2e1SPrashanth Swaminathan	.byte	0
500*1fd5a2e1SPrashanth Swaminathan	.byte	0x1			/* uleb128 0x1; CIE Code Alignment Factor */
501*1fd5a2e1SPrashanth Swaminathan	.byte	EH_DATA_ALIGN_FACT	/* leb128 -4/-8; CIE Data Alignment Factor */
502*1fd5a2e1SPrashanth Swaminathan	.byte	0x41			/* CIE RA Column */
503*1fd5a2e1SPrashanth Swaminathan	.byte	0x1			/* uleb128 0x1; Augmentation size */
504*1fd5a2e1SPrashanth Swaminathan	.byte	FDE_ENCODING		/* FDE Encoding (pcrel|sdata4/8) */
505*1fd5a2e1SPrashanth Swaminathan	.byte	0xc			/* DW_CFA_def_cfa */
506*1fd5a2e1SPrashanth Swaminathan	.byte	0x1			/*     uleb128 0x1; Register r1 */
507*1fd5a2e1SPrashanth Swaminathan	.byte	0			/*     uleb128 0x0; Offset 0 */
508*1fd5a2e1SPrashanth Swaminathan	.align	LOG2_PTRSIZE
509*1fd5a2e1SPrashanth SwaminathanLECIE..1:
510*1fd5a2e1SPrashanth SwaminathanLSFDE..1:
511*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LEFDE..1-LASFDE..1	/* FDE Length */
512*1fd5a2e1SPrashanth SwaminathanLASFDE..1:
513*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LASFDE..1-Lframe..1	/* FDE CIE offset */
514*1fd5a2e1SPrashanth Swaminathan	.vbyte	PTRSIZE,LFB..0-$	/* FDE initial location */
515*1fd5a2e1SPrashanth Swaminathan	.vbyte	PTRSIZE,LFE..0-LFB..0	/* FDE address range */
516*1fd5a2e1SPrashanth Swaminathan	.byte   0			/* uleb128 0x0; Augmentation size */
517*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/* DW_CFA_advance_loc4 */
518*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LCFI..0-LFB..0
519*1fd5a2e1SPrashanth Swaminathan	.byte	0x11			/* DW_CFA_def_offset_extended_sf */
520*1fd5a2e1SPrashanth Swaminathan	.byte	LR_REGNO		/*     uleb128 LR_REGNO; Register LR */
521*1fd5a2e1SPrashanth Swaminathan	.byte	0x7e			/*     leb128 -2; Offset -2 (8/16) */
522*1fd5a2e1SPrashanth Swaminathan	.byte	0x9f			/* DW_CFA_offset Register r31 */
523*1fd5a2e1SPrashanth Swaminathan	.byte	0x1			/*     uleb128 0x1; Offset 1 (-4/-8) */
524*1fd5a2e1SPrashanth Swaminathan	.byte	0x9e			/* DW_CFA_offset Register r30 */
525*1fd5a2e1SPrashanth Swaminathan	.byte	0x2			/*     uleb128 0x2; Offset 2 (-8/-16) */
526*1fd5a2e1SPrashanth Swaminathan	.byte	0x9d			/* DW_CFA_offset Register r29 */
527*1fd5a2e1SPrashanth Swaminathan	.byte	0x3			/*     uleb128 0x3; Offset 3 (-12/-24) */
528*1fd5a2e1SPrashanth Swaminathan	.byte	0x9c			/* DW_CFA_offset Register r28 */
529*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/*     uleb128 0x4; Offset 4 (-16/-32) */
530*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/* DW_CFA_advance_loc4 */
531*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LCFI..1-LCFI..0
532*1fd5a2e1SPrashanth Swaminathan	.byte	0xd			/* DW_CFA_def_cfa_register */
533*1fd5a2e1SPrashanth Swaminathan	.byte	0x1c			/*     uleb128 28; Register r28 */
534*1fd5a2e1SPrashanth Swaminathan	.align	LOG2_PTRSIZE
535*1fd5a2e1SPrashanth SwaminathanLEFDE..1:
536*1fd5a2e1SPrashanth SwaminathanLSFDE..2:
537*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LEFDE..2-LASFDE..2	/* FDE Length */
538*1fd5a2e1SPrashanth SwaminathanLASFDE..2:
539*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LASFDE..2-Lframe..1	/* FDE CIE offset */
540*1fd5a2e1SPrashanth Swaminathan	.vbyte	PTRSIZE,LFB..1-$	/* FDE initial location */
541*1fd5a2e1SPrashanth Swaminathan	.vbyte	PTRSIZE,LFE..1-LFB..1	/* FDE address range */
542*1fd5a2e1SPrashanth Swaminathan	.byte   0			/* uleb128 0x0; Augmentation size */
543*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/* DW_CFA_advance_loc4 */
544*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LCFI..2-LFB..1
545*1fd5a2e1SPrashanth Swaminathan	.byte	0x11			/* DW_CFA_def_offset_extended_sf */
546*1fd5a2e1SPrashanth Swaminathan	.byte	LR_REGNO		/*     uleb128 LR_REGNO; Register LR */
547*1fd5a2e1SPrashanth Swaminathan	.byte	0x7e			/*     leb128 -2; Offset -2 (8/16) */
548*1fd5a2e1SPrashanth Swaminathan	.byte	0x9f			/* DW_CFA_offset Register r31 */
549*1fd5a2e1SPrashanth Swaminathan	.byte	0x1			/*     uleb128 0x1; Offset 1 (-4/-8) */
550*1fd5a2e1SPrashanth Swaminathan	.byte	0x9e			/* DW_CFA_offset Register r30 */
551*1fd5a2e1SPrashanth Swaminathan	.byte	0x2			/*     uleb128 0x2; Offset 2 (-8/-16) */
552*1fd5a2e1SPrashanth Swaminathan	.byte	0x9d			/* DW_CFA_offset Register r29 */
553*1fd5a2e1SPrashanth Swaminathan	.byte	0x3			/*     uleb128 0x3; Offset 3 (-12/-24) */
554*1fd5a2e1SPrashanth Swaminathan	.byte	0x9c			/* DW_CFA_offset Register r28 */
555*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/*     uleb128 0x4; Offset 4 (-16/-32) */
556*1fd5a2e1SPrashanth Swaminathan	.byte	0x4			/* DW_CFA_advance_loc4 */
557*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,LCFI..3-LCFI..2
558*1fd5a2e1SPrashanth Swaminathan	.byte	0xd			/* DW_CFA_def_cfa_register */
559*1fd5a2e1SPrashanth Swaminathan	.byte	0x1c			/*     uleb128 28; Register r28 */
560*1fd5a2e1SPrashanth Swaminathan	.align	LOG2_PTRSIZE
561*1fd5a2e1SPrashanth SwaminathanLEFDE..2:
562*1fd5a2e1SPrashanth Swaminathan	.vbyte	4,0			/* End of FDEs */
563*1fd5a2e1SPrashanth Swaminathan
564*1fd5a2e1SPrashanth Swaminathan	.csect	.text[PR]
565*1fd5a2e1SPrashanth Swaminathan	.ref	_GLOBAL__F_libffi_src_powerpc_aix	/* Prevents garbage collection by AIX linker */
566*1fd5a2e1SPrashanth Swaminathan
567