Home | History | Annotate | Download | only in sh
      1 /* -----------------------------------------------------------------------
      2    sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima
      3 
      4    SuperH Foreign Function Interface
      5 
      6    Permission is hereby granted, free of charge, to any person obtaining
      7    a copy of this software and associated documentation files (the
      8    ``Software''), to deal in the Software without restriction, including
      9    without limitation the rights to use, copy, modify, merge, publish,
     10    distribute, sublicense, and/or sell copies of the Software, and to
     11    permit persons to whom the Software is furnished to do so, subject to
     12    the following conditions:
     13 
     14    The above copyright notice and this permission notice shall be included
     15    in all copies or substantial portions of the Software.
     16 
     17    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     20    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
     21 	ANY CLAIM, DAMAGES OR
     22    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     23    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     24    OTHER DEALINGS IN THE SOFTWARE.
     25    ----------------------------------------------------------------------- */
     26 
     27 #define LIBFFI_ASM
     28 #include <fficonfig.h>
     29 #include <ffi.h>
     30 #ifdef HAVE_MACHINE_ASM_H
     31 #include <machine/asm.h>
     32 #else
     33 /* XXX these lose for some platforms, I'm sure. */
     34 #define CNAME(x) x
     35 #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
     36 #endif
     37 
     38 #if defined(__HITACHI__)
     39 #define STRUCT_VALUE_ADDRESS_WITH_ARG 1
     40 #else
     41 #define STRUCT_VALUE_ADDRESS_WITH_ARG 0
     42 #endif
     43 
     44 .text
     45 
     46 	# r4:	ffi_prep_args
     47 	# r5:	&ecif
     48 	# r6:	bytes
     49 	# r7:	flags
     50 	# sp+0: rvalue
     51 	# sp+4: fn
     52 
     53 	# This assumes we are using gas.
     54 ENTRY(ffi_call_SYSV)
     55 	# Save registers
     56 .LFB1:
     57 	mov.l	r8,@-r15
     58 .LCFI0:
     59 	mov.l	r9,@-r15
     60 .LCFI1:
     61 	mov.l	r10,@-r15
     62 .LCFI2:
     63 	mov.l	r12,@-r15
     64 .LCFI3:
     65 	mov.l	r14,@-r15
     66 .LCFI4:
     67 	sts.l	pr,@-r15
     68 .LCFI5:
     69 	mov	r15,r14
     70 .LCFI6:
     71 #if defined(__SH4__)
     72 	mov	r6,r8
     73 	mov	r7,r9
     74 
     75 	sub	r6,r15
     76 	add	#-16,r15
     77 	mov	#~7,r0
     78 	and	r0,r15
     79 
     80 	mov	r4,r0
     81 	jsr	@r0
     82 	 mov	r15,r4
     83 
     84 	mov	r9,r1
     85 	shlr8	r9
     86 	shlr8	r9
     87 	shlr8	r9
     88 
     89 	mov	#FFI_TYPE_STRUCT,r2
     90 	cmp/eq	r2,r9
     91 	bf	1f
     92 #if STRUCT_VALUE_ADDRESS_WITH_ARG
     93  	mov.l	@r15+,r4
     94 	bra	2f
     95 	 mov	#5,r2
     96 #else
     97  	mov.l	@r15+,r10
     98 #endif
     99 1:
    100 	mov	#4,r2
    101 2:
    102 	mov	#4,r3
    103 
    104 L_pass:
    105 	cmp/pl	r8
    106 	bf	L_call_it
    107 
    108 	mov	r1,r0
    109 	and	#3,r0
    110 
    111 L_pass_d:
    112 	cmp/eq	#FFI_TYPE_DOUBLE,r0
    113 	bf	L_pass_f
    114 
    115 	mov	r3,r0
    116 	and	#1,r0
    117 	tst	r0,r0
    118 	bt	1f
    119 	add	#1,r3
    120 1:
    121 	mov	#12,r0
    122 	cmp/hs	r0,r3
    123 	bt/s	3f
    124 	 shlr2	r1
    125 	bsr	L_pop_d
    126 	 nop
    127 3:
    128 	add	#2,r3
    129 	bra	L_pass
    130 	 add	#-8,r8
    131 
    132 L_pop_d:
    133 	mov	r3,r0
    134 	add	r0,r0
    135 	add	r3,r0
    136 	add	#-12,r0
    137 	braf	r0
    138 	 nop
    139 #ifdef __LITTLE_ENDIAN__
    140 	fmov.s	@r15+,fr5
    141 	rts
    142 	 fmov.s	@r15+,fr4
    143 	fmov.s	@r15+,fr7
    144 	rts
    145 	 fmov.s	@r15+,fr6
    146 	fmov.s	@r15+,fr9
    147 	rts
    148 	 fmov.s	@r15+,fr8
    149 	fmov.s	@r15+,fr11
    150 	rts
    151 	 fmov.s	@r15+,fr10
    152 #else
    153 	fmov.s	@r15+,fr4
    154 	rts
    155 	 fmov.s	@r15+,fr5
    156 	fmov.s	@r15+,fr6
    157 	rts
    158 	 fmov.s	@r15+,fr7
    159 	fmov.s	@r15+,fr8
    160 	rts
    161 	 fmov.s	@r15+,fr9
    162 	fmov.s	@r15+,fr10
    163 	rts
    164 	 fmov.s	@r15+,fr11
    165 #endif
    166 
    167 L_pass_f:
    168 	cmp/eq	#FFI_TYPE_FLOAT,r0
    169 	bf	L_pass_i
    170 
    171 	mov	#12,r0
    172 	cmp/hs	r0,r3
    173 	bt/s	2f
    174 	 shlr2	r1
    175 	bsr	L_pop_f
    176 	 nop
    177 2:
    178 	add	#1,r3
    179 	bra	L_pass
    180 	 add	#-4,r8
    181 
    182 L_pop_f:
    183 	mov	r3,r0
    184 	shll2	r0
    185 	add	#-16,r0
    186 	braf	r0
    187 	 nop
    188 #ifdef __LITTLE_ENDIAN__
    189 	rts
    190 	 fmov.s	@r15+,fr5
    191 	rts
    192 	 fmov.s	@r15+,fr4
    193 	rts
    194 	 fmov.s	@r15+,fr7
    195 	rts
    196 	 fmov.s	@r15+,fr6
    197 	rts
    198 	 fmov.s	@r15+,fr9
    199 	rts
    200 	 fmov.s	@r15+,fr8
    201 	rts
    202 	 fmov.s	@r15+,fr11
    203 	rts
    204 	 fmov.s	@r15+,fr10
    205 #else
    206 	rts
    207 	 fmov.s	@r15+,fr4
    208 	rts
    209 	 fmov.s	@r15+,fr5
    210 	rts
    211 	 fmov.s	@r15+,fr6
    212 	rts
    213 	 fmov.s	@r15+,fr7
    214 	rts
    215 	 fmov.s	@r15+,fr8
    216 	rts
    217 	 fmov.s	@r15+,fr9
    218 	rts
    219 	 fmov.s	@r15+,fr10
    220 	rts
    221 	 fmov.s	@r15+,fr11
    222 #endif
    223 
    224 L_pass_i:
    225 	cmp/eq	#FFI_TYPE_INT,r0
    226 	bf	L_call_it
    227 
    228 	mov	#8,r0
    229 	cmp/hs	r0,r2
    230 	bt/s	2f
    231 	 shlr2	r1
    232 	bsr	L_pop_i
    233 	 nop
    234 2:
    235 	add	#1,r2
    236 	bra	L_pass
    237 	 add	#-4,r8
    238 
    239 L_pop_i:
    240 	mov	r2,r0
    241 	shll2	r0
    242 	add	#-16,r0
    243 	braf	r0
    244 	 nop
    245 	rts
    246 	 mov.l	@r15+,r4
    247 	rts
    248 	 mov.l	@r15+,r5
    249 	rts
    250 	 mov.l	@r15+,r6
    251 	rts
    252 	 mov.l	@r15+,r7
    253 
    254 L_call_it:
    255 	# call function
    256 #if (! STRUCT_VALUE_ADDRESS_WITH_ARG)
    257 	mov	r10, r2
    258 #endif
    259 	mov.l  @(28,r14),r1
    260 	jsr    @r1
    261 	 nop
    262 
    263 L_ret_d:
    264 	mov	#FFI_TYPE_DOUBLE,r2
    265 	cmp/eq	r2,r9
    266 	bf	L_ret_ll
    267 
    268 	mov.l	@(24,r14),r1
    269 #ifdef __LITTLE_ENDIAN__
    270 	fmov.s	fr1,@r1
    271 	add	#4,r1
    272 	bra	L_epilogue
    273 	 fmov.s	fr0,@r1
    274 #else
    275 	fmov.s	fr0,@r1
    276 	add	#4,r1
    277 	bra	L_epilogue
    278 	 fmov.s	fr1,@r1
    279 #endif
    280 
    281 L_ret_ll:
    282 	mov	#FFI_TYPE_SINT64,r2
    283 	cmp/eq	r2,r9
    284 	bt/s	1f
    285 	 mov	#FFI_TYPE_UINT64,r2
    286 	cmp/eq	r2,r9
    287 	bf	L_ret_f
    288 
    289 1:
    290 	mov.l	@(24,r14),r2
    291 	mov.l	r0,@r2
    292 	bra	L_epilogue
    293 	 mov.l	r1,@(4,r2)
    294 
    295 L_ret_f:
    296 	mov	#FFI_TYPE_FLOAT,r2
    297 	cmp/eq	r2,r9
    298 	bf	L_ret_i
    299 
    300 	mov.l	@(24,r14),r1
    301 	bra	L_epilogue
    302 	 fmov.s	fr0,@r1
    303 
    304 L_ret_i:
    305 	mov	#FFI_TYPE_INT,r2
    306 	cmp/eq	r2,r9
    307 	bf	L_epilogue
    308 
    309 	mov.l	@(24,r14),r1
    310 	bra	L_epilogue
    311 	 mov.l	r0,@r1
    312 
    313 L_epilogue:
    314 	# Remove the space we pushed for the args
    315 	mov   r14,r15
    316 
    317 	lds.l  @r15+,pr
    318 	mov.l  @r15+,r14
    319 	mov.l  @r15+,r12
    320 	mov.l  @r15+,r10
    321 	mov.l  @r15+,r9
    322 	rts
    323 	 mov.l  @r15+,r8
    324 #else
    325 	mov	r6,r8
    326 	mov	r7,r9
    327 
    328 	sub	r6,r15
    329 	add	#-16,r15
    330 	mov	#~7,r0
    331 	and	r0,r15
    332 
    333 	mov	r4,r0
    334 	jsr	@r0
    335 	 mov	r15,r4
    336 
    337 	mov	r9,r3
    338 	shlr8	r9
    339 	shlr8	r9
    340 	shlr8	r9
    341 
    342 	mov	#FFI_TYPE_STRUCT,r2
    343 	cmp/eq	r2,r9
    344 	bf	1f
    345 #if STRUCT_VALUE_ADDRESS_WITH_ARG
    346 	mov.l	@r15+,r4
    347 	bra	2f
    348 	 mov	#5,r2
    349 #else
    350 	mov.l	@r15+,r10
    351 #endif
    352 1:
    353 	mov	#4,r2
    354 2:
    355 
    356 L_pass:
    357 	cmp/pl	r8
    358 	bf	L_call_it
    359 
    360 	mov	r3,r0
    361 	and	#3,r0
    362 
    363 L_pass_d:
    364 	cmp/eq	#FFI_TYPE_DOUBLE,r0
    365 	bf	L_pass_i
    366 
    367 	mov	r15,r0
    368 	and	#7,r0
    369 	tst	r0,r0
    370 	bt	1f
    371 	add	#4,r15
    372 1:
    373 	mov	#8,r0
    374 	cmp/hs	r0,r2
    375 	bt/s	2f
    376 	 shlr2	r3
    377 	bsr	L_pop_d
    378 	 nop
    379 2:
    380 	add	#2,r2
    381 	bra	L_pass
    382 	 add	#-8,r8
    383 
    384 L_pop_d:
    385 	mov	r2,r0
    386 	add	r0,r0
    387 	add	r2,r0
    388 	add	#-12,r0
    389 	add	r0,r0
    390 	braf	r0
    391 	 nop
    392 	mov.l	@r15+,r4
    393 	rts
    394 	 mov.l	@r15+,r5
    395 	mov.l	@r15+,r5
    396 	rts
    397 	 mov.l	@r15+,r6
    398 	mov.l	@r15+,r6
    399 	rts
    400 	 mov.l	@r15+,r7
    401 	rts
    402 	 mov.l	@r15+,r7
    403 
    404 L_pass_i:
    405 	cmp/eq	#FFI_TYPE_INT,r0
    406 	bf	L_call_it
    407 
    408 	mov	#8,r0
    409 	cmp/hs	r0,r2
    410 	bt/s	2f
    411 	 shlr2	r3
    412 	bsr	L_pop_i
    413 	 nop
    414 2:
    415 	add	#1,r2
    416 	bra	L_pass
    417 	 add	#-4,r8
    418 
    419 L_pop_i:
    420 	mov	r2,r0
    421 	shll2	r0
    422 	add	#-16,r0
    423 	braf	r0
    424 	 nop
    425 	rts
    426 	 mov.l	@r15+,r4
    427 	rts
    428 	 mov.l	@r15+,r5
    429 	rts
    430 	 mov.l	@r15+,r6
    431 	rts
    432 	 mov.l	@r15+,r7
    433 
    434 L_call_it:
    435 	# call function
    436 #if (! STRUCT_VALUE_ADDRESS_WITH_ARG)
    437 	mov	r10, r2
    438 #endif
    439 	mov.l  @(28,r14),r1
    440 	jsr    @r1
    441 	 nop
    442 
    443 L_ret_d:
    444 	mov	#FFI_TYPE_DOUBLE,r2
    445 	cmp/eq	r2,r9
    446 	bf	L_ret_ll
    447 
    448 	mov.l	@(24,r14),r2
    449 	mov.l	r0,@r2
    450 	bra	L_epilogue
    451 	 mov.l	r1,@(4,r2)
    452 
    453 L_ret_ll:
    454 	mov	#FFI_TYPE_SINT64,r2
    455 	cmp/eq	r2,r9
    456 	bt/s	1f
    457 	 mov	#FFI_TYPE_UINT64,r2
    458 	cmp/eq	r2,r9
    459 	bf	L_ret_i
    460 
    461 1:
    462 	mov.l	@(24,r14),r2
    463 	mov.l	r0,@r2
    464 	bra	L_epilogue
    465 	 mov.l	r1,@(4,r2)
    466 
    467 L_ret_i:
    468 	mov	#FFI_TYPE_FLOAT,r2
    469 	cmp/eq	r2,r9
    470 	bt	1f
    471 	mov	#FFI_TYPE_INT,r2
    472 	cmp/eq	r2,r9
    473 	bf	L_epilogue
    474 1:
    475 	mov.l	@(24,r14),r1
    476 	bra	L_epilogue
    477 	 mov.l	r0,@r1
    478 
    479 L_epilogue:
    480 	# Remove the space we pushed for the args
    481 	mov   r14,r15
    482 
    483 	lds.l  @r15+,pr
    484 	mov.l  @r15+,r14
    485 	mov.l  @r15+,r12
    486 	mov.l  @r15+,r10
    487 	mov.l  @r15+,r9
    488 	rts
    489 	 mov.l  @r15+,r8
    490 #endif
    491 .LFE1:
    492 .ffi_call_SYSV_end:
    493         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
    494 
    495 .globl	ffi_closure_helper_SYSV
    496 
    497 ENTRY(ffi_closure_SYSV)
    498 .LFB2:
    499 	mov.l	r7,@-r15
    500 .LCFI7:
    501 	mov.l	r6,@-r15
    502 .LCFI8:
    503 	mov.l	r5,@-r15
    504 .LCFI9:
    505 	mov.l	r4,@-r15
    506 .LCFIA:
    507 	mov.l	r14,@-r15
    508 .LCFIB:
    509 	sts.l	pr,@-r15
    510 
    511 	/* Stack layout:
    512 	   xx bytes (on stack parameters)
    513 	   16 bytes (register parameters)
    514 	    4 bytes (saved frame pointer)
    515 	    4 bytes (saved return address)
    516 	   32 bytes (floating register parameters, SH-4 only)
    517 	    8 bytes (result)
    518 	    4 bytes (pad)
    519 	    4 bytes (5th arg)
    520 	   <- new stack pointer
    521 	*/
    522 .LCFIC:
    523 #if defined(__SH4__)
    524 	add	#-48,r15
    525 #else
    526 	add	#-16,r15
    527 #endif
    528 .LCFID:
    529 	mov	r15,r14
    530 .LCFIE:
    531 
    532 #if defined(__SH4__)
    533 	mov	r14,r1
    534 	add	#48,r1
    535 #ifdef __LITTLE_ENDIAN__
    536 	fmov.s	fr10,@-r1
    537 	fmov.s	fr11,@-r1
    538 	fmov.s	fr8,@-r1
    539 	fmov.s	fr9,@-r1
    540 	fmov.s	fr6,@-r1
    541 	fmov.s	fr7,@-r1
    542 	fmov.s	fr4,@-r1
    543 	fmov.s	fr5,@-r1
    544 #else
    545 	fmov.s	fr11,@-r1
    546 	fmov.s	fr10,@-r1
    547 	fmov.s	fr9,@-r1
    548 	fmov.s	fr8,@-r1
    549 	fmov.s	fr7,@-r1
    550 	fmov.s	fr6,@-r1
    551 	fmov.s	fr5,@-r1
    552 	fmov.s	fr4,@-r1
    553 #endif
    554 	mov	r1,r7
    555 	mov	r14,r6
    556 	add	#56,r6
    557 #else
    558 	mov	r14,r6
    559 	add	#24,r6
    560 #endif
    561 
    562 	bt/s	10f
    563 	 mov	r2, r5
    564 	mov	r14,r1
    565 	add	#8,r1
    566 	mov	r1,r5
    567 10:
    568 
    569 	mov	r14,r1
    570 #if defined(__SH4__)
    571 	add	#72,r1
    572 #else
    573 	add	#40,r1
    574 #endif
    575 	mov.l	r1,@r14
    576 
    577 #ifdef PIC
    578 	mov.l	L_got,r1
    579 	mova	L_got,r0
    580 	add	r0,r1
    581 	mov.l	L_helper,r0
    582 	add	r1,r0
    583 #else
    584 	mov.l	L_helper,r0
    585 #endif
    586 	jsr	@r0
    587 	 mov	r3,r4
    588 
    589 	shll	r0
    590 	mov	r0,r1
    591 	mova	L_table,r0
    592 	add	r1,r0
    593 	mov.w	@r0,r0
    594 	mov	r14,r2
    595 	braf	r0
    596 	 add	#8,r2
    597 0:
    598 	.align 2
    599 #ifdef PIC
    600 L_got:
    601 	.long	_GLOBAL_OFFSET_TABLE_
    602 L_helper:
    603 	.long	ffi_closure_helper_SYSV@GOTOFF
    604 #else
    605 L_helper:
    606 	.long	ffi_closure_helper_SYSV
    607 #endif
    608 L_table:
    609 	.short L_case_v - 0b	/* FFI_TYPE_VOID */
    610 	.short L_case_i - 0b	/* FFI_TYPE_INT */
    611 #if defined(__SH4__)
    612 	.short L_case_f - 0b	/* FFI_TYPE_FLOAT */
    613 	.short L_case_d - 0b	/* FFI_TYPE_DOUBLE */
    614 	.short L_case_d - 0b	/* FFI_TYPE_LONGDOUBLE */
    615 #else
    616 	.short L_case_i - 0b	/* FFI_TYPE_FLOAT */
    617 	.short L_case_ll - 0b	/* FFI_TYPE_DOUBLE */
    618 	.short L_case_ll - 0b	/* FFI_TYPE_LONGDOUBLE */
    619 #endif
    620 	.short L_case_uq - 0b	/* FFI_TYPE_UINT8 */
    621 	.short L_case_q - 0b	/* FFI_TYPE_SINT8 */
    622 	.short L_case_uh - 0b	/* FFI_TYPE_UINT16 */
    623 	.short L_case_h - 0b	/* FFI_TYPE_SINT16 */
    624 	.short L_case_i - 0b	/* FFI_TYPE_UINT32 */
    625 	.short L_case_i - 0b	/* FFI_TYPE_SINT32 */
    626 	.short L_case_ll - 0b	/* FFI_TYPE_UINT64 */
    627 	.short L_case_ll - 0b	/* FFI_TYPE_SINT64 */
    628 	.short L_case_v - 0b	/* FFI_TYPE_STRUCT */
    629 	.short L_case_i - 0b	/* FFI_TYPE_POINTER */
    630 
    631 #if defined(__SH4__)
    632 L_case_d:
    633 #ifdef __LITTLE_ENDIAN__
    634 	fmov.s	@r2+,fr1
    635 	bra	L_case_v
    636 	 fmov.s	@r2,fr0
    637 #else
    638 	fmov.s	@r2+,fr0
    639 	bra	L_case_v
    640 	 fmov.s	@r2,fr1
    641 #endif
    642 
    643 L_case_f:
    644 	bra	L_case_v
    645 	 fmov.s	@r2,fr0
    646 #endif
    647 
    648 L_case_ll:
    649 	mov.l	@r2+,r0
    650 	bra	L_case_v
    651 	 mov.l	@r2,r1
    652 
    653 L_case_i:
    654 	bra	L_case_v
    655 	 mov.l	@r2,r0
    656 
    657 L_case_q:
    658 #ifdef __LITTLE_ENDIAN__
    659 #else
    660 	add	#3,r2
    661 #endif
    662 	bra	L_case_v
    663 	 mov.b	@r2,r0
    664 
    665 L_case_uq:
    666 #ifdef __LITTLE_ENDIAN__
    667 #else
    668 	add	#3,r2
    669 #endif
    670 	mov.b	@r2,r0
    671 	bra	L_case_v
    672 	 extu.b r0,r0
    673 
    674 L_case_h:
    675 #ifdef __LITTLE_ENDIAN__
    676 #else
    677 	add	#2,r2
    678 #endif
    679 	bra	L_case_v
    680 	 mov.w	@r2,r0
    681 
    682 L_case_uh:
    683 #ifdef __LITTLE_ENDIAN__
    684 #else
    685 	add	#2,r2
    686 #endif
    687 	mov.w	@r2,r0
    688 	extu.w	r0,r0
    689 	/* fall through */
    690 
    691 L_case_v:
    692 #if defined(__SH4__)
    693 	add	#48,r15
    694 #else
    695 	add	#16,r15
    696 #endif
    697 	lds.l	@r15+,pr
    698 	mov.l	@r15+,r14
    699 	rts
    700 	 add	#16,r15
    701 .LFE2:
    702 .ffi_closure_SYSV_end:
    703         .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
    704 
    705 #if defined __ELF__ && defined __linux__
    706 	.section	.note.GNU-stack,"",@progbits
    707 #endif
    708 
    709 	.section	".eh_frame","aw",@progbits
    710 __FRAME_BEGIN__:
    711 	.4byte	.LECIE1-.LSCIE1	/* Length of Common Information Entry */
    712 .LSCIE1:
    713 	.4byte	0x0	/* CIE Identifier Tag */
    714 	.byte	0x1	/* CIE Version */
    715 #ifdef PIC
    716 	.ascii "zR\0"	/* CIE Augmentation */
    717 #else
    718 	.byte	0x0	/* CIE Augmentation */
    719 #endif
    720 	.byte	0x1	/* uleb128 0x1; CIE Code Alignment Factor */
    721 	.byte	0x7c	/* sleb128 -4; CIE Data Alignment Factor */
    722 	.byte	0x11	/* CIE RA Column */
    723 #ifdef PIC
    724 	.uleb128 0x1	/* Augmentation size */
    725 	.byte	0x10	/* FDE Encoding (pcrel) */
    726 #endif
    727 	.byte	0xc	/* DW_CFA_def_cfa */
    728 	.byte	0xf	/* uleb128 0xf */
    729 	.byte	0x0	/* uleb128 0x0 */
    730 	.align	2
    731 .LECIE1:
    732 .LSFDE1:
    733 	.4byte	.LEFDE1-.LASFDE1	/* FDE Length */
    734 .LASFDE1:
    735 	.4byte	.LASFDE1-__FRAME_BEGIN__	/* FDE CIE offset */
    736 #ifdef PIC
    737 	.4byte	.LFB1-.	/* FDE initial location */
    738 #else
    739 	.4byte	.LFB1	/* FDE initial location */
    740 #endif
    741 	.4byte	.LFE1-.LFB1	 /* FDE address range */
    742 #ifdef PIC
    743 	.uleb128 0x0	/* Augmentation size */
    744 #endif
    745 	.byte	0x4	/* DW_CFA_advance_loc4 */
    746 	.4byte	.LCFI0-.LFB1
    747 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    748 	.byte	0x4	/* uleb128 0x4 */
    749 	.byte	0x4	/* DW_CFA_advance_loc4 */
    750 	.4byte	.LCFI1-.LCFI0
    751 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    752 	.byte	0x8	/* uleb128 0x4 */
    753 	.byte	0x4	/* DW_CFA_advance_loc4 */
    754 	.4byte	.LCFI2-.LCFI1
    755 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    756 	.byte	0xc	/* uleb128 0x4 */
    757 	.byte	0x4	/* DW_CFA_advance_loc4 */
    758 	.4byte	.LCFI3-.LCFI2
    759 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    760 	.byte	0x10	/* uleb128 0x4 */
    761 	.byte	0x4	/* DW_CFA_advance_loc4 */
    762 	.4byte	.LCFI4-.LCFI3
    763 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    764 	.byte	0x14	/* uleb128 0x4 */
    765 	.byte	0x4	/* DW_CFA_advance_loc4 */
    766 	.4byte	.LCFI5-.LCFI4
    767 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    768 	.byte	0x18	/* uleb128 0x4 */
    769 	.byte	0x91	/* DW_CFA_offset, column 0x11 */
    770 	.byte	0x6	/* uleb128 0x6 */
    771 	.byte	0x8e	/* DW_CFA_offset, column 0xe */
    772 	.byte	0x5	/* uleb128 0x5 */
    773 	.byte	0x8c	/* DW_CFA_offset, column 0xc */
    774 	.byte	0x4	/* uleb128 0x4 */
    775 	.byte	0x8a	/* DW_CFA_offset, column 0xa */
    776 	.byte	0x3	/* uleb128 0x3 */
    777 	.byte	0x89	/* DW_CFA_offset, column 0x9 */
    778 	.byte	0x2	/* uleb128 0x2 */
    779 	.byte	0x88	/* DW_CFA_offset, column 0x8 */
    780 	.byte	0x1	/* uleb128 0x1 */
    781 	.byte	0x4	/* DW_CFA_advance_loc4 */
    782 	.4byte	.LCFI6-.LCFI5
    783 	.byte	0xd	/* DW_CFA_def_cfa_register */
    784 	.byte	0xe	/* uleb128 0xe */
    785 	.align	2
    786 .LEFDE1:
    787 
    788 .LSFDE3:
    789 	.4byte	.LEFDE3-.LASFDE3	/* FDE Length */
    790 .LASFDE3:
    791 	.4byte	.LASFDE3-__FRAME_BEGIN__	/* FDE CIE offset */
    792 #ifdef PIC
    793 	.4byte	.LFB2-.	/* FDE initial location */
    794 #else
    795 	.4byte	.LFB2	/* FDE initial location */
    796 #endif
    797 	.4byte	.LFE2-.LFB2	 /* FDE address range */
    798 #ifdef PIC
    799 	.uleb128 0x0	/* Augmentation size */
    800 #endif
    801 	.byte	0x4	/* DW_CFA_advance_loc4 */
    802 	.4byte	.LCFI7-.LFB2
    803 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    804 	.byte	0x4	/* uleb128 0x4 */
    805 	.byte	0x4	/* DW_CFA_advance_loc4 */
    806 	.4byte	.LCFI8-.LCFI7
    807 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    808 	.byte	0x8	/* uleb128 0x4 */
    809 	.byte	0x4	/* DW_CFA_advance_loc4 */
    810 	.4byte	.LCFI9-.LCFI8
    811 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    812 	.byte	0xc	/* uleb128 0x4 */
    813 	.byte	0x4	/* DW_CFA_advance_loc4 */
    814 	.4byte	.LCFIA-.LCFI9
    815 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    816 	.byte	0x10	/* uleb128 0x4 */
    817 	.byte	0x4	/* DW_CFA_advance_loc4 */
    818 	.4byte	.LCFIB-.LCFIA
    819 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    820 	.byte	0x14	/* uleb128 0x4 */
    821 	.byte	0x4	/* DW_CFA_advance_loc4 */
    822 	.4byte	.LCFIC-.LCFIB
    823 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    824 	.byte	0x18	/* uleb128 0x4 */
    825 	.byte	0x4	/* DW_CFA_advance_loc4 */
    826 	.4byte	.LCFID-.LCFIC
    827 	.byte	0xe	/* DW_CFA_def_cfa_offset */
    828 #if defined(__SH4__)
    829 	.byte	24+48	/* uleb128 24+48 */
    830 #else
    831 	.byte	24+16	/* uleb128 24+16 */
    832 #endif
    833 	.byte	0x91	/* DW_CFA_offset, column 0x11 */
    834 	.byte	0x6	/* uleb128 0x6 */
    835 	.byte	0x8e	/* DW_CFA_offset, column 0xe */
    836 	.byte	0x5	/* uleb128 0x5 */
    837 	.byte	0x84	/* DW_CFA_offset, column 0x4 */
    838 	.byte	0x4	/* uleb128 0x4 */
    839 	.byte	0x85	/* DW_CFA_offset, column 0x5 */
    840 	.byte	0x3	/* uleb128 0x3 */
    841 	.byte	0x86	/* DW_CFA_offset, column 0x6 */
    842 	.byte	0x2	/* uleb128 0x2 */
    843 	.byte	0x87	/* DW_CFA_offset, column 0x7 */
    844 	.byte	0x1	/* uleb128 0x1 */
    845 	.byte	0x4	/* DW_CFA_advance_loc4 */
    846 	.4byte	.LCFIE-.LCFID
    847 	.byte	0xd	/* DW_CFA_def_cfa_register */
    848 	.byte	0xe	/* uleb128 0xe */
    849 	.align	2
    850 .LEFDE3:
    851