summaryrefslogtreecommitdiff
path: root/vere/ext/gmp/gen/aarch64-macos/mpn/invert_limb.s
blob: 927ae41e467d0452527a9576376511ef0b6b2f0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
















































	.text
	.align	3
	.globl	___gmpn_invert_limb 
	
___gmpn_invert_limb:
	lsr	x2, x0, #54
	adrp	x1, approx_tab@GOTPAGE
	and	x2, x2, #0x1fe
	ldr	x1, [x1, approx_tab@GOTPAGEOFF]
	ldrh	w3, [x1,x2]
	lsr	x4, x0, #24
	add	x4, x4, #1
	ubfiz	x2, x3, #11, #16
	umull	x3, w3, w3
	mul	x3, x3, x4
	sub	x2, x2, #1
	sub	x2, x2, x3, lsr #40
	lsl	x3, x2, #60
	mul	x1, x2, x2
	msub	x1, x1, x4, x3
	lsl	x2, x2, #13
	add	x1, x2, x1, lsr #47
	and	x2, x0, #1
	neg	x3, x2
	and	x3, x3, x1, lsr #1
	add	x2, x2, x0, lsr #1
	msub	x2, x1, x2, x3
	umulh	x2, x2, x1
	lsl	x1, x1, #31
	add	x1, x1, x2, lsr #1
	mul	x3, x1, x0
	umulh	x2, x1, x0
	adds	x4, x3, x0
	adc	x0, x2, x0
	sub	x0, x1, x0
	ret
	

		.section	__TEXT,__const
	.align	1
	
	
approx_tab:
	.hword	2045
	.hword	2037
	.hword	2029
	.hword	2021
	.hword	2013
	.hword	2005
	.hword	1998
	.hword	1990
	.hword	1983
	.hword	1975
	.hword	1968
	.hword	1960
	.hword	1953
	.hword	1946
	.hword	1938
	.hword	1931
	.hword	1924
	.hword	1917
	.hword	1910
	.hword	1903
	.hword	1896
	.hword	1889
	.hword	1883
	.hword	1876
	.hword	1869
	.hword	1863
	.hword	1856
	.hword	1849
	.hword	1843
	.hword	1836
	.hword	1830
	.hword	1824
	.hword	1817
	.hword	1811
	.hword	1805
	.hword	1799
	.hword	1792
	.hword	1786
	.hword	1780
	.hword	1774
	.hword	1768
	.hword	1762
	.hword	1756
	.hword	1750
	.hword	1745
	.hword	1739
	.hword	1733
	.hword	1727
	.hword	1722
	.hword	1716
	.hword	1710
	.hword	1705
	.hword	1699
	.hword	1694
	.hword	1688
	.hword	1683
	.hword	1677
	.hword	1672
	.hword	1667
	.hword	1661
	.hword	1656
	.hword	1651
	.hword	1646
	.hword	1641
	.hword	1636
	.hword	1630
	.hword	1625
	.hword	1620
	.hword	1615
	.hword	1610
	.hword	1605
	.hword	1600
	.hword	1596
	.hword	1591
	.hword	1586
	.hword	1581
	.hword	1576
	.hword	1572
	.hword	1567
	.hword	1562
	.hword	1558
	.hword	1553
	.hword	1548
	.hword	1544
	.hword	1539
	.hword	1535
	.hword	1530
	.hword	1526
	.hword	1521
	.hword	1517
	.hword	1513
	.hword	1508
	.hword	1504
	.hword	1500
	.hword	1495
	.hword	1491
	.hword	1487
	.hword	1483
	.hword	1478
	.hword	1474
	.hword	1470
	.hword	1466
	.hword	1462
	.hword	1458
	.hword	1454
	.hword	1450
	.hword	1446
	.hword	1442
	.hword	1438
	.hword	1434
	.hword	1430
	.hword	1426
	.hword	1422
	.hword	1418
	.hword	1414
	.hword	1411
	.hword	1407
	.hword	1403
	.hword	1399
	.hword	1396
	.hword	1392
	.hword	1388
	.hword	1384
	.hword	1381
	.hword	1377
	.hword	1374
	.hword	1370
	.hword	1366
	.hword	1363
	.hword	1359
	.hword	1356
	.hword	1352
	.hword	1349
	.hword	1345
	.hword	1342
	.hword	1338
	.hword	1335
	.hword	1332
	.hword	1328
	.hword	1325
	.hword	1322
	.hword	1318
	.hword	1315
	.hword	1312
	.hword	1308
	.hword	1305
	.hword	1302
	.hword	1299
	.hword	1295
	.hword	1292
	.hword	1289
	.hword	1286
	.hword	1283
	.hword	1280
	.hword	1276
	.hword	1273
	.hword	1270
	.hword	1267
	.hword	1264
	.hword	1261
	.hword	1258
	.hword	1255
	.hword	1252
	.hword	1249
	.hword	1246
	.hword	1243
	.hword	1240
	.hword	1237
	.hword	1234
	.hword	1231
	.hword	1228
	.hword	1226
	.hword	1223
	.hword	1220
	.hword	1217
	.hword	1214
	.hword	1211
	.hword	1209
	.hword	1206
	.hword	1203
	.hword	1200
	.hword	1197
	.hword	1195
	.hword	1192
	.hword	1189
	.hword	1187
	.hword	1184
	.hword	1181
	.hword	1179
	.hword	1176
	.hword	1173
	.hword	1171
	.hword	1168
	.hword	1165
	.hword	1163
	.hword	1160
	.hword	1158
	.hword	1155
	.hword	1153
	.hword	1150
	.hword	1148
	.hword	1145
	.hword	1143
	.hword	1140
	.hword	1138
	.hword	1135
	.hword	1133
	.hword	1130
	.hword	1128
	.hword	1125
	.hword	1123
	.hword	1121
	.hword	1118
	.hword	1116
	.hword	1113
	.hword	1111
	.hword	1109
	.hword	1106
	.hword	1104
	.hword	1102
	.hword	1099
	.hword	1097
	.hword	1095
	.hword	1092
	.hword	1090
	.hword	1088
	.hword	1086
	.hword	1083
	.hword	1081
	.hword	1079
	.hword	1077
	.hword	1074
	.hword	1072
	.hword	1070
	.hword	1068
	.hword	1066
	.hword	1064
	.hword	1061
	.hword	1059
	.hword	1057
	.hword	1055
	.hword	1053
	.hword	1051
	.hword	1049
	.hword	1047
	.hword	1044
	.hword	1042
	.hword	1040
	.hword	1038
	.hword	1036
	.hword	1034
	.hword	1032
	.hword	1030
	.hword	1028
	.hword	1026
	.hword	1024