xref: /aosp_15_r20/external/libffi/src/ia64/unix.S (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan/* -----------------------------------------------------------------------
2*1fd5a2e1SPrashanth Swaminathan   unix.S - Copyright (c) 1998, 2008 Red Hat, Inc.
3*1fd5a2e1SPrashanth Swaminathan            Copyright (c) 2000 Hewlett Packard Company
4*1fd5a2e1SPrashanth Swaminathan
5*1fd5a2e1SPrashanth Swaminathan   IA64/unix Foreign Function Interface
6*1fd5a2e1SPrashanth Swaminathan
7*1fd5a2e1SPrashanth Swaminathan   Primary author: Hans Boehm, HP Labs
8*1fd5a2e1SPrashanth Swaminathan
9*1fd5a2e1SPrashanth Swaminathan   Loosely modeled on Cygnus code for other platforms.
10*1fd5a2e1SPrashanth Swaminathan
11*1fd5a2e1SPrashanth Swaminathan   Permission is hereby granted, free of charge, to any person obtaining
12*1fd5a2e1SPrashanth Swaminathan   a copy of this software and associated documentation files (the
13*1fd5a2e1SPrashanth Swaminathan   ``Software''), to deal in the Software without restriction, including
14*1fd5a2e1SPrashanth Swaminathan   without limitation the rights to use, copy, modify, merge, publish,
15*1fd5a2e1SPrashanth Swaminathan   distribute, sublicense, and/or sell copies of the Software, and to
16*1fd5a2e1SPrashanth Swaminathan   permit persons to whom the Software is furnished to do so, subject to
17*1fd5a2e1SPrashanth Swaminathan   the following conditions:
18*1fd5a2e1SPrashanth Swaminathan
19*1fd5a2e1SPrashanth Swaminathan   The above copyright notice and this permission notice shall be included
20*1fd5a2e1SPrashanth Swaminathan   in all copies or substantial portions of the Software.
21*1fd5a2e1SPrashanth Swaminathan
22*1fd5a2e1SPrashanth Swaminathan   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
23*1fd5a2e1SPrashanth Swaminathan   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24*1fd5a2e1SPrashanth Swaminathan   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25*1fd5a2e1SPrashanth Swaminathan   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26*1fd5a2e1SPrashanth Swaminathan   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
27*1fd5a2e1SPrashanth Swaminathan   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28*1fd5a2e1SPrashanth Swaminathan   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29*1fd5a2e1SPrashanth Swaminathan   DEALINGS IN THE SOFTWARE.
30*1fd5a2e1SPrashanth Swaminathan   ----------------------------------------------------------------------- */
31*1fd5a2e1SPrashanth Swaminathan
32*1fd5a2e1SPrashanth Swaminathan#define LIBFFI_ASM
33*1fd5a2e1SPrashanth Swaminathan#include <fficonfig.h>
34*1fd5a2e1SPrashanth Swaminathan#include <ffi.h>
35*1fd5a2e1SPrashanth Swaminathan#include "ia64_flags.h"
36*1fd5a2e1SPrashanth Swaminathan
37*1fd5a2e1SPrashanth Swaminathan	.pred.safe_across_calls p1-p5,p16-p63
38*1fd5a2e1SPrashanth Swaminathan.text
39*1fd5a2e1SPrashanth Swaminathan
40*1fd5a2e1SPrashanth Swaminathan/* int ffi_call_unix (struct ia64_args *stack, PTR64 rvalue,
41*1fd5a2e1SPrashanth Swaminathan		      void (*fn)(void), int flags);
42*1fd5a2e1SPrashanth Swaminathan */
43*1fd5a2e1SPrashanth Swaminathan
44*1fd5a2e1SPrashanth Swaminathan        .align 16
45*1fd5a2e1SPrashanth Swaminathan        .global	ffi_call_unix
46*1fd5a2e1SPrashanth Swaminathan        .proc	ffi_call_unix
47*1fd5a2e1SPrashanth Swaminathanffi_call_unix:
48*1fd5a2e1SPrashanth Swaminathan	.prologue
49*1fd5a2e1SPrashanth Swaminathan	/* Bit o trickiness.  We actually share a stack frame with ffi_call.
50*1fd5a2e1SPrashanth Swaminathan	   Rely on the fact that ffi_call uses a vframe and don't bother
51*1fd5a2e1SPrashanth Swaminathan	   tracking one here at all.  */
52*1fd5a2e1SPrashanth Swaminathan	.fframe	0
53*1fd5a2e1SPrashanth Swaminathan	.save	ar.pfs, r36 // loc0
54*1fd5a2e1SPrashanth Swaminathan	alloc   loc0 = ar.pfs, 4, 3, 8, 0
55*1fd5a2e1SPrashanth Swaminathan	.save	rp, loc1
56*1fd5a2e1SPrashanth Swaminathan	mov 	loc1 = b0
57*1fd5a2e1SPrashanth Swaminathan	.body
58*1fd5a2e1SPrashanth Swaminathan	add	r16 = 16, in0
59*1fd5a2e1SPrashanth Swaminathan	mov	loc2 = gp
60*1fd5a2e1SPrashanth Swaminathan	mov	r8 = in1
61*1fd5a2e1SPrashanth Swaminathan	;;
62*1fd5a2e1SPrashanth Swaminathan
63*1fd5a2e1SPrashanth Swaminathan	/* Load up all of the argument registers.  */
64*1fd5a2e1SPrashanth Swaminathan	ldf.fill f8 = [in0], 32
65*1fd5a2e1SPrashanth Swaminathan	ldf.fill f9 = [r16], 32
66*1fd5a2e1SPrashanth Swaminathan	;;
67*1fd5a2e1SPrashanth Swaminathan	ldf.fill f10 = [in0], 32
68*1fd5a2e1SPrashanth Swaminathan	ldf.fill f11 = [r16], 32
69*1fd5a2e1SPrashanth Swaminathan	;;
70*1fd5a2e1SPrashanth Swaminathan	ldf.fill f12 = [in0], 32
71*1fd5a2e1SPrashanth Swaminathan	ldf.fill f13 = [r16], 32
72*1fd5a2e1SPrashanth Swaminathan	;;
73*1fd5a2e1SPrashanth Swaminathan	ldf.fill f14 = [in0], 32
74*1fd5a2e1SPrashanth Swaminathan	ldf.fill f15 = [r16], 24
75*1fd5a2e1SPrashanth Swaminathan	;;
76*1fd5a2e1SPrashanth Swaminathan	ld8	out0 = [in0], 16
77*1fd5a2e1SPrashanth Swaminathan	ld8	out1 = [r16], 16
78*1fd5a2e1SPrashanth Swaminathan	;;
79*1fd5a2e1SPrashanth Swaminathan	ld8	out2 = [in0], 16
80*1fd5a2e1SPrashanth Swaminathan	ld8	out3 = [r16], 16
81*1fd5a2e1SPrashanth Swaminathan	;;
82*1fd5a2e1SPrashanth Swaminathan	ld8	out4 = [in0], 16
83*1fd5a2e1SPrashanth Swaminathan	ld8	out5 = [r16], 16
84*1fd5a2e1SPrashanth Swaminathan	;;
85*1fd5a2e1SPrashanth Swaminathan	ld8	out6 = [in0]
86*1fd5a2e1SPrashanth Swaminathan	ld8	out7 = [r16]
87*1fd5a2e1SPrashanth Swaminathan	;;
88*1fd5a2e1SPrashanth Swaminathan
89*1fd5a2e1SPrashanth Swaminathan	/* Deallocate the register save area from the stack frame.  */
90*1fd5a2e1SPrashanth Swaminathan	mov	sp = in0
91*1fd5a2e1SPrashanth Swaminathan
92*1fd5a2e1SPrashanth Swaminathan	/* Call the target function.  */
93*1fd5a2e1SPrashanth Swaminathan	ld8	r16 = [in2], 8
94*1fd5a2e1SPrashanth Swaminathan	;;
95*1fd5a2e1SPrashanth Swaminathan	ld8	gp = [in2]
96*1fd5a2e1SPrashanth Swaminathan	mov	b6 = r16
97*1fd5a2e1SPrashanth Swaminathan	br.call.sptk.many b0 = b6
98*1fd5a2e1SPrashanth Swaminathan	;;
99*1fd5a2e1SPrashanth Swaminathan
100*1fd5a2e1SPrashanth Swaminathan	/* Dispatch to handle return value.  */
101*1fd5a2e1SPrashanth Swaminathan	mov	gp = loc2
102*1fd5a2e1SPrashanth Swaminathan	zxt1	r16 = in3
103*1fd5a2e1SPrashanth Swaminathan	;;
104*1fd5a2e1SPrashanth Swaminathan	mov	ar.pfs = loc0
105*1fd5a2e1SPrashanth Swaminathan	addl	r18 = @ltoffx(.Lst_table), gp
106*1fd5a2e1SPrashanth Swaminathan	;;
107*1fd5a2e1SPrashanth Swaminathan	ld8.mov	r18 = [r18], .Lst_table
108*1fd5a2e1SPrashanth Swaminathan	mov	b0 = loc1
109*1fd5a2e1SPrashanth Swaminathan	;;
110*1fd5a2e1SPrashanth Swaminathan	shladd	r18 = r16, 3, r18
111*1fd5a2e1SPrashanth Swaminathan	;;
112*1fd5a2e1SPrashanth Swaminathan	ld8	r17 = [r18]
113*1fd5a2e1SPrashanth Swaminathan	shr	in3 = in3, 8
114*1fd5a2e1SPrashanth Swaminathan	;;
115*1fd5a2e1SPrashanth Swaminathan	add	r17 = r17, r18
116*1fd5a2e1SPrashanth Swaminathan	;;
117*1fd5a2e1SPrashanth Swaminathan	mov	b6 = r17
118*1fd5a2e1SPrashanth Swaminathan	br	b6
119*1fd5a2e1SPrashanth Swaminathan	;;
120*1fd5a2e1SPrashanth Swaminathan
121*1fd5a2e1SPrashanth Swaminathan.Lst_void:
122*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
123*1fd5a2e1SPrashanth Swaminathan	;;
124*1fd5a2e1SPrashanth Swaminathan.Lst_uint8:
125*1fd5a2e1SPrashanth Swaminathan	zxt1	r8 = r8
126*1fd5a2e1SPrashanth Swaminathan	;;
127*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
128*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
129*1fd5a2e1SPrashanth Swaminathan	;;
130*1fd5a2e1SPrashanth Swaminathan.Lst_sint8:
131*1fd5a2e1SPrashanth Swaminathan	sxt1	r8 = r8
132*1fd5a2e1SPrashanth Swaminathan	;;
133*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
134*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
135*1fd5a2e1SPrashanth Swaminathan	;;
136*1fd5a2e1SPrashanth Swaminathan.Lst_uint16:
137*1fd5a2e1SPrashanth Swaminathan	zxt2	r8 = r8
138*1fd5a2e1SPrashanth Swaminathan	;;
139*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
140*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
141*1fd5a2e1SPrashanth Swaminathan	;;
142*1fd5a2e1SPrashanth Swaminathan.Lst_sint16:
143*1fd5a2e1SPrashanth Swaminathan	sxt2	r8 = r8
144*1fd5a2e1SPrashanth Swaminathan	;;
145*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
146*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
147*1fd5a2e1SPrashanth Swaminathan	;;
148*1fd5a2e1SPrashanth Swaminathan.Lst_uint32:
149*1fd5a2e1SPrashanth Swaminathan	zxt4	r8 = r8
150*1fd5a2e1SPrashanth Swaminathan	;;
151*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
152*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
153*1fd5a2e1SPrashanth Swaminathan	;;
154*1fd5a2e1SPrashanth Swaminathan.Lst_sint32:
155*1fd5a2e1SPrashanth Swaminathan	sxt4	r8 = r8
156*1fd5a2e1SPrashanth Swaminathan	;;
157*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
158*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
159*1fd5a2e1SPrashanth Swaminathan	;;
160*1fd5a2e1SPrashanth Swaminathan.Lst_int64:
161*1fd5a2e1SPrashanth Swaminathan	st8	[in1] = r8
162*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
163*1fd5a2e1SPrashanth Swaminathan	;;
164*1fd5a2e1SPrashanth Swaminathan.Lst_float:
165*1fd5a2e1SPrashanth Swaminathan	stfs	[in1] = f8
166*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
167*1fd5a2e1SPrashanth Swaminathan	;;
168*1fd5a2e1SPrashanth Swaminathan.Lst_double:
169*1fd5a2e1SPrashanth Swaminathan	stfd	[in1] = f8
170*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
171*1fd5a2e1SPrashanth Swaminathan	;;
172*1fd5a2e1SPrashanth Swaminathan.Lst_ldouble:
173*1fd5a2e1SPrashanth Swaminathan	stfe	[in1] = f8
174*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
175*1fd5a2e1SPrashanth Swaminathan	;;
176*1fd5a2e1SPrashanth Swaminathan
177*1fd5a2e1SPrashanth Swaminathan.Lst_small_struct:
178*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 8, in3
179*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 16, in3
180*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 24, in3
181*1fd5a2e1SPrashanth Swaminathan	;;
182*1fd5a2e1SPrashanth Swaminathan	add	r16 = 8, sp
183*1fd5a2e1SPrashanth Swaminathan	add	r17 = 16, sp
184*1fd5a2e1SPrashanth Swaminathan	add	r18 = 24, sp
185*1fd5a2e1SPrashanth Swaminathan	;;
186*1fd5a2e1SPrashanth Swaminathan	st8	[sp] = r8
187*1fd5a2e1SPrashanth Swaminathan(p6)	st8	[r16] = r9
188*1fd5a2e1SPrashanth Swaminathan	mov	out0 = in1
189*1fd5a2e1SPrashanth Swaminathan(p7)	st8	[r17] = r10
190*1fd5a2e1SPrashanth Swaminathan(p8)	st8	[r18] = r11
191*1fd5a2e1SPrashanth Swaminathan	mov	out1 = sp
192*1fd5a2e1SPrashanth Swaminathan	mov	out2 = in3
193*1fd5a2e1SPrashanth Swaminathan	;;
194*1fd5a2e1SPrashanth Swaminathan	// ia64 software calling convention requires
195*1fd5a2e1SPrashanth Swaminathan	// top 16 bytes of stack to be scratch space
196*1fd5a2e1SPrashanth Swaminathan	// PLT resolver uses that scratch space at
197*1fd5a2e1SPrashanth Swaminathan	// 'memcpy' symbol reolution time
198*1fd5a2e1SPrashanth Swaminathan	add	sp = -16, sp
199*1fd5a2e1SPrashanth Swaminathan	br.call.sptk.many b0 = memcpy#
200*1fd5a2e1SPrashanth Swaminathan	;;
201*1fd5a2e1SPrashanth Swaminathan	mov	ar.pfs = loc0
202*1fd5a2e1SPrashanth Swaminathan	mov	b0 = loc1
203*1fd5a2e1SPrashanth Swaminathan	mov	gp = loc2
204*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
205*1fd5a2e1SPrashanth Swaminathan
206*1fd5a2e1SPrashanth Swaminathan.Lst_hfa_float:
207*1fd5a2e1SPrashanth Swaminathan	add	r16 = 4, in1
208*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 4, in3
209*1fd5a2e1SPrashanth Swaminathan	;;
210*1fd5a2e1SPrashanth Swaminathan	stfs	[in1] = f8, 8
211*1fd5a2e1SPrashanth Swaminathan(p6)	stfs	[r16] = f9, 8
212*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 8, in3
213*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 12, in3
214*1fd5a2e1SPrashanth Swaminathan	;;
215*1fd5a2e1SPrashanth Swaminathan(p7)	stfs	[in1] = f10, 8
216*1fd5a2e1SPrashanth Swaminathan(p8)	stfs	[r16] = f11, 8
217*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 16, in3
218*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 20, in3
219*1fd5a2e1SPrashanth Swaminathan	;;
220*1fd5a2e1SPrashanth Swaminathan(p9)	stfs	[in1] = f12, 8
221*1fd5a2e1SPrashanth Swaminathan(p10)	stfs	[r16] = f13, 8
222*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 24, in3
223*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 28, in3
224*1fd5a2e1SPrashanth Swaminathan	;;
225*1fd5a2e1SPrashanth Swaminathan(p6)	stfs	[in1] = f14
226*1fd5a2e1SPrashanth Swaminathan(p7)	stfs	[r16] = f15
227*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
228*1fd5a2e1SPrashanth Swaminathan	;;
229*1fd5a2e1SPrashanth Swaminathan
230*1fd5a2e1SPrashanth Swaminathan.Lst_hfa_double:
231*1fd5a2e1SPrashanth Swaminathan	add	r16 = 8, in1
232*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 8, in3
233*1fd5a2e1SPrashanth Swaminathan	;;
234*1fd5a2e1SPrashanth Swaminathan	stfd	[in1] = f8, 16
235*1fd5a2e1SPrashanth Swaminathan(p6)	stfd	[r16] = f9, 16
236*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 16, in3
237*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 24, in3
238*1fd5a2e1SPrashanth Swaminathan	;;
239*1fd5a2e1SPrashanth Swaminathan(p7)	stfd	[in1] = f10, 16
240*1fd5a2e1SPrashanth Swaminathan(p8)	stfd	[r16] = f11, 16
241*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 32, in3
242*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 40, in3
243*1fd5a2e1SPrashanth Swaminathan	;;
244*1fd5a2e1SPrashanth Swaminathan(p9)	stfd	[in1] = f12, 16
245*1fd5a2e1SPrashanth Swaminathan(p10)	stfd	[r16] = f13, 16
246*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 48, in3
247*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 56, in3
248*1fd5a2e1SPrashanth Swaminathan	;;
249*1fd5a2e1SPrashanth Swaminathan(p6)	stfd	[in1] = f14
250*1fd5a2e1SPrashanth Swaminathan(p7)	stfd	[r16] = f15
251*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
252*1fd5a2e1SPrashanth Swaminathan	;;
253*1fd5a2e1SPrashanth Swaminathan
254*1fd5a2e1SPrashanth Swaminathan.Lst_hfa_ldouble:
255*1fd5a2e1SPrashanth Swaminathan	add	r16 = 16, in1
256*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 16, in3
257*1fd5a2e1SPrashanth Swaminathan	;;
258*1fd5a2e1SPrashanth Swaminathan	stfe	[in1] = f8, 32
259*1fd5a2e1SPrashanth Swaminathan(p6)	stfe	[r16] = f9, 32
260*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 32, in3
261*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 48, in3
262*1fd5a2e1SPrashanth Swaminathan	;;
263*1fd5a2e1SPrashanth Swaminathan(p7)	stfe	[in1] = f10, 32
264*1fd5a2e1SPrashanth Swaminathan(p8)	stfe	[r16] = f11, 32
265*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 64, in3
266*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 80, in3
267*1fd5a2e1SPrashanth Swaminathan	;;
268*1fd5a2e1SPrashanth Swaminathan(p9)	stfe	[in1] = f12, 32
269*1fd5a2e1SPrashanth Swaminathan(p10)	stfe	[r16] = f13, 32
270*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 96, in3
271*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 112, in3
272*1fd5a2e1SPrashanth Swaminathan	;;
273*1fd5a2e1SPrashanth Swaminathan(p6)	stfe	[in1] = f14
274*1fd5a2e1SPrashanth Swaminathan(p7)	stfe	[r16] = f15
275*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
276*1fd5a2e1SPrashanth Swaminathan	;;
277*1fd5a2e1SPrashanth Swaminathan
278*1fd5a2e1SPrashanth Swaminathan        .endp ffi_call_unix
279*1fd5a2e1SPrashanth Swaminathan
280*1fd5a2e1SPrashanth Swaminathan        .align 16
281*1fd5a2e1SPrashanth Swaminathan        .global ffi_closure_unix
282*1fd5a2e1SPrashanth Swaminathan        .proc ffi_closure_unix
283*1fd5a2e1SPrashanth Swaminathan
284*1fd5a2e1SPrashanth Swaminathan#define FRAME_SIZE	(8*16 + 8*8 + 8*16)
285*1fd5a2e1SPrashanth Swaminathan
286*1fd5a2e1SPrashanth Swaminathanffi_closure_unix:
287*1fd5a2e1SPrashanth Swaminathan	.prologue
288*1fd5a2e1SPrashanth Swaminathan	.save	ar.pfs, r40 // loc0
289*1fd5a2e1SPrashanth Swaminathan	alloc   loc0 = ar.pfs, 8, 4, 4, 0
290*1fd5a2e1SPrashanth Swaminathan	.fframe	FRAME_SIZE
291*1fd5a2e1SPrashanth Swaminathan	add	r12 = -FRAME_SIZE, r12
292*1fd5a2e1SPrashanth Swaminathan	.save	rp, loc1
293*1fd5a2e1SPrashanth Swaminathan	mov	loc1 = b0
294*1fd5a2e1SPrashanth Swaminathan	.save	ar.unat, loc2
295*1fd5a2e1SPrashanth Swaminathan	mov	loc2 = ar.unat
296*1fd5a2e1SPrashanth Swaminathan	.body
297*1fd5a2e1SPrashanth Swaminathan
298*1fd5a2e1SPrashanth Swaminathan	/* Retrieve closure pointer and real gp.  */
299*1fd5a2e1SPrashanth Swaminathan#ifdef _ILP32
300*1fd5a2e1SPrashanth Swaminathan	addp4	out0 = 0, gp
301*1fd5a2e1SPrashanth Swaminathan	addp4	gp = 16, gp
302*1fd5a2e1SPrashanth Swaminathan#else
303*1fd5a2e1SPrashanth Swaminathan	mov	out0 = gp
304*1fd5a2e1SPrashanth Swaminathan	add	gp = 16, gp
305*1fd5a2e1SPrashanth Swaminathan#endif
306*1fd5a2e1SPrashanth Swaminathan	;;
307*1fd5a2e1SPrashanth Swaminathan	ld8	gp = [gp]
308*1fd5a2e1SPrashanth Swaminathan
309*1fd5a2e1SPrashanth Swaminathan	/* Spill all of the possible argument registers.  */
310*1fd5a2e1SPrashanth Swaminathan	add	r16 = 16 + 8*16, sp
311*1fd5a2e1SPrashanth Swaminathan	add	r17 = 16 + 8*16 + 16, sp
312*1fd5a2e1SPrashanth Swaminathan	;;
313*1fd5a2e1SPrashanth Swaminathan	stf.spill [r16] = f8, 32
314*1fd5a2e1SPrashanth Swaminathan	stf.spill [r17] = f9, 32
315*1fd5a2e1SPrashanth Swaminathan	mov	loc3 = gp
316*1fd5a2e1SPrashanth Swaminathan	;;
317*1fd5a2e1SPrashanth Swaminathan	stf.spill [r16] = f10, 32
318*1fd5a2e1SPrashanth Swaminathan	stf.spill [r17] = f11, 32
319*1fd5a2e1SPrashanth Swaminathan	;;
320*1fd5a2e1SPrashanth Swaminathan	stf.spill [r16] = f12, 32
321*1fd5a2e1SPrashanth Swaminathan	stf.spill [r17] = f13, 32
322*1fd5a2e1SPrashanth Swaminathan	;;
323*1fd5a2e1SPrashanth Swaminathan	stf.spill [r16] = f14, 32
324*1fd5a2e1SPrashanth Swaminathan	stf.spill [r17] = f15, 24
325*1fd5a2e1SPrashanth Swaminathan	;;
326*1fd5a2e1SPrashanth Swaminathan	.mem.offset 0, 0
327*1fd5a2e1SPrashanth Swaminathan	st8.spill [r16] = in0, 16
328*1fd5a2e1SPrashanth Swaminathan	.mem.offset 8, 0
329*1fd5a2e1SPrashanth Swaminathan	st8.spill [r17] = in1, 16
330*1fd5a2e1SPrashanth Swaminathan	add	out1 = 16 + 8*16, sp
331*1fd5a2e1SPrashanth Swaminathan	;;
332*1fd5a2e1SPrashanth Swaminathan	.mem.offset 0, 0
333*1fd5a2e1SPrashanth Swaminathan	st8.spill [r16] = in2, 16
334*1fd5a2e1SPrashanth Swaminathan	.mem.offset 8, 0
335*1fd5a2e1SPrashanth Swaminathan	st8.spill [r17] = in3, 16
336*1fd5a2e1SPrashanth Swaminathan	add	out2 = 16, sp
337*1fd5a2e1SPrashanth Swaminathan	;;
338*1fd5a2e1SPrashanth Swaminathan	.mem.offset 0, 0
339*1fd5a2e1SPrashanth Swaminathan	st8.spill [r16] = in4, 16
340*1fd5a2e1SPrashanth Swaminathan	.mem.offset 8, 0
341*1fd5a2e1SPrashanth Swaminathan	st8.spill [r17] = in5, 16
342*1fd5a2e1SPrashanth Swaminathan	mov	out3 = r8
343*1fd5a2e1SPrashanth Swaminathan	;;
344*1fd5a2e1SPrashanth Swaminathan	.mem.offset 0, 0
345*1fd5a2e1SPrashanth Swaminathan	st8.spill [r16] = in6
346*1fd5a2e1SPrashanth Swaminathan	.mem.offset 8, 0
347*1fd5a2e1SPrashanth Swaminathan	st8.spill [r17] = in7
348*1fd5a2e1SPrashanth Swaminathan
349*1fd5a2e1SPrashanth Swaminathan	/* Invoke ffi_closure_unix_inner for the hard work.  */
350*1fd5a2e1SPrashanth Swaminathan	br.call.sptk.many b0 = ffi_closure_unix_inner
351*1fd5a2e1SPrashanth Swaminathan	;;
352*1fd5a2e1SPrashanth Swaminathan
353*1fd5a2e1SPrashanth Swaminathan	/* Dispatch to handle return value.  */
354*1fd5a2e1SPrashanth Swaminathan	mov	gp = loc3
355*1fd5a2e1SPrashanth Swaminathan	zxt1	r16 = r8
356*1fd5a2e1SPrashanth Swaminathan	;;
357*1fd5a2e1SPrashanth Swaminathan	addl	r18 = @ltoffx(.Lld_table), gp
358*1fd5a2e1SPrashanth Swaminathan	mov	ar.pfs = loc0
359*1fd5a2e1SPrashanth Swaminathan	;;
360*1fd5a2e1SPrashanth Swaminathan	ld8.mov	r18 = [r18], .Lld_table
361*1fd5a2e1SPrashanth Swaminathan	mov	b0 = loc1
362*1fd5a2e1SPrashanth Swaminathan	;;
363*1fd5a2e1SPrashanth Swaminathan	shladd	r18 = r16, 3, r18
364*1fd5a2e1SPrashanth Swaminathan	mov	ar.unat = loc2
365*1fd5a2e1SPrashanth Swaminathan	;;
366*1fd5a2e1SPrashanth Swaminathan	ld8	r17 = [r18]
367*1fd5a2e1SPrashanth Swaminathan	shr	r8 = r8, 8
368*1fd5a2e1SPrashanth Swaminathan	;;
369*1fd5a2e1SPrashanth Swaminathan	add	r17 = r17, r18
370*1fd5a2e1SPrashanth Swaminathan	add	r16 = 16, sp
371*1fd5a2e1SPrashanth Swaminathan	;;
372*1fd5a2e1SPrashanth Swaminathan	mov	b6 = r17
373*1fd5a2e1SPrashanth Swaminathan	br	b6
374*1fd5a2e1SPrashanth Swaminathan	;;
375*1fd5a2e1SPrashanth Swaminathan	.label_state 1
376*1fd5a2e1SPrashanth Swaminathan
377*1fd5a2e1SPrashanth Swaminathan.Lld_void:
378*1fd5a2e1SPrashanth Swaminathan	.restore sp
379*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
380*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
381*1fd5a2e1SPrashanth Swaminathan	;;
382*1fd5a2e1SPrashanth Swaminathan.Lld_int:
383*1fd5a2e1SPrashanth Swaminathan	.body
384*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
385*1fd5a2e1SPrashanth Swaminathan	ld8	r8 = [r16]
386*1fd5a2e1SPrashanth Swaminathan	.restore sp
387*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
388*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
389*1fd5a2e1SPrashanth Swaminathan	;;
390*1fd5a2e1SPrashanth Swaminathan.Lld_float:
391*1fd5a2e1SPrashanth Swaminathan	.body
392*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
393*1fd5a2e1SPrashanth Swaminathan	ldfs	f8 = [r16]
394*1fd5a2e1SPrashanth Swaminathan	.restore sp
395*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
396*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
397*1fd5a2e1SPrashanth Swaminathan	;;
398*1fd5a2e1SPrashanth Swaminathan.Lld_double:
399*1fd5a2e1SPrashanth Swaminathan	.body
400*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
401*1fd5a2e1SPrashanth Swaminathan	ldfd	f8 = [r16]
402*1fd5a2e1SPrashanth Swaminathan	.restore sp
403*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
404*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
405*1fd5a2e1SPrashanth Swaminathan	;;
406*1fd5a2e1SPrashanth Swaminathan.Lld_ldouble:
407*1fd5a2e1SPrashanth Swaminathan	.body
408*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
409*1fd5a2e1SPrashanth Swaminathan	ldfe	f8 = [r16]
410*1fd5a2e1SPrashanth Swaminathan	.restore sp
411*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
412*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
413*1fd5a2e1SPrashanth Swaminathan	;;
414*1fd5a2e1SPrashanth Swaminathan
415*1fd5a2e1SPrashanth Swaminathan.Lld_small_struct:
416*1fd5a2e1SPrashanth Swaminathan	.body
417*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
418*1fd5a2e1SPrashanth Swaminathan	add	r17 = 8, r16
419*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 8, r8
420*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 16, r8
421*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 24, r8
422*1fd5a2e1SPrashanth Swaminathan	;;
423*1fd5a2e1SPrashanth Swaminathan	ld8	r8 = [r16], 16
424*1fd5a2e1SPrashanth Swaminathan(p6)	ld8	r9 = [r17], 16
425*1fd5a2e1SPrashanth Swaminathan	;;
426*1fd5a2e1SPrashanth Swaminathan(p7)	ld8	r10 = [r16]
427*1fd5a2e1SPrashanth Swaminathan(p8)	ld8	r11 = [r17]
428*1fd5a2e1SPrashanth Swaminathan	.restore sp
429*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
430*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
431*1fd5a2e1SPrashanth Swaminathan	;;
432*1fd5a2e1SPrashanth Swaminathan
433*1fd5a2e1SPrashanth Swaminathan.Lld_hfa_float:
434*1fd5a2e1SPrashanth Swaminathan	.body
435*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
436*1fd5a2e1SPrashanth Swaminathan	add	r17 = 4, r16
437*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 4, r8
438*1fd5a2e1SPrashanth Swaminathan	;;
439*1fd5a2e1SPrashanth Swaminathan	ldfs	f8 = [r16], 8
440*1fd5a2e1SPrashanth Swaminathan(p6)	ldfs	f9 = [r17], 8
441*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 8, r8
442*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 12, r8
443*1fd5a2e1SPrashanth Swaminathan	;;
444*1fd5a2e1SPrashanth Swaminathan(p7)	ldfs	f10 = [r16], 8
445*1fd5a2e1SPrashanth Swaminathan(p8)	ldfs	f11 = [r17], 8
446*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 16, r8
447*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 20, r8
448*1fd5a2e1SPrashanth Swaminathan	;;
449*1fd5a2e1SPrashanth Swaminathan(p9)	ldfs	f12 = [r16], 8
450*1fd5a2e1SPrashanth Swaminathan(p10)	ldfs	f13 = [r17], 8
451*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 24, r8
452*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 28, r8
453*1fd5a2e1SPrashanth Swaminathan	;;
454*1fd5a2e1SPrashanth Swaminathan(p6)	ldfs	f14 = [r16]
455*1fd5a2e1SPrashanth Swaminathan(p7)	ldfs	f15 = [r17]
456*1fd5a2e1SPrashanth Swaminathan	.restore sp
457*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
458*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
459*1fd5a2e1SPrashanth Swaminathan	;;
460*1fd5a2e1SPrashanth Swaminathan
461*1fd5a2e1SPrashanth Swaminathan.Lld_hfa_double:
462*1fd5a2e1SPrashanth Swaminathan	.body
463*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
464*1fd5a2e1SPrashanth Swaminathan	add	r17 = 8, r16
465*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 8, r8
466*1fd5a2e1SPrashanth Swaminathan	;;
467*1fd5a2e1SPrashanth Swaminathan	ldfd	f8 = [r16], 16
468*1fd5a2e1SPrashanth Swaminathan(p6)	ldfd	f9 = [r17], 16
469*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 16, r8
470*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 24, r8
471*1fd5a2e1SPrashanth Swaminathan	;;
472*1fd5a2e1SPrashanth Swaminathan(p7)	ldfd	f10 = [r16], 16
473*1fd5a2e1SPrashanth Swaminathan(p8)	ldfd	f11 = [r17], 16
474*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 32, r8
475*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 40, r8
476*1fd5a2e1SPrashanth Swaminathan	;;
477*1fd5a2e1SPrashanth Swaminathan(p9)	ldfd	f12 = [r16], 16
478*1fd5a2e1SPrashanth Swaminathan(p10)	ldfd	f13 = [r17], 16
479*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 48, r8
480*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 56, r8
481*1fd5a2e1SPrashanth Swaminathan	;;
482*1fd5a2e1SPrashanth Swaminathan(p6)	ldfd	f14 = [r16]
483*1fd5a2e1SPrashanth Swaminathan(p7)	ldfd	f15 = [r17]
484*1fd5a2e1SPrashanth Swaminathan	.restore sp
485*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
486*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
487*1fd5a2e1SPrashanth Swaminathan	;;
488*1fd5a2e1SPrashanth Swaminathan
489*1fd5a2e1SPrashanth Swaminathan.Lld_hfa_ldouble:
490*1fd5a2e1SPrashanth Swaminathan	.body
491*1fd5a2e1SPrashanth Swaminathan	.copy_state 1
492*1fd5a2e1SPrashanth Swaminathan	add	r17 = 16, r16
493*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 16, r8
494*1fd5a2e1SPrashanth Swaminathan	;;
495*1fd5a2e1SPrashanth Swaminathan	ldfe	f8 = [r16], 32
496*1fd5a2e1SPrashanth Swaminathan(p6)	ldfe	f9 = [r17], 32
497*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 32, r8
498*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p8, p0 = 48, r8
499*1fd5a2e1SPrashanth Swaminathan	;;
500*1fd5a2e1SPrashanth Swaminathan(p7)	ldfe	f10 = [r16], 32
501*1fd5a2e1SPrashanth Swaminathan(p8)	ldfe	f11 = [r17], 32
502*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p9, p0 = 64, r8
503*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p10, p0 = 80, r8
504*1fd5a2e1SPrashanth Swaminathan	;;
505*1fd5a2e1SPrashanth Swaminathan(p9)	ldfe	f12 = [r16], 32
506*1fd5a2e1SPrashanth Swaminathan(p10)	ldfe	f13 = [r17], 32
507*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p6, p0 = 96, r8
508*1fd5a2e1SPrashanth Swaminathan	cmp.lt	p7, p0 = 112, r8
509*1fd5a2e1SPrashanth Swaminathan	;;
510*1fd5a2e1SPrashanth Swaminathan(p6)	ldfe	f14 = [r16]
511*1fd5a2e1SPrashanth Swaminathan(p7)	ldfe	f15 = [r17]
512*1fd5a2e1SPrashanth Swaminathan	.restore sp
513*1fd5a2e1SPrashanth Swaminathan	add	sp = FRAME_SIZE, sp
514*1fd5a2e1SPrashanth Swaminathan	br.ret.sptk.many b0
515*1fd5a2e1SPrashanth Swaminathan	;;
516*1fd5a2e1SPrashanth Swaminathan
517*1fd5a2e1SPrashanth Swaminathan	.endp	ffi_closure_unix
518*1fd5a2e1SPrashanth Swaminathan
519*1fd5a2e1SPrashanth Swaminathan	.section .rodata
520*1fd5a2e1SPrashanth Swaminathan	.align	8
521*1fd5a2e1SPrashanth Swaminathan.Lst_table:
522*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_void)		// FFI_TYPE_VOID
523*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_sint32)		// FFI_TYPE_INT
524*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_float)		// FFI_TYPE_FLOAT
525*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_double)		// FFI_TYPE_DOUBLE
526*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_ldouble)		// FFI_TYPE_LONGDOUBLE
527*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_uint8)		// FFI_TYPE_UINT8
528*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_sint8)		// FFI_TYPE_SINT8
529*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_uint16)		// FFI_TYPE_UINT16
530*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_sint16)		// FFI_TYPE_SINT16
531*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_uint32)		// FFI_TYPE_UINT32
532*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_sint32)		// FFI_TYPE_SINT32
533*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_int64)		// FFI_TYPE_UINT64
534*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_int64)		// FFI_TYPE_SINT64
535*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_void)		// FFI_TYPE_STRUCT
536*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_int64)		// FFI_TYPE_POINTER
537*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_void)		// FFI_TYPE_COMPLEX (not implemented)
538*1fd5a2e1SPrashanth Swaminathan	data8 	@pcrel(.Lst_small_struct)	// FFI_IA64_TYPE_SMALL_STRUCT
539*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
540*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
541*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lst_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
542*1fd5a2e1SPrashanth Swaminathan
543*1fd5a2e1SPrashanth Swaminathan.Lld_table:
544*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_void)		// FFI_TYPE_VOID
545*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_INT
546*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_float)		// FFI_TYPE_FLOAT
547*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_double)		// FFI_TYPE_DOUBLE
548*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_ldouble)		// FFI_TYPE_LONGDOUBLE
549*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT8
550*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT8
551*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT16
552*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT16
553*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT32
554*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT32
555*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_UINT64
556*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_SINT64
557*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_void)		// FFI_TYPE_STRUCT
558*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_int)		// FFI_TYPE_POINTER
559*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_void)		// FFI_TYPE_COMPLEX (not implemented)
560*1fd5a2e1SPrashanth Swaminathan	data8 	@pcrel(.Lld_small_struct)	// FFI_IA64_TYPE_SMALL_STRUCT
561*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
562*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
563*1fd5a2e1SPrashanth Swaminathan	data8	@pcrel(.Lld_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
564*1fd5a2e1SPrashanth Swaminathan
565*1fd5a2e1SPrashanth Swaminathan#if defined __ELF__ && defined __linux__
566*1fd5a2e1SPrashanth Swaminathan	.section	.note.GNU-stack,"",@progbits
567*1fd5a2e1SPrashanth Swaminathan#endif
568