github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libffi/src/sh/sysv.S (about)

     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,
    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     ----------------------------------------------------------------------- */
    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: