blob: 6064c206d823deab890bc81898f7e9df24168a2b [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Phil Edworthy6be2a532011-10-24 10:24:12 +01002/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005, 2006
4 Free Software Foundation, Inc.
Wolfgang Denkd79de1d2013-07-08 09:37:19 +02005 */
Phil Edworthy6be2a532011-10-24 10:24:12 +01006
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@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
Wolfgang Denkb60c5572011-12-19 12:03:40 +010037
Phil Edworthy6be2a532011-10-24 10:24:12 +010038 .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
53ashrsi3_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
87ashrsi3_31:
88 rotcl r0
89 rts
90 subc r0,r0
91
92ashrsi3_30:
93 shar r0
94ashrsi3_29:
95 shar r0
96ashrsi3_28:
97 shar r0
98ashrsi3_27:
99 shar r0
100ashrsi3_26:
101 shar r0
102ashrsi3_25:
103 shar r0
104ashrsi3_24:
105 shlr16 r0
106 shlr8 r0
107 rts
108 exts.b r0,r0
109
110ashrsi3_23:
111 shar r0
112ashrsi3_22:
113 shar r0
114ashrsi3_21:
115 shar r0
116ashrsi3_20:
117 shar r0
118ashrsi3_19:
119 shar r0
120ashrsi3_18:
121 shar r0
122ashrsi3_17:
123 shar r0
124ashrsi3_16:
125 shlr16 r0
126 rts
127 exts.w r0,r0
128
129ashrsi3_15:
130 shar r0
131ashrsi3_14:
132 shar r0
133ashrsi3_13:
134 shar r0
135ashrsi3_12:
136 shar r0
137ashrsi3_11:
138 shar r0
139ashrsi3_10:
140 shar r0
141ashrsi3_9:
142 shar r0
143ashrsi3_8:
144 shar r0
145ashrsi3_7:
146 shar r0
147ashrsi3_6:
148 shar r0
149ashrsi3_5:
150 shar r0
151ashrsi3_4:
152 shar r0
153ashrsi3_3:
154 shar r0
155ashrsi3_2:
156 shar r0
157ashrsi3_1:
158 rts
159 shar r0
160
161ashrsi3_0:
162 rts
163 nop