1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------------
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   sysv.S - Copyright (c) 1996, 1998, 2001-2003, 2005, 2008  Red Hat, Inc.
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   X86 Foreign Function Interface
5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Permission is hereby granted, free of charge, to any person obtaining
7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   a copy of this software and associated documentation files (the
8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ``Software''), to deal in the Software without restriction, including
9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   without limitation the rights to use, copy, modify, merge, publish,
10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   distribute, sublicense, and/or sell copies of the Software, and to
11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   permit persons to whom the Software is furnished to do so, subject to
12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   the following conditions:
13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   The above copyright notice and this permission notice shall be included
15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   in all copies or substantial portions of the Software.
16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   DEALINGS IN THE SOFTWARE.
25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ----------------------------------------------------------------------- */
26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifndef __x86_64__
28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define LIBFFI_ASM
30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <fficonfig.h>
31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <ffi.h>
32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.text
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_prep_args
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_call_SYSV
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        .type    ffi_call_SYSV,@function
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_call_SYSV:
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFB1:
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        pushl %ebp
44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI0:
45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        movl  %esp,%ebp
46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI1:
47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subl $8,%esp    /* Android: copy from darwin.S */
48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Make room for all of the new args.  */
49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  16(%ebp),%ecx
50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subl  %ecx,%esp
51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  %esp,%eax
53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Place all of the ffi_prep_args in position  */
55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subl  $8,%esp	/* Android: copy from darwin.S */
56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl 12(%ebp)
57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl %eax
58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call  *8(%ebp)
59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Return stack to previous state and call the function  */
61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addl  $16,%esp	/* Android: copy from darwin.S */
62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call  *28(%ebp)
64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the return type code  */
66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  20(%ebp),%ecx
67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Protect %esi.  We're going to pop it in the epilogue.  */
69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl %esi
70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* If the return value pointer is NULL, assume no return value.  */
72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl  $0,24(%ebp)
73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jne  0f
74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Even if there is no space for the return value, we are
76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   obliged to handle floating-point values.  */
77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl  $FFI_TYPE_FLOAT,%ecx
78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jne   noretval
79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fstp  %st(0)
80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        jmp   epilogue
82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project0:
84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call  1f
85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lstore_table:
87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	noretval-.Lstore_table	/* FFI_TYPE_VOID */
88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint-.Lstore_table	/* FFI_TYPE_INT */
89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retfloat-.Lstore_table	/* FFI_TYPE_FLOAT */
90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retdouble-.Lstore_table	/* FFI_TYPE_DOUBLE */
91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retlongdouble-.Lstore_table	/* FFI_TYPE_LONGDOUBLE */
92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retuint8-.Lstore_table	/* FFI_TYPE_UINT8 */
93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retsint8-.Lstore_table	/* FFI_TYPE_SINT8 */
94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retuint16-.Lstore_table	/* FFI_TYPE_UINT16 */
95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retsint16-.Lstore_table	/* FFI_TYPE_SINT16 */
96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint-.Lstore_table	/* FFI_TYPE_UINT32 */
97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint-.Lstore_table	/* FFI_TYPE_SINT32 */
98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint64-.Lstore_table	/* FFI_TYPE_UINT64 */
99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint64-.Lstore_table	/* FFI_TYPE_SINT64 */
100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retstruct-.Lstore_table	/* FFI_TYPE_STRUCT */
101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	retint-.Lstore_table	/* FFI_TYPE_POINTER */
102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project1:
104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pop  %esi
105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	add  (%esi, %ecx, 4), %esi
106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp  *%esi
107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Sign/zero extend as appropriate.  */
109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretsint8:
110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movsbl  %al, %eax
111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp  retint
112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretsint16:
114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movswl  %ax, %eax
115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp  retint
116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretuint8:
118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzbl  %al, %eax
119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp  retint
120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretuint16:
122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzwl  %ax, %eax
123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp  retint
124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretfloat:
126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the pointer to storage for the return value  */
127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  24(%ebp),%ecx
128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fstps (%ecx)
129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp   epilogue
130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretdouble:
132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the pointer to storage for the return value  */
133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  24(%ebp),%ecx
134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fstpl (%ecx)
135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp   epilogue
136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretlongdouble:
138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the pointer to storage for the return value  */
139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  24(%ebp),%ecx
140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fstpt (%ecx)
141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp   epilogue
142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretint64:
144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the pointer to storage for the return value  */
145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  24(%ebp),%ecx
146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  %eax,0(%ecx)
147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  %edx,4(%ecx)
148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp   epilogue
149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretint:
151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load %ecx with the pointer to storage for the return value  */
152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  24(%ebp),%ecx
153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl  %eax,0(%ecx)
154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectretstruct:
156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Nothing to do!  */
157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectnoretval:
159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectepilogue:
160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        popl %esi
161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        movl %ebp,%esp
162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        popl %ebp
163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        ret
164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFE1:
165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.ffi_call_SYSV_end:
166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        .size    ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	4
169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectFFI_HIDDEN (ffi_closure_SYSV)
170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_closure_SYSV
171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.type	ffi_closure_SYSV, @function
172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_SYSV:
174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFB2:
175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl	%ebp
176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI2:
177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%esp, %ebp
178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI3:
179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subl	$40, %esp
180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leal	-24(%ebp), %edx
181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, -12(%ebp)	/* resp */
182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leal	8(%ebp), %edx
183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, 4(%esp)	/* args = __builtin_dwarf_cfa () */
184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leal	-12(%ebp), %edx
185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, (%esp)	/* &resp */
186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__
187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	ffi_closure_SYSV_inner
188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%ebx, 8(%esp)
190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI7:
191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	1f
192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project1:	popl	%ebx
193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	ffi_closure_SYSV_inner@PLT
195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	8(%esp), %ebx
196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	-12(%ebp), %ecx
198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_INT, %eax
199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retint
200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16,
202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32.  */
203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_UINT64, %eax
204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jge	0f
205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_UINT8, %eax
206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jge	.Lcls_retint
207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project0:	cmpl	$FFI_TYPE_FLOAT, %eax
209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retfloat
210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_DOUBLE, %eax
211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retdouble
212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retldouble
214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_SINT64, %eax
215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retllong
216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_STRUCT, %eax
217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lcls_retstruct
218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_epilogue:
219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%ebp, %esp
220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	popl	%ebp
221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retint:
223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	(%ecx), %eax
224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lcls_epilogue
225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retfloat:
226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	flds	(%ecx)
227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lcls_epilogue
228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retdouble:
229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fldl	(%ecx)
230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lcls_epilogue
231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retldouble:
232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fldt	(%ecx)
233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lcls_epilogue
234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retllong:
235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	(%ecx), %eax
236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	4(%ecx), %edx
237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lcls_epilogue
238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcls_retstruct:
239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%ebp, %esp
240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	popl	%ebp
241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret	$4
242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFE2:
243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	ffi_closure_SYSV, .-ffi_closure_SYSV
244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if !FFI_NO_RAW_API
246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define CIF_FLAGS_OFFSET 20
251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	4
253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectFFI_HIDDEN (ffi_closure_raw_SYSV)
254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_closure_raw_SYSV
255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.type	ffi_closure_raw_SYSV, @function
256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_raw_SYSV:
258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFB3:
259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl	%ebp
260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI4:
261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%esp, %ebp
262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI5:
263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pushl	%esi
264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI6:
265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subl	$36, %esp
266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	RAW_CLOSURE_CIF_OFFSET(%eax), %esi	 /* closure->cif */
267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, 12(%esp)	/* user_data */
269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leal	8(%ebp), %edx	/* __builtin_dwarf_cfa () */
270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, 8(%esp)	/* raw_args */
271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leal	-24(%ebp), %edx
272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%edx, 4(%esp)	/* &res */
273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%esi, (%esp)	/* cif */
274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	*RAW_CLOSURE_FUN_OFFSET(%eax)		 /* closure->fun */
275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	CIF_FLAGS_OFFSET(%esi), %eax		 /* rtype */
276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_INT, %eax
277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lrcls_retint
278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16,
280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32.  */
281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_UINT64, %eax
282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jge	0f
283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_UINT8, %eax
284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jge	.Lrcls_retint
285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project0:
286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_FLOAT, %eax
287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lrcls_retfloat
288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_DOUBLE, %eax
289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lrcls_retdouble
290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_LONGDOUBLE, %eax
291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lrcls_retldouble
292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpl	$FFI_TYPE_SINT64, %eax
293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	je	.Lrcls_retllong
294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_epilogue:
295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addl	$36, %esp
296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	popl	%esi
297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	popl	%ebp
298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_retint:
300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	-24(%ebp), %eax
301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lrcls_epilogue
302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_retfloat:
303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	flds	-24(%ebp)
304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lrcls_epilogue
305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_retdouble:
306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fldl	-24(%ebp)
307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lrcls_epilogue
308a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_retldouble:
309a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fldt	-24(%ebp)
310a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lrcls_epilogue
311a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lrcls_retllong:
312a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	-24(%ebp), %eax
313a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	-20(%ebp), %edx
314a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	.Lrcls_epilogue
315a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFE3:
316a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
317a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
318a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
319a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	.eh_frame,EH_FRAME_FLAGS,@progbits
320a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lframe1:
321a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LECIE1-.LSCIE1	/* Length of Common Information Entry */
322a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSCIE1:
323a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	0x0	/* CIE Identifier Tag */
324a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	/* CIE Version */
325a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
326a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ascii "zR\0"	/* CIE Augmentation */
327a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
328a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ascii "\0"	/* CIE Augmentation */
329a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
330a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	/* .uleb128 0x1; CIE Code Alignment Factor */
331a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x7c	/* .sleb128 -4; CIE Data Alignment Factor */
332a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8	/* CIE RA Column */
333a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
334a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	/* .uleb128 0x1; Augmentation size */
335a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1b	/* FDE Encoding (pcrel sdata4) */
336a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
337a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc	/* DW_CFA_def_cfa */
338a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* .uleb128 0x4 */
339a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* .uleb128 0x4 */
340a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x88	/* DW_CFA_offset, column 0x8 */
341a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	/* .uleb128 0x1 */
342a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
343a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LECIE1:
344a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSFDE1:
345a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LEFDE1-.LASFDE1	/* FDE Length */
346a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LASFDE1:
347a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LASFDE1-.Lframe1	/* FDE CIE offset */
348a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
349a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB1-.	/* FDE initial location */
350a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
351a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB1	/* FDE initial location */
352a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
353a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFE1-.LFB1	/* FDE address range */
354a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
355a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	/* .uleb128 0x0; Augmentation size */
356a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
357a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
358a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI0-.LFB1
359a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe	/* DW_CFA_def_cfa_offset */
360a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8	/* .uleb128 0x8 */
361a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x85	/* DW_CFA_offset, column 0x5 */
362a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2	/* .uleb128 0x2 */
363a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
364a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI1-.LCFI0
365a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xd	/* DW_CFA_def_cfa_register */
366a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x5	/* .uleb128 0x5 */
367a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
368a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LEFDE1:
369a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSFDE2:
370a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LEFDE2-.LASFDE2	/* FDE Length */
371a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LASFDE2:
372a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LASFDE2-.Lframe1	/* FDE CIE offset */
373a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
374a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB2-.	/* FDE initial location */
375a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
376a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB2
377a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
378a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFE2-.LFB2	/* FDE address range */
379a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
380a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	/* .uleb128 0x0; Augmentation size */
381a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
382a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
383a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI2-.LFB2
384a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe	/* DW_CFA_def_cfa_offset */
385a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8	/* .uleb128 0x8 */
386a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x85	/* DW_CFA_offset, column 0x5 */
387a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2	/* .uleb128 0x2 */
388a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
389a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI3-.LCFI2
390a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xd	/* DW_CFA_def_cfa_register */
391a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x5	/* .uleb128 0x5 */
392a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__
393a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
394a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI7-.LCFI3
395a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x83	/* DW_CFA_offset, column 0x3 */
396a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xa	/* .uleb128 0xa */
397a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
398a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
399a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LEFDE2:
400a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
401a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if !FFI_NO_RAW_API
402a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
403a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSFDE3:
404a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LEFDE3-.LASFDE3	/* FDE Length */
405a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LASFDE3:
406a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LASFDE3-.Lframe1	/* FDE CIE offset */
407a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
408a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB3-.	/* FDE initial location */
409a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
410a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFB3
411a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
412a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LFE3-.LFB3	/* FDE address range */
413a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __PIC__
414a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	/* .uleb128 0x0; Augmentation size */
415a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
416a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
417a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI4-.LFB3
418a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe	/* DW_CFA_def_cfa_offset */
419a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8	/* .uleb128 0x8 */
420a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x85	/* DW_CFA_offset, column 0x5 */
421a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2	/* .uleb128 0x2 */
422a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
423a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI5-.LCFI4
424a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xd	/* DW_CFA_def_cfa_register */
425a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x5	/* .uleb128 0x5 */
426a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	/* DW_CFA_advance_loc4 */
427a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	.LCFI6-.LCFI5
428a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x86	/* DW_CFA_offset, column 0x6 */
429a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x3	/* .uleb128 0x3 */
430a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
431a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LEFDE3:
432a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
433a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
434a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
435a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif /* ifndef __x86_64__ */
436a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
437a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined __ELF__ && defined __linux__
438a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	.note.GNU-stack,"",@progbits
439a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
440