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