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 ! __ashrsi3
     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 
     36 	.global	__ashrsi3
     37 
     38 	.align	2
     39 __ashrsi3:
     40 	mov	#31,r0
     41 	and	r0,r5
     42 	mova	ashrsi3_table,r0
     43 	mov.b	@(r0,r5),r5
     44 #ifdef __sh1__
     45 	add	r5,r0
     46 	jmp	@r0
     47 #else
     48 	braf	r5
     49 #endif
     50 	mov	r4,r0
     51 
     52 	.align	2
     53 ashrsi3_table:
     54 	.byte		ashrsi3_0-ashrsi3_table
     55 	.byte		ashrsi3_1-ashrsi3_table
     56 	.byte		ashrsi3_2-ashrsi3_table
     57 	.byte		ashrsi3_3-ashrsi3_table
     58 	.byte		ashrsi3_4-ashrsi3_table
     59 	.byte		ashrsi3_5-ashrsi3_table
     60 	.byte		ashrsi3_6-ashrsi3_table
     61 	.byte		ashrsi3_7-ashrsi3_table
     62 	.byte		ashrsi3_8-ashrsi3_table
     63 	.byte		ashrsi3_9-ashrsi3_table
     64 	.byte		ashrsi3_10-ashrsi3_table
     65 	.byte		ashrsi3_11-ashrsi3_table
     66 	.byte		ashrsi3_12-ashrsi3_table
     67 	.byte		ashrsi3_13-ashrsi3_table
     68 	.byte		ashrsi3_14-ashrsi3_table
     69 	.byte		ashrsi3_15-ashrsi3_table
     70 	.byte		ashrsi3_16-ashrsi3_table
     71 	.byte		ashrsi3_17-ashrsi3_table
     72 	.byte		ashrsi3_18-ashrsi3_table
     73 	.byte		ashrsi3_19-ashrsi3_table
     74 	.byte		ashrsi3_20-ashrsi3_table
     75 	.byte		ashrsi3_21-ashrsi3_table
     76 	.byte		ashrsi3_22-ashrsi3_table
     77 	.byte		ashrsi3_23-ashrsi3_table
     78 	.byte		ashrsi3_24-ashrsi3_table
     79 	.byte		ashrsi3_25-ashrsi3_table
     80 	.byte		ashrsi3_26-ashrsi3_table
     81 	.byte		ashrsi3_27-ashrsi3_table
     82 	.byte		ashrsi3_28-ashrsi3_table
     83 	.byte		ashrsi3_29-ashrsi3_table
     84 	.byte		ashrsi3_30-ashrsi3_table
     85 	.byte		ashrsi3_31-ashrsi3_table
     86 
     87 ashrsi3_31:
     88 	rotcl	r0
     89 	rts
     90 	subc	r0,r0
     91 
     92 ashrsi3_30:
     93 	shar	r0
     94 ashrsi3_29:
     95 	shar	r0
     96 ashrsi3_28:
     97 	shar	r0
     98 ashrsi3_27:
     99 	shar	r0
    100 ashrsi3_26:
    101 	shar	r0
    102 ashrsi3_25:
    103 	shar	r0
    104 ashrsi3_24:
    105 	shlr16	r0
    106 	shlr8	r0
    107 	rts
    108 	exts.b	r0,r0
    109 
    110 ashrsi3_23:
    111 	shar	r0
    112 ashrsi3_22:
    113 	shar	r0
    114 ashrsi3_21:
    115 	shar	r0
    116 ashrsi3_20:
    117 	shar	r0
    118 ashrsi3_19:
    119 	shar	r0
    120 ashrsi3_18:
    121 	shar	r0
    122 ashrsi3_17:
    123 	shar	r0
    124 ashrsi3_16:
    125 	shlr16	r0
    126 	rts
    127 	exts.w	r0,r0
    128 
    129 ashrsi3_15:
    130 	shar	r0
    131 ashrsi3_14:
    132 	shar	r0
    133 ashrsi3_13:
    134 	shar	r0
    135 ashrsi3_12:
    136 	shar	r0
    137 ashrsi3_11:
    138 	shar	r0
    139 ashrsi3_10:
    140 	shar	r0
    141 ashrsi3_9:
    142 	shar	r0
    143 ashrsi3_8:
    144 	shar	r0
    145 ashrsi3_7:
    146 	shar	r0
    147 ashrsi3_6:
    148 	shar	r0
    149 ashrsi3_5:
    150 	shar	r0
    151 ashrsi3_4:
    152 	shar	r0
    153 ashrsi3_3:
    154 	shar	r0
    155 ashrsi3_2:
    156 	shar	r0
    157 ashrsi3_1:
    158 	rts
    159 	shar	r0
    160 
    161 ashrsi3_0:
    162 	rts
    163 	nop
    164