xref: /OK3568_Linux_fs/kernel/arch/sh/lib/udivsi3_i4i.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4*4882a593Smuzhiyun   2004, 2005, 2006
5*4882a593Smuzhiyun   Free Software Foundation, Inc.
6*4882a593Smuzhiyun*/
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun!! libgcc routines for the Renesas / SuperH SH CPUs.
9*4882a593Smuzhiyun!! Contributed by Steve Chamberlain.
10*4882a593Smuzhiyun!! sac@cygnus.com
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
13*4882a593Smuzhiyun!! recoded in assembly by Toshiyasu Morita
14*4882a593Smuzhiyun!! tm@netcom.com
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
17*4882a593Smuzhiyun   ELF local label prefixes by J"orn Rennecke
18*4882a593Smuzhiyun   amylaar@cygnus.com  */
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun/* This code used shld, thus is not suitable for SH1 / SH2.  */
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun/* Signed / unsigned division without use of FPU, optimized for SH4.
23*4882a593Smuzhiyun   Uses a lookup table for divisors in the range -128 .. +128, and
24*4882a593Smuzhiyun   div1 with case distinction for larger divisors in three more ranges.
25*4882a593Smuzhiyun   The code is lumped together with the table to allow the use of mova.  */
26*4882a593Smuzhiyun#ifdef CONFIG_CPU_LITTLE_ENDIAN
27*4882a593Smuzhiyun#define L_LSB 0
28*4882a593Smuzhiyun#define L_LSWMSB 1
29*4882a593Smuzhiyun#define L_MSWLSB 2
30*4882a593Smuzhiyun#else
31*4882a593Smuzhiyun#define L_LSB 3
32*4882a593Smuzhiyun#define L_LSWMSB 2
33*4882a593Smuzhiyun#define L_MSWLSB 1
34*4882a593Smuzhiyun#endif
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun	.balign 4
37*4882a593Smuzhiyun	.global	__udivsi3_i4i
38*4882a593Smuzhiyun	.global	__udivsi3_i4
39*4882a593Smuzhiyun	.set	__udivsi3_i4, __udivsi3_i4i
40*4882a593Smuzhiyun	.type	__udivsi3_i4i, @function
41*4882a593Smuzhiyun__udivsi3_i4i:
42*4882a593Smuzhiyun	mov.w c128_w, r1
43*4882a593Smuzhiyun	div0u
44*4882a593Smuzhiyun	mov r4,r0
45*4882a593Smuzhiyun	shlr8 r0
46*4882a593Smuzhiyun	cmp/hi r1,r5
47*4882a593Smuzhiyun	extu.w r5,r1
48*4882a593Smuzhiyun	bf udiv_le128
49*4882a593Smuzhiyun	cmp/eq r5,r1
50*4882a593Smuzhiyun	bf udiv_ge64k
51*4882a593Smuzhiyun	shlr r0
52*4882a593Smuzhiyun	mov r5,r1
53*4882a593Smuzhiyun	shll16 r5
54*4882a593Smuzhiyun	mov.l r4,@-r15
55*4882a593Smuzhiyun	div1 r5,r0
56*4882a593Smuzhiyun	mov.l r1,@-r15
57*4882a593Smuzhiyun	div1 r5,r0
58*4882a593Smuzhiyun	div1 r5,r0
59*4882a593Smuzhiyun	bra udiv_25
60*4882a593Smuzhiyun	div1 r5,r0
61*4882a593Smuzhiyun
62*4882a593Smuzhiyundiv_le128:
63*4882a593Smuzhiyun	mova div_table_ix,r0
64*4882a593Smuzhiyun	bra div_le128_2
65*4882a593Smuzhiyun	mov.b @(r0,r5),r1
66*4882a593Smuzhiyunudiv_le128:
67*4882a593Smuzhiyun	mov.l r4,@-r15
68*4882a593Smuzhiyun	mova div_table_ix,r0
69*4882a593Smuzhiyun	mov.b @(r0,r5),r1
70*4882a593Smuzhiyun	mov.l r5,@-r15
71*4882a593Smuzhiyundiv_le128_2:
72*4882a593Smuzhiyun	mova div_table_inv,r0
73*4882a593Smuzhiyun	mov.l @(r0,r1),r1
74*4882a593Smuzhiyun	mov r5,r0
75*4882a593Smuzhiyun	tst #0xfe,r0
76*4882a593Smuzhiyun	mova div_table_clz,r0
77*4882a593Smuzhiyun	dmulu.l r1,r4
78*4882a593Smuzhiyun	mov.b @(r0,r5),r1
79*4882a593Smuzhiyun	bt/s div_by_1
80*4882a593Smuzhiyun	mov r4,r0
81*4882a593Smuzhiyun	mov.l @r15+,r5
82*4882a593Smuzhiyun	sts mach,r0
83*4882a593Smuzhiyun	/* clrt */
84*4882a593Smuzhiyun	addc r4,r0
85*4882a593Smuzhiyun	mov.l @r15+,r4
86*4882a593Smuzhiyun	rotcr r0
87*4882a593Smuzhiyun	rts
88*4882a593Smuzhiyun	shld r1,r0
89*4882a593Smuzhiyun
90*4882a593Smuzhiyundiv_by_1_neg:
91*4882a593Smuzhiyun	neg r4,r0
92*4882a593Smuzhiyundiv_by_1:
93*4882a593Smuzhiyun	mov.l @r15+,r5
94*4882a593Smuzhiyun	rts
95*4882a593Smuzhiyun	mov.l @r15+,r4
96*4882a593Smuzhiyun
97*4882a593Smuzhiyundiv_ge64k:
98*4882a593Smuzhiyun	bt/s div_r8
99*4882a593Smuzhiyun	div0u
100*4882a593Smuzhiyun	shll8 r5
101*4882a593Smuzhiyun	bra div_ge64k_2
102*4882a593Smuzhiyun	div1 r5,r0
103*4882a593Smuzhiyunudiv_ge64k:
104*4882a593Smuzhiyun	cmp/hi r0,r5
105*4882a593Smuzhiyun	mov r5,r1
106*4882a593Smuzhiyun	bt udiv_r8
107*4882a593Smuzhiyun	shll8 r5
108*4882a593Smuzhiyun	mov.l r4,@-r15
109*4882a593Smuzhiyun	div1 r5,r0
110*4882a593Smuzhiyun	mov.l r1,@-r15
111*4882a593Smuzhiyundiv_ge64k_2:
112*4882a593Smuzhiyun	div1 r5,r0
113*4882a593Smuzhiyun	mov.l zero_l,r1
114*4882a593Smuzhiyun	.rept 4
115*4882a593Smuzhiyun	div1 r5,r0
116*4882a593Smuzhiyun	.endr
117*4882a593Smuzhiyun	mov.l r1,@-r15
118*4882a593Smuzhiyun	div1 r5,r0
119*4882a593Smuzhiyun	mov.w m256_w,r1
120*4882a593Smuzhiyun	div1 r5,r0
121*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
122*4882a593Smuzhiyun	xor r4,r0
123*4882a593Smuzhiyun	and r1,r0
124*4882a593Smuzhiyun	bra div_ge64k_end
125*4882a593Smuzhiyun	xor r4,r0
126*4882a593Smuzhiyun
127*4882a593Smuzhiyundiv_r8:
128*4882a593Smuzhiyun	shll16 r4
129*4882a593Smuzhiyun	bra div_r8_2
130*4882a593Smuzhiyun	shll8 r4
131*4882a593Smuzhiyunudiv_r8:
132*4882a593Smuzhiyun	mov.l r4,@-r15
133*4882a593Smuzhiyun	shll16 r4
134*4882a593Smuzhiyun	clrt
135*4882a593Smuzhiyun	shll8 r4
136*4882a593Smuzhiyun	mov.l r5,@-r15
137*4882a593Smuzhiyundiv_r8_2:
138*4882a593Smuzhiyun	rotcl r4
139*4882a593Smuzhiyun	mov r0,r1
140*4882a593Smuzhiyun	div1 r5,r1
141*4882a593Smuzhiyun	mov r4,r0
142*4882a593Smuzhiyun	rotcl r0
143*4882a593Smuzhiyun	mov r5,r4
144*4882a593Smuzhiyun	div1 r5,r1
145*4882a593Smuzhiyun	.rept 5
146*4882a593Smuzhiyun	rotcl r0; div1 r5,r1
147*4882a593Smuzhiyun	.endr
148*4882a593Smuzhiyun	rotcl r0
149*4882a593Smuzhiyun	mov.l @r15+,r5
150*4882a593Smuzhiyun	div1 r4,r1
151*4882a593Smuzhiyun	mov.l @r15+,r4
152*4882a593Smuzhiyun	rts
153*4882a593Smuzhiyun	rotcl r0
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun	.global	__sdivsi3_i4i
156*4882a593Smuzhiyun	.global __sdivsi3_i4
157*4882a593Smuzhiyun	.global	__sdivsi3
158*4882a593Smuzhiyun	.set	__sdivsi3_i4, __sdivsi3_i4i
159*4882a593Smuzhiyun	.set	__sdivsi3, __sdivsi3_i4i
160*4882a593Smuzhiyun	.type	__sdivsi3_i4i, @function
161*4882a593Smuzhiyun	/* This is link-compatible with a __sdivsi3 call,
162*4882a593Smuzhiyun	   but we effectively clobber only r1.  */
163*4882a593Smuzhiyun__sdivsi3_i4i:
164*4882a593Smuzhiyun	mov.l r4,@-r15
165*4882a593Smuzhiyun	cmp/pz r5
166*4882a593Smuzhiyun	mov.w c128_w, r1
167*4882a593Smuzhiyun	bt/s pos_divisor
168*4882a593Smuzhiyun	cmp/pz r4
169*4882a593Smuzhiyun	mov.l r5,@-r15
170*4882a593Smuzhiyun	neg r5,r5
171*4882a593Smuzhiyun	bt/s neg_result
172*4882a593Smuzhiyun	cmp/hi r1,r5
173*4882a593Smuzhiyun	neg r4,r4
174*4882a593Smuzhiyunpos_result:
175*4882a593Smuzhiyun	extu.w r5,r0
176*4882a593Smuzhiyun	bf div_le128
177*4882a593Smuzhiyun	cmp/eq r5,r0
178*4882a593Smuzhiyun	mov r4,r0
179*4882a593Smuzhiyun	shlr8 r0
180*4882a593Smuzhiyun	bf/s div_ge64k
181*4882a593Smuzhiyun	cmp/hi r0,r5
182*4882a593Smuzhiyun	div0u
183*4882a593Smuzhiyun	shll16 r5
184*4882a593Smuzhiyun	div1 r5,r0
185*4882a593Smuzhiyun	div1 r5,r0
186*4882a593Smuzhiyun	div1 r5,r0
187*4882a593Smuzhiyunudiv_25:
188*4882a593Smuzhiyun	mov.l zero_l,r1
189*4882a593Smuzhiyun	div1 r5,r0
190*4882a593Smuzhiyun	div1 r5,r0
191*4882a593Smuzhiyun	mov.l r1,@-r15
192*4882a593Smuzhiyun	.rept 3
193*4882a593Smuzhiyun	div1 r5,r0
194*4882a593Smuzhiyun	.endr
195*4882a593Smuzhiyun	mov.b r0,@(L_MSWLSB,r15)
196*4882a593Smuzhiyun	xtrct r4,r0
197*4882a593Smuzhiyun	swap.w r0,r0
198*4882a593Smuzhiyun	.rept 8
199*4882a593Smuzhiyun	div1 r5,r0
200*4882a593Smuzhiyun	.endr
201*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
202*4882a593Smuzhiyundiv_ge64k_end:
203*4882a593Smuzhiyun	.rept 8
204*4882a593Smuzhiyun	div1 r5,r0
205*4882a593Smuzhiyun	.endr
206*4882a593Smuzhiyun	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
207*4882a593Smuzhiyun	extu.b r0,r0
208*4882a593Smuzhiyun	mov.l @r15+,r5
209*4882a593Smuzhiyun	or r4,r0
210*4882a593Smuzhiyun	mov.l @r15+,r4
211*4882a593Smuzhiyun	rts
212*4882a593Smuzhiyun	rotcl r0
213*4882a593Smuzhiyun
214*4882a593Smuzhiyundiv_le128_neg:
215*4882a593Smuzhiyun	tst #0xfe,r0
216*4882a593Smuzhiyun	mova div_table_ix,r0
217*4882a593Smuzhiyun	mov.b @(r0,r5),r1
218*4882a593Smuzhiyun	mova div_table_inv,r0
219*4882a593Smuzhiyun	bt/s div_by_1_neg
220*4882a593Smuzhiyun	mov.l @(r0,r1),r1
221*4882a593Smuzhiyun	mova div_table_clz,r0
222*4882a593Smuzhiyun	dmulu.l r1,r4
223*4882a593Smuzhiyun	mov.b @(r0,r5),r1
224*4882a593Smuzhiyun	mov.l @r15+,r5
225*4882a593Smuzhiyun	sts mach,r0
226*4882a593Smuzhiyun	/* clrt */
227*4882a593Smuzhiyun	addc r4,r0
228*4882a593Smuzhiyun	mov.l @r15+,r4
229*4882a593Smuzhiyun	rotcr r0
230*4882a593Smuzhiyun	shld r1,r0
231*4882a593Smuzhiyun	rts
232*4882a593Smuzhiyun	neg r0,r0
233*4882a593Smuzhiyun
234*4882a593Smuzhiyunpos_divisor:
235*4882a593Smuzhiyun	mov.l r5,@-r15
236*4882a593Smuzhiyun	bt/s pos_result
237*4882a593Smuzhiyun	cmp/hi r1,r5
238*4882a593Smuzhiyun	neg r4,r4
239*4882a593Smuzhiyunneg_result:
240*4882a593Smuzhiyun	extu.w r5,r0
241*4882a593Smuzhiyun	bf div_le128_neg
242*4882a593Smuzhiyun	cmp/eq r5,r0
243*4882a593Smuzhiyun	mov r4,r0
244*4882a593Smuzhiyun	shlr8 r0
245*4882a593Smuzhiyun	bf/s div_ge64k_neg
246*4882a593Smuzhiyun	cmp/hi r0,r5
247*4882a593Smuzhiyun	div0u
248*4882a593Smuzhiyun	mov.l zero_l,r1
249*4882a593Smuzhiyun	shll16 r5
250*4882a593Smuzhiyun	div1 r5,r0
251*4882a593Smuzhiyun	mov.l r1,@-r15
252*4882a593Smuzhiyun	.rept 7
253*4882a593Smuzhiyun	div1 r5,r0
254*4882a593Smuzhiyun	.endr
255*4882a593Smuzhiyun	mov.b r0,@(L_MSWLSB,r15)
256*4882a593Smuzhiyun	xtrct r4,r0
257*4882a593Smuzhiyun	swap.w r0,r0
258*4882a593Smuzhiyun	.rept 8
259*4882a593Smuzhiyun	div1 r5,r0
260*4882a593Smuzhiyun	.endr
261*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
262*4882a593Smuzhiyundiv_ge64k_neg_end:
263*4882a593Smuzhiyun	.rept 8
264*4882a593Smuzhiyun	div1 r5,r0
265*4882a593Smuzhiyun	.endr
266*4882a593Smuzhiyun	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
267*4882a593Smuzhiyun	extu.b r0,r1
268*4882a593Smuzhiyun	mov.l @r15+,r5
269*4882a593Smuzhiyun	or r4,r1
270*4882a593Smuzhiyundiv_r8_neg_end:
271*4882a593Smuzhiyun	mov.l @r15+,r4
272*4882a593Smuzhiyun	rotcl r1
273*4882a593Smuzhiyun	rts
274*4882a593Smuzhiyun	neg r1,r0
275*4882a593Smuzhiyun
276*4882a593Smuzhiyundiv_ge64k_neg:
277*4882a593Smuzhiyun	bt/s div_r8_neg
278*4882a593Smuzhiyun	div0u
279*4882a593Smuzhiyun	shll8 r5
280*4882a593Smuzhiyun	mov.l zero_l,r1
281*4882a593Smuzhiyun	.rept 6
282*4882a593Smuzhiyun	div1 r5,r0
283*4882a593Smuzhiyun	.endr
284*4882a593Smuzhiyun	mov.l r1,@-r15
285*4882a593Smuzhiyun	div1 r5,r0
286*4882a593Smuzhiyun	mov.w m256_w,r1
287*4882a593Smuzhiyun	div1 r5,r0
288*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
289*4882a593Smuzhiyun	xor r4,r0
290*4882a593Smuzhiyun	and r1,r0
291*4882a593Smuzhiyun	bra div_ge64k_neg_end
292*4882a593Smuzhiyun	xor r4,r0
293*4882a593Smuzhiyun
294*4882a593Smuzhiyunc128_w:
295*4882a593Smuzhiyun	.word 128
296*4882a593Smuzhiyun
297*4882a593Smuzhiyundiv_r8_neg:
298*4882a593Smuzhiyun	clrt
299*4882a593Smuzhiyun	shll16 r4
300*4882a593Smuzhiyun	mov r4,r1
301*4882a593Smuzhiyun	shll8 r1
302*4882a593Smuzhiyun	mov r5,r4
303*4882a593Smuzhiyun	.rept 7
304*4882a593Smuzhiyun	rotcl r1; div1 r5,r0
305*4882a593Smuzhiyun	.endr
306*4882a593Smuzhiyun	mov.l @r15+,r5
307*4882a593Smuzhiyun	rotcl r1
308*4882a593Smuzhiyun	bra div_r8_neg_end
309*4882a593Smuzhiyun	div1 r4,r0
310*4882a593Smuzhiyun
311*4882a593Smuzhiyunm256_w:
312*4882a593Smuzhiyun	.word 0xff00
313*4882a593Smuzhiyun/* This table has been generated by divtab-sh4.c.  */
314*4882a593Smuzhiyun	.balign 4
315*4882a593Smuzhiyundiv_table_clz:
316*4882a593Smuzhiyun	.byte	0
317*4882a593Smuzhiyun	.byte	1
318*4882a593Smuzhiyun	.byte	0
319*4882a593Smuzhiyun	.byte	-1
320*4882a593Smuzhiyun	.byte	-1
321*4882a593Smuzhiyun	.byte	-2
322*4882a593Smuzhiyun	.byte	-2
323*4882a593Smuzhiyun	.byte	-2
324*4882a593Smuzhiyun	.byte	-2
325*4882a593Smuzhiyun	.byte	-3
326*4882a593Smuzhiyun	.byte	-3
327*4882a593Smuzhiyun	.byte	-3
328*4882a593Smuzhiyun	.byte	-3
329*4882a593Smuzhiyun	.byte	-3
330*4882a593Smuzhiyun	.byte	-3
331*4882a593Smuzhiyun	.byte	-3
332*4882a593Smuzhiyun	.byte	-3
333*4882a593Smuzhiyun	.byte	-4
334*4882a593Smuzhiyun	.byte	-4
335*4882a593Smuzhiyun	.byte	-4
336*4882a593Smuzhiyun	.byte	-4
337*4882a593Smuzhiyun	.byte	-4
338*4882a593Smuzhiyun	.byte	-4
339*4882a593Smuzhiyun	.byte	-4
340*4882a593Smuzhiyun	.byte	-4
341*4882a593Smuzhiyun	.byte	-4
342*4882a593Smuzhiyun	.byte	-4
343*4882a593Smuzhiyun	.byte	-4
344*4882a593Smuzhiyun	.byte	-4
345*4882a593Smuzhiyun	.byte	-4
346*4882a593Smuzhiyun	.byte	-4
347*4882a593Smuzhiyun	.byte	-4
348*4882a593Smuzhiyun	.byte	-4
349*4882a593Smuzhiyun	.byte	-5
350*4882a593Smuzhiyun	.byte	-5
351*4882a593Smuzhiyun	.byte	-5
352*4882a593Smuzhiyun	.byte	-5
353*4882a593Smuzhiyun	.byte	-5
354*4882a593Smuzhiyun	.byte	-5
355*4882a593Smuzhiyun	.byte	-5
356*4882a593Smuzhiyun	.byte	-5
357*4882a593Smuzhiyun	.byte	-5
358*4882a593Smuzhiyun	.byte	-5
359*4882a593Smuzhiyun	.byte	-5
360*4882a593Smuzhiyun	.byte	-5
361*4882a593Smuzhiyun	.byte	-5
362*4882a593Smuzhiyun	.byte	-5
363*4882a593Smuzhiyun	.byte	-5
364*4882a593Smuzhiyun	.byte	-5
365*4882a593Smuzhiyun	.byte	-5
366*4882a593Smuzhiyun	.byte	-5
367*4882a593Smuzhiyun	.byte	-5
368*4882a593Smuzhiyun	.byte	-5
369*4882a593Smuzhiyun	.byte	-5
370*4882a593Smuzhiyun	.byte	-5
371*4882a593Smuzhiyun	.byte	-5
372*4882a593Smuzhiyun	.byte	-5
373*4882a593Smuzhiyun	.byte	-5
374*4882a593Smuzhiyun	.byte	-5
375*4882a593Smuzhiyun	.byte	-5
376*4882a593Smuzhiyun	.byte	-5
377*4882a593Smuzhiyun	.byte	-5
378*4882a593Smuzhiyun	.byte	-5
379*4882a593Smuzhiyun	.byte	-5
380*4882a593Smuzhiyun	.byte	-5
381*4882a593Smuzhiyun	.byte	-6
382*4882a593Smuzhiyun	.byte	-6
383*4882a593Smuzhiyun	.byte	-6
384*4882a593Smuzhiyun	.byte	-6
385*4882a593Smuzhiyun	.byte	-6
386*4882a593Smuzhiyun	.byte	-6
387*4882a593Smuzhiyun	.byte	-6
388*4882a593Smuzhiyun	.byte	-6
389*4882a593Smuzhiyun	.byte	-6
390*4882a593Smuzhiyun	.byte	-6
391*4882a593Smuzhiyun	.byte	-6
392*4882a593Smuzhiyun	.byte	-6
393*4882a593Smuzhiyun	.byte	-6
394*4882a593Smuzhiyun	.byte	-6
395*4882a593Smuzhiyun	.byte	-6
396*4882a593Smuzhiyun	.byte	-6
397*4882a593Smuzhiyun	.byte	-6
398*4882a593Smuzhiyun	.byte	-6
399*4882a593Smuzhiyun	.byte	-6
400*4882a593Smuzhiyun	.byte	-6
401*4882a593Smuzhiyun	.byte	-6
402*4882a593Smuzhiyun	.byte	-6
403*4882a593Smuzhiyun	.byte	-6
404*4882a593Smuzhiyun	.byte	-6
405*4882a593Smuzhiyun	.byte	-6
406*4882a593Smuzhiyun	.byte	-6
407*4882a593Smuzhiyun	.byte	-6
408*4882a593Smuzhiyun	.byte	-6
409*4882a593Smuzhiyun	.byte	-6
410*4882a593Smuzhiyun	.byte	-6
411*4882a593Smuzhiyun	.byte	-6
412*4882a593Smuzhiyun	.byte	-6
413*4882a593Smuzhiyun	.byte	-6
414*4882a593Smuzhiyun	.byte	-6
415*4882a593Smuzhiyun	.byte	-6
416*4882a593Smuzhiyun	.byte	-6
417*4882a593Smuzhiyun	.byte	-6
418*4882a593Smuzhiyun	.byte	-6
419*4882a593Smuzhiyun	.byte	-6
420*4882a593Smuzhiyun	.byte	-6
421*4882a593Smuzhiyun	.byte	-6
422*4882a593Smuzhiyun	.byte	-6
423*4882a593Smuzhiyun	.byte	-6
424*4882a593Smuzhiyun	.byte	-6
425*4882a593Smuzhiyun	.byte	-6
426*4882a593Smuzhiyun	.byte	-6
427*4882a593Smuzhiyun	.byte	-6
428*4882a593Smuzhiyun	.byte	-6
429*4882a593Smuzhiyun	.byte	-6
430*4882a593Smuzhiyun	.byte	-6
431*4882a593Smuzhiyun	.byte	-6
432*4882a593Smuzhiyun	.byte	-6
433*4882a593Smuzhiyun	.byte	-6
434*4882a593Smuzhiyun	.byte	-6
435*4882a593Smuzhiyun	.byte	-6
436*4882a593Smuzhiyun	.byte	-6
437*4882a593Smuzhiyun	.byte	-6
438*4882a593Smuzhiyun	.byte	-6
439*4882a593Smuzhiyun	.byte	-6
440*4882a593Smuzhiyun	.byte	-6
441*4882a593Smuzhiyun	.byte	-6
442*4882a593Smuzhiyun	.byte	-6
443*4882a593Smuzhiyun	.byte	-6
444*4882a593Smuzhiyun/* Lookup table translating positive divisor to index into table of
445*4882a593Smuzhiyun   normalized inverse.  N.B. the '0' entry is also the last entry of the
446*4882a593Smuzhiyun previous table, and causes an unaligned access for division by zero.  */
447*4882a593Smuzhiyundiv_table_ix:
448*4882a593Smuzhiyun	.byte	-6
449*4882a593Smuzhiyun	.byte	-128
450*4882a593Smuzhiyun	.byte	-128
451*4882a593Smuzhiyun	.byte	0
452*4882a593Smuzhiyun	.byte	-128
453*4882a593Smuzhiyun	.byte	-64
454*4882a593Smuzhiyun	.byte	0
455*4882a593Smuzhiyun	.byte	64
456*4882a593Smuzhiyun	.byte	-128
457*4882a593Smuzhiyun	.byte	-96
458*4882a593Smuzhiyun	.byte	-64
459*4882a593Smuzhiyun	.byte	-32
460*4882a593Smuzhiyun	.byte	0
461*4882a593Smuzhiyun	.byte	32
462*4882a593Smuzhiyun	.byte	64
463*4882a593Smuzhiyun	.byte	96
464*4882a593Smuzhiyun	.byte	-128
465*4882a593Smuzhiyun	.byte	-112
466*4882a593Smuzhiyun	.byte	-96
467*4882a593Smuzhiyun	.byte	-80
468*4882a593Smuzhiyun	.byte	-64
469*4882a593Smuzhiyun	.byte	-48
470*4882a593Smuzhiyun	.byte	-32
471*4882a593Smuzhiyun	.byte	-16
472*4882a593Smuzhiyun	.byte	0
473*4882a593Smuzhiyun	.byte	16
474*4882a593Smuzhiyun	.byte	32
475*4882a593Smuzhiyun	.byte	48
476*4882a593Smuzhiyun	.byte	64
477*4882a593Smuzhiyun	.byte	80
478*4882a593Smuzhiyun	.byte	96
479*4882a593Smuzhiyun	.byte	112
480*4882a593Smuzhiyun	.byte	-128
481*4882a593Smuzhiyun	.byte	-120
482*4882a593Smuzhiyun	.byte	-112
483*4882a593Smuzhiyun	.byte	-104
484*4882a593Smuzhiyun	.byte	-96
485*4882a593Smuzhiyun	.byte	-88
486*4882a593Smuzhiyun	.byte	-80
487*4882a593Smuzhiyun	.byte	-72
488*4882a593Smuzhiyun	.byte	-64
489*4882a593Smuzhiyun	.byte	-56
490*4882a593Smuzhiyun	.byte	-48
491*4882a593Smuzhiyun	.byte	-40
492*4882a593Smuzhiyun	.byte	-32
493*4882a593Smuzhiyun	.byte	-24
494*4882a593Smuzhiyun	.byte	-16
495*4882a593Smuzhiyun	.byte	-8
496*4882a593Smuzhiyun	.byte	0
497*4882a593Smuzhiyun	.byte	8
498*4882a593Smuzhiyun	.byte	16
499*4882a593Smuzhiyun	.byte	24
500*4882a593Smuzhiyun	.byte	32
501*4882a593Smuzhiyun	.byte	40
502*4882a593Smuzhiyun	.byte	48
503*4882a593Smuzhiyun	.byte	56
504*4882a593Smuzhiyun	.byte	64
505*4882a593Smuzhiyun	.byte	72
506*4882a593Smuzhiyun	.byte	80
507*4882a593Smuzhiyun	.byte	88
508*4882a593Smuzhiyun	.byte	96
509*4882a593Smuzhiyun	.byte	104
510*4882a593Smuzhiyun	.byte	112
511*4882a593Smuzhiyun	.byte	120
512*4882a593Smuzhiyun	.byte	-128
513*4882a593Smuzhiyun	.byte	-124
514*4882a593Smuzhiyun	.byte	-120
515*4882a593Smuzhiyun	.byte	-116
516*4882a593Smuzhiyun	.byte	-112
517*4882a593Smuzhiyun	.byte	-108
518*4882a593Smuzhiyun	.byte	-104
519*4882a593Smuzhiyun	.byte	-100
520*4882a593Smuzhiyun	.byte	-96
521*4882a593Smuzhiyun	.byte	-92
522*4882a593Smuzhiyun	.byte	-88
523*4882a593Smuzhiyun	.byte	-84
524*4882a593Smuzhiyun	.byte	-80
525*4882a593Smuzhiyun	.byte	-76
526*4882a593Smuzhiyun	.byte	-72
527*4882a593Smuzhiyun	.byte	-68
528*4882a593Smuzhiyun	.byte	-64
529*4882a593Smuzhiyun	.byte	-60
530*4882a593Smuzhiyun	.byte	-56
531*4882a593Smuzhiyun	.byte	-52
532*4882a593Smuzhiyun	.byte	-48
533*4882a593Smuzhiyun	.byte	-44
534*4882a593Smuzhiyun	.byte	-40
535*4882a593Smuzhiyun	.byte	-36
536*4882a593Smuzhiyun	.byte	-32
537*4882a593Smuzhiyun	.byte	-28
538*4882a593Smuzhiyun	.byte	-24
539*4882a593Smuzhiyun	.byte	-20
540*4882a593Smuzhiyun	.byte	-16
541*4882a593Smuzhiyun	.byte	-12
542*4882a593Smuzhiyun	.byte	-8
543*4882a593Smuzhiyun	.byte	-4
544*4882a593Smuzhiyun	.byte	0
545*4882a593Smuzhiyun	.byte	4
546*4882a593Smuzhiyun	.byte	8
547*4882a593Smuzhiyun	.byte	12
548*4882a593Smuzhiyun	.byte	16
549*4882a593Smuzhiyun	.byte	20
550*4882a593Smuzhiyun	.byte	24
551*4882a593Smuzhiyun	.byte	28
552*4882a593Smuzhiyun	.byte	32
553*4882a593Smuzhiyun	.byte	36
554*4882a593Smuzhiyun	.byte	40
555*4882a593Smuzhiyun	.byte	44
556*4882a593Smuzhiyun	.byte	48
557*4882a593Smuzhiyun	.byte	52
558*4882a593Smuzhiyun	.byte	56
559*4882a593Smuzhiyun	.byte	60
560*4882a593Smuzhiyun	.byte	64
561*4882a593Smuzhiyun	.byte	68
562*4882a593Smuzhiyun	.byte	72
563*4882a593Smuzhiyun	.byte	76
564*4882a593Smuzhiyun	.byte	80
565*4882a593Smuzhiyun	.byte	84
566*4882a593Smuzhiyun	.byte	88
567*4882a593Smuzhiyun	.byte	92
568*4882a593Smuzhiyun	.byte	96
569*4882a593Smuzhiyun	.byte	100
570*4882a593Smuzhiyun	.byte	104
571*4882a593Smuzhiyun	.byte	108
572*4882a593Smuzhiyun	.byte	112
573*4882a593Smuzhiyun	.byte	116
574*4882a593Smuzhiyun	.byte	120
575*4882a593Smuzhiyun	.byte	124
576*4882a593Smuzhiyun	.byte	-128
577*4882a593Smuzhiyun/* 1/64 .. 1/127, normalized.  There is an implicit leading 1 in bit 32.  */
578*4882a593Smuzhiyun	.balign 4
579*4882a593Smuzhiyunzero_l:
580*4882a593Smuzhiyun	.long	0x0
581*4882a593Smuzhiyun	.long	0xF81F81F9
582*4882a593Smuzhiyun	.long	0xF07C1F08
583*4882a593Smuzhiyun	.long	0xE9131AC0
584*4882a593Smuzhiyun	.long	0xE1E1E1E2
585*4882a593Smuzhiyun	.long	0xDAE6076C
586*4882a593Smuzhiyun	.long	0xD41D41D5
587*4882a593Smuzhiyun	.long	0xCD856891
588*4882a593Smuzhiyun	.long	0xC71C71C8
589*4882a593Smuzhiyun	.long	0xC0E07039
590*4882a593Smuzhiyun	.long	0xBACF914D
591*4882a593Smuzhiyun	.long	0xB4E81B4F
592*4882a593Smuzhiyun	.long	0xAF286BCB
593*4882a593Smuzhiyun	.long	0xA98EF607
594*4882a593Smuzhiyun	.long	0xA41A41A5
595*4882a593Smuzhiyun	.long	0x9EC8E952
596*4882a593Smuzhiyun	.long	0x9999999A
597*4882a593Smuzhiyun	.long	0x948B0FCE
598*4882a593Smuzhiyun	.long	0x8F9C18FA
599*4882a593Smuzhiyun	.long	0x8ACB90F7
600*4882a593Smuzhiyun	.long	0x86186187
601*4882a593Smuzhiyun	.long	0x81818182
602*4882a593Smuzhiyun	.long	0x7D05F418
603*4882a593Smuzhiyun	.long	0x78A4C818
604*4882a593Smuzhiyun	.long	0x745D1746
605*4882a593Smuzhiyun	.long	0x702E05C1
606*4882a593Smuzhiyun	.long	0x6C16C16D
607*4882a593Smuzhiyun	.long	0x68168169
608*4882a593Smuzhiyun	.long	0x642C8591
609*4882a593Smuzhiyun	.long	0x60581606
610*4882a593Smuzhiyun	.long	0x5C9882BA
611*4882a593Smuzhiyun	.long	0x58ED2309
612*4882a593Smuzhiyundiv_table_inv:
613*4882a593Smuzhiyun	.long	0x55555556
614*4882a593Smuzhiyun	.long	0x51D07EAF
615*4882a593Smuzhiyun	.long	0x4E5E0A73
616*4882a593Smuzhiyun	.long	0x4AFD6A06
617*4882a593Smuzhiyun	.long	0x47AE147B
618*4882a593Smuzhiyun	.long	0x446F8657
619*4882a593Smuzhiyun	.long	0x41414142
620*4882a593Smuzhiyun	.long	0x3E22CBCF
621*4882a593Smuzhiyun	.long	0x3B13B13C
622*4882a593Smuzhiyun	.long	0x38138139
623*4882a593Smuzhiyun	.long	0x3521CFB3
624*4882a593Smuzhiyun	.long	0x323E34A3
625*4882a593Smuzhiyun	.long	0x2F684BDB
626*4882a593Smuzhiyun	.long	0x2C9FB4D9
627*4882a593Smuzhiyun	.long	0x29E4129F
628*4882a593Smuzhiyun	.long	0x27350B89
629*4882a593Smuzhiyun	.long	0x24924925
630*4882a593Smuzhiyun	.long	0x21FB7813
631*4882a593Smuzhiyun	.long	0x1F7047DD
632*4882a593Smuzhiyun	.long	0x1CF06ADB
633*4882a593Smuzhiyun	.long	0x1A7B9612
634*4882a593Smuzhiyun	.long	0x18118119
635*4882a593Smuzhiyun	.long	0x15B1E5F8
636*4882a593Smuzhiyun	.long	0x135C8114
637*4882a593Smuzhiyun	.long	0x11111112
638*4882a593Smuzhiyun	.long	0xECF56BF
639*4882a593Smuzhiyun	.long	0xC9714FC
640*4882a593Smuzhiyun	.long	0xA6810A7
641*4882a593Smuzhiyun	.long	0x8421085
642*4882a593Smuzhiyun	.long	0x624DD30
643*4882a593Smuzhiyun	.long	0x4104105
644*4882a593Smuzhiyun	.long	0x2040811
645*4882a593Smuzhiyun	/* maximum error: 0.987342 scaled: 0.921875*/
646