linux.S revision a89495f48f185779ff7d9d64ce6e6b037c9ded87
1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ----------------------------------------------------------------------- 2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project linux.S - (c) 2003-2004 Randolph Chung <tausq@debian.org> 3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project (c) 2008 Red Hat, Inc. 4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project HPPA 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 RENESAS TECHNOLOGY 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 <fficonfig.h> 29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <ffi.h> 30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .text 32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .level 1.1 33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 4 34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* void ffi_call_pa32(void (*)(char *, extended_cif *), 36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extended_cif *ecif, 37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project unsigned bytes, 38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project unsigned flags, 39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project unsigned *rvalue, 40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void (*fn)(void)); 41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project */ 42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .export ffi_call_pa32,code 44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .import ffi_prep_args_pa32,code 45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .type ffi_call_pa32, @function 47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFB1: 48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_call_pa32: 49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .proc 50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .entry 52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %rp, -20(%sp) 53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r3, %r1 54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI11: 55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %sp, %r3 57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI12: 58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Setup the stack for calling prep_args... 60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project We want the stack to look like this: 61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project [ Previous stack ] <- %r3 63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project [ 64-bytes register save area ] <- %r4 65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project [ Stack space for actual call, passed as ] <- %arg0 67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project [ arg0 to ffi_prep_args_pa32 ] 68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project [ Stack for calling prep_args ] <- %sp 70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project */ 71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stwm %r1, 64(%sp) 73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %r4, 12(%r3) 74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI13: 75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %sp, %r4 76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project addl %arg2, %r4, %arg0 /* arg stack */ 78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %arg3, -48(%r3) /* save flags; we need it later */ 79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Call prep_args: 81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project %arg0(stack) -- set up above 82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project %arg1(ecif) -- same as incoming param 83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project %arg2(bytes) -- same as incoming param */ 84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bl ffi_prep_args_pa32,%r2 85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldo 64(%arg0), %sp 86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldo -64(%sp), %sp 87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* now %sp should point where %arg0 was pointing. */ 89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Load the arguments that should be passed in registers 91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project The fp args were loaded by the prep_args function. */ 92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -36(%sp), %arg0 93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -40(%sp), %arg1 94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -44(%sp), %arg2 95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -48(%sp), %arg3 96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* in case the function is going to return a structure 98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project we need to give it a place to put the result. */ 99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -52(%r3), %ret0 /* %ret0 <- rvalue */ 100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -56(%r3), %r22 /* %r22 <- function to call */ 101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bl $$dyncall, %r31 /* Call the user function */ 102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r31, %rp 103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Prepare to store the result; we need to recover flags and rvalue. */ 105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -48(%r3), %r21 /* r21 <- flags */ 106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -52(%r3), %r20 /* r20 <- rvalue */ 107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Store the result according to the return type. */ 109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckint: 111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8 112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %ret0, 0(%r20) 114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckint8: 116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16 117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret0, 0(%r20) 119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckint16: 121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl 122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project sth %ret0, 0(%r20) 124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckdbl: 126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat 127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project fstd %fr4,0(%r20) 129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckfloat: 131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll 132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project fstw %fr4L,0(%r20) 134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lcheckll: 136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2 137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %ret0, 0(%r20) 138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %ret1, 4(%r20) 140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst2: 142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3 143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 2-byte structs are returned in ret0 as ????xxyy. */ 144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret0, 0(%r20) 148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst3: 150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4 151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 3-byte structs are returned in ret0 as ??xxyyzz. */ 152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 15, 8, %r22 153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret0, 0(%r20) 158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst4: 160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5 161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 4-byte structs are returned in ret0 as wwxxyyzz. */ 162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 7, 8, %r22 163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 15, 8, %r22 165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret0, 0(%r20) 170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst5: 172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6 173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 5 byte values are returned right justified: 174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret0 ret1 175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 5: ??????aa bbccddee */ 176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %ret0, 1(%r20) 177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 7, 8, %r22 178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 15, 8, %r22 180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 23, 8, %r22 182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret1, 0(%r20) 185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst6: 187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7 188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 6 byte values are returned right justified: 189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret0 ret1 190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 6: ????aabb ccddeeff */ 191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %ret0, 1(%r20) 194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 7, 8, %r22 195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 15, 8, %r22 197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 23, 8, %r22 199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret1, 0(%r20) 202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst7: 204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8 205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 7 byte values are returned right justified: 206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret0 ret1 207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 7: ??aabbcc ddeeffgg */ 208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 15, 8, %r22 209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %ret0, 1(%r20) 213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 7, 8, %r22 214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 15, 8, %r22 216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 23, 8, %r22 218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project b .Ldone 220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret1, 0(%r20) 221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lchecksmst8: 223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone 224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* 8 byte values are returned right justified: 225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret0 ret1 226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 8: aabbccdd eeffgghh */ 227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 7, 8, %r22 228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 15, 8, %r22 230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret0, 23, 8, %r22 232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %ret0, 1(%r20) 234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 7, 8, %r22 235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 15, 8, %r22 237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project extru %ret1, 23, 8, %r22 239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stbs,ma %r22, 1(%r20) 240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stb %ret1, 0(%r20) 241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Ldone: 243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* all done, return */ 244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r4, %sp /* pop arg stack */ 245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw 12(%r3), %r4 246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldwm -64(%sp), %r3 /* .. and pop stack */ 247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -20(%sp), %rp 248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bv %r0(%rp) 249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project nop 250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .exit 251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .procend 252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFE1: 253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* void ffi_closure_pa32(void); 255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Called with closure argument in %r21 */ 256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .export ffi_closure_pa32,code 257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .import ffi_closure_inner_pa32,code 258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .type ffi_closure_pa32, @function 260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFB2: 261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_closure_pa32: 262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .proc 263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .entry 265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %rp, -20(%sp) 267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI20: 268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r3, %r1 269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI21: 270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %sp, %r3 271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LCFI22: 272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stwm %r1, 64(%sp) 273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Put arguments onto the stack and call ffi_closure_inner. */ 275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %arg0, -36(%r3) 276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %arg1, -40(%r3) 277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %arg2, -44(%r3) 278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project stw %arg3, -48(%r3) 279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r21, %arg0 281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bl ffi_closure_inner_pa32, %r2 282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project copy %r3, %arg1 283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldwm -64(%sp), %r3 285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -20(%sp), %rp 286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -36(%sp), %ret0 287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bv %r0(%r2) 288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ldw -40(%sp), %ret1 289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .exit 291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .procend 292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LFE2: 293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .section ".eh_frame",EH_FRAME_FLAGS,@progbits 295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.Lframe1: 296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LECIE1-.LSCIE1 ;# Length of Common Information Entry 297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSCIE1: 298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word 0x0 ;# CIE Identifier Tag 299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 ;# CIE Version 300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .ascii "\0" ;# CIE Augmentation 301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x1 ;# CIE Code Alignment Factor 302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .sleb128 4 ;# CIE Data Alignment Factor 303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x2 ;# CIE RA Column 304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc ;# DW_CFA_def_cfa 305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x1e 306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x0 307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 4 308a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LECIE1: 309a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSFDE1: 310a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LEFDE1-.LASFDE1 ;# FDE Length 311a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LASFDE1: 312a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LASFDE1-.Lframe1 ;# FDE CIE offset 313a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LFB1 ;# FDE initial location 314a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LFE1-.LFB1 ;# FDE address range 315a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 316a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ;# DW_CFA_advance_loc4 317a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LCFI11-.LFB1 318a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x83 ;# DW_CFA_offset, column 0x3 319a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x0 320a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] 321a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x2 322a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .sleb128 -5 323a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 324a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ;# DW_CFA_advance_loc4 325a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LCFI12-.LCFI11 326a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xd ;# DW_CFA_def_cfa_register = r3 327a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x3 328a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 329a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ;# DW_CFA_advance_loc4 330a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LCFI13-.LCFI12 331a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x84 ;# DW_CFA_offset, column 0x4 332a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x3 333a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 334a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 4 335a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LEFDE1: 336a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 337a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LSFDE2: 338a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LEFDE2-.LASFDE2 ;# FDE Length 339a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LASFDE2: 340a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LASFDE2-.Lframe1 ;# FDE CIE offset 341a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LFB2 ;# FDE initial location 342a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LFE2-.LFB2 ;# FDE address range 343a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ;# DW_CFA_advance_loc4 344a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LCFI21-.LFB2 345a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x83 ;# DW_CFA_offset, column 0x3 346a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x0 347a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x11 ;# DW_CFA_offset_extended_sf 348a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x2 349a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .sleb128 -5 350a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 351a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 ;# DW_CFA_advance_loc4 352a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .word .LCFI22-.LCFI21 353a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xd ;# DW_CFA_def_cfa_register = r3 354a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .uleb128 0x3 355a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 356a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 4 357a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.LEFDE2: 358