1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------------
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   sysv.S - Copyright (c) 2004 Simon Posnjak
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	    Copyright (c) 2005 Axis Communications AB
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   CRIS Foreign Function Interface
6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Permission is hereby granted, free of charge, to any person obtaining
8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   a copy of this software and associated documentation files (the
9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ``Software''), to deal in the Software without restriction, including
10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   without limitation the rights to use, copy, modify, merge, publish,
11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   distribute, sublicense, and/or sell copies of the Software, and to
12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   permit persons to whom the Software is furnished to do so, subject to
13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   the following conditions:
14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   The above copyright notice and this permission notice shall be included
16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   in all copies or substantial portions of the Software.
17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR
22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   OTHER 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 <ffi.h>
29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define CONCAT(x,y) x ## y
30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define XCONCAT(x,y) CONCAT (x, y)
31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define L(x) XCONCAT (__USER_LABEL_PREFIX__, x)
32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.text
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; OK, when we get called we should have this (according to
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; AXIS ETRAX 100LX Programmer's Manual chapter 6.3).
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;;
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; R10:	 ffi_prep_args (func. pointer)
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; R11:  &ecif
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; R12:  cif->bytes
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; R13:  fig->flags
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; sp+0: ecif.rvalue
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; sp+4: fn (function pointer to the function that we need to call)
44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl  L(ffi_call_SYSV)
46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.type   L(ffi_call_SYSV),@function
47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.hidden	L(ffi_call_SYSV)
48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectL(ffi_call_SYSV):
50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Save the regs to the stack.
51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	push $srp
52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Used for stack pointer saving.
53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	push $r6
54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Used for function address pointer.
55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	push $r7
56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Used for stack pointer saving.
57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	push $r8
58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; We save fig->flags to stack we will need them after we
59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; call The Function.
60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	push $r13
61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Saving current stack pointer.
63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $sp,$r8
64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $sp,$r6
65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Move address of ffi_prep_args to r13.
67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r10,$r13
68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Make room on the stack for the args of fn.
70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sub.d  $r12,$sp
71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Function void ffi_prep_args(char *stack, extended_cif *ecif) parameters are:
73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; 	r10 <-- stack pointer
74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; 	r11 <-- &ecif (already there)
75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $sp,$r10
76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Call the function.
78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jsr $r13
79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Save the size of the structures which are passed on stack.
81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r10,$r7
82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Move first four args in to r10..r13.
84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+0],$r10
85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+4],$r11
86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+8],$r12
87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+12],$r13
88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Adjust the stack and check if any parameters are given on stack.
90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq 16,$sp
91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	sub.d $r7,$r6
92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmp.d $sp,$r6
93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bpl go_on
95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectgo_on_no_params_on_stack:
98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r6,$sp
99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectgo_on:
101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Discover if we need to put rval address in to r9.
102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$r8+0],$r7
103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_STRUCT,$r7
104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	bne call_now
105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Move rval address to $r9.
108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$r8+20],$r9
109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectcall_now:
111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Move address of The Function in to r7.
112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$r8+24],$r7
113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Call The Function.
115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	jsr $r7
116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Reset stack.
118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r8,$sp
119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Load rval type (fig->flags) in to r13.
121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pop $r13
122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Detect rval type.
124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_VOID,$r13
125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq epilogue
126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_STRUCT,$r13
128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq epilogue
129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_DOUBLE,$r13
131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq return_double_or_longlong
132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_UINT64,$r13
134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq return_double_or_longlong
135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	cmpq FFI_TYPE_SINT64,$r13
137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	beq return_double_or_longlong
138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Just return the 32 bit value.
141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ba return
142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectreturn_double_or_longlong:
145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Load half of the rval to r10 and the other half to r11.
146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+16],$r13
147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r10,[$r13]
148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq 4,$r13
149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r11,[$r13]
150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	ba epilogue
151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	nop
152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectreturn:
154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	;; Load the rval to r10.
155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp+16],$r13
156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r10,[$r13]
157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectepilogue:
159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pop $r8
160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pop $r7
161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	pop $r6
162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	Jump [$sp+]
163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size   ffi_call_SYSV,.-ffi_call_SYSV
165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Save R10..R13 into an array, somewhat like varargs.  Copy the next
167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   argument too, to simplify handling of any straddling parameter.
168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Save R9 and SP after those.  Jump to function handling the rest.
169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Since this is a template, copied and the main function filled in by
170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   the user.  */
171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	L(ffi_cris_trampoline_template)
173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.type	L(ffi_cris_trampoline_template),@function
174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.hidden	L(ffi_cris_trampoline_template)
175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectL(ffi_cris_trampoline_template):
177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project0:
178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	/* The value we get for "PC" is right after the prefix instruction,
179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	   two bytes from the beginning, i.e. 0b+2. */
180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r10,[$pc+2f-(0b+2)]
181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $pc,$r10
182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project1:
183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	addq 2f-1b+4,$r10
184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r11,[$r10+]
185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r12,[$r10+]
186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r13,[$r10+]
187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d [$sp],$r11
188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r11,[$r10+]
189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $r9,[$r10+]
190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d $sp,[$r10+]
191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	subq FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE,$r10
192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	move.d 0,$r11
193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project3:
194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project        jump 0
195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project2:
196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	ffi_cris_trampoline_template,.-0b
197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* This macro create a constant usable as "extern const int \name" in
199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   C from within libffi, when \name has no prefix decoration.  */
200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.macro const name,value
202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.globl	\name
203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.type	\name,@object
204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.hidden	\name
205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project\name:
206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.dword  \value
207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.size	\name,4
208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	.endm
209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Constants for offsets within the trampoline.  We could do this with
211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   just symbols, avoiding memory contents and memory accesses, but the
212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   C usage code would look a bit stranger.  */
213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	const L(ffi_cris_trampoline_fn_offset),2b-4-0b
215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project	const L(ffi_cris_trampoline_closure_offset),3b-4-0b
216