1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------------
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   v8.S - Copyright (c) 1996, 1997, 2003, 2004, 2008 Red Hat, Inc.
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   SPARC 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#define LIBFFI_ASM
28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <fficonfig.h>
29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <ffi.h>
30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define STACKFRAME 96		/* Minimum stack framesize for SPARC */
32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define ARGS (64+4)		/* Offset of register area in frame */
33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.text
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        .align 8
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_call_v8
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl _ffi_call_v8
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_call_v8:
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_v8:
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFB1:
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	save	%sp, -STACKFRAME, %sp
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLCFI0:
44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sub	%sp, %i2, %sp	! alloca() space in stack for frame to set up
46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	add	%sp, STACKFRAME, %l0	! %l0 has start of
47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project					! frame to set up
48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	%l0, %o0	! call routine to set up frame
50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	%i0
51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	%i1, %o1	! (delay)
52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS], %o0	! call foreign function
54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS+4], %o1
55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS+8], %o2
56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS+12], %o3
57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS+16], %o4
58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%l0+ARGS+20], %o5
59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	%i5
60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	%l0, %sp	! (delay) switch to frame
61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop			! STRUCT returning functions skip 12 instead of 8 bytes
62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! If the return value pointer is NULL, assume no return value.
64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	tst	%i4
65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bz	done
66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%i3, FFI_TYPE_INT
69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be,a	done
70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%o0, [%i4]	! (delay)
71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%i3, FFI_TYPE_FLOAT
73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be,a	done
74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%f0, [%i4+0]	! (delay)
75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%i3, FFI_TYPE_SINT64
77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be	longlong
78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%i3, FFI_TYPE_DOUBLE
80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bne	done
81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%f0, [%i4+0]
83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%f1, [%i4+4]
84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdone:
86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	restore
88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectlonglong:
90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%o0, [%i4+0]
91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%o1, [%i4+4]
92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	restore
94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFE1:
95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.ffi_call_v8_end:
97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	ffi_call_v8,.ffi_call_v8_end-ffi_call_v8
98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#undef STACKFRAME
101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define	STACKFRAME	104	/* 16*4 register window +
102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project				   1*4 struct return +
103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project				   6*4 args backing store +
104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project				   3*4 locals */
105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_closure_v8(...)
107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Receives the closure argument in %g2.   */
109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.text
111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 8
112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl ffi_closure_v8
113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_v8:
115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_REGISTER_PSEUDO_OP
116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project		.register	%g2, #scratch
117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFB2:
119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! Reserve frame space for all arguments in case
120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! we need to align them on a 8-byte boundary.
121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%g2+FFI_TRAMPOLINE_SIZE], %g1
122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%g1+4], %g1
123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sll	%g1, 3, %g1
124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	add	%g1, STACKFRAME, %g1
125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! %g1 == STACKFRAME + 8*nargs
126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	neg	%g1
127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	save	%sp, %g1, %sp
128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLCFI1:
129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! Store all of the potential argument registers in va_list format.
131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i0, [%fp+68+0]
132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i1, [%fp+68+4]
133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i2, [%fp+68+8]
134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i3, [%fp+68+12]
135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i4, [%fp+68+16]
136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	st	%i5, [%fp+68+20]
137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! Call ffi_closure_sparc_inner to do the bulk of the work.
139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	%g2, %o0
140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	add	%fp, -8, %o1
141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	add	%fp,  64, %o2
142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	call	ffi_closure_sparc_inner_v8
143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	 add	%fp, -16, %o3
144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! Load up the return value in the proper type.
146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! See ffi_prep_cif_machdep for the list of cases.
147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_VOID
148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be	done1
149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_INT
151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be	integer
152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_FLOAT
154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be,a	done1
155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	 ld	[%fp-8], %f0
156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_DOUBLE
158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be,a	done1
159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	 ldd	[%fp-8], %f0
160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_LONGDOUBLE
163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be	done2
164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp	%o0, FFI_TYPE_STRUCT
167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	be	done2
168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! FFI_TYPE_SINT64
170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! FFI_TYPE_UINT64
171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%fp-4], %i1
172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectinteger:
174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ld	[%fp-8], %i0
175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdone1:
177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	%i7+8
178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	 restore
179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdone2:
180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	! Skip 'unimp'.
181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	%i7+12
182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	 restore
183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFE2:
184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.ffi_closure_v8_end:
186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	ffi_closure_v8,.ffi_closure_v8_end-ffi_closure_v8
187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef SPARC64
189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define WS 8
190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define nword	xword
191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define uanword	uaxword
192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define WS 4
194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define nword	long
195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define uanword	uaword
196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_RO_EH_FRAME
199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	".eh_frame",#alloc
200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	".eh_frame",#alloc,#write
202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLframe1:
204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLECIE1-.LLSCIE1	! Length of Common Information Entry
205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSCIE1:
206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	0x0	! CIE Identifier Tag
207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	! CIE Version
208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ascii "zR\0"	! CIE Augmentation
209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	! uleb128 0x1; CIE Code Alignment Factor
210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x80-WS	! sleb128 -WS; CIE Data Alignment Factor
211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xf	! CIE RA Column
212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1	! uleb128 0x1; Augmentation size
213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL
214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1b	! FDE Encoding (pcrel sdata4)
215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x50	! FDE Encoding (aligned absolute)
217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc	! DW_CFA_def_cfa
219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe	! uleb128 0xe
220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	! uleb128 0x0
221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	WS
222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLECIE1:
223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSFDE1:
224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLEFDE1-.LLASFDE1	! FDE Length
225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLASFDE1:
226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLASFDE1-.LLframe1	! FDE CIE offset
227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL
228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	%r_disp32(.LLFB1)
229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLFE1-.LLFB1	! FDE address range
230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	WS
232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.nword	.LLFB1
233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uanword .LLFE1-.LLFB1	! FDE address range
234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	! uleb128 0x0; Augmentation size
236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	! DW_CFA_advance_loc4
237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLCFI0-.LLFB1
238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xd	! DW_CFA_def_cfa_register
239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1e	! uleb128 0x1e
240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2d	! DW_CFA_GNU_window_save
241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x9	! DW_CFA_register
242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xf	! uleb128 0xf
243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1f	! uleb128 0x1f
244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	WS
245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLEFDE1:
246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSFDE2:
247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLEFDE2-.LLASFDE2	! FDE Length
248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLASFDE2:
249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLASFDE2-.LLframe1	! FDE CIE offset
250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL
251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	%r_disp32(.LLFB2)
252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLFE2-.LLFB2	! FDE address range
253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	WS
255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.nword	.LLFB2
256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uanword .LLFE2-.LLFB2	! FDE address range
257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0	! uleb128 0x0; Augmentation size
259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4	! DW_CFA_advance_loc4
260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.uaword	.LLCFI1-.LLFB2
261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xd	! DW_CFA_def_cfa_register
262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1e	! uleb128 0x1e
263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x2d	! DW_CFA_GNU_window_save
264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x9	! DW_CFA_register
265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xf	! uleb128 0xf
266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1f	! uleb128 0x1f
267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	WS
268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLEFDE2:
269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined __ELF__ && defined __linux__
271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	.note.GNU-stack,"",@progbits
272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
273