1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------------
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   osf.S - Copyright (c) 1998, 2001, 2007, 2008 Red Hat
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Alpha/OSF 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	.arch ev6
32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.text
33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_call_osf (void *args, unsigned long bytes, unsigned flags,
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project		 void *raddr, void (*fnaddr)(void));
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   for this function.  This has been allocated by ffi_call.  We also
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   deallocate some of the stack that has been alloca'd.  */
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	ffi_call_osf
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ent	ffi_call_osf
44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	FFI_HIDDEN(ffi_call_osf)
45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_call_osf:
47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.frame	$15, 32, $26, 0
48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.mask   0x4008000, -32
49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LFB1:
50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$16,$17,$1
51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	$16, $30
52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$26, 0($1)
53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$15, 8($1)
54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$18, 16($1)
55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	$1, $15
56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LCFI1:
57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.prologue 0
58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$19, 24($1)
60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	$20, $27
61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Load up all of the (potential) argument registers.
63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$16, 0($30)
64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f16, 0($30)
65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f17, 8($30)
66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$17, 8($30)
67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f18, 16($30)
68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$18, 16($30)
69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f19, 24($30)
70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$19, 24($30)
71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f20, 32($30)
72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$20, 32($30)
73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f21, 40($30)
74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$21, 40($30)
75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Deallocate the register argument area.
77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	lda	$30, 48($30)
78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jsr	$26, ($27), 0
80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldgp	$29, 0($26)
81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# If the return value pointer is NULL, assume no return value.
83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$19, 24($15)
84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$18, 16($15)
85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$26, 0($15)
86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LCFI2:
87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq	$19, $noretval
88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Store the return value out in the proper type.
90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpeq	$18, FFI_TYPE_INT, $1
91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bne	$1, $retint
92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpeq	$18, FFI_TYPE_FLOAT, $2
93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bne	$2, $retfloat
94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpeq	$18, FFI_TYPE_DOUBLE, $3
95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bne	$3, $retdouble
96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$noretval:
99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$15, 8($15)
100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	4
103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$retint:
104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$0, 0($19)
105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$15, 8($15)
107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	4
110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$retfloat:
111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sts	$f0, 0($19)
112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$15, 8($15)
114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	4
117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$retdouble:
118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f0, 0($19)
119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$15, 8($15)
121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LFE1:
123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.end	ffi_call_osf
125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_closure_osf(...)
127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Receives the closure argument in $1.   */
129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align	3
131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	ffi_closure_osf
132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ent	ffi_closure_osf
133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	FFI_HIDDEN(ffi_closure_osf)
134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_osf:
136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.frame	$30, 16*8, $26, 0
137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.mask	0x4000000, -16*8
138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LFB2:
139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldgp	$29, 0($27)
140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subq	$30, 16*8, $30
141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LCFI5:
142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$26, 0($30)
143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LCFI6:
144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.prologue 1
145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Store all of the potential argument registers in va_list format.
147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f16, 4*8($30)
148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f17, 5*8($30)
149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f18, 6*8($30)
150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f19, 7*8($30)
151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f20, 8*8($30)
152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stt	$f21, 9*8($30)
153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$16, 10*8($30)
154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$17, 11*8($30)
155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$18, 12*8($30)
156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$19, 13*8($30)
157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$20, 14*8($30)
158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	stq	$21, 15*8($30)
159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Call ffi_closure_osf_inner to do the bulk of the work.
161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	mov	$1, $16
162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	lda	$17, 2*8($30)
163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	lda	$18, 10*8($30)
164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jsr	$26, ffi_closure_osf_inner
165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldgp	$29, 0($26)
166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$26, 0($30)
167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	# Load up the return value in the proper type.
169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	lda	$1, $load_table
170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	s4addq	$0, $1, $1
171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldl	$1, 0($1)
172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$1, $29, $1
173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jmp	$31, ($1), $load_32
174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_none:
177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_float:
182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	lds	$f0, 16($30)
183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_double:
189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldt	$f0, 16($30)
190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_u8:
196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __alpha_bwx__
197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldbu	$0, 16($30)
198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$0, 16($30)
201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	and	$0, 255, $0
202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_s8:
208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __alpha_bwx__
209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldbu	$0, 16($30)
210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sextb	$0, $0
211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$0, 16($30)
213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sll	$0, 56, $0
214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sra	$0, 56, $0
215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_u16:
221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __alpha_bwx__
222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldwu	$0, 16($30)
223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$0, 16($30)
226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	zapnot	$0, 3, $0
227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_s16:
233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __alpha_bwx__
234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldwu	$0, 16($30)
235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sextw	$0, $0
236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$0, 16($30)
238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sll	$0, 48, $0
239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sra	$0, 48, $0
240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_32:
246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldl	$0, 16($30)
247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 4
252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_64:
253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ldq	$0, 16($30)
254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq	$30, 16*8, $30
256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ret
257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LFE2:
258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.end	ffi_closure_osf
260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __ELF__
262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.section .rodata
263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else
264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.rdata
265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$load_table:
267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_none	# FFI_TYPE_VOID
268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_32	# FFI_TYPE_INT
269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_float	# FFI_TYPE_FLOAT
270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_double	# FFI_TYPE_DOUBLE
271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_none	# FFI_TYPE_LONGDOUBLE
272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_u8	# FFI_TYPE_UINT8
273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_s8	# FFI_TYPE_SINT8
274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_u16	# FFI_TYPE_UINT16
275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_s16	# FFI_TYPE_SINT16
276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_32	# FFI_TYPE_UINT32
277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_32	# FFI_TYPE_SINT32
278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_64	# FFI_TYPE_UINT64
279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_64	# FFI_TYPE_SINT64
280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_none	# FFI_TYPE_STRUCT
281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.gprel32 $load_64	# FFI_TYPE_POINTER
282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Assert that the table above is in sync with ffi.h.  */
284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if	   FFI_TYPE_FLOAT != 2		\
286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_DOUBLE != 3		\
287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_UINT8 != 5		\
288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_SINT8 != 6		\
289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_UINT16 != 7		\
290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_SINT16 != 8		\
291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_UINT32 != 9		\
292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_SINT32 != 10	\
293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_UINT64 != 11	\
294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_SINT64 != 12	\
295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_STRUCT != 13	\
296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_POINTER != 14	\
297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	|| FFI_TYPE_LAST != 14
298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#error "osf.S out of sync with ffi.h"
299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __ELF__
302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	.eh_frame,EH_FRAME_FLAGS,@progbits
303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project__FRAME_BEGIN__:
304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LECIE1-$LSCIE1	# Length of Common Information Entry
305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LSCIE1:
306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	0x0		# CIE Identifier Tag
307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		# CIE Version
308a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.ascii "zR\0"		# CIE Augmentation
309a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		# uleb128 0x1; CIE Code Alignment Factor
310a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x78		# sleb128 -8; CIE Data Alignment Factor
311a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	26		# CIE RA Column
312a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1		# uleb128 0x1; Augmentation size
313a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x1b		# FDE Encoding (pcrel sdata4)
314a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc		# DW_CFA_def_cfa
315a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	30		# uleb128 column 30
316a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0		# uleb128 offset 0
317a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 3
318a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LECIE1:
319a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LSFDE1:
320a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LEFDE1-$LASFDE1		# FDE Length
321a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LASFDE1:
322a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LASFDE1-__FRAME_BEGIN__	# FDE CIE offset
323a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LFB1-.		# FDE initial location
324a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LFE1-$LFB1	# FDE address range
325a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0		# uleb128 0x0; Augmentation size
326a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
327a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4		# DW_CFA_advance_loc4
328a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LCFI1-$LFB1
329a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x9a		# DW_CFA_offset, column 26
330a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	4		# uleb128 4*-8
331a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x8f		# DW_CFA_offset, column 15
332a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x3		# uleb128 3*-8
333a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xc		# DW_CFA_def_cfa
334a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	15		# uleb128 column 15
335a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	32		# uleb128 offset 32
336a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
337a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4		# DW_CFA_advance_loc4
338a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LCFI2-$LCFI1
339a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xda		# DW_CFA_restore, column 26
340a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 3
341a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LEFDE1:
342a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
343a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LSFDE3:
344a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LEFDE3-$LASFDE3		# FDE Length
345a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LASFDE3:
346a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LASFDE3-__FRAME_BEGIN__	# FDE CIE offset
347a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LFB2-.		# FDE initial location
348a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LFE2-$LFB2	# FDE address range
349a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x0		# uleb128 0x0; Augmentation size
350a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
351a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4		# DW_CFA_advance_loc4
352a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LCFI5-$LFB2
353a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0xe		# DW_CFA_def_cfa_offset
354a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x80,0x1	# uleb128 128
355a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
356a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x4		# DW_CFA_advance_loc4
357a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.4byte	$LCFI6-$LCFI5
358a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	0x9a		# DW_CFA_offset, column 26
359a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.byte	16		# uleb128 offset 16*-8
360a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.align 3
361a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project$LEFDE3:
362a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
363a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __linux__
364a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.section	.note.GNU-stack,"",@progbits
365a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
366a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif
367