• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0 */
2	.global	__sdivsi3
3	.global	__sdivsi3_1
4	.global	__sdivsi3_2
5	.section	.text..SHmedia32,"ax"
6	.align	2
7
8	/* inputs: r4,r5 */
9	/* clobbered: r1,r18,r19,r20,r21,r25,tr0 */
10	/* result in r0 */
11__sdivsi3:
12__sdivsi3_1:
13	ptb __div_table,tr0
14	gettr tr0,r20
15
16__sdivsi3_2:
17	nsb r5, r1
18	shlld r5, r1, r25    /* normalize; [-2 ..1, 1..2) in s2.62 */
19	shari r25, 58, r21   /* extract 5(6) bit index (s2.4 with hole -1..1) */
20	/* bubble */
21	ldx.ub r20, r21, r19 /* u0.8 */
22	shari r25, 32, r25   /* normalize to s2.30 */
23	shlli r21, 1, r21
24	muls.l r25, r19, r19 /* s2.38 */
25	ldx.w r20, r21, r21  /* s2.14 */
26	ptabs r18, tr0
27	shari r19, 24, r19   /* truncate to s2.14 */
28	sub r21, r19, r19    /* some 11 bit inverse in s1.14 */
29	muls.l r19, r19, r21 /* u0.28 */
30	sub r63, r1, r1
31	addi r1, 92, r1
32	muls.l r25, r21, r18 /* s2.58 */
33	shlli r19, 45, r19   /* multiply by two and convert to s2.58 */
34	/* bubble */
35	sub r19, r18, r18
36	shari r18, 28, r18   /* some 22 bit inverse in s1.30 */
37	muls.l r18, r25, r0  /* s2.60 */
38	muls.l r18, r4, r25 /* s32.30 */
39	/* bubble */
40	shari r0, 16, r19   /* s-16.44 */
41	muls.l r19, r18, r19 /* s-16.74 */
42	shari r25, 63, r0
43	shari r4, 14, r18   /* s19.-14 */
44	shari r19, 30, r19   /* s-16.44 */
45	muls.l r19, r18, r19 /* s15.30 */
46	xor r21, r0, r21    /* You could also use the constant 1 << 27. */
47	add r21, r25, r21
48	sub r21, r19, r21
49	shard r21, r1, r21
50	sub r21, r0, r0
51	blink tr0, r63
52
53/* This table has been generated by divtab.c .
54Defects for bias -330:
55   Max defect: 6.081536e-07 at -1.000000e+00
56   Min defect: 2.849516e-08 at 1.030651e+00
57   Max 2nd step defect: 9.606539e-12 at -1.000000e+00
58   Min 2nd step defect: 0.000000e+00 at 0.000000e+00
59   Defect at 1: 1.238659e-07
60   Defect at -2: 1.061708e-07 */
61
62	.balign 2
63	.type	__div_table,@object
64	.size	__div_table,128
65/* negative division constants */
66	.word	-16638
67	.word	-17135
68	.word	-17737
69	.word	-18433
70	.word	-19103
71	.word	-19751
72	.word	-20583
73	.word	-21383
74	.word	-22343
75	.word	-23353
76	.word	-24407
77	.word	-25582
78	.word	-26863
79	.word	-28382
80	.word	-29965
81	.word	-31800
82/* negative division factors */
83	.byte	66
84	.byte	70
85	.byte	75
86	.byte	81
87	.byte	87
88	.byte	93
89	.byte	101
90	.byte	109
91	.byte	119
92	.byte	130
93	.byte	142
94	.byte	156
95	.byte	172
96	.byte	192
97	.byte	214
98	.byte	241
99	.skip 16
100	.global	__div_table
101__div_table:
102	.skip 16
103/* positive division factors */
104	.byte	241
105	.byte	214
106	.byte	192
107	.byte	172
108	.byte	156
109	.byte	142
110	.byte	130
111	.byte	119
112	.byte	109
113	.byte	101
114	.byte	93
115	.byte	87
116	.byte	81
117	.byte	75
118	.byte	70
119	.byte	66
120/* positive division constants */
121	.word	31801
122	.word	29966
123	.word	28383
124	.word	26864
125	.word	25583
126	.word	24408
127	.word	23354
128	.word	22344
129	.word	21384
130	.word	20584
131	.word	19752
132	.word	19104
133	.word	18434
134	.word	17738
135	.word	17136
136	.word	16639
137