1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ----------------------------------------------------------------------- 2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project v9.S - Copyright (c) 2000, 2003, 2004, 2008 Red Hat, Inc. 3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project SPARC 64-bit 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#ifdef SPARC64 32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Only compile this in for 64bit builds, because otherwise the object file 33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project will have inproper architecture due to used instructions. */ 34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define STACKFRAME 128 /* Minimum stack framesize for SPARC */ 36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define STACK_BIAS 2047 37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define ARGS (128) /* Offset of register area in frame */ 38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.text 40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl ffi_call_v9 42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.globl _ffi_call_v9 43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_call_v9: 45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_v9: 46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFB1: 47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project save %sp, -STACKFRAME, %sp 48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLCFI0: 49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project sub %sp, %i2, %sp ! alloca() space in stack for frame to set up 51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project add %sp, STACKFRAME+STACK_BIAS, %l0 ! %l0 has start of 52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! frame to set up 53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project mov %l0, %o0 ! call routine to set up frame 55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project call %i0 56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project mov %i1, %o1 ! (delay) 57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project brz,pt %o0, 1f 58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [%l0+ARGS], %o0 ! call foreign function 59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS], %f0 61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+8], %f2 62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+16], %f4 63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+24], %f6 64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+32], %f8 65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+40], %f10 66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+48], %f12 67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+56], %f14 68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+64], %f16 69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+72], %f18 70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+80], %f20 71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+88], %f22 72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+96], %f24 73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+104], %f26 74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+112], %f28 75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [%l0+ARGS+120], %f30 76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project1: ldx [%l0+ARGS+8], %o1 78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [%l0+ARGS+16], %o2 79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [%l0+ARGS+24], %o3 80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [%l0+ARGS+32], %o4 81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [%l0+ARGS+40], %o5 82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project call %i5 83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project sub %l0, STACK_BIAS, %sp ! (delay) switch to frame 84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! If the return value pointer is NULL, assume no return value. 86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project brz,pn %i4, done 87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project nop 88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %i3, FFI_TYPE_INT 90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pt %icc, done 91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %o0, [%i4+0] ! (delay) 92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %i3, FFI_TYPE_FLOAT 94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pn %icc, done 95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project st %f0, [%i4+0] ! (delay) 96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %i3, FFI_TYPE_DOUBLE 98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pn %icc, done 99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f0, [%i4+0] ! (delay) 100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %i3, FFI_TYPE_STRUCT 102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,pn %icc, dostruct 103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %i3, FFI_TYPE_LONGDOUBLE 105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bne,pt %icc, done 106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project nop 107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f0, [%i4+0] 108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f2, [%i4+8] 109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdone: ret 111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project restore 112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdostruct: 114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* This will not work correctly for unions. */ 115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %o0, [%i4+0] 116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %o1, [%i4+8] 117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %o2, [%i4+16] 118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %o3, [%i4+24] 119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f0, [%i4+32] 120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f2, [%i4+40] 121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f4, [%i4+48] 122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f6, [%i4+56] 123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project restore 125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFE1: 126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.ffi_call_v9_end: 128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .size ffi_call_v9,.ffi_call_v9_end-ffi_call_v9 129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#undef STACKFRAME 132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define STACKFRAME 336 /* 16*8 register window + 133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 6*8 args backing store + 134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 20*8 locals */ 135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FP %fp+STACK_BIAS 136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_closure_v9(...) 138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Receives the closure argument in %g1. */ 140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .text 142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .globl ffi_closure_v9 144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_v9: 146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFB2: 147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project save %sp, -STACKFRAME, %sp 148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLCFI1: 149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! Store all of the potential argument registers in va_list format. 151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i0, [FP+128+0] 152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i1, [FP+128+8] 153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i2, [FP+128+16] 154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i3, [FP+128+24] 155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i4, [FP+128+32] 156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stx %i5, [FP+128+40] 157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! Store possible floating point argument registers too. 159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f0, [FP-128] 160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f2, [FP-120] 161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f4, [FP-112] 162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f6, [FP-104] 163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f8, [FP-96] 164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f10, [FP-88] 165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f12, [FP-80] 166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f14, [FP-72] 167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f16, [FP-64] 168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f18, [FP-56] 169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f20, [FP-48] 170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f22, [FP-40] 171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f24, [FP-32] 172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f26, [FP-24] 173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f28, [FP-16] 174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project std %f30, [FP-8] 175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! Call ffi_closure_sparc_inner to do the bulk of the work. 177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project mov %g1, %o0 178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project add %fp, STACK_BIAS-160, %o1 179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project add %fp, STACK_BIAS+128, %o2 180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project call ffi_closure_sparc_inner_v9 181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project add %fp, STACK_BIAS-128, %o3 182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! Load up the return value in the proper type. 184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! See ffi_prep_cif_machdep for the list of cases. 185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %o0, FFI_TYPE_VOID 186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,pn %icc, done1 187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %o0, FFI_TYPE_INT 189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,pn %icc, integer 190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %o0, FFI_TYPE_FLOAT 192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pn %icc, done1 193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ld [FP-160], %f0 194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %o0, FFI_TYPE_DOUBLE 196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pn %icc, done1 197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-160], %f0 198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE 200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmp %o0, FFI_TYPE_LONGDOUBLE 201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project be,a,pn %icc, longdouble1 202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-160], %f0 203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ! FFI_TYPE_STRUCT 206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [FP-152], %i1 207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [FP-144], %i2 208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [FP-136], %i3 209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-160], %f0 210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-152], %f2 211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-144], %f4 212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-136], %f6 213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectinteger: 215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldx [FP-160], %i0 216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectdone1: 218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project restore 220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE 222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectlongdouble1: 223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldd [FP-152], %f2 224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project restore 226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLFE2: 228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.ffi_closure_v9_end: 230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .size ffi_closure_v9,.ffi_closure_v9_end-ffi_closure_v9 231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_RO_EH_FRAME 233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .section ".eh_frame",#alloc 234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .section ".eh_frame",#alloc,#write 236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLframe1: 238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry 239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSCIE1: 240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword 0x0 ! CIE Identifier Tag 241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 ! CIE Version 242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .ascii "zR\0" ! CIE Augmentation 243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor 244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x78 ! sleb128 -8; CIE Data Alignment Factor 245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xf ! CIE RA Column 246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 ! uleb128 0x1; Augmentation size 247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL 248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1b ! FDE Encoding (pcrel sdata4) 249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x50 ! FDE Encoding (aligned absolute) 251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc ! DW_CFA_def_cfa 253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xe ! uleb128 0xe 254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xff,0xf ! uleb128 0x7ff 255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLECIE1: 257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSFDE1: 258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLEFDE1-.LLASFDE1 ! FDE Length 259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLASFDE1: 260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset 261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL 262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword %r_disp32(.LLFB1) 263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLFE1-.LLFB1 ! FDE address range 264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .xword .LLFB1 267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaxword .LLFE1-.LLFB1 ! FDE address range 268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x0 ! uleb128 0x0; Augmentation size 270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ! DW_CFA_advance_loc4 271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLCFI0-.LLFB1 272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xd ! DW_CFA_def_cfa_register 273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1e ! uleb128 0x1e 274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x2d ! DW_CFA_GNU_window_save 275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x9 ! DW_CFA_register 276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xf ! uleb128 0xf 277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1f ! uleb128 0x1f 278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLEFDE1: 280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLSFDE2: 281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLEFDE2-.LLASFDE2 ! FDE Length 282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLASFDE2: 283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset 284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef HAVE_AS_SPARC_UA_PCREL 285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword %r_disp32(.LLFB2) 286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLFE2-.LLFB2 ! FDE address range 287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .xword .LLFB2 290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaxword .LLFE2-.LLFB2 ! FDE address range 291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x0 ! uleb128 0x0; Augmentation size 293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ! DW_CFA_advance_loc4 294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uaword .LLCFI1-.LLFB2 295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xd ! DW_CFA_def_cfa_register 296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1e ! uleb128 0x1e 297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x2d ! DW_CFA_GNU_window_save 298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x9 ! DW_CFA_register 299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xf ! uleb128 0xf 300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1f ! uleb128 0x1f 301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 8 302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LLEFDE2: 303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __linux__ 306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .section .note.GNU-stack,"",@progbits 307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 308