1*1fd5a2e1SPrashanth Swaminathan/* ----------------------------------------------------------------------- 2*1fd5a2e1SPrashanth Swaminathan linux.S - (c) 2003-2004 Randolph Chung <[email protected]> 3*1fd5a2e1SPrashanth Swaminathan (c) 2008 Red Hat, Inc. 4*1fd5a2e1SPrashanth Swaminathan 5*1fd5a2e1SPrashanth Swaminathan HPPA Foreign Function Interface 6*1fd5a2e1SPrashanth Swaminathan 7*1fd5a2e1SPrashanth Swaminathan Permission is hereby granted, free of charge, to any person obtaining 8*1fd5a2e1SPrashanth Swaminathan a copy of this software and associated documentation files (the 9*1fd5a2e1SPrashanth Swaminathan ``Software''), to deal in the Software without restriction, including 10*1fd5a2e1SPrashanth Swaminathan without limitation the rights to use, copy, modify, merge, publish, 11*1fd5a2e1SPrashanth Swaminathan distribute, sublicense, and/or sell copies of the Software, and to 12*1fd5a2e1SPrashanth Swaminathan permit persons to whom the Software is furnished to do so, subject to 13*1fd5a2e1SPrashanth Swaminathan the following conditions: 14*1fd5a2e1SPrashanth Swaminathan 15*1fd5a2e1SPrashanth Swaminathan The above copyright notice and this permission notice shall be included 16*1fd5a2e1SPrashanth Swaminathan in all copies or substantial portions of the Software. 17*1fd5a2e1SPrashanth Swaminathan 18*1fd5a2e1SPrashanth Swaminathan THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS 19*1fd5a2e1SPrashanth Swaminathan OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20*1fd5a2e1SPrashanth Swaminathan MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21*1fd5a2e1SPrashanth Swaminathan IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR 22*1fd5a2e1SPrashanth Swaminathan OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 23*1fd5a2e1SPrashanth Swaminathan ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24*1fd5a2e1SPrashanth Swaminathan OTHER DEALINGS IN THE SOFTWARE. 25*1fd5a2e1SPrashanth Swaminathan ----------------------------------------------------------------------- */ 26*1fd5a2e1SPrashanth Swaminathan 27*1fd5a2e1SPrashanth Swaminathan#define LIBFFI_ASM 28*1fd5a2e1SPrashanth Swaminathan#include <fficonfig.h> 29*1fd5a2e1SPrashanth Swaminathan#include <ffi.h> 30*1fd5a2e1SPrashanth Swaminathan 31*1fd5a2e1SPrashanth Swaminathan .text 32*1fd5a2e1SPrashanth Swaminathan .level 1.1 33*1fd5a2e1SPrashanth Swaminathan .align 4 34*1fd5a2e1SPrashanth Swaminathan 35*1fd5a2e1SPrashanth Swaminathan /* void ffi_call_pa32(void (*)(char *, extended_cif *), 36*1fd5a2e1SPrashanth Swaminathan extended_cif *ecif, 37*1fd5a2e1SPrashanth Swaminathan unsigned bytes, 38*1fd5a2e1SPrashanth Swaminathan unsigned flags, 39*1fd5a2e1SPrashanth Swaminathan unsigned *rvalue, 40*1fd5a2e1SPrashanth Swaminathan void (*fn)(void)); 41*1fd5a2e1SPrashanth Swaminathan */ 42*1fd5a2e1SPrashanth Swaminathan 43*1fd5a2e1SPrashanth Swaminathan .export ffi_call_pa32,code 44*1fd5a2e1SPrashanth Swaminathan .import ffi_prep_args_pa32,code 45*1fd5a2e1SPrashanth Swaminathan 46*1fd5a2e1SPrashanth Swaminathan .type ffi_call_pa32, @function 47*1fd5a2e1SPrashanth Swaminathan.LFB1: 48*1fd5a2e1SPrashanth Swaminathanffi_call_pa32: 49*1fd5a2e1SPrashanth Swaminathan .proc 50*1fd5a2e1SPrashanth Swaminathan .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 51*1fd5a2e1SPrashanth Swaminathan .entry 52*1fd5a2e1SPrashanth Swaminathan stw %rp, -20(%sp) 53*1fd5a2e1SPrashanth Swaminathan copy %r3, %r1 54*1fd5a2e1SPrashanth Swaminathan.LCFI11: 55*1fd5a2e1SPrashanth Swaminathan 56*1fd5a2e1SPrashanth Swaminathan copy %sp, %r3 57*1fd5a2e1SPrashanth Swaminathan.LCFI12: 58*1fd5a2e1SPrashanth Swaminathan 59*1fd5a2e1SPrashanth Swaminathan /* Setup the stack for calling prep_args... 60*1fd5a2e1SPrashanth Swaminathan We want the stack to look like this: 61*1fd5a2e1SPrashanth Swaminathan 62*1fd5a2e1SPrashanth Swaminathan [ Previous stack ] <- %r3 63*1fd5a2e1SPrashanth Swaminathan 64*1fd5a2e1SPrashanth Swaminathan [ 64-bytes register save area ] <- %r4 65*1fd5a2e1SPrashanth Swaminathan 66*1fd5a2e1SPrashanth Swaminathan [ Stack space for actual call, passed as ] <- %arg0 67*1fd5a2e1SPrashanth Swaminathan [ arg0 to ffi_prep_args_pa32 ] 68*1fd5a2e1SPrashanth Swaminathan 69*1fd5a2e1SPrashanth Swaminathan [ Stack for calling prep_args ] <- %sp 70*1fd5a2e1SPrashanth Swaminathan */ 71*1fd5a2e1SPrashanth Swaminathan 72*1fd5a2e1SPrashanth Swaminathan stwm %r1, 64(%sp) 73*1fd5a2e1SPrashanth Swaminathan stw %r4, 12(%r3) 74*1fd5a2e1SPrashanth Swaminathan.LCFI13: 75*1fd5a2e1SPrashanth Swaminathan copy %sp, %r4 76*1fd5a2e1SPrashanth Swaminathan 77*1fd5a2e1SPrashanth Swaminathan addl %arg2, %r4, %arg0 /* arg stack */ 78*1fd5a2e1SPrashanth Swaminathan stw %arg3, -48(%r3) /* save flags; we need it later */ 79*1fd5a2e1SPrashanth Swaminathan 80*1fd5a2e1SPrashanth Swaminathan /* Call prep_args: 81*1fd5a2e1SPrashanth Swaminathan %arg0(stack) -- set up above 82*1fd5a2e1SPrashanth Swaminathan %arg1(ecif) -- same as incoming param 83*1fd5a2e1SPrashanth Swaminathan %arg2(bytes) -- same as incoming param */ 84*1fd5a2e1SPrashanth Swaminathan bl ffi_prep_args_pa32,%r2 85*1fd5a2e1SPrashanth Swaminathan ldo 64(%arg0), %sp 86*1fd5a2e1SPrashanth Swaminathan ldo -64(%sp), %sp 87*1fd5a2e1SPrashanth Swaminathan 88*1fd5a2e1SPrashanth Swaminathan /* now %sp should point where %arg0 was pointing. */ 89*1fd5a2e1SPrashanth Swaminathan 90*1fd5a2e1SPrashanth Swaminathan /* Load the arguments that should be passed in registers 91*1fd5a2e1SPrashanth Swaminathan The fp args were loaded by the prep_args function. */ 92*1fd5a2e1SPrashanth Swaminathan ldw -36(%sp), %arg0 93*1fd5a2e1SPrashanth Swaminathan ldw -40(%sp), %arg1 94*1fd5a2e1SPrashanth Swaminathan ldw -44(%sp), %arg2 95*1fd5a2e1SPrashanth Swaminathan ldw -48(%sp), %arg3 96*1fd5a2e1SPrashanth Swaminathan 97*1fd5a2e1SPrashanth Swaminathan /* in case the function is going to return a structure 98*1fd5a2e1SPrashanth Swaminathan we need to give it a place to put the result. */ 99*1fd5a2e1SPrashanth Swaminathan ldw -52(%r3), %ret0 /* %ret0 <- rvalue */ 100*1fd5a2e1SPrashanth Swaminathan ldw -56(%r3), %r22 /* %r22 <- function to call */ 101*1fd5a2e1SPrashanth Swaminathan bl $$dyncall, %r31 /* Call the user function */ 102*1fd5a2e1SPrashanth Swaminathan copy %r31, %rp 103*1fd5a2e1SPrashanth Swaminathan 104*1fd5a2e1SPrashanth Swaminathan /* Prepare to store the result; we need to recover flags and rvalue. */ 105*1fd5a2e1SPrashanth Swaminathan ldw -48(%r3), %r21 /* r21 <- flags */ 106*1fd5a2e1SPrashanth Swaminathan ldw -52(%r3), %r20 /* r20 <- rvalue */ 107*1fd5a2e1SPrashanth Swaminathan 108*1fd5a2e1SPrashanth Swaminathan /* Store the result according to the return type. */ 109*1fd5a2e1SPrashanth Swaminathan 110*1fd5a2e1SPrashanth Swaminathan.Lcheckint: 111*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8 112*1fd5a2e1SPrashanth Swaminathan b .Ldone 113*1fd5a2e1SPrashanth Swaminathan stw %ret0, 0(%r20) 114*1fd5a2e1SPrashanth Swaminathan 115*1fd5a2e1SPrashanth Swaminathan.Lcheckint8: 116*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16 117*1fd5a2e1SPrashanth Swaminathan b .Ldone 118*1fd5a2e1SPrashanth Swaminathan stb %ret0, 0(%r20) 119*1fd5a2e1SPrashanth Swaminathan 120*1fd5a2e1SPrashanth Swaminathan.Lcheckint16: 121*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl 122*1fd5a2e1SPrashanth Swaminathan b .Ldone 123*1fd5a2e1SPrashanth Swaminathan sth %ret0, 0(%r20) 124*1fd5a2e1SPrashanth Swaminathan 125*1fd5a2e1SPrashanth Swaminathan.Lcheckdbl: 126*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat 127*1fd5a2e1SPrashanth Swaminathan b .Ldone 128*1fd5a2e1SPrashanth Swaminathan fstd %fr4,0(%r20) 129*1fd5a2e1SPrashanth Swaminathan 130*1fd5a2e1SPrashanth Swaminathan.Lcheckfloat: 131*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll 132*1fd5a2e1SPrashanth Swaminathan b .Ldone 133*1fd5a2e1SPrashanth Swaminathan fstw %fr4L,0(%r20) 134*1fd5a2e1SPrashanth Swaminathan 135*1fd5a2e1SPrashanth Swaminathan.Lcheckll: 136*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2 137*1fd5a2e1SPrashanth Swaminathan stw %ret0, 0(%r20) 138*1fd5a2e1SPrashanth Swaminathan b .Ldone 139*1fd5a2e1SPrashanth Swaminathan stw %ret1, 4(%r20) 140*1fd5a2e1SPrashanth Swaminathan 141*1fd5a2e1SPrashanth Swaminathan.Lchecksmst2: 142*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3 143*1fd5a2e1SPrashanth Swaminathan /* 2-byte structs are returned in ret0 as ????xxyy. */ 144*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 145*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 146*1fd5a2e1SPrashanth Swaminathan b .Ldone 147*1fd5a2e1SPrashanth Swaminathan stb %ret0, 0(%r20) 148*1fd5a2e1SPrashanth Swaminathan 149*1fd5a2e1SPrashanth Swaminathan.Lchecksmst3: 150*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4 151*1fd5a2e1SPrashanth Swaminathan /* 3-byte structs are returned in ret0 as ??xxyyzz. */ 152*1fd5a2e1SPrashanth Swaminathan extru %ret0, 15, 8, %r22 153*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 154*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 155*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 156*1fd5a2e1SPrashanth Swaminathan b .Ldone 157*1fd5a2e1SPrashanth Swaminathan stb %ret0, 0(%r20) 158*1fd5a2e1SPrashanth Swaminathan 159*1fd5a2e1SPrashanth Swaminathan.Lchecksmst4: 160*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5 161*1fd5a2e1SPrashanth Swaminathan /* 4-byte structs are returned in ret0 as wwxxyyzz. */ 162*1fd5a2e1SPrashanth Swaminathan extru %ret0, 7, 8, %r22 163*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 164*1fd5a2e1SPrashanth Swaminathan extru %ret0, 15, 8, %r22 165*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 166*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 167*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 168*1fd5a2e1SPrashanth Swaminathan b .Ldone 169*1fd5a2e1SPrashanth Swaminathan stb %ret0, 0(%r20) 170*1fd5a2e1SPrashanth Swaminathan 171*1fd5a2e1SPrashanth Swaminathan.Lchecksmst5: 172*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6 173*1fd5a2e1SPrashanth Swaminathan /* 5 byte values are returned right justified: 174*1fd5a2e1SPrashanth Swaminathan ret0 ret1 175*1fd5a2e1SPrashanth Swaminathan 5: ??????aa bbccddee */ 176*1fd5a2e1SPrashanth Swaminathan stbs,ma %ret0, 1(%r20) 177*1fd5a2e1SPrashanth Swaminathan extru %ret1, 7, 8, %r22 178*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 179*1fd5a2e1SPrashanth Swaminathan extru %ret1, 15, 8, %r22 180*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 181*1fd5a2e1SPrashanth Swaminathan extru %ret1, 23, 8, %r22 182*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 183*1fd5a2e1SPrashanth Swaminathan b .Ldone 184*1fd5a2e1SPrashanth Swaminathan stb %ret1, 0(%r20) 185*1fd5a2e1SPrashanth Swaminathan 186*1fd5a2e1SPrashanth Swaminathan.Lchecksmst6: 187*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7 188*1fd5a2e1SPrashanth Swaminathan /* 6 byte values are returned right justified: 189*1fd5a2e1SPrashanth Swaminathan ret0 ret1 190*1fd5a2e1SPrashanth Swaminathan 6: ????aabb ccddeeff */ 191*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 192*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 193*1fd5a2e1SPrashanth Swaminathan stbs,ma %ret0, 1(%r20) 194*1fd5a2e1SPrashanth Swaminathan extru %ret1, 7, 8, %r22 195*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 196*1fd5a2e1SPrashanth Swaminathan extru %ret1, 15, 8, %r22 197*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 198*1fd5a2e1SPrashanth Swaminathan extru %ret1, 23, 8, %r22 199*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 200*1fd5a2e1SPrashanth Swaminathan b .Ldone 201*1fd5a2e1SPrashanth Swaminathan stb %ret1, 0(%r20) 202*1fd5a2e1SPrashanth Swaminathan 203*1fd5a2e1SPrashanth Swaminathan.Lchecksmst7: 204*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8 205*1fd5a2e1SPrashanth Swaminathan /* 7 byte values are returned right justified: 206*1fd5a2e1SPrashanth Swaminathan ret0 ret1 207*1fd5a2e1SPrashanth Swaminathan 7: ??aabbcc ddeeffgg */ 208*1fd5a2e1SPrashanth Swaminathan extru %ret0, 15, 8, %r22 209*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 210*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 211*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 212*1fd5a2e1SPrashanth Swaminathan stbs,ma %ret0, 1(%r20) 213*1fd5a2e1SPrashanth Swaminathan extru %ret1, 7, 8, %r22 214*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 215*1fd5a2e1SPrashanth Swaminathan extru %ret1, 15, 8, %r22 216*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 217*1fd5a2e1SPrashanth Swaminathan extru %ret1, 23, 8, %r22 218*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 219*1fd5a2e1SPrashanth Swaminathan b .Ldone 220*1fd5a2e1SPrashanth Swaminathan stb %ret1, 0(%r20) 221*1fd5a2e1SPrashanth Swaminathan 222*1fd5a2e1SPrashanth Swaminathan.Lchecksmst8: 223*1fd5a2e1SPrashanth Swaminathan comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone 224*1fd5a2e1SPrashanth Swaminathan /* 8 byte values are returned right justified: 225*1fd5a2e1SPrashanth Swaminathan ret0 ret1 226*1fd5a2e1SPrashanth Swaminathan 8: aabbccdd eeffgghh */ 227*1fd5a2e1SPrashanth Swaminathan extru %ret0, 7, 8, %r22 228*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 229*1fd5a2e1SPrashanth Swaminathan extru %ret0, 15, 8, %r22 230*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 231*1fd5a2e1SPrashanth Swaminathan extru %ret0, 23, 8, %r22 232*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 233*1fd5a2e1SPrashanth Swaminathan stbs,ma %ret0, 1(%r20) 234*1fd5a2e1SPrashanth Swaminathan extru %ret1, 7, 8, %r22 235*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 236*1fd5a2e1SPrashanth Swaminathan extru %ret1, 15, 8, %r22 237*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 238*1fd5a2e1SPrashanth Swaminathan extru %ret1, 23, 8, %r22 239*1fd5a2e1SPrashanth Swaminathan stbs,ma %r22, 1(%r20) 240*1fd5a2e1SPrashanth Swaminathan stb %ret1, 0(%r20) 241*1fd5a2e1SPrashanth Swaminathan 242*1fd5a2e1SPrashanth Swaminathan.Ldone: 243*1fd5a2e1SPrashanth Swaminathan /* all done, return */ 244*1fd5a2e1SPrashanth Swaminathan copy %r4, %sp /* pop arg stack */ 245*1fd5a2e1SPrashanth Swaminathan ldw 12(%r3), %r4 246*1fd5a2e1SPrashanth Swaminathan ldwm -64(%sp), %r3 /* .. and pop stack */ 247*1fd5a2e1SPrashanth Swaminathan ldw -20(%sp), %rp 248*1fd5a2e1SPrashanth Swaminathan bv %r0(%rp) 249*1fd5a2e1SPrashanth Swaminathan nop 250*1fd5a2e1SPrashanth Swaminathan .exit 251*1fd5a2e1SPrashanth Swaminathan .procend 252*1fd5a2e1SPrashanth Swaminathan.LFE1: 253*1fd5a2e1SPrashanth Swaminathan 254*1fd5a2e1SPrashanth Swaminathan /* void ffi_closure_pa32(void); 255*1fd5a2e1SPrashanth Swaminathan Called with closure argument in %r21 */ 256*1fd5a2e1SPrashanth Swaminathan .export ffi_closure_pa32,code 257*1fd5a2e1SPrashanth Swaminathan .import ffi_closure_inner_pa32,code 258*1fd5a2e1SPrashanth Swaminathan 259*1fd5a2e1SPrashanth Swaminathan .type ffi_closure_pa32, @function 260*1fd5a2e1SPrashanth Swaminathan.LFB2: 261*1fd5a2e1SPrashanth Swaminathanffi_closure_pa32: 262*1fd5a2e1SPrashanth Swaminathan .proc 263*1fd5a2e1SPrashanth Swaminathan .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 264*1fd5a2e1SPrashanth Swaminathan .entry 265*1fd5a2e1SPrashanth Swaminathan 266*1fd5a2e1SPrashanth Swaminathan stw %rp, -20(%sp) 267*1fd5a2e1SPrashanth Swaminathan.LCFI20: 268*1fd5a2e1SPrashanth Swaminathan copy %r3, %r1 269*1fd5a2e1SPrashanth Swaminathan.LCFI21: 270*1fd5a2e1SPrashanth Swaminathan copy %sp, %r3 271*1fd5a2e1SPrashanth Swaminathan.LCFI22: 272*1fd5a2e1SPrashanth Swaminathan stwm %r1, 64(%sp) 273*1fd5a2e1SPrashanth Swaminathan 274*1fd5a2e1SPrashanth Swaminathan /* Put arguments onto the stack and call ffi_closure_inner. */ 275*1fd5a2e1SPrashanth Swaminathan stw %arg0, -36(%r3) 276*1fd5a2e1SPrashanth Swaminathan stw %arg1, -40(%r3) 277*1fd5a2e1SPrashanth Swaminathan stw %arg2, -44(%r3) 278*1fd5a2e1SPrashanth Swaminathan stw %arg3, -48(%r3) 279*1fd5a2e1SPrashanth Swaminathan 280*1fd5a2e1SPrashanth Swaminathan copy %r21, %arg0 281*1fd5a2e1SPrashanth Swaminathan bl ffi_closure_inner_pa32, %r2 282*1fd5a2e1SPrashanth Swaminathan copy %r3, %arg1 283*1fd5a2e1SPrashanth Swaminathan 284*1fd5a2e1SPrashanth Swaminathan ldwm -64(%sp), %r3 285*1fd5a2e1SPrashanth Swaminathan ldw -20(%sp), %rp 286*1fd5a2e1SPrashanth Swaminathan ldw -36(%sp), %ret0 287*1fd5a2e1SPrashanth Swaminathan bv %r0(%r2) 288*1fd5a2e1SPrashanth Swaminathan ldw -40(%sp), %ret1 289*1fd5a2e1SPrashanth Swaminathan 290*1fd5a2e1SPrashanth Swaminathan .exit 291*1fd5a2e1SPrashanth Swaminathan .procend 292*1fd5a2e1SPrashanth Swaminathan.LFE2: 293*1fd5a2e1SPrashanth Swaminathan 294*1fd5a2e1SPrashanth Swaminathan .section ".eh_frame",EH_FRAME_FLAGS,@progbits 295*1fd5a2e1SPrashanth Swaminathan.Lframe1: 296*1fd5a2e1SPrashanth Swaminathan .word .LECIE1-.LSCIE1 ;# Length of Common Information Entry 297*1fd5a2e1SPrashanth Swaminathan.LSCIE1: 298*1fd5a2e1SPrashanth Swaminathan .word 0x0 ;# CIE Identifier Tag 299*1fd5a2e1SPrashanth Swaminathan .byte 0x1 ;# CIE Version 300*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 301*1fd5a2e1SPrashanth Swaminathan .ascii "zR\0" ;# CIE Augmentation: 'z' - data, 'R' - DW_EH_PE_... data 302*1fd5a2e1SPrashanth Swaminathan#else 303*1fd5a2e1SPrashanth Swaminathan .ascii "\0" ;# CIE Augmentation 304*1fd5a2e1SPrashanth Swaminathan#endif 305*1fd5a2e1SPrashanth Swaminathan .uleb128 0x1 ;# CIE Code Alignment Factor 306*1fd5a2e1SPrashanth Swaminathan .sleb128 4 ;# CIE Data Alignment Factor 307*1fd5a2e1SPrashanth Swaminathan .byte 0x2 ;# CIE RA Column 308*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 309*1fd5a2e1SPrashanth Swaminathan .uleb128 0x1 ;# Augmentation size 310*1fd5a2e1SPrashanth Swaminathan .byte 0x1b ;# FDE Encoding (DW_EH_PE_pcrel|DW_EH_PE_sdata4) 311*1fd5a2e1SPrashanth Swaminathan#endif 312*1fd5a2e1SPrashanth Swaminathan .byte 0xc ;# DW_CFA_def_cfa 313*1fd5a2e1SPrashanth Swaminathan .uleb128 0x1e 314*1fd5a2e1SPrashanth Swaminathan .uleb128 0x0 315*1fd5a2e1SPrashanth Swaminathan .align 4 316*1fd5a2e1SPrashanth Swaminathan.LECIE1: 317*1fd5a2e1SPrashanth Swaminathan.LSFDE1: 318*1fd5a2e1SPrashanth Swaminathan .word .LEFDE1-.LASFDE1 ;# FDE Length 319*1fd5a2e1SPrashanth Swaminathan.LASFDE1: 320*1fd5a2e1SPrashanth Swaminathan .word .LASFDE1-.Lframe1 ;# FDE CIE offset 321*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 322*1fd5a2e1SPrashanth Swaminathan .word .LFB1-. ;# FDE initial location 323*1fd5a2e1SPrashanth Swaminathan#else 324*1fd5a2e1SPrashanth Swaminathan .word .LFB1 ;# FDE initial location 325*1fd5a2e1SPrashanth Swaminathan#endif 326*1fd5a2e1SPrashanth Swaminathan .word .LFE1-.LFB1 ;# FDE address range 327*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 328*1fd5a2e1SPrashanth Swaminathan .uleb128 0x0 ;# Augmentation size: no data 329*1fd5a2e1SPrashanth Swaminathan#endif 330*1fd5a2e1SPrashanth Swaminathan .byte 0x4 ;# DW_CFA_advance_loc4 331*1fd5a2e1SPrashanth Swaminathan .word .LCFI11-.LFB1 332*1fd5a2e1SPrashanth Swaminathan .byte 0x83 ;# DW_CFA_offset, column 0x3 333*1fd5a2e1SPrashanth Swaminathan .uleb128 0x0 334*1fd5a2e1SPrashanth Swaminathan .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] 335*1fd5a2e1SPrashanth Swaminathan .uleb128 0x2 336*1fd5a2e1SPrashanth Swaminathan .sleb128 -5 337*1fd5a2e1SPrashanth Swaminathan 338*1fd5a2e1SPrashanth Swaminathan .byte 0x4 ;# DW_CFA_advance_loc4 339*1fd5a2e1SPrashanth Swaminathan .word .LCFI12-.LCFI11 340*1fd5a2e1SPrashanth Swaminathan .byte 0xd ;# DW_CFA_def_cfa_register = r3 341*1fd5a2e1SPrashanth Swaminathan .uleb128 0x3 342*1fd5a2e1SPrashanth Swaminathan 343*1fd5a2e1SPrashanth Swaminathan .byte 0x4 ;# DW_CFA_advance_loc4 344*1fd5a2e1SPrashanth Swaminathan .word .LCFI13-.LCFI12 345*1fd5a2e1SPrashanth Swaminathan .byte 0x84 ;# DW_CFA_offset, column 0x4 346*1fd5a2e1SPrashanth Swaminathan .uleb128 0x3 347*1fd5a2e1SPrashanth Swaminathan 348*1fd5a2e1SPrashanth Swaminathan .align 4 349*1fd5a2e1SPrashanth Swaminathan.LEFDE1: 350*1fd5a2e1SPrashanth Swaminathan 351*1fd5a2e1SPrashanth Swaminathan.LSFDE2: 352*1fd5a2e1SPrashanth Swaminathan .word .LEFDE2-.LASFDE2 ;# FDE Length 353*1fd5a2e1SPrashanth Swaminathan.LASFDE2: 354*1fd5a2e1SPrashanth Swaminathan .word .LASFDE2-.Lframe1 ;# FDE CIE offset 355*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 356*1fd5a2e1SPrashanth Swaminathan .word .LFB2-. ;# FDE initial location 357*1fd5a2e1SPrashanth Swaminathan#else 358*1fd5a2e1SPrashanth Swaminathan .word .LFB2 ;# FDE initial location 359*1fd5a2e1SPrashanth Swaminathan#endif 360*1fd5a2e1SPrashanth Swaminathan .word .LFE2-.LFB2 ;# FDE address range 361*1fd5a2e1SPrashanth Swaminathan#ifdef __PIC__ 362*1fd5a2e1SPrashanth Swaminathan .uleb128 0x0 ;# Augmentation size: no data 363*1fd5a2e1SPrashanth Swaminathan#endif 364*1fd5a2e1SPrashanth Swaminathan .byte 0x4 ;# DW_CFA_advance_loc4 365*1fd5a2e1SPrashanth Swaminathan .word .LCFI21-.LFB2 366*1fd5a2e1SPrashanth Swaminathan .byte 0x83 ;# DW_CFA_offset, column 0x3 367*1fd5a2e1SPrashanth Swaminathan .uleb128 0x0 368*1fd5a2e1SPrashanth Swaminathan .byte 0x11 ;# DW_CFA_offset_extended_sf 369*1fd5a2e1SPrashanth Swaminathan .uleb128 0x2 370*1fd5a2e1SPrashanth Swaminathan .sleb128 -5 371*1fd5a2e1SPrashanth Swaminathan 372*1fd5a2e1SPrashanth Swaminathan .byte 0x4 ;# DW_CFA_advance_loc4 373*1fd5a2e1SPrashanth Swaminathan .word .LCFI22-.LCFI21 374*1fd5a2e1SPrashanth Swaminathan .byte 0xd ;# DW_CFA_def_cfa_register = r3 375*1fd5a2e1SPrashanth Swaminathan .uleb128 0x3 376*1fd5a2e1SPrashanth Swaminathan 377*1fd5a2e1SPrashanth Swaminathan .align 4 378*1fd5a2e1SPrashanth Swaminathan.LEFDE2: 379