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