Home | History | Annotate | Download | only in lib
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
      3    2004, 2005, 2006
      4    Free Software Foundation, Inc.
      5  */
      6 
      7 !! libgcc routines for the Renesas / SuperH SH CPUs.
      8 !! Contributed by Steve Chamberlain.
      9 !! sac@cygnus.com
     10 
     11 !! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
     12 !! recoded in assembly by Toshiyasu Morita
     13 !! tm@netcom.com
     14 
     15 /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
     16    ELF local label prefixes by J"orn Rennecke
     17    amylaar (at) cygnus.com  */
     18 
     19 !
     20 ! __lshrsi3)
     21 !
     22 ! Entry:
     23 !
     24 ! r4: Value to shift
     25 ! r5: Shifts
     26 !
     27 ! Exit:
     28 !
     29 ! r0: Result
     30 !
     31 ! Destroys:
     32 !
     33 ! (none)
     34 !
     35 	.global	__lshrsi3
     36 	.align	2
     37 __lshrsi3:
     38 	mov	#31,r0
     39 	and	r0,r5
     40 	mova	__lshrsi3_table,r0
     41 	mov.b	@(r0,r5),r5
     42 #ifdef __sh1__
     43 	add	r5,r0
     44 	jmp	@r0
     45 #else
     46 	braf	r5
     47 #endif
     48 	mov	r4,r0
     49 
     50 	.align	2
     51 __lshrsi3_table:
     52 	.byte		__lshrsi3_0-__lshrsi3_table
     53 	.byte		__lshrsi3_1-__lshrsi3_table
     54 	.byte		__lshrsi3_2-__lshrsi3_table
     55 	.byte		__lshrsi3_3-__lshrsi3_table
     56 	.byte		__lshrsi3_4-__lshrsi3_table
     57 	.byte		__lshrsi3_5-__lshrsi3_table
     58 	.byte		__lshrsi3_6-__lshrsi3_table
     59 	.byte		__lshrsi3_7-__lshrsi3_table
     60 	.byte		__lshrsi3_8-__lshrsi3_table
     61 	.byte		__lshrsi3_9-__lshrsi3_table
     62 	.byte		__lshrsi3_10-__lshrsi3_table
     63 	.byte		__lshrsi3_11-__lshrsi3_table
     64 	.byte		__lshrsi3_12-__lshrsi3_table
     65 	.byte		__lshrsi3_13-__lshrsi3_table
     66 	.byte		__lshrsi3_14-__lshrsi3_table
     67 	.byte		__lshrsi3_15-__lshrsi3_table
     68 	.byte		__lshrsi3_16-__lshrsi3_table
     69 	.byte		__lshrsi3_17-__lshrsi3_table
     70 	.byte		__lshrsi3_18-__lshrsi3_table
     71 	.byte		__lshrsi3_19-__lshrsi3_table
     72 	.byte		__lshrsi3_20-__lshrsi3_table
     73 	.byte		__lshrsi3_21-__lshrsi3_table
     74 	.byte		__lshrsi3_22-__lshrsi3_table
     75 	.byte		__lshrsi3_23-__lshrsi3_table
     76 	.byte		__lshrsi3_24-__lshrsi3_table
     77 	.byte		__lshrsi3_25-__lshrsi3_table
     78 	.byte		__lshrsi3_26-__lshrsi3_table
     79 	.byte		__lshrsi3_27-__lshrsi3_table
     80 	.byte		__lshrsi3_28-__lshrsi3_table
     81 	.byte		__lshrsi3_29-__lshrsi3_table
     82 	.byte		__lshrsi3_30-__lshrsi3_table
     83 	.byte		__lshrsi3_31-__lshrsi3_table
     84 
     85 __lshrsi3_6:
     86 	shlr2	r0
     87 __lshrsi3_4:
     88 	shlr2	r0
     89 __lshrsi3_2:
     90 	rts
     91 	shlr2	r0
     92 
     93 __lshrsi3_7:
     94 	shlr2	r0
     95 __lshrsi3_5:
     96 	shlr2	r0
     97 __lshrsi3_3:
     98 	shlr2	r0
     99 __lshrsi3_1:
    100 	rts
    101 	shlr	r0
    102 
    103 __lshrsi3_14:
    104 	shlr2	r0
    105 __lshrsi3_12:
    106 	shlr2	r0
    107 __lshrsi3_10:
    108 	shlr2	r0
    109 __lshrsi3_8:
    110 	rts
    111 	shlr8	r0
    112 
    113 __lshrsi3_15:
    114 	shlr2	r0
    115 __lshrsi3_13:
    116 	shlr2	r0
    117 __lshrsi3_11:
    118 	shlr2	r0
    119 __lshrsi3_9:
    120 	shlr8	r0
    121 	rts
    122 	shlr	r0
    123 
    124 __lshrsi3_22:
    125 	shlr2	r0
    126 __lshrsi3_20:
    127 	shlr2	r0
    128 __lshrsi3_18:
    129 	shlr2	r0
    130 __lshrsi3_16:
    131 	rts
    132 	shlr16	r0
    133 
    134 __lshrsi3_23:
    135 	shlr2	r0
    136 __lshrsi3_21:
    137 	shlr2	r0
    138 __lshrsi3_19:
    139 	shlr2	r0
    140 __lshrsi3_17:
    141 	shlr16	r0
    142 	rts
    143 	shlr	r0
    144 
    145 __lshrsi3_30:
    146 	shlr2	r0
    147 __lshrsi3_28:
    148 	shlr2	r0
    149 __lshrsi3_26:
    150 	shlr2	r0
    151 __lshrsi3_24:
    152 	shlr16	r0
    153 	rts
    154 	shlr8	r0
    155 
    156 __lshrsi3_31:
    157 	shlr2	r0
    158 __lshrsi3_29:
    159 	shlr2	r0
    160 __lshrsi3_27:
    161 	shlr2	r0
    162 __lshrsi3_25:
    163 	shlr16	r0
    164 	shlr8	r0
    165 	rts
    166 	shlr	r0
    167 
    168 __lshrsi3_0:
    169 	rts
    170 	nop
    171