1/* Copyright (C) 2004-2020 Free Software Foundation, Inc.
2
3This file is free software; you can redistribute it and/or modify it
4under the terms of the GNU General Public License as published by the
5Free Software Foundation; either version 3, or (at your option) any
6later version.
7
8This file is distributed in the hope that it will be useful, but
9WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11General Public License for more details.
12
13Under Section 7 of GPL version 3, you are granted additional
14permissions described in the GCC Runtime Library Exception, version
153.1, as published by the Free Software Foundation.
16
17You should have received a copy of the GNU General Public License and
18a copy of the GCC Runtime Library Exception along with this program;
19see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
20<http://www.gnu.org/licenses/>.  */
21
22
23/* libgcc routines for the STMicroelectronics ST40-300 CPU.
24   Contributed by J"orn Rennecke joern.rennecke@st.com.  */
25
26#include "lib1funcs.h"
27
28#ifdef L_div_table
29#if defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
30/* This code used shld, thus is not suitable for SH1 / SH2.  */
31
32/* Signed / unsigned division without use of FPU, optimized for SH4-300.
33   Uses a lookup table for divisors in the range -128 .. +127, and
34   div1 with case distinction for larger divisors in three more ranges.
35   The code is lumped together with the table to allow the use of mova.  */
36#ifdef __LITTLE_ENDIAN__
37#define L_LSB 0
38#define L_LSWMSB 1
39#define L_MSWLSB 2
40#else
41#define L_LSB 3
42#define L_LSWMSB 2
43#define L_MSWLSB 1
44#endif
45
46	.global	GLOBAL(udivsi3_i4i)
47	.global	GLOBAL(sdivsi3_i4i)
48	FUNC(GLOBAL(udivsi3_i4i))
49	FUNC(GLOBAL(sdivsi3_i4i))
50
51	.balign 4
52LOCAL(div_ge8m): ! 10 cycles up to here
53	rotcr r1 ! signed shift must use original sign from r4
54	div0s r5,r4
55	mov #24,r7
56	shld r7,r6
57	shad r0,r1
58	rotcl r6
59	div1 r5,r1
60	swap.w r5,r0 ! detect -0x80000000 : 0x800000
61	rotcl r6
62	swap.w r4,r7
63	div1 r5,r1
64	swap.b r7,r7
65	rotcl r6
66	or r7,r0
67	div1 r5,r1
68	swap.w r0,r7
69	rotcl r6
70	or r7,r0
71	div1 r5,r1
72	add #-0x80,r0
73	rotcl r6
74	extu.w r0,r0
75	div1 r5,r1
76	neg r0,r0
77	rotcl r6
78	swap.w r0,r0
79	div1 r5,r1
80	mov.l @r15+,r7
81	and r6,r0
82	rotcl r6
83	div1 r5,r1
84	shll2 r0
85	rotcl r6
86	exts.b r0,r0
87	div1 r5,r1
88	swap.w r0,r0
89	exts.w r0,r1
90	exts.b r6,r0
91	mov.l @r15+,r6
92	rotcl r0
93	rts
94	sub r1,r0
95	! 31 cycles up to here
96
97	.balign 4
98LOCAL(udiv_ge64k): ! 3 cycles up to here
99	mov r4,r0
100	shlr8 r0
101	div0u
102	cmp/hi r0,r5
103	bt LOCAL(udiv_r8)
104	mov.l r5,@-r15
105	shll8 r5
106	! 7 cycles up to here
107	.rept 8
108	div1 r5,r0
109	.endr
110	extu.b r4,r1 ! 15 cycles up to here
111	extu.b r0,r6
112	xor r1,r0
113	xor r6,r0
114	swap.b r6,r6
115	.rept 8
116	div1 r5,r0
117	.endr ! 25 cycles up to here
118	extu.b r0,r0
119	mov.l @r15+,r5
120	or r6,r0
121	mov.l @r15+,r6
122	rts
123	rotcl r0 ! 28 cycles up to here
124
125	.balign 4
126LOCAL(udiv_r8): ! 6 cycles up to here
127	mov.l r4,@-r15
128	shll16 r4
129	shll8 r4
130	!
131	shll r4
132	mov r0,r1
133	div1 r5,r1
134	mov r4,r0
135	rotcl r0
136	mov.l @r15+,r4
137	div1 r5,r1
138	! 12 cycles up to here
139	.rept 6
140	rotcl r0; div1 r5,r1
141	.endr
142	mov.l @r15+,r6 ! 24 cycles up to here
143	rts
144	rotcl r0
145
146	.balign 4
147LOCAL(div_ge32k): ! 6 cycles up to here
148	mov.l r7,@-r15
149	swap.w r5,r6
150	exts.b r6,r7
151	exts.w r6,r6
152	cmp/eq r6,r7
153	extu.b r1,r6
154	bf/s LOCAL(div_ge8m)
155	cmp/hi r1,r4 ! copy sign bit of r4 into T
156	rotcr r1 ! signed shift must use original sign from r4
157	div0s r5,r4
158	shad r0,r1
159	shll8 r5
160	div1 r5,r1
161	mov r5,r7 ! detect r4 == 0x80000000 && r5 == 0x8000(00)
162	div1 r5,r1
163	shlr8 r7
164	div1 r5,r1
165	swap.w r4,r0
166	div1 r5,r1
167	swap.b r0,r0
168	div1 r5,r1
169	or r0,r7
170	div1 r5,r1
171	add #-80,r7
172	div1 r5,r1
173	swap.w r7,r0
174	div1 r5,r1
175	or r0,r7
176	extu.b r1,r0
177	xor r6,r1
178	xor r0,r1
179	exts.b r0,r0
180	div1 r5,r1
181	extu.w r7,r7
182	div1 r5,r1
183	neg r7,r7 ! upper 16 bit of r7 == 0 if r4 == 0x80000000 && r5 == 0x8000
184	div1 r5,r1
185	and r0,r7
186	div1 r5,r1
187	swap.w r7,r7 ! 26 cycles up to here.
188	div1 r5,r1
189	shll8 r0
190	div1 r5,r1
191	exts.w r7,r7
192	div1 r5,r1
193	add r0,r0
194	div1 r5,r1
195	sub r7,r0
196	extu.b r1,r1
197	mov.l @r15+,r7
198	rotcl r1
199	mov.l @r15+,r6
200	add r1,r0
201	mov #-8,r1
202	rts
203	shad r1,r5 ! 34 cycles up to here
204
205	.balign 4
206GLOBAL(udivsi3_i4i):
207	mov.l r6,@-r15
208	extu.w r5,r6
209	cmp/eq r5,r6
210	mov #0x7f,r0
211	bf LOCAL(udiv_ge64k)
212	cmp/hi r0,r5
213	bf LOCAL(udiv_le128)
214	mov r4,r1
215	shlr8 r1
216	div0u
217	shlr r1
218	shll16 r6
219	div1 r6,r1
220	extu.b r4,r0 ! 7 cycles up to here
221	.rept 8
222	div1 r6,r1
223	.endr     ! 15 cycles up to here
224	xor r1,r0 ! xor dividend with result lsb
225	.rept 6
226	div1 r6,r1
227	.endr
228	mov.l r7,@-r15 ! 21 cycles up to here
229	div1 r6,r1
230	extu.b r0,r7
231	div1 r6,r1
232	shll8 r7
233	extu.w r1,r0
234	xor r7,r1 ! replace lsb of result with lsb of dividend
235	div1 r6,r1
236	mov #0,r7
237	div1 r6,r1
238	!
239	div1 r6,r1
240	bra LOCAL(div_end)
241	div1 r6,r1 ! 28 cycles up to here
242
243	/* This is link-compatible with a GLOBAL(sdivsi3) call,
244	   but we effectively clobber only r1, macl and mach  */
245        /* Because negative quotients are calculated as one's complements,
246	   -0x80000000 divided by the smallest positive number of a number
247	   range (0x80, 0x8000, 0x800000) causes saturation in the one's
248           complement representation, and we have to suppress the
249	   one's -> two's complement adjustment.  Since positive numbers
250	   don't get such an adjustment, it's OK to also compute one's -> two's
251	   complement adjustment suppression for a dividend of 0.  */
252	.balign 4
253GLOBAL(sdivsi3_i4i):
254	mov.l r6,@-r15
255	exts.b r5,r6
256	cmp/eq r5,r6
257	mov #-1,r1
258	bt/s LOCAL(div_le128)
259	cmp/pz r4
260	addc r4,r1
261	exts.w r5,r6
262	cmp/eq r5,r6
263	mov #-7,r0
264	bf/s LOCAL(div_ge32k)
265	cmp/hi r1,r4 ! copy sign bit of r4 into T
266	rotcr r1
267	shll16 r6  ! 7 cycles up to here
268	shad r0,r1
269	div0s r5,r4
270	div1 r6,r1
271	mov.l r7,@-r15
272	div1 r6,r1
273	mov r4,r0 ! re-compute adjusted dividend
274	div1 r6,r1
275	mov #-31,r7
276	div1 r6,r1
277	shad r7,r0
278	div1 r6,r1
279	add r4,r0 ! adjusted dividend
280	div1 r6,r1
281	mov.l r8,@-r15
282	div1 r6,r1
283	swap.w r4,r8 ! detect special case r4 = 0x80000000, r5 = 0x80
284	div1 r6,r1
285	swap.b r8,r8
286	xor r1,r0 ! xor dividend with result lsb
287	div1 r6,r1
288	div1 r6,r1
289	or r5,r8
290	div1 r6,r1
291	add #-0x80,r8 ! r8 is 0 iff there is a match
292	div1 r6,r1
293	swap.w r8,r7 ! or upper 16 bits...
294	div1 r6,r1
295	or r7,r8 !...into lower 16 bits
296	div1 r6,r1
297	extu.w r8,r8
298	div1 r6,r1
299	extu.b r0,r7
300	div1 r6,r1
301	shll8 r7
302	exts.w r1,r0
303	xor r7,r1 ! replace lsb of result with lsb of dividend
304	div1 r6,r1
305	neg r8,r8 ! upper 16 bits of r8 are now 0xffff iff we want end adjm.
306	div1 r6,r1
307	and r0,r8
308	div1 r6,r1
309	swap.w r8,r7
310	div1 r6,r1
311	mov.l @r15+,r8 ! 58 insns, 29 cycles up to here
312LOCAL(div_end):
313	div1 r6,r1
314	shll8 r0
315	div1 r6,r1
316	exts.w r7,r7
317	div1 r6,r1
318	add r0,r0
319	div1 r6,r1
320	sub r7,r0
321	extu.b r1,r1
322	mov.l @r15+,r7
323	rotcl r1
324	mov.l @r15+,r6
325	rts
326	add r1,r0
327
328	.balign 4
329LOCAL(udiv_le128): ! 4 cycles up to here (or 7 for mispredict)
330	mova LOCAL(div_table_inv),r0
331	shll2 r6
332	mov.l @(r0,r6),r1
333	mova LOCAL(div_table_clz),r0
334	lds r4,mach
335	!
336	!
337	!
338	tst r1,r1
339	!
340	bt 0f
341	dmulu.l r1,r4
3420:	mov.b @(r0,r5),r1
343	clrt
344	!
345	!
346	sts mach,r0
347	addc r4,r0
348	rotcr r0
349	mov.l @r15+,r6
350	rts
351	shld r1,r0
352
353	.balign 4
354LOCAL(div_le128): ! 3 cycles up to here (or 6 for mispredict)
355	mova LOCAL(div_table_inv),r0
356	shll2 r6
357	mov.l @(r0,r6),r1
358	mova LOCAL(div_table_clz),r0
359	neg r4,r6
360	bf 0f
361	mov r4,r6
3620:	lds r6,mach
363	tst r1,r1
364	bt 0f
365	dmulu.l r1,r6
3660:	div0s r4,r5
367	mov.b @(r0,r5),r1
368	bt/s LOCAL(le128_neg)
369	clrt
370	!
371	sts mach,r0
372	addc r6,r0
373	rotcr r0
374	mov.l @r15+,r6
375	rts
376	shld r1,r0
377
378/* Could trap divide by zero for the cost of one cycle more mispredict penalty:
379...
380	dmulu.l r1,r6
3810:	div0s r4,r5
382	bt/s LOCAL(le128_neg)
383	tst r5,r5
384	bt LOCAL(div_by_zero)
385	mov.b @(r0,r5),r1
386	sts mach,r0
387	addc r6,r0
388...
389LOCAL(div_by_zero):
390	trapa #
391	.balign 4
392LOCAL(le128_neg):
393	bt LOCAL(div_by_zero)
394	mov.b @(r0,r5),r1
395	sts mach,r0
396	addc r6,r0
397...  */
398
399	.balign 4
400LOCAL(le128_neg):
401	sts mach,r0
402	addc r6,r0
403	rotcr r0
404	mov.l @r15+,r6
405	shad r1,r0
406	rts
407	neg r0,r0
408	ENDFUNC(GLOBAL(udivsi3_i4i))
409	ENDFUNC(GLOBAL(sdivsi3_i4i))
410
411/* This table has been generated by divtab-sh4.c.  */
412	.balign 4
413	.byte	-7
414	.byte	-6
415	.byte	-6
416	.byte	-6
417	.byte	-6
418	.byte	-6
419	.byte	-6
420	.byte	-6
421	.byte	-6
422	.byte	-6
423	.byte	-6
424	.byte	-6
425	.byte	-6
426	.byte	-6
427	.byte	-6
428	.byte	-6
429	.byte	-6
430	.byte	-6
431	.byte	-6
432	.byte	-6
433	.byte	-6
434	.byte	-6
435	.byte	-6
436	.byte	-6
437	.byte	-6
438	.byte	-6
439	.byte	-6
440	.byte	-6
441	.byte	-6
442	.byte	-6
443	.byte	-6
444	.byte	-6
445	.byte	-6
446	.byte	-6
447	.byte	-6
448	.byte	-6
449	.byte	-6
450	.byte	-6
451	.byte	-6
452	.byte	-6
453	.byte	-6
454	.byte	-6
455	.byte	-6
456	.byte	-6
457	.byte	-6
458	.byte	-6
459	.byte	-6
460	.byte	-6
461	.byte	-6
462	.byte	-6
463	.byte	-6
464	.byte	-6
465	.byte	-6
466	.byte	-6
467	.byte	-6
468	.byte	-6
469	.byte	-6
470	.byte	-6
471	.byte	-6
472	.byte	-6
473	.byte	-6
474	.byte	-6
475	.byte	-6
476	.byte	-6
477	.byte	-6
478	.byte	-5
479	.byte	-5
480	.byte	-5
481	.byte	-5
482	.byte	-5
483	.byte	-5
484	.byte	-5
485	.byte	-5
486	.byte	-5
487	.byte	-5
488	.byte	-5
489	.byte	-5
490	.byte	-5
491	.byte	-5
492	.byte	-5
493	.byte	-5
494	.byte	-5
495	.byte	-5
496	.byte	-5
497	.byte	-5
498	.byte	-5
499	.byte	-5
500	.byte	-5
501	.byte	-5
502	.byte	-5
503	.byte	-5
504	.byte	-5
505	.byte	-5
506	.byte	-5
507	.byte	-5
508	.byte	-5
509	.byte	-5
510	.byte	-4
511	.byte	-4
512	.byte	-4
513	.byte	-4
514	.byte	-4
515	.byte	-4
516	.byte	-4
517	.byte	-4
518	.byte	-4
519	.byte	-4
520	.byte	-4
521	.byte	-4
522	.byte	-4
523	.byte	-4
524	.byte	-4
525	.byte	-4
526	.byte	-3
527	.byte	-3
528	.byte	-3
529	.byte	-3
530	.byte	-3
531	.byte	-3
532	.byte	-3
533	.byte	-3
534	.byte	-2
535	.byte	-2
536	.byte	-2
537	.byte	-2
538	.byte	-1
539	.byte	-1
540	.byte	0
541LOCAL(div_table_clz):
542	.byte	0
543	.byte	0
544	.byte	-1
545	.byte	-1
546	.byte	-2
547	.byte	-2
548	.byte	-2
549	.byte	-2
550	.byte	-3
551	.byte	-3
552	.byte	-3
553	.byte	-3
554	.byte	-3
555	.byte	-3
556	.byte	-3
557	.byte	-3
558	.byte	-4
559	.byte	-4
560	.byte	-4
561	.byte	-4
562	.byte	-4
563	.byte	-4
564	.byte	-4
565	.byte	-4
566	.byte	-4
567	.byte	-4
568	.byte	-4
569	.byte	-4
570	.byte	-4
571	.byte	-4
572	.byte	-4
573	.byte	-4
574	.byte	-5
575	.byte	-5
576	.byte	-5
577	.byte	-5
578	.byte	-5
579	.byte	-5
580	.byte	-5
581	.byte	-5
582	.byte	-5
583	.byte	-5
584	.byte	-5
585	.byte	-5
586	.byte	-5
587	.byte	-5
588	.byte	-5
589	.byte	-5
590	.byte	-5
591	.byte	-5
592	.byte	-5
593	.byte	-5
594	.byte	-5
595	.byte	-5
596	.byte	-5
597	.byte	-5
598	.byte	-5
599	.byte	-5
600	.byte	-5
601	.byte	-5
602	.byte	-5
603	.byte	-5
604	.byte	-5
605	.byte	-5
606	.byte	-6
607	.byte	-6
608	.byte	-6
609	.byte	-6
610	.byte	-6
611	.byte	-6
612	.byte	-6
613	.byte	-6
614	.byte	-6
615	.byte	-6
616	.byte	-6
617	.byte	-6
618	.byte	-6
619	.byte	-6
620	.byte	-6
621	.byte	-6
622	.byte	-6
623	.byte	-6
624	.byte	-6
625	.byte	-6
626	.byte	-6
627	.byte	-6
628	.byte	-6
629	.byte	-6
630	.byte	-6
631	.byte	-6
632	.byte	-6
633	.byte	-6
634	.byte	-6
635	.byte	-6
636	.byte	-6
637	.byte	-6
638	.byte	-6
639	.byte	-6
640	.byte	-6
641	.byte	-6
642	.byte	-6
643	.byte	-6
644	.byte	-6
645	.byte	-6
646	.byte	-6
647	.byte	-6
648	.byte	-6
649	.byte	-6
650	.byte	-6
651	.byte	-6
652	.byte	-6
653	.byte	-6
654	.byte	-6
655	.byte	-6
656	.byte	-6
657	.byte	-6
658	.byte	-6
659	.byte	-6
660	.byte	-6
661	.byte	-6
662	.byte	-6
663	.byte	-6
664	.byte	-6
665	.byte	-6
666	.byte	-6
667	.byte	-6
668	.byte	-6
669	.byte	-6
670/* 1/-128 .. 1/127, normalized.  There is an implicit leading 1 in bit 32,
671   or in bit 33 for powers of two.  */
672	.balign 4
673	.long   0x0
674	.long	0x2040811
675	.long	0x4104105
676	.long	0x624DD30
677	.long	0x8421085
678	.long	0xA6810A7
679	.long	0xC9714FC
680	.long	0xECF56BF
681	.long	0x11111112
682	.long	0x135C8114
683	.long	0x15B1E5F8
684	.long	0x18118119
685	.long	0x1A7B9612
686	.long	0x1CF06ADB
687	.long	0x1F7047DD
688	.long	0x21FB7813
689	.long	0x24924925
690	.long	0x27350B89
691	.long	0x29E4129F
692	.long	0x2C9FB4D9
693	.long	0x2F684BDB
694	.long	0x323E34A3
695	.long	0x3521CFB3
696	.long	0x38138139
697	.long	0x3B13B13C
698	.long	0x3E22CBCF
699	.long	0x41414142
700	.long	0x446F8657
701	.long	0x47AE147B
702	.long	0x4AFD6A06
703	.long	0x4E5E0A73
704	.long	0x51D07EAF
705	.long	0x55555556
706	.long	0x58ED2309
707	.long	0x5C9882BA
708	.long	0x60581606
709	.long	0x642C8591
710	.long	0x68168169
711	.long	0x6C16C16D
712	.long	0x702E05C1
713	.long	0x745D1746
714	.long	0x78A4C818
715	.long	0x7D05F418
716	.long	0x81818182
717	.long	0x86186187
718	.long	0x8ACB90F7
719	.long	0x8F9C18FA
720	.long	0x948B0FCE
721	.long	0x9999999A
722	.long	0x9EC8E952
723	.long	0xA41A41A5
724	.long	0xA98EF607
725	.long	0xAF286BCB
726	.long	0xB4E81B4F
727	.long	0xBACF914D
728	.long	0xC0E07039
729	.long	0xC71C71C8
730	.long	0xCD856891
731	.long	0xD41D41D5
732	.long	0xDAE6076C
733	.long	0xE1E1E1E2
734	.long	0xE9131AC0
735	.long	0xF07C1F08
736	.long	0xF81F81F9
737	.long	0x0
738	.long	0x4104105
739	.long	0x8421085
740	.long	0xC9714FC
741	.long	0x11111112
742	.long	0x15B1E5F8
743	.long	0x1A7B9612
744	.long	0x1F7047DD
745	.long	0x24924925
746	.long	0x29E4129F
747	.long	0x2F684BDB
748	.long	0x3521CFB3
749	.long	0x3B13B13C
750	.long	0x41414142
751	.long	0x47AE147B
752	.long	0x4E5E0A73
753	.long	0x55555556
754	.long	0x5C9882BA
755	.long	0x642C8591
756	.long	0x6C16C16D
757	.long	0x745D1746
758	.long	0x7D05F418
759	.long	0x86186187
760	.long	0x8F9C18FA
761	.long	0x9999999A
762	.long	0xA41A41A5
763	.long	0xAF286BCB
764	.long	0xBACF914D
765	.long	0xC71C71C8
766	.long	0xD41D41D5
767	.long	0xE1E1E1E2
768	.long	0xF07C1F08
769	.long	0x0
770	.long	0x8421085
771	.long	0x11111112
772	.long	0x1A7B9612
773	.long	0x24924925
774	.long	0x2F684BDB
775	.long	0x3B13B13C
776	.long	0x47AE147B
777	.long	0x55555556
778	.long	0x642C8591
779	.long	0x745D1746
780	.long	0x86186187
781	.long	0x9999999A
782	.long	0xAF286BCB
783	.long	0xC71C71C8
784	.long	0xE1E1E1E2
785	.long	0x0
786	.long	0x11111112
787	.long	0x24924925
788	.long	0x3B13B13C
789	.long	0x55555556
790	.long	0x745D1746
791	.long	0x9999999A
792	.long	0xC71C71C8
793	.long	0x0
794	.long	0x24924925
795	.long	0x55555556
796	.long	0x9999999A
797	.long	0x0
798	.long	0x55555556
799	.long	0x0
800	.long	0x0
801LOCAL(div_table_inv):
802	.long	0x0
803	.long	0x0
804	.long	0x0
805	.long	0x55555556
806	.long	0x0
807	.long	0x9999999A
808	.long	0x55555556
809	.long	0x24924925
810	.long	0x0
811	.long	0xC71C71C8
812	.long	0x9999999A
813	.long	0x745D1746
814	.long	0x55555556
815	.long	0x3B13B13C
816	.long	0x24924925
817	.long	0x11111112
818	.long	0x0
819	.long	0xE1E1E1E2
820	.long	0xC71C71C8
821	.long	0xAF286BCB
822	.long	0x9999999A
823	.long	0x86186187
824	.long	0x745D1746
825	.long	0x642C8591
826	.long	0x55555556
827	.long	0x47AE147B
828	.long	0x3B13B13C
829	.long	0x2F684BDB
830	.long	0x24924925
831	.long	0x1A7B9612
832	.long	0x11111112
833	.long	0x8421085
834	.long	0x0
835	.long	0xF07C1F08
836	.long	0xE1E1E1E2
837	.long	0xD41D41D5
838	.long	0xC71C71C8
839	.long	0xBACF914D
840	.long	0xAF286BCB
841	.long	0xA41A41A5
842	.long	0x9999999A
843	.long	0x8F9C18FA
844	.long	0x86186187
845	.long	0x7D05F418
846	.long	0x745D1746
847	.long	0x6C16C16D
848	.long	0x642C8591
849	.long	0x5C9882BA
850	.long	0x55555556
851	.long	0x4E5E0A73
852	.long	0x47AE147B
853	.long	0x41414142
854	.long	0x3B13B13C
855	.long	0x3521CFB3
856	.long	0x2F684BDB
857	.long	0x29E4129F
858	.long	0x24924925
859	.long	0x1F7047DD
860	.long	0x1A7B9612
861	.long	0x15B1E5F8
862	.long	0x11111112
863	.long	0xC9714FC
864	.long	0x8421085
865	.long	0x4104105
866	.long	0x0
867	.long	0xF81F81F9
868	.long	0xF07C1F08
869	.long	0xE9131AC0
870	.long	0xE1E1E1E2
871	.long	0xDAE6076C
872	.long	0xD41D41D5
873	.long	0xCD856891
874	.long	0xC71C71C8
875	.long	0xC0E07039
876	.long	0xBACF914D
877	.long	0xB4E81B4F
878	.long	0xAF286BCB
879	.long	0xA98EF607
880	.long	0xA41A41A5
881	.long	0x9EC8E952
882	.long	0x9999999A
883	.long	0x948B0FCE
884	.long	0x8F9C18FA
885	.long	0x8ACB90F7
886	.long	0x86186187
887	.long	0x81818182
888	.long	0x7D05F418
889	.long	0x78A4C818
890	.long	0x745D1746
891	.long	0x702E05C1
892	.long	0x6C16C16D
893	.long	0x68168169
894	.long	0x642C8591
895	.long	0x60581606
896	.long	0x5C9882BA
897	.long	0x58ED2309
898	.long	0x55555556
899	.long	0x51D07EAF
900	.long	0x4E5E0A73
901	.long	0x4AFD6A06
902	.long	0x47AE147B
903	.long	0x446F8657
904	.long	0x41414142
905	.long	0x3E22CBCF
906	.long	0x3B13B13C
907	.long	0x38138139
908	.long	0x3521CFB3
909	.long	0x323E34A3
910	.long	0x2F684BDB
911	.long	0x2C9FB4D9
912	.long	0x29E4129F
913	.long	0x27350B89
914	.long	0x24924925
915	.long	0x21FB7813
916	.long	0x1F7047DD
917	.long	0x1CF06ADB
918	.long	0x1A7B9612
919	.long	0x18118119
920	.long	0x15B1E5F8
921	.long	0x135C8114
922	.long	0x11111112
923	.long	0xECF56BF
924	.long	0xC9714FC
925	.long	0xA6810A7
926	.long	0x8421085
927	.long	0x624DD30
928	.long	0x4104105
929	.long	0x2040811
930	/* maximum error: 0.987342 scaled: 0.921875*/
931
932#endif /* SH3 / SH4 */
933
934#endif /* L_div_table */
935