Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / libffi / src / sh / sysv.S
blob887137db3ce7a53744dc4945481dfa2c79a9a9b9
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         mov     #8,r0
405         cmp/hs  r0,r2
406         bt/s    2f
407          shlr2  r3
408         bsr     L_pop_i
409          nop
411         add     #1,r2
412         bra     L_pass
413          add    #-4,r8
415 L_pop_i:
416         mov     r2,r0
417         shll2   r0
418         add     #-16,r0
419         braf    r0
420          nop
421         rts
422          mov.l  @r15+,r4
423         rts
424          mov.l  @r15+,r5
425         rts
426          mov.l  @r15+,r6
427         rts
428          mov.l  @r15+,r7
430 L_call_it:
431         # call function
432 #if (! STRUCT_VALUE_ADDRESS_WITH_ARG)
433         mov     r10, r2
434 #endif
435         mov.l  @(28,r14),r1
436         jsr    @r1
437          nop
439 L_ret_d:
440         mov     #FFI_TYPE_DOUBLE,r2
441         cmp/eq  r2,r9
442         bf      L_ret_ll
444         mov.l   @(24,r14),r2
445         mov.l   r0,@r2
446         bra     L_epilogue
447          mov.l  r1,@(4,r2)
449 L_ret_ll:
450         mov     #FFI_TYPE_SINT64,r2
451         cmp/eq  r2,r9
452         bt/s    1f
453          mov    #FFI_TYPE_UINT64,r2
454         cmp/eq  r2,r9
455         bf      L_ret_i
458         mov.l   @(24,r14),r2
459         mov.l   r0,@r2
460         bra     L_epilogue
461          mov.l  r1,@(4,r2)
463 L_ret_i:
464         mov     #FFI_TYPE_FLOAT,r2
465         cmp/eq  r2,r9
466         bt      1f
467         mov     #FFI_TYPE_INT,r2
468         cmp/eq  r2,r9
469         bf      L_epilogue
471         mov.l   @(24,r14),r1
472         bra     L_epilogue
473          mov.l  r0,@r1
475 L_epilogue:
476         # Remove the space we pushed for the args
477         mov   r14,r15
479         lds.l  @r15+,pr
480         mov.l  @r15+,r14
481         mov.l  @r15+,r12
482         mov.l  @r15+,r10
483         mov.l  @r15+,r9
484         rts
485          mov.l  @r15+,r8
486 #endif
487 .LFE1:
488 .ffi_call_SYSV_end:
489         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
491 .globl  ffi_closure_helper_SYSV
493 ENTRY(ffi_closure_SYSV)
494 .LFB2:
495         mov.l   r14,@-r15
496 .LCFI7:
497         sts.l   pr,@-r15
499         /* Stack layout:        
500            ...
501            32 bytes (floating register parameters, SH-4 only)
502            16 bytes (register parameters)
503             8 bytes (result)
504             4 bytes (pad)
505             4 bytes (5th arg)
506            <- new stack pointer
507         */
508 .LCFI8:
509 #if defined(__SH4__)
510         add     #-64,r15
511 #else
512         add     #-32,r15
513 #endif
514 .LCFI9:
515         mov     r15,r14
516 .LCFIA:
517         mov     r14,r1
518         add     #32,r1
519         mov.l   r7,@-r1
520         mov.l   r6,@-r1
521         mov.l   r5,@-r1
522         mov.l   r4,@-r1
523         mov     r1,r6
525 #if defined(__SH4__)
526         mov     r14,r1
527         add     #64,r1
528 #ifdef __LITTLE_ENDIAN__
529         fmov.s  fr10,@-r1
530         fmov.s  fr11,@-r1
531         fmov.s  fr8,@-r1
532         fmov.s  fr9,@-r1
533         fmov.s  fr6,@-r1
534         fmov.s  fr7,@-r1
535         fmov.s  fr4,@-r1
536         fmov.s  fr5,@-r1
537 #else
538         fmov.s  fr11,@-r1
539         fmov.s  fr10,@-r1
540         fmov.s  fr9,@-r1
541         fmov.s  fr8,@-r1
542         fmov.s  fr7,@-r1
543         fmov.s  fr6,@-r1
544         fmov.s  fr5,@-r1
545         fmov.s  fr4,@-r1
546 #endif
547         mov     r1,r7
548 #endif
550         bt/s    10f
551          mov    r2, r5
552         mov     r14,r1
553         add     #8,r1
554         mov     r1,r5
557         mov     r14,r1
558 #if defined(__SH4__)
559         add     #72,r1
560 #else
561         add     #40,r1
562 #endif
563         mov.l   r1,@r14
565 #ifdef PIC
566         mov.l   L_got,r1
567         mova    L_got,r0
568         add     r0,r1
569         mov.l   L_helper,r0
570         add     r1,r0
571 #else
572         mov.l   L_helper,r0
573 #endif
574         jsr     @r0
575          mov    r3,r4
577         shll    r0
578         mov     r0,r1
579         mova    L_table,r0
580         add     r1,r0
581         mov.w   @r0,r0
582         mov     r14,r2
583         braf    r0
584          add    #8,r2
586         .align 2
587 #ifdef PIC
588 L_got:
589         .long   _GLOBAL_OFFSET_TABLE_
590 L_helper:
591         .long   ffi_closure_helper_SYSV@GOTOFF
592 #else
593 L_helper:
594         .long   ffi_closure_helper_SYSV
595 #endif
596 L_table:
597         .short L_case_v - 0b    /* FFI_TYPE_VOID */
598         .short L_case_i - 0b    /* FFI_TYPE_INT */
599 #if defined(__SH4__)
600         .short L_case_f - 0b    /* FFI_TYPE_FLOAT */
601         .short L_case_d - 0b    /* FFI_TYPE_DOUBLE */
602         .short L_case_d - 0b    /* FFI_TYPE_LONGDOUBLE */
603 #else
604         .short L_case_i - 0b    /* FFI_TYPE_FLOAT */
605         .short L_case_ll - 0b   /* FFI_TYPE_DOUBLE */
606         .short L_case_ll - 0b   /* FFI_TYPE_LONGDOUBLE */
607 #endif
608         .short L_case_uq - 0b   /* FFI_TYPE_UINT8 */
609         .short L_case_q - 0b    /* FFI_TYPE_SINT8 */
610         .short L_case_uh - 0b   /* FFI_TYPE_UINT16 */
611         .short L_case_h - 0b    /* FFI_TYPE_SINT16 */
612         .short L_case_i - 0b    /* FFI_TYPE_UINT32 */
613         .short L_case_i - 0b    /* FFI_TYPE_SINT32 */
614         .short L_case_ll - 0b   /* FFI_TYPE_UINT64 */
615         .short L_case_ll - 0b   /* FFI_TYPE_SINT64 */
616         .short L_case_v - 0b    /* FFI_TYPE_STRUCT */
617         .short L_case_i - 0b    /* FFI_TYPE_POINTER */
619 #if defined(__SH4__)
620 L_case_d:
621 #ifdef __LITTLE_ENDIAN__
622         fmov.s  @r2+,fr1
623         bra     L_case_v
624          fmov.s @r2,fr0
625 #else
626         fmov.s  @r2+,fr0
627         bra     L_case_v
628          fmov.s @r2,fr1
629 #endif
631 L_case_f:
632         bra     L_case_v
633          fmov.s @r2,fr0
634 #endif
635         
636 L_case_ll:
637         mov.l   @r2+,r0
638         bra     L_case_v
639          mov.l  @r2,r1
640         
641 L_case_i:
642         bra     L_case_v
643          mov.l  @r2,r0
644         
645 L_case_q:
646 #ifdef __LITTLE_ENDIAN__
647 #else
648         add     #3,r2
649 #endif
650         bra     L_case_v
651          mov.b  @r2,r0
653 L_case_uq:
654 #ifdef __LITTLE_ENDIAN__
655 #else
656         add     #3,r2
657 #endif
658         mov.b   @r2,r0
659         bra     L_case_v
660          extu.b r0,r0
662 L_case_h:
663 #ifdef __LITTLE_ENDIAN__
664 #else
665         add     #2,r2
666 #endif
667         bra     L_case_v
668          mov.w  @r2,r0
670 L_case_uh:
671 #ifdef __LITTLE_ENDIAN__
672 #else
673         add     #2,r2
674 #endif
675         mov.w   @r2,r0
676         extu.w  r0,r0
677         /* fall through */
679 L_case_v:
680 #if defined(__SH4__)
681         add     #64,r15
682 #else
683         add     #32,r15
684 #endif
685         lds.l   @r15+,pr
686         rts
687          mov.l  @r15+,r14
688 .LFE2:
689 .ffi_closure_SYSV_end:
690         .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
692         .section        ".eh_frame","aw",@progbits
693 __FRAME_BEGIN__:
694         .4byte  .LECIE1-.LSCIE1 /* Length of Common Information Entry */
695 .LSCIE1:
696         .4byte  0x0     /* CIE Identifier Tag */
697         .byte   0x1     /* CIE Version */
698 #ifdef PIC
699         .ascii "zR\0"   /* CIE Augmentation */
700 #else
701         .byte   0x0     /* CIE Augmentation */
702 #endif
703         .byte   0x1     /* uleb128 0x1; CIE Code Alignment Factor */
704         .byte   0x7c    /* sleb128 -4; CIE Data Alignment Factor */
705         .byte   0x11    /* CIE RA Column */
706 #ifdef PIC
707         .uleb128 0x1    /* Augmentation size */
708         .byte   0x10    /* FDE Encoding (pcrel) */
709 #endif
710         .byte   0xc     /* DW_CFA_def_cfa */
711         .byte   0xf     /* uleb128 0xf */
712         .byte   0x0     /* uleb128 0x0 */
713         .align  2
714 .LECIE1:
715 .LSFDE1:
716         .4byte  .LEFDE1-.LASFDE1        /* FDE Length */
717 .LASFDE1:
718         .4byte  .LASFDE1-__FRAME_BEGIN__        /* FDE CIE offset */
719 #ifdef PIC
720         .4byte  .LFB1-. /* FDE initial location */
721 #else
722         .4byte  .LFB1   /* FDE initial location */
723 #endif
724         .4byte  .LFE1-.LFB1      /* FDE address range */
725 #ifdef PIC
726         .uleb128 0x0    /* Augmentation size */
727 #endif
728         .byte   0x4     /* DW_CFA_advance_loc4 */
729         .4byte  .LCFI0-.LFB1
730         .byte   0xe     /* DW_CFA_def_cfa_offset */
731         .byte   0x4     /* uleb128 0x4 */
732         .byte   0x4     /* DW_CFA_advance_loc4 */
733         .4byte  .LCFI1-.LCFI0
734         .byte   0xe     /* DW_CFA_def_cfa_offset */
735         .byte   0x8     /* uleb128 0x4 */
736         .byte   0x4     /* DW_CFA_advance_loc4 */
737         .4byte  .LCFI2-.LCFI1
738         .byte   0xe     /* DW_CFA_def_cfa_offset */
739         .byte   0xc     /* uleb128 0x4 */
740         .byte   0x4     /* DW_CFA_advance_loc4 */
741         .4byte  .LCFI3-.LCFI2
742         .byte   0xe     /* DW_CFA_def_cfa_offset */
743         .byte   0x10    /* uleb128 0x4 */
744         .byte   0x4     /* DW_CFA_advance_loc4 */
745         .4byte  .LCFI4-.LCFI3
746         .byte   0xe     /* DW_CFA_def_cfa_offset */
747         .byte   0x14    /* uleb128 0x4 */
748         .byte   0x4     /* DW_CFA_advance_loc4 */
749         .4byte  .LCFI5-.LCFI4
750         .byte   0xe     /* DW_CFA_def_cfa_offset */
751         .byte   0x18    /* uleb128 0x4 */
752         .byte   0x91    /* DW_CFA_offset, column 0x11 */
753         .byte   0x6     /* uleb128 0x6 */
754         .byte   0x8e    /* DW_CFA_offset, column 0xe */
755         .byte   0x5     /* uleb128 0x5 */
756         .byte   0x8c    /* DW_CFA_offset, column 0xc */
757         .byte   0x4     /* uleb128 0x4 */
758         .byte   0x8a    /* DW_CFA_offset, column 0xa */
759         .byte   0x3     /* uleb128 0x3 */
760         .byte   0x89    /* DW_CFA_offset, column 0x9 */
761         .byte   0x2     /* uleb128 0x2 */
762         .byte   0x88    /* DW_CFA_offset, column 0x8 */
763         .byte   0x1     /* uleb128 0x1 */
764         .byte   0x4     /* DW_CFA_advance_loc4 */
765         .4byte  .LCFI6-.LCFI5
766         .byte   0xd     /* DW_CFA_def_cfa_register */
767         .byte   0xe     /* uleb128 0xe */
768         .align  2
769 .LEFDE1:
771 .LSFDE3:
772         .4byte  .LEFDE3-.LASFDE3        /* FDE Length */
773 .LASFDE3:
774         .4byte  .LASFDE3-__FRAME_BEGIN__        /* FDE CIE offset */
775 #ifdef PIC
776         .4byte  .LFB2-. /* FDE initial location */
777 #else
778         .4byte  .LFB2   /* FDE initial location */
779 #endif
780         .4byte  .LFE2-.LFB2      /* FDE address range */
781 #ifdef PIC
782         .uleb128 0x0    /* Augmentation size */
783 #endif
784         .byte   0x4     /* DW_CFA_advance_loc4 */
785         .4byte  .LCFI7-.LFB2
786         .byte   0xe     /* DW_CFA_def_cfa_offset */
787         .byte   0x4     /* uleb128 0x4 */
788         .byte   0x4     /* DW_CFA_advance_loc4 */
789         .4byte  .LCFI8-.LCFI7
790         .byte   0xe     /* DW_CFA_def_cfa_offset */
791         .byte   0x8     /* uleb128 0x8 */
792         .byte   0x4     /* DW_CFA_advance_loc4 */
793         .4byte  .LCFI9-.LCFI8
794         .byte   0xe     /* DW_CFA_def_cfa_offset */
795 #if defined(__SH4__)
796         .byte   8+64    /* uleb128 8+64 */
797 #else
798         .byte   8+32    /* uleb128 8+32 */
799 #endif
800         .byte   0x91    /* DW_CFA_offset, column 0x11 */
801         .byte   0x2
802         .byte   0x8e    /* DW_CFA_offset, column 0xe */
803         .byte   0x1
804         .byte   0x4     /* DW_CFA_advance_loc4 */
805         .4byte  .LCFIA-.LCFI9
806         .byte   0xd     /* DW_CFA_def_cfa_register */
807         .byte   0xe     /* uleb128 0xe */
808         .align  2
809 .LEFDE3: