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