xref: /OK3568_Linux_fs/u-boot/arch/sh/lib/udivsi3_i4i.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2*4882a593Smuzhiyun   2004, 2005, 2006
3*4882a593Smuzhiyun   Free Software Foundation, Inc.
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun * SPDX-License-Identifier:	GPL-2.0+
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*4882a593Smuzhiyundiv_r8:
127*4882a593Smuzhiyun	shll16 r4
128*4882a593Smuzhiyun	bra div_r8_2
129*4882a593Smuzhiyun	shll8 r4
130*4882a593Smuzhiyunudiv_r8:
131*4882a593Smuzhiyun	mov.l r4,@-r15
132*4882a593Smuzhiyun	shll16 r4
133*4882a593Smuzhiyun	clrt
134*4882a593Smuzhiyun	shll8 r4
135*4882a593Smuzhiyun	mov.l r5,@-r15
136*4882a593Smuzhiyundiv_r8_2:
137*4882a593Smuzhiyun	rotcl r4
138*4882a593Smuzhiyun	mov r0,r1
139*4882a593Smuzhiyun	div1 r5,r1
140*4882a593Smuzhiyun	mov r4,r0
141*4882a593Smuzhiyun	rotcl r0
142*4882a593Smuzhiyun	mov r5,r4
143*4882a593Smuzhiyun	div1 r5,r1
144*4882a593Smuzhiyun	.rept 5
145*4882a593Smuzhiyun	rotcl r0; div1 r5,r1
146*4882a593Smuzhiyun	.endr
147*4882a593Smuzhiyun	rotcl r0
148*4882a593Smuzhiyun	mov.l @r15+,r5
149*4882a593Smuzhiyun	div1 r4,r1
150*4882a593Smuzhiyun	mov.l @r15+,r4
151*4882a593Smuzhiyun	rts
152*4882a593Smuzhiyun	rotcl r0
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun	.global	__sdivsi3_i4i
155*4882a593Smuzhiyun	.global __sdivsi3_i4
156*4882a593Smuzhiyun	.global	__sdivsi3
157*4882a593Smuzhiyun	.set	__sdivsi3_i4, __sdivsi3_i4i
158*4882a593Smuzhiyun	.set	__sdivsi3, __sdivsi3_i4i
159*4882a593Smuzhiyun	.type	__sdivsi3_i4i, @function
160*4882a593Smuzhiyun	/* This is link-compatible with a __sdivsi3 call,
161*4882a593Smuzhiyun	   but we effectively clobber only r1.  */
162*4882a593Smuzhiyun__sdivsi3_i4i:
163*4882a593Smuzhiyun	mov.l r4,@-r15
164*4882a593Smuzhiyun	cmp/pz r5
165*4882a593Smuzhiyun	mov.w c128_w, r1
166*4882a593Smuzhiyun	bt/s pos_divisor
167*4882a593Smuzhiyun	cmp/pz r4
168*4882a593Smuzhiyun	mov.l r5,@-r15
169*4882a593Smuzhiyun	neg r5,r5
170*4882a593Smuzhiyun	bt/s neg_result
171*4882a593Smuzhiyun	cmp/hi r1,r5
172*4882a593Smuzhiyun	neg r4,r4
173*4882a593Smuzhiyunpos_result:
174*4882a593Smuzhiyun	extu.w r5,r0
175*4882a593Smuzhiyun	bf div_le128
176*4882a593Smuzhiyun	cmp/eq r5,r0
177*4882a593Smuzhiyun	mov r4,r0
178*4882a593Smuzhiyun	shlr8 r0
179*4882a593Smuzhiyun	bf/s div_ge64k
180*4882a593Smuzhiyun	cmp/hi r0,r5
181*4882a593Smuzhiyun	div0u
182*4882a593Smuzhiyun	shll16 r5
183*4882a593Smuzhiyun	div1 r5,r0
184*4882a593Smuzhiyun	div1 r5,r0
185*4882a593Smuzhiyun	div1 r5,r0
186*4882a593Smuzhiyunudiv_25:
187*4882a593Smuzhiyun	mov.l zero_l,r1
188*4882a593Smuzhiyun	div1 r5,r0
189*4882a593Smuzhiyun	div1 r5,r0
190*4882a593Smuzhiyun	mov.l r1,@-r15
191*4882a593Smuzhiyun	.rept 3
192*4882a593Smuzhiyun	div1 r5,r0
193*4882a593Smuzhiyun	.endr
194*4882a593Smuzhiyun	mov.b r0,@(L_MSWLSB,r15)
195*4882a593Smuzhiyun	xtrct r4,r0
196*4882a593Smuzhiyun	swap.w r0,r0
197*4882a593Smuzhiyun	.rept 8
198*4882a593Smuzhiyun	div1 r5,r0
199*4882a593Smuzhiyun	.endr
200*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
201*4882a593Smuzhiyundiv_ge64k_end:
202*4882a593Smuzhiyun	.rept 8
203*4882a593Smuzhiyun	div1 r5,r0
204*4882a593Smuzhiyun	.endr
205*4882a593Smuzhiyun	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
206*4882a593Smuzhiyun	extu.b r0,r0
207*4882a593Smuzhiyun	mov.l @r15+,r5
208*4882a593Smuzhiyun	or r4,r0
209*4882a593Smuzhiyun	mov.l @r15+,r4
210*4882a593Smuzhiyun	rts
211*4882a593Smuzhiyun	rotcl r0
212*4882a593Smuzhiyun
213*4882a593Smuzhiyundiv_le128_neg:
214*4882a593Smuzhiyun	tst #0xfe,r0
215*4882a593Smuzhiyun	mova div_table_ix,r0
216*4882a593Smuzhiyun	mov.b @(r0,r5),r1
217*4882a593Smuzhiyun	mova div_table_inv,r0
218*4882a593Smuzhiyun	bt/s div_by_1_neg
219*4882a593Smuzhiyun	mov.l @(r0,r1),r1
220*4882a593Smuzhiyun	mova div_table_clz,r0
221*4882a593Smuzhiyun	dmulu.l r1,r4
222*4882a593Smuzhiyun	mov.b @(r0,r5),r1
223*4882a593Smuzhiyun	mov.l @r15+,r5
224*4882a593Smuzhiyun	sts mach,r0
225*4882a593Smuzhiyun	/* clrt */
226*4882a593Smuzhiyun	addc r4,r0
227*4882a593Smuzhiyun	mov.l @r15+,r4
228*4882a593Smuzhiyun	rotcr r0
229*4882a593Smuzhiyun	shld r1,r0
230*4882a593Smuzhiyun	rts
231*4882a593Smuzhiyun	neg r0,r0
232*4882a593Smuzhiyun
233*4882a593Smuzhiyunpos_divisor:
234*4882a593Smuzhiyun	mov.l r5,@-r15
235*4882a593Smuzhiyun	bt/s pos_result
236*4882a593Smuzhiyun	cmp/hi r1,r5
237*4882a593Smuzhiyun	neg r4,r4
238*4882a593Smuzhiyunneg_result:
239*4882a593Smuzhiyun	extu.w r5,r0
240*4882a593Smuzhiyun	bf div_le128_neg
241*4882a593Smuzhiyun	cmp/eq r5,r0
242*4882a593Smuzhiyun	mov r4,r0
243*4882a593Smuzhiyun	shlr8 r0
244*4882a593Smuzhiyun	bf/s div_ge64k_neg
245*4882a593Smuzhiyun	cmp/hi r0,r5
246*4882a593Smuzhiyun	div0u
247*4882a593Smuzhiyun	mov.l zero_l,r1
248*4882a593Smuzhiyun	shll16 r5
249*4882a593Smuzhiyun	div1 r5,r0
250*4882a593Smuzhiyun	mov.l r1,@-r15
251*4882a593Smuzhiyun	.rept 7
252*4882a593Smuzhiyun	div1 r5,r0
253*4882a593Smuzhiyun	.endr
254*4882a593Smuzhiyun	mov.b r0,@(L_MSWLSB,r15)
255*4882a593Smuzhiyun	xtrct r4,r0
256*4882a593Smuzhiyun	swap.w r0,r0
257*4882a593Smuzhiyun	.rept 8
258*4882a593Smuzhiyun	div1 r5,r0
259*4882a593Smuzhiyun	.endr
260*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
261*4882a593Smuzhiyundiv_ge64k_neg_end:
262*4882a593Smuzhiyun	.rept 8
263*4882a593Smuzhiyun	div1 r5,r0
264*4882a593Smuzhiyun	.endr
265*4882a593Smuzhiyun	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
266*4882a593Smuzhiyun	extu.b r0,r1
267*4882a593Smuzhiyun	mov.l @r15+,r5
268*4882a593Smuzhiyun	or r4,r1
269*4882a593Smuzhiyundiv_r8_neg_end:
270*4882a593Smuzhiyun	mov.l @r15+,r4
271*4882a593Smuzhiyun	rotcl r1
272*4882a593Smuzhiyun	rts
273*4882a593Smuzhiyun	neg r1,r0
274*4882a593Smuzhiyun
275*4882a593Smuzhiyundiv_ge64k_neg:
276*4882a593Smuzhiyun	bt/s div_r8_neg
277*4882a593Smuzhiyun	div0u
278*4882a593Smuzhiyun	shll8 r5
279*4882a593Smuzhiyun	mov.l zero_l,r1
280*4882a593Smuzhiyun	.rept 6
281*4882a593Smuzhiyun	div1 r5,r0
282*4882a593Smuzhiyun	.endr
283*4882a593Smuzhiyun	mov.l r1,@-r15
284*4882a593Smuzhiyun	div1 r5,r0
285*4882a593Smuzhiyun	mov.w m256_w,r1
286*4882a593Smuzhiyun	div1 r5,r0
287*4882a593Smuzhiyun	mov.b r0,@(L_LSWMSB,r15)
288*4882a593Smuzhiyun	xor r4,r0
289*4882a593Smuzhiyun	and r1,r0
290*4882a593Smuzhiyun	bra div_ge64k_neg_end
291*4882a593Smuzhiyun	xor r4,r0
292*4882a593Smuzhiyun
293*4882a593Smuzhiyunc128_w:
294*4882a593Smuzhiyun	.word 128
295*4882a593Smuzhiyun
296*4882a593Smuzhiyundiv_r8_neg:
297*4882a593Smuzhiyun	clrt
298*4882a593Smuzhiyun	shll16 r4
299*4882a593Smuzhiyun	mov r4,r1
300*4882a593Smuzhiyun	shll8 r1
301*4882a593Smuzhiyun	mov r5,r4
302*4882a593Smuzhiyun	.rept 7
303*4882a593Smuzhiyun	rotcl r1; div1 r5,r0
304*4882a593Smuzhiyun	.endr
305*4882a593Smuzhiyun	mov.l @r15+,r5
306*4882a593Smuzhiyun	rotcl r1
307*4882a593Smuzhiyun	bra div_r8_neg_end
308*4882a593Smuzhiyun	div1 r4,r0
309*4882a593Smuzhiyun
310*4882a593Smuzhiyunm256_w:
311*4882a593Smuzhiyun	.word 0xff00
312*4882a593Smuzhiyun/* This table has been generated by divtab-sh4.c.  */
313*4882a593Smuzhiyun	.balign 4
314*4882a593Smuzhiyundiv_table_clz:
315*4882a593Smuzhiyun	.byte	0
316*4882a593Smuzhiyun	.byte	1
317*4882a593Smuzhiyun	.byte	0
318*4882a593Smuzhiyun	.byte	-1
319*4882a593Smuzhiyun	.byte	-1
320*4882a593Smuzhiyun	.byte	-2
321*4882a593Smuzhiyun	.byte	-2
322*4882a593Smuzhiyun	.byte	-2
323*4882a593Smuzhiyun	.byte	-2
324*4882a593Smuzhiyun	.byte	-3
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	-4
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	-5
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	-6
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/* Lookup table translating positive divisor to index into table of
444*4882a593Smuzhiyun   normalized inverse.  N.B. the '0' entry is also the last entry of the
445*4882a593Smuzhiyun previous table, and causes an unaligned access for division by zero.  */
446*4882a593Smuzhiyundiv_table_ix:
447*4882a593Smuzhiyun	.byte	-6
448*4882a593Smuzhiyun	.byte	-128
449*4882a593Smuzhiyun	.byte	-128
450*4882a593Smuzhiyun	.byte	0
451*4882a593Smuzhiyun	.byte	-128
452*4882a593Smuzhiyun	.byte	-64
453*4882a593Smuzhiyun	.byte	0
454*4882a593Smuzhiyun	.byte	64
455*4882a593Smuzhiyun	.byte	-128
456*4882a593Smuzhiyun	.byte	-96
457*4882a593Smuzhiyun	.byte	-64
458*4882a593Smuzhiyun	.byte	-32
459*4882a593Smuzhiyun	.byte	0
460*4882a593Smuzhiyun	.byte	32
461*4882a593Smuzhiyun	.byte	64
462*4882a593Smuzhiyun	.byte	96
463*4882a593Smuzhiyun	.byte	-128
464*4882a593Smuzhiyun	.byte	-112
465*4882a593Smuzhiyun	.byte	-96
466*4882a593Smuzhiyun	.byte	-80
467*4882a593Smuzhiyun	.byte	-64
468*4882a593Smuzhiyun	.byte	-48
469*4882a593Smuzhiyun	.byte	-32
470*4882a593Smuzhiyun	.byte	-16
471*4882a593Smuzhiyun	.byte	0
472*4882a593Smuzhiyun	.byte	16
473*4882a593Smuzhiyun	.byte	32
474*4882a593Smuzhiyun	.byte	48
475*4882a593Smuzhiyun	.byte	64
476*4882a593Smuzhiyun	.byte	80
477*4882a593Smuzhiyun	.byte	96
478*4882a593Smuzhiyun	.byte	112
479*4882a593Smuzhiyun	.byte	-128
480*4882a593Smuzhiyun	.byte	-120
481*4882a593Smuzhiyun	.byte	-112
482*4882a593Smuzhiyun	.byte	-104
483*4882a593Smuzhiyun	.byte	-96
484*4882a593Smuzhiyun	.byte	-88
485*4882a593Smuzhiyun	.byte	-80
486*4882a593Smuzhiyun	.byte	-72
487*4882a593Smuzhiyun	.byte	-64
488*4882a593Smuzhiyun	.byte	-56
489*4882a593Smuzhiyun	.byte	-48
490*4882a593Smuzhiyun	.byte	-40
491*4882a593Smuzhiyun	.byte	-32
492*4882a593Smuzhiyun	.byte	-24
493*4882a593Smuzhiyun	.byte	-16
494*4882a593Smuzhiyun	.byte	-8
495*4882a593Smuzhiyun	.byte	0
496*4882a593Smuzhiyun	.byte	8
497*4882a593Smuzhiyun	.byte	16
498*4882a593Smuzhiyun	.byte	24
499*4882a593Smuzhiyun	.byte	32
500*4882a593Smuzhiyun	.byte	40
501*4882a593Smuzhiyun	.byte	48
502*4882a593Smuzhiyun	.byte	56
503*4882a593Smuzhiyun	.byte	64
504*4882a593Smuzhiyun	.byte	72
505*4882a593Smuzhiyun	.byte	80
506*4882a593Smuzhiyun	.byte	88
507*4882a593Smuzhiyun	.byte	96
508*4882a593Smuzhiyun	.byte	104
509*4882a593Smuzhiyun	.byte	112
510*4882a593Smuzhiyun	.byte	120
511*4882a593Smuzhiyun	.byte	-128
512*4882a593Smuzhiyun	.byte	-124
513*4882a593Smuzhiyun	.byte	-120
514*4882a593Smuzhiyun	.byte	-116
515*4882a593Smuzhiyun	.byte	-112
516*4882a593Smuzhiyun	.byte	-108
517*4882a593Smuzhiyun	.byte	-104
518*4882a593Smuzhiyun	.byte	-100
519*4882a593Smuzhiyun	.byte	-96
520*4882a593Smuzhiyun	.byte	-92
521*4882a593Smuzhiyun	.byte	-88
522*4882a593Smuzhiyun	.byte	-84
523*4882a593Smuzhiyun	.byte	-80
524*4882a593Smuzhiyun	.byte	-76
525*4882a593Smuzhiyun	.byte	-72
526*4882a593Smuzhiyun	.byte	-68
527*4882a593Smuzhiyun	.byte	-64
528*4882a593Smuzhiyun	.byte	-60
529*4882a593Smuzhiyun	.byte	-56
530*4882a593Smuzhiyun	.byte	-52
531*4882a593Smuzhiyun	.byte	-48
532*4882a593Smuzhiyun	.byte	-44
533*4882a593Smuzhiyun	.byte	-40
534*4882a593Smuzhiyun	.byte	-36
535*4882a593Smuzhiyun	.byte	-32
536*4882a593Smuzhiyun	.byte	-28
537*4882a593Smuzhiyun	.byte	-24
538*4882a593Smuzhiyun	.byte	-20
539*4882a593Smuzhiyun	.byte	-16
540*4882a593Smuzhiyun	.byte	-12
541*4882a593Smuzhiyun	.byte	-8
542*4882a593Smuzhiyun	.byte	-4
543*4882a593Smuzhiyun	.byte	0
544*4882a593Smuzhiyun	.byte	4
545*4882a593Smuzhiyun	.byte	8
546*4882a593Smuzhiyun	.byte	12
547*4882a593Smuzhiyun	.byte	16
548*4882a593Smuzhiyun	.byte	20
549*4882a593Smuzhiyun	.byte	24
550*4882a593Smuzhiyun	.byte	28
551*4882a593Smuzhiyun	.byte	32
552*4882a593Smuzhiyun	.byte	36
553*4882a593Smuzhiyun	.byte	40
554*4882a593Smuzhiyun	.byte	44
555*4882a593Smuzhiyun	.byte	48
556*4882a593Smuzhiyun	.byte	52
557*4882a593Smuzhiyun	.byte	56
558*4882a593Smuzhiyun	.byte	60
559*4882a593Smuzhiyun	.byte	64
560*4882a593Smuzhiyun	.byte	68
561*4882a593Smuzhiyun	.byte	72
562*4882a593Smuzhiyun	.byte	76
563*4882a593Smuzhiyun	.byte	80
564*4882a593Smuzhiyun	.byte	84
565*4882a593Smuzhiyun	.byte	88
566*4882a593Smuzhiyun	.byte	92
567*4882a593Smuzhiyun	.byte	96
568*4882a593Smuzhiyun	.byte	100
569*4882a593Smuzhiyun	.byte	104
570*4882a593Smuzhiyun	.byte	108
571*4882a593Smuzhiyun	.byte	112
572*4882a593Smuzhiyun	.byte	116
573*4882a593Smuzhiyun	.byte	120
574*4882a593Smuzhiyun	.byte	124
575*4882a593Smuzhiyun	.byte	-128
576*4882a593Smuzhiyun/* 1/64 .. 1/127, normalized.  There is an implicit leading 1 in bit 32.  */
577*4882a593Smuzhiyun	.balign 4
578*4882a593Smuzhiyunzero_l:
579*4882a593Smuzhiyun	.long	0x0
580*4882a593Smuzhiyun	.long	0xF81F81F9
581*4882a593Smuzhiyun	.long	0xF07C1F08
582*4882a593Smuzhiyun	.long	0xE9131AC0
583*4882a593Smuzhiyun	.long	0xE1E1E1E2
584*4882a593Smuzhiyun	.long	0xDAE6076C
585*4882a593Smuzhiyun	.long	0xD41D41D5
586*4882a593Smuzhiyun	.long	0xCD856891
587*4882a593Smuzhiyun	.long	0xC71C71C8
588*4882a593Smuzhiyun	.long	0xC0E07039
589*4882a593Smuzhiyun	.long	0xBACF914D
590*4882a593Smuzhiyun	.long	0xB4E81B4F
591*4882a593Smuzhiyun	.long	0xAF286BCB
592*4882a593Smuzhiyun	.long	0xA98EF607
593*4882a593Smuzhiyun	.long	0xA41A41A5
594*4882a593Smuzhiyun	.long	0x9EC8E952
595*4882a593Smuzhiyun	.long	0x9999999A
596*4882a593Smuzhiyun	.long	0x948B0FCE
597*4882a593Smuzhiyun	.long	0x8F9C18FA
598*4882a593Smuzhiyun	.long	0x8ACB90F7
599*4882a593Smuzhiyun	.long	0x86186187
600*4882a593Smuzhiyun	.long	0x81818182
601*4882a593Smuzhiyun	.long	0x7D05F418
602*4882a593Smuzhiyun	.long	0x78A4C818
603*4882a593Smuzhiyun	.long	0x745D1746
604*4882a593Smuzhiyun	.long	0x702E05C1
605*4882a593Smuzhiyun	.long	0x6C16C16D
606*4882a593Smuzhiyun	.long	0x68168169
607*4882a593Smuzhiyun	.long	0x642C8591
608*4882a593Smuzhiyun	.long	0x60581606
609*4882a593Smuzhiyun	.long	0x5C9882BA
610*4882a593Smuzhiyun	.long	0x58ED2309
611*4882a593Smuzhiyundiv_table_inv:
612*4882a593Smuzhiyun	.long	0x55555556
613*4882a593Smuzhiyun	.long	0x51D07EAF
614*4882a593Smuzhiyun	.long	0x4E5E0A73
615*4882a593Smuzhiyun	.long	0x4AFD6A06
616*4882a593Smuzhiyun	.long	0x47AE147B
617*4882a593Smuzhiyun	.long	0x446F8657
618*4882a593Smuzhiyun	.long	0x41414142
619*4882a593Smuzhiyun	.long	0x3E22CBCF
620*4882a593Smuzhiyun	.long	0x3B13B13C
621*4882a593Smuzhiyun	.long	0x38138139
622*4882a593Smuzhiyun	.long	0x3521CFB3
623*4882a593Smuzhiyun	.long	0x323E34A3
624*4882a593Smuzhiyun	.long	0x2F684BDB
625*4882a593Smuzhiyun	.long	0x2C9FB4D9
626*4882a593Smuzhiyun	.long	0x29E4129F
627*4882a593Smuzhiyun	.long	0x27350B89
628*4882a593Smuzhiyun	.long	0x24924925
629*4882a593Smuzhiyun	.long	0x21FB7813
630*4882a593Smuzhiyun	.long	0x1F7047DD
631*4882a593Smuzhiyun	.long	0x1CF06ADB
632*4882a593Smuzhiyun	.long	0x1A7B9612
633*4882a593Smuzhiyun	.long	0x18118119
634*4882a593Smuzhiyun	.long	0x15B1E5F8
635*4882a593Smuzhiyun	.long	0x135C8114
636*4882a593Smuzhiyun	.long	0x11111112
637*4882a593Smuzhiyun	.long	0xECF56BF
638*4882a593Smuzhiyun	.long	0xC9714FC
639*4882a593Smuzhiyun	.long	0xA6810A7
640*4882a593Smuzhiyun	.long	0x8421085
641*4882a593Smuzhiyun	.long	0x624DD30
642*4882a593Smuzhiyun	.long	0x4104105
643*4882a593Smuzhiyun	.long	0x2040811
644*4882a593Smuzhiyun	/* maximum error: 0.987342 scaled: 0.921875*/
645