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