162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
462306a36Sopenharmony_ci   2004, 2005, 2006
562306a36Sopenharmony_ci   Free Software Foundation, Inc.
662306a36Sopenharmony_ci*/
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci!! libgcc routines for the Renesas / SuperH SH CPUs.
962306a36Sopenharmony_ci!! Contributed by Steve Chamberlain.
1062306a36Sopenharmony_ci!! sac@cygnus.com
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
1362306a36Sopenharmony_ci!! recoded in assembly by Toshiyasu Morita
1462306a36Sopenharmony_ci!! tm@netcom.com
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
1762306a36Sopenharmony_ci   ELF local label prefixes by J"orn Rennecke
1862306a36Sopenharmony_ci   amylaar@cygnus.com  */
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/* This code used shld, thus is not suitable for SH1 / SH2.  */
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* Signed / unsigned division without use of FPU, optimized for SH4.
2362306a36Sopenharmony_ci   Uses a lookup table for divisors in the range -128 .. +128, and
2462306a36Sopenharmony_ci   div1 with case distinction for larger divisors in three more ranges.
2562306a36Sopenharmony_ci   The code is lumped together with the table to allow the use of mova.  */
2662306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN
2762306a36Sopenharmony_ci#define L_LSB 0
2862306a36Sopenharmony_ci#define L_LSWMSB 1
2962306a36Sopenharmony_ci#define L_MSWLSB 2
3062306a36Sopenharmony_ci#else
3162306a36Sopenharmony_ci#define L_LSB 3
3262306a36Sopenharmony_ci#define L_LSWMSB 2
3362306a36Sopenharmony_ci#define L_MSWLSB 1
3462306a36Sopenharmony_ci#endif
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	.balign 4
3762306a36Sopenharmony_ci	.global	__udivsi3_i4i
3862306a36Sopenharmony_ci	.global	__udivsi3_i4
3962306a36Sopenharmony_ci	.set	__udivsi3_i4, __udivsi3_i4i
4062306a36Sopenharmony_ci	.type	__udivsi3_i4i, @function
4162306a36Sopenharmony_ci__udivsi3_i4i:
4262306a36Sopenharmony_ci	mov.w c128_w, r1
4362306a36Sopenharmony_ci	div0u
4462306a36Sopenharmony_ci	mov r4,r0
4562306a36Sopenharmony_ci	shlr8 r0
4662306a36Sopenharmony_ci	cmp/hi r1,r5
4762306a36Sopenharmony_ci	extu.w r5,r1
4862306a36Sopenharmony_ci	bf udiv_le128
4962306a36Sopenharmony_ci	cmp/eq r5,r1
5062306a36Sopenharmony_ci	bf udiv_ge64k
5162306a36Sopenharmony_ci	shlr r0
5262306a36Sopenharmony_ci	mov r5,r1
5362306a36Sopenharmony_ci	shll16 r5
5462306a36Sopenharmony_ci	mov.l r4,@-r15
5562306a36Sopenharmony_ci	div1 r5,r0
5662306a36Sopenharmony_ci	mov.l r1,@-r15
5762306a36Sopenharmony_ci	div1 r5,r0
5862306a36Sopenharmony_ci	div1 r5,r0
5962306a36Sopenharmony_ci	bra udiv_25
6062306a36Sopenharmony_ci	div1 r5,r0
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cidiv_le128:
6362306a36Sopenharmony_ci	mova div_table_ix,r0
6462306a36Sopenharmony_ci	bra div_le128_2
6562306a36Sopenharmony_ci	mov.b @(r0,r5),r1
6662306a36Sopenharmony_ciudiv_le128:
6762306a36Sopenharmony_ci	mov.l r4,@-r15
6862306a36Sopenharmony_ci	mova div_table_ix,r0
6962306a36Sopenharmony_ci	mov.b @(r0,r5),r1
7062306a36Sopenharmony_ci	mov.l r5,@-r15
7162306a36Sopenharmony_cidiv_le128_2:
7262306a36Sopenharmony_ci	mova div_table_inv,r0
7362306a36Sopenharmony_ci	mov.l @(r0,r1),r1
7462306a36Sopenharmony_ci	mov r5,r0
7562306a36Sopenharmony_ci	tst #0xfe,r0
7662306a36Sopenharmony_ci	mova div_table_clz,r0
7762306a36Sopenharmony_ci	dmulu.l r1,r4
7862306a36Sopenharmony_ci	mov.b @(r0,r5),r1
7962306a36Sopenharmony_ci	bt/s div_by_1
8062306a36Sopenharmony_ci	mov r4,r0
8162306a36Sopenharmony_ci	mov.l @r15+,r5
8262306a36Sopenharmony_ci	sts mach,r0
8362306a36Sopenharmony_ci	/* clrt */
8462306a36Sopenharmony_ci	addc r4,r0
8562306a36Sopenharmony_ci	mov.l @r15+,r4
8662306a36Sopenharmony_ci	rotcr r0
8762306a36Sopenharmony_ci	rts
8862306a36Sopenharmony_ci	shld r1,r0
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cidiv_by_1_neg:
9162306a36Sopenharmony_ci	neg r4,r0
9262306a36Sopenharmony_cidiv_by_1:
9362306a36Sopenharmony_ci	mov.l @r15+,r5
9462306a36Sopenharmony_ci	rts
9562306a36Sopenharmony_ci	mov.l @r15+,r4
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_cidiv_ge64k:
9862306a36Sopenharmony_ci	bt/s div_r8
9962306a36Sopenharmony_ci	div0u
10062306a36Sopenharmony_ci	shll8 r5
10162306a36Sopenharmony_ci	bra div_ge64k_2
10262306a36Sopenharmony_ci	div1 r5,r0
10362306a36Sopenharmony_ciudiv_ge64k:
10462306a36Sopenharmony_ci	cmp/hi r0,r5
10562306a36Sopenharmony_ci	mov r5,r1
10662306a36Sopenharmony_ci	bt udiv_r8
10762306a36Sopenharmony_ci	shll8 r5
10862306a36Sopenharmony_ci	mov.l r4,@-r15
10962306a36Sopenharmony_ci	div1 r5,r0
11062306a36Sopenharmony_ci	mov.l r1,@-r15
11162306a36Sopenharmony_cidiv_ge64k_2:
11262306a36Sopenharmony_ci	div1 r5,r0
11362306a36Sopenharmony_ci	mov.l zero_l,r1
11462306a36Sopenharmony_ci	.rept 4
11562306a36Sopenharmony_ci	div1 r5,r0
11662306a36Sopenharmony_ci	.endr
11762306a36Sopenharmony_ci	mov.l r1,@-r15
11862306a36Sopenharmony_ci	div1 r5,r0
11962306a36Sopenharmony_ci	mov.w m256_w,r1
12062306a36Sopenharmony_ci	div1 r5,r0
12162306a36Sopenharmony_ci	mov.b r0,@(L_LSWMSB,r15)
12262306a36Sopenharmony_ci	xor r4,r0
12362306a36Sopenharmony_ci	and r1,r0
12462306a36Sopenharmony_ci	bra div_ge64k_end
12562306a36Sopenharmony_ci	xor r4,r0
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_cidiv_r8:
12862306a36Sopenharmony_ci	shll16 r4
12962306a36Sopenharmony_ci	bra div_r8_2
13062306a36Sopenharmony_ci	shll8 r4
13162306a36Sopenharmony_ciudiv_r8:
13262306a36Sopenharmony_ci	mov.l r4,@-r15
13362306a36Sopenharmony_ci	shll16 r4
13462306a36Sopenharmony_ci	clrt
13562306a36Sopenharmony_ci	shll8 r4
13662306a36Sopenharmony_ci	mov.l r5,@-r15
13762306a36Sopenharmony_cidiv_r8_2:
13862306a36Sopenharmony_ci	rotcl r4
13962306a36Sopenharmony_ci	mov r0,r1
14062306a36Sopenharmony_ci	div1 r5,r1
14162306a36Sopenharmony_ci	mov r4,r0
14262306a36Sopenharmony_ci	rotcl r0
14362306a36Sopenharmony_ci	mov r5,r4
14462306a36Sopenharmony_ci	div1 r5,r1
14562306a36Sopenharmony_ci	.rept 5
14662306a36Sopenharmony_ci	rotcl r0; div1 r5,r1
14762306a36Sopenharmony_ci	.endr
14862306a36Sopenharmony_ci	rotcl r0
14962306a36Sopenharmony_ci	mov.l @r15+,r5
15062306a36Sopenharmony_ci	div1 r4,r1
15162306a36Sopenharmony_ci	mov.l @r15+,r4
15262306a36Sopenharmony_ci	rts
15362306a36Sopenharmony_ci	rotcl r0
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	.global	__sdivsi3_i4i
15662306a36Sopenharmony_ci	.global __sdivsi3_i4
15762306a36Sopenharmony_ci	.global	__sdivsi3
15862306a36Sopenharmony_ci	.set	__sdivsi3_i4, __sdivsi3_i4i
15962306a36Sopenharmony_ci	.set	__sdivsi3, __sdivsi3_i4i
16062306a36Sopenharmony_ci	.type	__sdivsi3_i4i, @function
16162306a36Sopenharmony_ci	/* This is link-compatible with a __sdivsi3 call,
16262306a36Sopenharmony_ci	   but we effectively clobber only r1.  */
16362306a36Sopenharmony_ci__sdivsi3_i4i:
16462306a36Sopenharmony_ci	mov.l r4,@-r15
16562306a36Sopenharmony_ci	cmp/pz r5
16662306a36Sopenharmony_ci	mov.w c128_w, r1
16762306a36Sopenharmony_ci	bt/s pos_divisor
16862306a36Sopenharmony_ci	cmp/pz r4
16962306a36Sopenharmony_ci	mov.l r5,@-r15
17062306a36Sopenharmony_ci	neg r5,r5
17162306a36Sopenharmony_ci	bt/s neg_result
17262306a36Sopenharmony_ci	cmp/hi r1,r5
17362306a36Sopenharmony_ci	neg r4,r4
17462306a36Sopenharmony_cipos_result:
17562306a36Sopenharmony_ci	extu.w r5,r0
17662306a36Sopenharmony_ci	bf div_le128
17762306a36Sopenharmony_ci	cmp/eq r5,r0
17862306a36Sopenharmony_ci	mov r4,r0
17962306a36Sopenharmony_ci	shlr8 r0
18062306a36Sopenharmony_ci	bf/s div_ge64k
18162306a36Sopenharmony_ci	cmp/hi r0,r5
18262306a36Sopenharmony_ci	div0u
18362306a36Sopenharmony_ci	shll16 r5
18462306a36Sopenharmony_ci	div1 r5,r0
18562306a36Sopenharmony_ci	div1 r5,r0
18662306a36Sopenharmony_ci	div1 r5,r0
18762306a36Sopenharmony_ciudiv_25:
18862306a36Sopenharmony_ci	mov.l zero_l,r1
18962306a36Sopenharmony_ci	div1 r5,r0
19062306a36Sopenharmony_ci	div1 r5,r0
19162306a36Sopenharmony_ci	mov.l r1,@-r15
19262306a36Sopenharmony_ci	.rept 3
19362306a36Sopenharmony_ci	div1 r5,r0
19462306a36Sopenharmony_ci	.endr
19562306a36Sopenharmony_ci	mov.b r0,@(L_MSWLSB,r15)
19662306a36Sopenharmony_ci	xtrct r4,r0
19762306a36Sopenharmony_ci	swap.w r0,r0
19862306a36Sopenharmony_ci	.rept 8
19962306a36Sopenharmony_ci	div1 r5,r0
20062306a36Sopenharmony_ci	.endr
20162306a36Sopenharmony_ci	mov.b r0,@(L_LSWMSB,r15)
20262306a36Sopenharmony_cidiv_ge64k_end:
20362306a36Sopenharmony_ci	.rept 8
20462306a36Sopenharmony_ci	div1 r5,r0
20562306a36Sopenharmony_ci	.endr
20662306a36Sopenharmony_ci	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
20762306a36Sopenharmony_ci	extu.b r0,r0
20862306a36Sopenharmony_ci	mov.l @r15+,r5
20962306a36Sopenharmony_ci	or r4,r0
21062306a36Sopenharmony_ci	mov.l @r15+,r4
21162306a36Sopenharmony_ci	rts
21262306a36Sopenharmony_ci	rotcl r0
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_cidiv_le128_neg:
21562306a36Sopenharmony_ci	tst #0xfe,r0
21662306a36Sopenharmony_ci	mova div_table_ix,r0
21762306a36Sopenharmony_ci	mov.b @(r0,r5),r1
21862306a36Sopenharmony_ci	mova div_table_inv,r0
21962306a36Sopenharmony_ci	bt/s div_by_1_neg
22062306a36Sopenharmony_ci	mov.l @(r0,r1),r1
22162306a36Sopenharmony_ci	mova div_table_clz,r0
22262306a36Sopenharmony_ci	dmulu.l r1,r4
22362306a36Sopenharmony_ci	mov.b @(r0,r5),r1
22462306a36Sopenharmony_ci	mov.l @r15+,r5
22562306a36Sopenharmony_ci	sts mach,r0
22662306a36Sopenharmony_ci	/* clrt */
22762306a36Sopenharmony_ci	addc r4,r0
22862306a36Sopenharmony_ci	mov.l @r15+,r4
22962306a36Sopenharmony_ci	rotcr r0
23062306a36Sopenharmony_ci	shld r1,r0
23162306a36Sopenharmony_ci	rts
23262306a36Sopenharmony_ci	neg r0,r0
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_cipos_divisor:
23562306a36Sopenharmony_ci	mov.l r5,@-r15
23662306a36Sopenharmony_ci	bt/s pos_result
23762306a36Sopenharmony_ci	cmp/hi r1,r5
23862306a36Sopenharmony_ci	neg r4,r4
23962306a36Sopenharmony_cineg_result:
24062306a36Sopenharmony_ci	extu.w r5,r0
24162306a36Sopenharmony_ci	bf div_le128_neg
24262306a36Sopenharmony_ci	cmp/eq r5,r0
24362306a36Sopenharmony_ci	mov r4,r0
24462306a36Sopenharmony_ci	shlr8 r0
24562306a36Sopenharmony_ci	bf/s div_ge64k_neg
24662306a36Sopenharmony_ci	cmp/hi r0,r5
24762306a36Sopenharmony_ci	div0u
24862306a36Sopenharmony_ci	mov.l zero_l,r1
24962306a36Sopenharmony_ci	shll16 r5
25062306a36Sopenharmony_ci	div1 r5,r0
25162306a36Sopenharmony_ci	mov.l r1,@-r15
25262306a36Sopenharmony_ci	.rept 7
25362306a36Sopenharmony_ci	div1 r5,r0
25462306a36Sopenharmony_ci	.endr
25562306a36Sopenharmony_ci	mov.b r0,@(L_MSWLSB,r15)
25662306a36Sopenharmony_ci	xtrct r4,r0
25762306a36Sopenharmony_ci	swap.w r0,r0
25862306a36Sopenharmony_ci	.rept 8
25962306a36Sopenharmony_ci	div1 r5,r0
26062306a36Sopenharmony_ci	.endr
26162306a36Sopenharmony_ci	mov.b r0,@(L_LSWMSB,r15)
26262306a36Sopenharmony_cidiv_ge64k_neg_end:
26362306a36Sopenharmony_ci	.rept 8
26462306a36Sopenharmony_ci	div1 r5,r0
26562306a36Sopenharmony_ci	.endr
26662306a36Sopenharmony_ci	mov.l @r15+,r4 ! zero-extension and swap using LS unit.
26762306a36Sopenharmony_ci	extu.b r0,r1
26862306a36Sopenharmony_ci	mov.l @r15+,r5
26962306a36Sopenharmony_ci	or r4,r1
27062306a36Sopenharmony_cidiv_r8_neg_end:
27162306a36Sopenharmony_ci	mov.l @r15+,r4
27262306a36Sopenharmony_ci	rotcl r1
27362306a36Sopenharmony_ci	rts
27462306a36Sopenharmony_ci	neg r1,r0
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_cidiv_ge64k_neg:
27762306a36Sopenharmony_ci	bt/s div_r8_neg
27862306a36Sopenharmony_ci	div0u
27962306a36Sopenharmony_ci	shll8 r5
28062306a36Sopenharmony_ci	mov.l zero_l,r1
28162306a36Sopenharmony_ci	.rept 6
28262306a36Sopenharmony_ci	div1 r5,r0
28362306a36Sopenharmony_ci	.endr
28462306a36Sopenharmony_ci	mov.l r1,@-r15
28562306a36Sopenharmony_ci	div1 r5,r0
28662306a36Sopenharmony_ci	mov.w m256_w,r1
28762306a36Sopenharmony_ci	div1 r5,r0
28862306a36Sopenharmony_ci	mov.b r0,@(L_LSWMSB,r15)
28962306a36Sopenharmony_ci	xor r4,r0
29062306a36Sopenharmony_ci	and r1,r0
29162306a36Sopenharmony_ci	bra div_ge64k_neg_end
29262306a36Sopenharmony_ci	xor r4,r0
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_cic128_w:
29562306a36Sopenharmony_ci	.word 128
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_cidiv_r8_neg:
29862306a36Sopenharmony_ci	clrt
29962306a36Sopenharmony_ci	shll16 r4
30062306a36Sopenharmony_ci	mov r4,r1
30162306a36Sopenharmony_ci	shll8 r1
30262306a36Sopenharmony_ci	mov r5,r4
30362306a36Sopenharmony_ci	.rept 7
30462306a36Sopenharmony_ci	rotcl r1; div1 r5,r0
30562306a36Sopenharmony_ci	.endr
30662306a36Sopenharmony_ci	mov.l @r15+,r5
30762306a36Sopenharmony_ci	rotcl r1
30862306a36Sopenharmony_ci	bra div_r8_neg_end
30962306a36Sopenharmony_ci	div1 r4,r0
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_cim256_w:
31262306a36Sopenharmony_ci	.word 0xff00
31362306a36Sopenharmony_ci/* This table has been generated by divtab-sh4.c.  */
31462306a36Sopenharmony_ci	.balign 4
31562306a36Sopenharmony_cidiv_table_clz:
31662306a36Sopenharmony_ci	.byte	0
31762306a36Sopenharmony_ci	.byte	1
31862306a36Sopenharmony_ci	.byte	0
31962306a36Sopenharmony_ci	.byte	-1
32062306a36Sopenharmony_ci	.byte	-1
32162306a36Sopenharmony_ci	.byte	-2
32262306a36Sopenharmony_ci	.byte	-2
32362306a36Sopenharmony_ci	.byte	-2
32462306a36Sopenharmony_ci	.byte	-2
32562306a36Sopenharmony_ci	.byte	-3
32662306a36Sopenharmony_ci	.byte	-3
32762306a36Sopenharmony_ci	.byte	-3
32862306a36Sopenharmony_ci	.byte	-3
32962306a36Sopenharmony_ci	.byte	-3
33062306a36Sopenharmony_ci	.byte	-3
33162306a36Sopenharmony_ci	.byte	-3
33262306a36Sopenharmony_ci	.byte	-3
33362306a36Sopenharmony_ci	.byte	-4
33462306a36Sopenharmony_ci	.byte	-4
33562306a36Sopenharmony_ci	.byte	-4
33662306a36Sopenharmony_ci	.byte	-4
33762306a36Sopenharmony_ci	.byte	-4
33862306a36Sopenharmony_ci	.byte	-4
33962306a36Sopenharmony_ci	.byte	-4
34062306a36Sopenharmony_ci	.byte	-4
34162306a36Sopenharmony_ci	.byte	-4
34262306a36Sopenharmony_ci	.byte	-4
34362306a36Sopenharmony_ci	.byte	-4
34462306a36Sopenharmony_ci	.byte	-4
34562306a36Sopenharmony_ci	.byte	-4
34662306a36Sopenharmony_ci	.byte	-4
34762306a36Sopenharmony_ci	.byte	-4
34862306a36Sopenharmony_ci	.byte	-4
34962306a36Sopenharmony_ci	.byte	-5
35062306a36Sopenharmony_ci	.byte	-5
35162306a36Sopenharmony_ci	.byte	-5
35262306a36Sopenharmony_ci	.byte	-5
35362306a36Sopenharmony_ci	.byte	-5
35462306a36Sopenharmony_ci	.byte	-5
35562306a36Sopenharmony_ci	.byte	-5
35662306a36Sopenharmony_ci	.byte	-5
35762306a36Sopenharmony_ci	.byte	-5
35862306a36Sopenharmony_ci	.byte	-5
35962306a36Sopenharmony_ci	.byte	-5
36062306a36Sopenharmony_ci	.byte	-5
36162306a36Sopenharmony_ci	.byte	-5
36262306a36Sopenharmony_ci	.byte	-5
36362306a36Sopenharmony_ci	.byte	-5
36462306a36Sopenharmony_ci	.byte	-5
36562306a36Sopenharmony_ci	.byte	-5
36662306a36Sopenharmony_ci	.byte	-5
36762306a36Sopenharmony_ci	.byte	-5
36862306a36Sopenharmony_ci	.byte	-5
36962306a36Sopenharmony_ci	.byte	-5
37062306a36Sopenharmony_ci	.byte	-5
37162306a36Sopenharmony_ci	.byte	-5
37262306a36Sopenharmony_ci	.byte	-5
37362306a36Sopenharmony_ci	.byte	-5
37462306a36Sopenharmony_ci	.byte	-5
37562306a36Sopenharmony_ci	.byte	-5
37662306a36Sopenharmony_ci	.byte	-5
37762306a36Sopenharmony_ci	.byte	-5
37862306a36Sopenharmony_ci	.byte	-5
37962306a36Sopenharmony_ci	.byte	-5
38062306a36Sopenharmony_ci	.byte	-5
38162306a36Sopenharmony_ci	.byte	-6
38262306a36Sopenharmony_ci	.byte	-6
38362306a36Sopenharmony_ci	.byte	-6
38462306a36Sopenharmony_ci	.byte	-6
38562306a36Sopenharmony_ci	.byte	-6
38662306a36Sopenharmony_ci	.byte	-6
38762306a36Sopenharmony_ci	.byte	-6
38862306a36Sopenharmony_ci	.byte	-6
38962306a36Sopenharmony_ci	.byte	-6
39062306a36Sopenharmony_ci	.byte	-6
39162306a36Sopenharmony_ci	.byte	-6
39262306a36Sopenharmony_ci	.byte	-6
39362306a36Sopenharmony_ci	.byte	-6
39462306a36Sopenharmony_ci	.byte	-6
39562306a36Sopenharmony_ci	.byte	-6
39662306a36Sopenharmony_ci	.byte	-6
39762306a36Sopenharmony_ci	.byte	-6
39862306a36Sopenharmony_ci	.byte	-6
39962306a36Sopenharmony_ci	.byte	-6
40062306a36Sopenharmony_ci	.byte	-6
40162306a36Sopenharmony_ci	.byte	-6
40262306a36Sopenharmony_ci	.byte	-6
40362306a36Sopenharmony_ci	.byte	-6
40462306a36Sopenharmony_ci	.byte	-6
40562306a36Sopenharmony_ci	.byte	-6
40662306a36Sopenharmony_ci	.byte	-6
40762306a36Sopenharmony_ci	.byte	-6
40862306a36Sopenharmony_ci	.byte	-6
40962306a36Sopenharmony_ci	.byte	-6
41062306a36Sopenharmony_ci	.byte	-6
41162306a36Sopenharmony_ci	.byte	-6
41262306a36Sopenharmony_ci	.byte	-6
41362306a36Sopenharmony_ci	.byte	-6
41462306a36Sopenharmony_ci	.byte	-6
41562306a36Sopenharmony_ci	.byte	-6
41662306a36Sopenharmony_ci	.byte	-6
41762306a36Sopenharmony_ci	.byte	-6
41862306a36Sopenharmony_ci	.byte	-6
41962306a36Sopenharmony_ci	.byte	-6
42062306a36Sopenharmony_ci	.byte	-6
42162306a36Sopenharmony_ci	.byte	-6
42262306a36Sopenharmony_ci	.byte	-6
42362306a36Sopenharmony_ci	.byte	-6
42462306a36Sopenharmony_ci	.byte	-6
42562306a36Sopenharmony_ci	.byte	-6
42662306a36Sopenharmony_ci	.byte	-6
42762306a36Sopenharmony_ci	.byte	-6
42862306a36Sopenharmony_ci	.byte	-6
42962306a36Sopenharmony_ci	.byte	-6
43062306a36Sopenharmony_ci	.byte	-6
43162306a36Sopenharmony_ci	.byte	-6
43262306a36Sopenharmony_ci	.byte	-6
43362306a36Sopenharmony_ci	.byte	-6
43462306a36Sopenharmony_ci	.byte	-6
43562306a36Sopenharmony_ci	.byte	-6
43662306a36Sopenharmony_ci	.byte	-6
43762306a36Sopenharmony_ci	.byte	-6
43862306a36Sopenharmony_ci	.byte	-6
43962306a36Sopenharmony_ci	.byte	-6
44062306a36Sopenharmony_ci	.byte	-6
44162306a36Sopenharmony_ci	.byte	-6
44262306a36Sopenharmony_ci	.byte	-6
44362306a36Sopenharmony_ci	.byte	-6
44462306a36Sopenharmony_ci/* Lookup table translating positive divisor to index into table of
44562306a36Sopenharmony_ci   normalized inverse.  N.B. the '0' entry is also the last entry of the
44662306a36Sopenharmony_ci previous table, and causes an unaligned access for division by zero.  */
44762306a36Sopenharmony_cidiv_table_ix:
44862306a36Sopenharmony_ci	.byte	-6
44962306a36Sopenharmony_ci	.byte	-128
45062306a36Sopenharmony_ci	.byte	-128
45162306a36Sopenharmony_ci	.byte	0
45262306a36Sopenharmony_ci	.byte	-128
45362306a36Sopenharmony_ci	.byte	-64
45462306a36Sopenharmony_ci	.byte	0
45562306a36Sopenharmony_ci	.byte	64
45662306a36Sopenharmony_ci	.byte	-128
45762306a36Sopenharmony_ci	.byte	-96
45862306a36Sopenharmony_ci	.byte	-64
45962306a36Sopenharmony_ci	.byte	-32
46062306a36Sopenharmony_ci	.byte	0
46162306a36Sopenharmony_ci	.byte	32
46262306a36Sopenharmony_ci	.byte	64
46362306a36Sopenharmony_ci	.byte	96
46462306a36Sopenharmony_ci	.byte	-128
46562306a36Sopenharmony_ci	.byte	-112
46662306a36Sopenharmony_ci	.byte	-96
46762306a36Sopenharmony_ci	.byte	-80
46862306a36Sopenharmony_ci	.byte	-64
46962306a36Sopenharmony_ci	.byte	-48
47062306a36Sopenharmony_ci	.byte	-32
47162306a36Sopenharmony_ci	.byte	-16
47262306a36Sopenharmony_ci	.byte	0
47362306a36Sopenharmony_ci	.byte	16
47462306a36Sopenharmony_ci	.byte	32
47562306a36Sopenharmony_ci	.byte	48
47662306a36Sopenharmony_ci	.byte	64
47762306a36Sopenharmony_ci	.byte	80
47862306a36Sopenharmony_ci	.byte	96
47962306a36Sopenharmony_ci	.byte	112
48062306a36Sopenharmony_ci	.byte	-128
48162306a36Sopenharmony_ci	.byte	-120
48262306a36Sopenharmony_ci	.byte	-112
48362306a36Sopenharmony_ci	.byte	-104
48462306a36Sopenharmony_ci	.byte	-96
48562306a36Sopenharmony_ci	.byte	-88
48662306a36Sopenharmony_ci	.byte	-80
48762306a36Sopenharmony_ci	.byte	-72
48862306a36Sopenharmony_ci	.byte	-64
48962306a36Sopenharmony_ci	.byte	-56
49062306a36Sopenharmony_ci	.byte	-48
49162306a36Sopenharmony_ci	.byte	-40
49262306a36Sopenharmony_ci	.byte	-32
49362306a36Sopenharmony_ci	.byte	-24
49462306a36Sopenharmony_ci	.byte	-16
49562306a36Sopenharmony_ci	.byte	-8
49662306a36Sopenharmony_ci	.byte	0
49762306a36Sopenharmony_ci	.byte	8
49862306a36Sopenharmony_ci	.byte	16
49962306a36Sopenharmony_ci	.byte	24
50062306a36Sopenharmony_ci	.byte	32
50162306a36Sopenharmony_ci	.byte	40
50262306a36Sopenharmony_ci	.byte	48
50362306a36Sopenharmony_ci	.byte	56
50462306a36Sopenharmony_ci	.byte	64
50562306a36Sopenharmony_ci	.byte	72
50662306a36Sopenharmony_ci	.byte	80
50762306a36Sopenharmony_ci	.byte	88
50862306a36Sopenharmony_ci	.byte	96
50962306a36Sopenharmony_ci	.byte	104
51062306a36Sopenharmony_ci	.byte	112
51162306a36Sopenharmony_ci	.byte	120
51262306a36Sopenharmony_ci	.byte	-128
51362306a36Sopenharmony_ci	.byte	-124
51462306a36Sopenharmony_ci	.byte	-120
51562306a36Sopenharmony_ci	.byte	-116
51662306a36Sopenharmony_ci	.byte	-112
51762306a36Sopenharmony_ci	.byte	-108
51862306a36Sopenharmony_ci	.byte	-104
51962306a36Sopenharmony_ci	.byte	-100
52062306a36Sopenharmony_ci	.byte	-96
52162306a36Sopenharmony_ci	.byte	-92
52262306a36Sopenharmony_ci	.byte	-88
52362306a36Sopenharmony_ci	.byte	-84
52462306a36Sopenharmony_ci	.byte	-80
52562306a36Sopenharmony_ci	.byte	-76
52662306a36Sopenharmony_ci	.byte	-72
52762306a36Sopenharmony_ci	.byte	-68
52862306a36Sopenharmony_ci	.byte	-64
52962306a36Sopenharmony_ci	.byte	-60
53062306a36Sopenharmony_ci	.byte	-56
53162306a36Sopenharmony_ci	.byte	-52
53262306a36Sopenharmony_ci	.byte	-48
53362306a36Sopenharmony_ci	.byte	-44
53462306a36Sopenharmony_ci	.byte	-40
53562306a36Sopenharmony_ci	.byte	-36
53662306a36Sopenharmony_ci	.byte	-32
53762306a36Sopenharmony_ci	.byte	-28
53862306a36Sopenharmony_ci	.byte	-24
53962306a36Sopenharmony_ci	.byte	-20
54062306a36Sopenharmony_ci	.byte	-16
54162306a36Sopenharmony_ci	.byte	-12
54262306a36Sopenharmony_ci	.byte	-8
54362306a36Sopenharmony_ci	.byte	-4
54462306a36Sopenharmony_ci	.byte	0
54562306a36Sopenharmony_ci	.byte	4
54662306a36Sopenharmony_ci	.byte	8
54762306a36Sopenharmony_ci	.byte	12
54862306a36Sopenharmony_ci	.byte	16
54962306a36Sopenharmony_ci	.byte	20
55062306a36Sopenharmony_ci	.byte	24
55162306a36Sopenharmony_ci	.byte	28
55262306a36Sopenharmony_ci	.byte	32
55362306a36Sopenharmony_ci	.byte	36
55462306a36Sopenharmony_ci	.byte	40
55562306a36Sopenharmony_ci	.byte	44
55662306a36Sopenharmony_ci	.byte	48
55762306a36Sopenharmony_ci	.byte	52
55862306a36Sopenharmony_ci	.byte	56
55962306a36Sopenharmony_ci	.byte	60
56062306a36Sopenharmony_ci	.byte	64
56162306a36Sopenharmony_ci	.byte	68
56262306a36Sopenharmony_ci	.byte	72
56362306a36Sopenharmony_ci	.byte	76
56462306a36Sopenharmony_ci	.byte	80
56562306a36Sopenharmony_ci	.byte	84
56662306a36Sopenharmony_ci	.byte	88
56762306a36Sopenharmony_ci	.byte	92
56862306a36Sopenharmony_ci	.byte	96
56962306a36Sopenharmony_ci	.byte	100
57062306a36Sopenharmony_ci	.byte	104
57162306a36Sopenharmony_ci	.byte	108
57262306a36Sopenharmony_ci	.byte	112
57362306a36Sopenharmony_ci	.byte	116
57462306a36Sopenharmony_ci	.byte	120
57562306a36Sopenharmony_ci	.byte	124
57662306a36Sopenharmony_ci	.byte	-128
57762306a36Sopenharmony_ci/* 1/64 .. 1/127, normalized.  There is an implicit leading 1 in bit 32.  */
57862306a36Sopenharmony_ci	.balign 4
57962306a36Sopenharmony_cizero_l:
58062306a36Sopenharmony_ci	.long	0x0
58162306a36Sopenharmony_ci	.long	0xF81F81F9
58262306a36Sopenharmony_ci	.long	0xF07C1F08
58362306a36Sopenharmony_ci	.long	0xE9131AC0
58462306a36Sopenharmony_ci	.long	0xE1E1E1E2
58562306a36Sopenharmony_ci	.long	0xDAE6076C
58662306a36Sopenharmony_ci	.long	0xD41D41D5
58762306a36Sopenharmony_ci	.long	0xCD856891
58862306a36Sopenharmony_ci	.long	0xC71C71C8
58962306a36Sopenharmony_ci	.long	0xC0E07039
59062306a36Sopenharmony_ci	.long	0xBACF914D
59162306a36Sopenharmony_ci	.long	0xB4E81B4F
59262306a36Sopenharmony_ci	.long	0xAF286BCB
59362306a36Sopenharmony_ci	.long	0xA98EF607
59462306a36Sopenharmony_ci	.long	0xA41A41A5
59562306a36Sopenharmony_ci	.long	0x9EC8E952
59662306a36Sopenharmony_ci	.long	0x9999999A
59762306a36Sopenharmony_ci	.long	0x948B0FCE
59862306a36Sopenharmony_ci	.long	0x8F9C18FA
59962306a36Sopenharmony_ci	.long	0x8ACB90F7
60062306a36Sopenharmony_ci	.long	0x86186187
60162306a36Sopenharmony_ci	.long	0x81818182
60262306a36Sopenharmony_ci	.long	0x7D05F418
60362306a36Sopenharmony_ci	.long	0x78A4C818
60462306a36Sopenharmony_ci	.long	0x745D1746
60562306a36Sopenharmony_ci	.long	0x702E05C1
60662306a36Sopenharmony_ci	.long	0x6C16C16D
60762306a36Sopenharmony_ci	.long	0x68168169
60862306a36Sopenharmony_ci	.long	0x642C8591
60962306a36Sopenharmony_ci	.long	0x60581606
61062306a36Sopenharmony_ci	.long	0x5C9882BA
61162306a36Sopenharmony_ci	.long	0x58ED2309
61262306a36Sopenharmony_cidiv_table_inv:
61362306a36Sopenharmony_ci	.long	0x55555556
61462306a36Sopenharmony_ci	.long	0x51D07EAF
61562306a36Sopenharmony_ci	.long	0x4E5E0A73
61662306a36Sopenharmony_ci	.long	0x4AFD6A06
61762306a36Sopenharmony_ci	.long	0x47AE147B
61862306a36Sopenharmony_ci	.long	0x446F8657
61962306a36Sopenharmony_ci	.long	0x41414142
62062306a36Sopenharmony_ci	.long	0x3E22CBCF
62162306a36Sopenharmony_ci	.long	0x3B13B13C
62262306a36Sopenharmony_ci	.long	0x38138139
62362306a36Sopenharmony_ci	.long	0x3521CFB3
62462306a36Sopenharmony_ci	.long	0x323E34A3
62562306a36Sopenharmony_ci	.long	0x2F684BDB
62662306a36Sopenharmony_ci	.long	0x2C9FB4D9
62762306a36Sopenharmony_ci	.long	0x29E4129F
62862306a36Sopenharmony_ci	.long	0x27350B89
62962306a36Sopenharmony_ci	.long	0x24924925
63062306a36Sopenharmony_ci	.long	0x21FB7813
63162306a36Sopenharmony_ci	.long	0x1F7047DD
63262306a36Sopenharmony_ci	.long	0x1CF06ADB
63362306a36Sopenharmony_ci	.long	0x1A7B9612
63462306a36Sopenharmony_ci	.long	0x18118119
63562306a36Sopenharmony_ci	.long	0x15B1E5F8
63662306a36Sopenharmony_ci	.long	0x135C8114
63762306a36Sopenharmony_ci	.long	0x11111112
63862306a36Sopenharmony_ci	.long	0xECF56BF
63962306a36Sopenharmony_ci	.long	0xC9714FC
64062306a36Sopenharmony_ci	.long	0xA6810A7
64162306a36Sopenharmony_ci	.long	0x8421085
64262306a36Sopenharmony_ci	.long	0x624DD30
64362306a36Sopenharmony_ci	.long	0x4104105
64462306a36Sopenharmony_ci	.long	0x2040811
64562306a36Sopenharmony_ci	/* maximum error: 0.987342 scaled: 0.921875*/
646