CWG 616, 1213 - value category of subobject references.
[official-gcc.git] / libffi / src / sh / sysv.S
blob5be7516d6559e3ce84e1380905950328bcb49ced
1 /* -----------------------------------------------------------------------
2    sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima
3    
4    SuperH Foreign Function Interface 
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:
14    The above copyright notice and this permission notice shall be included
15    in all copies or substantial portions of the Software.
17    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20    NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24    DEALINGS IN THE SOFTWARE.
25    ----------------------------------------------------------------------- */
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
38 #if defined(__HITACHI__)
39 #define STRUCT_VALUE_ADDRESS_WITH_ARG 1
40 #else
41 #define STRUCT_VALUE_ADDRESS_WITH_ARG 0
42 #endif
44 .text
46         # r4:   ffi_prep_args
47         # r5:   &ecif
48         # r6:   bytes
49         # r7:   flags
50         # sp+0: rvalue
51         # sp+4: fn
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
75         sub     r6,r15
76         add     #-16,r15
77         mov     #~7,r0
78         and     r0,r15
80         mov     r4,r0
81         jsr     @r0
82          mov    r15,r4
84         mov     r9,r1
85         shlr8   r9
86         shlr8   r9
87         shlr8   r9
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
100         mov     #4,r2
102         mov     #4,r3
104 L_pass:
105         cmp/pl  r8
106         bf      L_call_it
108         mov     r1,r0
109         and     #3,r0
111 L_pass_d:
112         cmp/eq  #FFI_TYPE_DOUBLE,r0
113         bf      L_pass_f
115         mov     r3,r0
116         and     #1,r0
117         tst     r0,r0
118         bt      1f
119         add     #1,r3
121         mov     #12,r0
122         cmp/hs  r0,r3
123         bt/s    3f
124          shlr2  r1
125         bsr     L_pop_d
126          nop
128         add     #2,r3
129         bra     L_pass
130          add    #-8,r8
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
167 L_pass_f:
168         cmp/eq  #FFI_TYPE_FLOAT,r0
169         bf      L_pass_i
171         mov     #12,r0
172         cmp/hs  r0,r3
173         bt/s    2f
174          shlr2  r1
175         bsr     L_pop_f
176          nop
178         add     #1,r3
179         bra     L_pass
180          add    #-4,r8
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
224 L_pass_i:
225         cmp/eq  #FFI_TYPE_INT,r0
226         bf      L_call_it
228         mov     #8,r0
229         cmp/hs  r0,r2
230         bt/s    2f
231          shlr2  r1
232         bsr     L_pop_i
233          nop
235         add     #1,r2
236         bra     L_pass
237          add    #-4,r8
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
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
263 L_ret_d:
264         mov     #FFI_TYPE_DOUBLE,r2
265         cmp/eq  r2,r9
266         bf      L_ret_ll
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
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
290         mov.l   @(24,r14),r2
291         mov.l   r0,@r2
292         bra     L_epilogue
293          mov.l  r1,@(4,r2)
295 L_ret_f:
296         mov     #FFI_TYPE_FLOAT,r2
297         cmp/eq  r2,r9
298         bf      L_ret_i
300         mov.l   @(24,r14),r1
301         bra     L_epilogue
302          fmov.s fr0,@r1
304 L_ret_i:
305         mov     #FFI_TYPE_INT,r2
306         cmp/eq  r2,r9
307         bf      L_epilogue
309         mov.l   @(24,r14),r1
310         bra     L_epilogue
311          mov.l  r0,@r1
313 L_epilogue:
314         # Remove the space we pushed for the args
315         mov   r14,r15
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
328         sub     r6,r15
329         add     #-16,r15
330         mov     #~7,r0
331         and     r0,r15
333         mov     r4,r0
334         jsr     @r0
335          mov    r15,r4
337         mov     r9,r3
338         shlr8   r9
339         shlr8   r9
340         shlr8   r9
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
353         mov     #4,r2
356 L_pass:
357         cmp/pl  r8
358         bf      L_call_it
360         mov     r3,r0
361         and     #3,r0
363 L_pass_d:
364         cmp/eq  #FFI_TYPE_DOUBLE,r0
365         bf      L_pass_i
367         mov     r15,r0
368         and     #7,r0
369         tst     r0,r0
370         bt      1f
371         add     #4,r15
373         mov     #8,r0
374         cmp/hs  r0,r2
375         bt/s    2f
376          shlr2  r3
377         bsr     L_pop_d
378          nop
380         add     #2,r2
381         bra     L_pass
382          add    #-8,r8
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
404 L_pass_i:
405         cmp/eq  #FFI_TYPE_INT,r0
406         bf      L_call_it
408         mov     #8,r0
409         cmp/hs  r0,r2
410         bt/s    2f
411          shlr2  r3
412         bsr     L_pop_i
413          nop
415         add     #1,r2
416         bra     L_pass
417          add    #-4,r8
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
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
443 L_ret_d:
444         mov     #FFI_TYPE_DOUBLE,r2
445         cmp/eq  r2,r9
446         bf      L_ret_ll
448         mov.l   @(24,r14),r2
449         mov.l   r0,@r2
450         bra     L_epilogue
451          mov.l  r1,@(4,r2)
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
462         mov.l   @(24,r14),r2
463         mov.l   r0,@r2
464         bra     L_epilogue
465          mov.l  r1,@(4,r2)
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
475         mov.l   @(24,r14),r1
476         bra     L_epilogue
477          mov.l  r0,@r1
479 L_epilogue:
480         # Remove the space we pushed for the args
481         mov   r14,r15
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)
495 .globl  ffi_closure_helper_SYSV
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
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:
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
562         bt/s    10f
563          mov    r2, r5
564         mov     r14,r1
565         add     #8,r1
566         mov     r1,r5
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
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
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
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 */
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
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
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
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
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 */
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)
705 #if defined __ELF__ && defined __linux__
706         .section        .note.GNU-stack,"",@progbits
707 #endif
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:
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: