1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------------
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc.
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	        Copyright (c) 2008 Red Hat, Inc.
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   derived from unix64.S
5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   x86-64 Foreign Function Interface for Darwin.
7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Permission is hereby granted, free of charge, to any person obtaining
9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   a copy of this software and associated documentation files (the
10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ``Software''), to deal in the Software without restriction, including
11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   without limitation the rights to use, copy, modify, merge, publish,
12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   distribute, sublicense, and/or sell copies of the Software, and to
13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   permit persons to whom the Software is furnished to do so, subject to
14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   the following conditions:
15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   The above copyright notice and this permission notice shall be included
17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   in all copies or substantial portions of the Software.
18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OTHER DEALINGS IN THE SOFTWARE.
26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ----------------------------------------------------------------------- */
27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __x86_64__
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	.file "darwin64.S"
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.text
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project		    void *raddr, void (*fnaddr)(void));
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   for this function.  This has been allocated by ffi_call.  We also
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   deallocate some of the stack that has been alloca'd.  */
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	_ffi_call_unix64
45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_unix64:
47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW0:
48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	(%rsp), %r10		/* Load return address.  */
49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	(%rdi, %rsi), %rax	/* Find local stack base.  */
50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rdx, (%rax)		/* Save flags.  */
51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rcx, 8(%rax)		/* Save raddr.  */
52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rbp, 16(%rax)		/* Save old frame pointer.  */
53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%r10, 24(%rax)		/* Relocate return address.  */
54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, %rbp		/* Finalize local stack frame.  */
55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW1:
56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rdi, %r10		/* Save a copy of the register area. */
57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%r8, %r11		/* Save a copy of the target fn.  */
58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%r9d, %eax		/* Set number of SSE registers.  */
59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Load up all argument registers.  */
61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	(%r10), %rdi
62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	8(%r10), %rsi
63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	16(%r10), %rdx
64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	24(%r10), %rcx
65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	32(%r10), %r8
66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	40(%r10), %r9
67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	%eax, %eax
68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jnz	Lload_sse
69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLret_from_load_sse:
70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Deallocate the reg arg area.  */
72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	176(%r10), %rsp
73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Call the user function.  */
75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	*%r11
76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Deallocate stack arg area; local stack frame in redzone.  */
78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	24(%rbp), %rsp
79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	0(%rbp), %rcx		/* Reload flags.  */
81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	8(%rbp), %rdi		/* Reload raddr.  */
82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	16(%rbp), %rbp		/* Reload old frame pointer.  */
83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW2:
84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* The first byte of the flags contains the FFI_TYPE.  */
86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzbl	%cl, %r10d
87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	Lstore_table(%rip), %r11
88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movslq	(%r11, %r10, 4), %r10
89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	%r11, %r10
90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	*%r10
91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLstore_table:
93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_void-Lstore_table		/* FFI_TYPE_VOID */
94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_sint32-Lstore_table		/* FFI_TYPE_INT */
95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_float-Lstore_table		/* FFI_TYPE_FLOAT */
96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_double-Lstore_table		/* FFI_TYPE_DOUBLE */
97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_ldouble-Lstore_table	/* FFI_TYPE_LONGDOUBLE */
98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_uint8-Lstore_table		/* FFI_TYPE_UINT8 */
99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_sint8-Lstore_table		/* FFI_TYPE_SINT8 */
100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_uint16-Lstore_table		/* FFI_TYPE_UINT16 */
101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_sint16-Lstore_table		/* FFI_TYPE_SINT16 */
102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_uint32-Lstore_table		/* FFI_TYPE_UINT32 */
103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_sint32-Lstore_table		/* FFI_TYPE_SINT32 */
104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_int64-Lstore_table		/* FFI_TYPE_UINT64 */
105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_int64-Lstore_table		/* FFI_TYPE_SINT64 */
106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_struct-Lstore_table		/* FFI_TYPE_STRUCT */
107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lst_int64-Lstore_table		/* FFI_TYPE_POINTER */
108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.text
110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_void:
112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint8:
115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzbq	%al, %rax
116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint8:
120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movsbq	%al, %rax
121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint16:
125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzwq	%ax, %rax
126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint16:
129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movswq	%ax, %rax
130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint32:
134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	%eax, %eax
135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint32:
138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cltq
139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_int64:
143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rdi)
144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_float:
147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movss	%xmm0, (%rdi)
148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_double:
151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movsd	%xmm0, (%rdi)
152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_ldouble:
154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fstpt	(%rdi)
155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_struct:
158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	-20(%rsp), %rsi		/* Scratch area in redzone.  */
159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* We have to locate the values now, and since we don't want to
161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   write too much data into the user's return value, we spill the
162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   value to a 16 byte scratch area first.  Bits 8, 9, and 10
163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   control where the values are located.  Only one of the three
164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   bits will be set; see ffi_prep_cif_machdep for the pattern.  */
165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movd	%xmm0, %r10
166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movd	%xmm1, %r11
167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	$0x100, %ecx
168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%rax, %rdx
169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%r10, %rax
170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	$0x200, %ecx
171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%r10, %rdx
172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	$0x400, %ecx
173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%r10, %rax
174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%r11, %rdx
175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rax, (%rsi)
176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rdx, 8(%rsi)
177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Bits 12-31 contain the true size of the structure.  Copy from
179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   the scratch area to the true destination.  */
180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	shrl	$12, %ecx
181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	rep movsb
182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Many times we can avoid loading any SSE registers at all.
185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   It's not worth an indirect jump to load the exact set of
186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   SSE registers needed; zero or all is a good compromise.  */
187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW3:
189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLload_sse:
190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	48(%r10), %xmm0
191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	64(%r10), %xmm1
192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	80(%r10), %xmm2
193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	96(%r10), %xmm3
194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	112(%r10), %xmm4
195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	128(%r10), %xmm5
196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	144(%r10), %xmm6
197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	160(%r10), %xmm7
198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	Lret_from_load_sse
199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW4:
201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	_ffi_closure_unix64
203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_closure_unix64:
205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW5:
206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* The carry flag is set by the trampoline iff SSE registers
207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   are used.  Don't clobber it before the branch instruction.  */
208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq    -200(%rsp), %rsp
209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW6:
210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rdi, (%rsp)
211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq    %rsi, 8(%rsp)
212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq    %rdx, 16(%rsp)
213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq    %rcx, 24(%rsp)
214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq    %r8, 32(%rsp)
215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq    %r9, 40(%rsp)
216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jc      Lsave_sse
217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLret_from_save_sse:
218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%r10, %rdi
220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	176(%rsp), %rsi
221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	%rsp, %rdx
222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	208(%rsp), %rcx
223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	_ffi_closure_unix64_inner
224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* Deallocate stack frame early; return value is now in redzone.  */
226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$200, %rsp
227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW7:
228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* The first byte of the return value contains the FFI_TYPE.  */
230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzbl	%al, %r10d
231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	leaq	Lload_table(%rip), %r11
232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movslq	(%r11, %r10, 4), %r10
233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	%r11, %r10
234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	*%r10
235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLload_table:
237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_void-Lload_table		/* FFI_TYPE_VOID */
238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int32-Lload_table		/* FFI_TYPE_INT */
239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_float-Lload_table		/* FFI_TYPE_FLOAT */
240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_double-Lload_table		/* FFI_TYPE_DOUBLE */
241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_ldouble-Lload_table		/* FFI_TYPE_LONGDOUBLE */
242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int8-Lload_table		/* FFI_TYPE_UINT8 */
243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int8-Lload_table		/* FFI_TYPE_SINT8 */
244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int16-Lload_table		/* FFI_TYPE_UINT16 */
245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int16-Lload_table		/* FFI_TYPE_SINT16 */
246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int32-Lload_table		/* FFI_TYPE_UINT32 */
247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int32-Lload_table		/* FFI_TYPE_SINT32 */
248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int64-Lload_table		/* FFI_TYPE_UINT64 */
249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int64-Lload_table		/* FFI_TYPE_SINT64 */
250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_struct-Lload_table		/* FFI_TYPE_STRUCT */
251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	Lld_int64-Lload_table		/* FFI_TYPE_POINTER */
252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.text
254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_void:
256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int8:
259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzbl	-24(%rsp), %eax
260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int16:
263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movzwl	-24(%rsp), %eax
264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int32:
267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movl	-24(%rsp), %eax
268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int64:
271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	-24(%rsp), %rax
272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_float:
275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movss	-24(%rsp), %xmm0
276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_double:
279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movsd	-24(%rsp), %xmm0
280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_ldouble:
283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	fldt	-24(%rsp)
284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_struct:
287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* There are four possibilities here, %rax/%rdx, %xmm0/%rax,
288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   %rax/%xmm0, %xmm0/%xmm1.  We collapse two by always loading
289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   both rdx and xmm1 with the second word.  For the remaining,
290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   bit 8 set means xmm0 gets the second word, and bit 9 means
291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   that rax gets the second word.  */
292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	-24(%rsp), %rcx
293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	-16(%rsp), %rdx
294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	-16(%rsp), %xmm1
295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	$0x100, %eax
296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%rdx, %rcx
297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movd	%rcx, %xmm0
298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	testl	$0x200, %eax
299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movq	-24(%rsp), %rax
300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmovnz	%rdx, %rax
301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* See the comment above Lload_sse; the same logic applies here.  */
304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW8:
306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLsave_sse:
307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm0, 48(%rsp)
308a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm1, 64(%rsp)
309a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm2, 80(%rsp)
310a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm3, 96(%rsp)
311a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm4, 112(%rsp)
312a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm5, 128(%rsp)
313a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm6, 144(%rsp)
314a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	movdqa	%xmm7, 160(%rsp)
315a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	Lret_from_save_sse
316a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
317a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW9:
318a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
319a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectEH_frame1:
320a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$0,LECIE1-LSCIE1		/* CIE Length */
321a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$0
322a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSCIE1:
323a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	0x0		/* CIE Identifier Tag */
324a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		/* CIE Version */
325a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ascii	"zR\0"		/* CIE Augmentation */
326a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		/* uleb128 0x1; CIE Code Alignment Factor */
327a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x78		/* sleb128 -8; CIE Data Alignment Factor */
328a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x10		/* CIE RA Column */
329a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		/* uleb128 0x1; Augmentation size */
330a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x10		/* FDE Encoding (pcrel sdata4) */
331a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc		/* DW_CFA_def_cfa, %rsp offset 8 */
332a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x7		/* uleb128 0x7 */
333a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8		/* uleb128 0x8 */
334a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x90		/* DW_CFA_offset, column 0x10 */
335a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1
336a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
337a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLECIE1:
338a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl _ffi_call_unix64.eh
339a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_unix64.eh:
340a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSFDE1:
341a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$1,LEFDE1-LASFDE1	/* FDE Length */
342a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$1
343a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLASFDE1:
344a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	LASFDE1-EH_frame1	/* FDE CIE offset */
345a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.quad	LUW0-.			/* FDE initial location */
346a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$2,LUW4-LUW0	/* FDE address range */
347a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.quad	L$set$2
348a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0			/* Augmentation size */
349a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
350a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$3,LUW1-LUW0
351a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$3
352a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
353a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* New stack frame based off rbp.  This is a itty bit of unwind
354a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   trickery in that the CFA *has* changed.  There is no easy way
355a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   to describe it correctly on entry to the function.  Fortunately,
356a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   it doesn't matter too much since at all points we can correctly
357a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   unwind back to ffi_call.  Note that the location to which we
358a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   moved the return address is (the new) CFA-8, so from the
359a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   perspective of the unwind info, it hasn't moved.  */
360a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc			/* DW_CFA_def_cfa, %rbp offset 32 */
361a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x6
362a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x20
363a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x80+6			/* DW_CFA_offset, %rbp offset 2*-8 */
364a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2
365a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xa			/* DW_CFA_remember_state */
366a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
367a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
368a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$4,LUW2-LUW1
369a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$4
370a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc			/* DW_CFA_def_cfa, %rsp offset 8 */
371a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x7
372a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8
373a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc0+6			/* DW_CFA_restore, %rbp */
374a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
375a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
376a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$5,LUW3-LUW2
377a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$5
378a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xb			/* DW_CFA_restore_state */
379a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
380a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
381a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLEFDE1:
382a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl _ffi_closure_unix64.eh
383a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_closure_unix64.eh:
384a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSFDE3:
385a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$6,LEFDE3-LASFDE3	/* FDE Length */
386a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$6
387a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLASFDE3:
388a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	LASFDE3-EH_frame1	/* FDE CIE offset */
389a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.quad	LUW5-.			/* FDE initial location */
390a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$7,LUW9-LUW5	/* FDE address range */
391a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.quad	L$set$7
392a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0			/* Augmentation size */
393a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
394a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
395a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$8,LUW6-LUW5
396a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$8
397a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe			/* DW_CFA_def_cfa_offset */
398a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	208,1			/* uleb128 208 */
399a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xa			/* DW_CFA_remember_state */
400a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
401a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
402a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$9,LUW7-LUW6
403a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$9
404a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe			/* DW_CFA_def_cfa_offset */
405a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8
406a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
407a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4			/* DW_CFA_advance_loc4 */
408a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.set	L$set$10,LUW8-LUW7
409a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.long	L$set$10
410a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xb			/* DW_CFA_restore_state */
411a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
412a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
413a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLEFDE3:
414a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.subsections_via_symbols
415a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
416a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif /* __x86_64__ */
417