blob: ab5a0e1b711488a7136c77387ebfdc9fae7107f3 [file] [log] [blame]
Jingwei Zhang5d4f0e62014-10-31 18:29:18 +08001/*
2Copyright (c) 2014, Intel Corporation
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7
8 * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10
11 * Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14
15 * Neither the name of Intel Corporation nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18
19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*/
30
31/******************************************************************************/
32// ALGORITHM DESCRIPTION
33// ---------------------
34//
35// 1. RANGE REDUCTION
36//
37// We perform an initial range reduction from X to r with
38//
39// X =~= N * pi/32 + r
40//
41// so that |r| <= pi/64 + epsilon. We restrict inputs to those
42// where |N| <= 932560. Beyond this, the range reduction is
43// insufficiently accurate. For extremely small inputs,
44// denormalization can occur internally, impacting performance.
45// This means that the main path is actually only taken for
46// 2^-252 <= |X| < 90112.
47//
48// To avoid branches, we perform the range reduction to full
49// accuracy each time.
50//
51// X - N * (P_1 + P_2 + P_3)
52//
53// where P_1 and P_2 are 32-bit numbers (so multiplication by N
54// is exact) and P_3 is a 53-bit number. Together, these
55// approximate pi well enough for all cases in the restricted
56// range.
57//
58// The main reduction sequence is:
59//
60// y = 32/pi * x
61// N = integer(y)
62// (computed by adding and subtracting off SHIFTER)
63//
64// m_1 = N * P_1
65// m_2 = N * P_2
66// r_1 = x - m_1
67// r = r_1 - m_2
68// (this r can be used for most of the calculation)
69//
70// c_1 = r_1 - r
71// m_3 = N * P_3
72// c_2 = c_1 - m_2
73// c = c_2 - m_3
74//
75// 2. MAIN ALGORITHM
76//
77// The algorithm uses a table lookup based on B = M * pi / 32
78// where M = N mod 64. The stored values are:
79// sigma closest power of 2 to cos(B)
80// C_hl 53-bit cos(B) - sigma
81// S_hi + S_lo 2 * 53-bit sin(B)
82//
83// The computation is organized as follows:
84//
85// sin(B + r + c) = [sin(B) + sigma * r] +
86// r * (cos(B) - sigma) +
87// sin(B) * [cos(r + c) - 1] +
88// cos(B) * [sin(r + c) - r]
89//
90// which is approximately:
91//
92// [S_hi + sigma * r] +
93// C_hl * r +
94// S_lo + S_hi * [(cos(r) - 1) - r * c] +
95// (C_hl + sigma) * [(sin(r) - r) + c]
96//
97// and this is what is actually computed. We separate this sum
98// into four parts:
99//
100// hi + med + pols + corr
101//
102// where
103//
104// hi = S_hi + sigma r
105// med = C_hl * r
106// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
107// corr = S_lo + c * ((C_hl + sigma) - S_hi * r)
108//
109// 3. POLYNOMIAL
110//
111// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
112// (sin(r) - r) can be rearranged freely, since it is quite
113// small, so we exploit parallelism to the fullest.
114//
115// psc4 = SC_4 * r_1
116// msc4 = psc4 * r
117// r2 = r * r
118// msc2 = SC_2 * r2
119// r4 = r2 * r2
120// psc3 = SC_3 + msc4
121// psc1 = SC_1 + msc2
122// msc3 = r4 * psc3
123// sincospols = psc1 + msc3
124// pols = sincospols *
125// <S_hi * r^2 | (C_hl + sigma) * r^3>
126//
127// 4. CORRECTION TERM
128//
129// This is where the "c" component of the range reduction is
130// taken into account; recall that just "r" is used for most of
131// the calculation.
132//
133// -c = m_3 - c_2
134// -d = S_hi * r - (C_hl + sigma)
135// corr = -c * -d + S_lo
136//
137// 5. COMPENSATED SUMMATIONS
138//
139// The two successive compensated summations add up the high
140// and medium parts, leaving just the low parts to add up at
141// the end.
142//
143// rs = sigma * r
144// res_int = S_hi + rs
145// k_0 = S_hi - res_int
146// k_2 = k_0 + rs
147// med = C_hl * r
148// res_hi = res_int + med
149// k_1 = res_int - res_hi
150// k_3 = k_1 + med
151//
152// 6. FINAL SUMMATION
153//
154// We now add up all the small parts:
155//
156// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
157//
158// Now the overall result is just:
159//
160// res_hi + res_lo
161//
162// 7. SMALL ARGUMENTS
163//
164// Inputs with |X| < 2^-252 are treated specially as
165// 1 - |x|.
166//
167// Special cases:
168// cos(NaN) = quiet NaN, and raise invalid exception
169// cos(INF) = NaN and raise invalid exception
170// cos(0) = 1
171//
172/******************************************************************************/
173
174#include <private/bionic_asm.h>
175# -- Begin cos
176ENTRY(cos)
177# parameter 1: %xmm0
178..B1.1:
179..___tag_value_cos.1:
180 pushq %rbx
181..___tag_value_cos.3:
182 subq $16, %rsp
183..___tag_value_cos.5:
184 movsd %xmm0, 8(%rsp)
185..B1.2:
186 movl 12(%rsp), %eax
187 movq PI32INV(%rip), %xmm1
188 andl $2147418112, %eax
189 subl $808452096, %eax
190 cmpl $281346048, %eax
191 ja .L_2TAG_PACKET_0.0.1
192 mulsd %xmm0, %xmm1
193 movapd ONEHALF(%rip), %xmm5
194 movq SIGN_MASK(%rip), %xmm4
195 andpd %xmm0, %xmm4
196 orps %xmm4, %xmm5
197 addpd %xmm5, %xmm1
198 cvttsd2si %xmm1, %edx
199 cvtsi2sd %edx, %xmm1
200 movapd P_2(%rip), %xmm2
201 movq P_1(%rip), %xmm3
202 mulsd %xmm1, %xmm3
203 unpcklpd %xmm1, %xmm1
204 addq $1865232, %rdx
205 movq %xmm0, %xmm4
206 andq $63, %rdx
207 movapd SC_4(%rip), %xmm5
208 lea Ctable(%rip), %rax
209 shlq $5, %rdx
210 addq %rdx, %rax
211 mulpd %xmm1, %xmm2
212 subsd %xmm3, %xmm0
213 mulsd P_3(%rip), %xmm1
214 subsd %xmm3, %xmm4
215 movq 8(%rax), %xmm7
216 unpcklpd %xmm0, %xmm0
217 movq %xmm4, %xmm3
218 subsd %xmm2, %xmm4
219 mulpd %xmm0, %xmm5
220 subpd %xmm2, %xmm0
221 movapd SC_2(%rip), %xmm6
222 mulsd %xmm4, %xmm7
223 subsd %xmm4, %xmm3
224 mulpd %xmm0, %xmm5
225 mulpd %xmm0, %xmm0
226 subsd %xmm2, %xmm3
227 movapd (%rax), %xmm2
228 subsd %xmm3, %xmm1
229 movq 24(%rax), %xmm3
230 addsd %xmm3, %xmm2
231 subsd %xmm2, %xmm7
232 mulsd %xmm4, %xmm2
233 mulpd %xmm0, %xmm6
234 mulsd %xmm4, %xmm3
235 mulpd %xmm0, %xmm2
236 mulpd %xmm0, %xmm0
237 addpd SC_3(%rip), %xmm5
238 mulsd (%rax), %xmm4
239 addpd SC_1(%rip), %xmm6
240 mulpd %xmm0, %xmm5
241 movq %xmm3, %xmm0
242 addsd 8(%rax), %xmm3
243 mulpd %xmm7, %xmm1
244 movq %xmm4, %xmm7
245 addsd %xmm3, %xmm4
246 addpd %xmm5, %xmm6
247 movq 8(%rax), %xmm5
248 subsd %xmm3, %xmm5
249 subsd %xmm4, %xmm3
250 addsd 16(%rax), %xmm1
251 mulpd %xmm2, %xmm6
252 addsd %xmm5, %xmm0
253 addsd %xmm7, %xmm3
254 addsd %xmm1, %xmm0
255 addsd %xmm3, %xmm0
256 addsd %xmm6, %xmm0
257 unpckhpd %xmm6, %xmm6
258 addsd %xmm6, %xmm0
259 addsd %xmm4, %xmm0
260 jmp ..B1.4
261.L_2TAG_PACKET_0.0.1:
262 jg .L_2TAG_PACKET_1.0.1
263 pextrw $3, %xmm0, %eax
264 andw $32767, %ax
265 pinsrw $3, %eax, %xmm0
266 movq ONE(%rip), %xmm1
267 subsd %xmm0, %xmm1
268 movq %xmm1, %xmm0
269 jmp ..B1.4
270.L_2TAG_PACKET_1.0.1:
271 pextrw $3, %xmm0, %eax
272 andl $32752, %eax
273 cmpl $32752, %eax
274 je .L_2TAG_PACKET_2.0.1
275 pextrw $3, %xmm0, %ecx
276 andl $32752, %ecx
277 subl $16224, %ecx
278 shrl $7, %ecx
279 andl $65532, %ecx
280 lea PI_INV_TABLE(%rip), %r11
281 addq %r11, %rcx
282 movd %xmm0, %rax
283 movl 20(%rcx), %r10d
284 movl 24(%rcx), %r8d
285 movl %eax, %edx
286 shrq $21, %rax
287 orl $-2147483648, %eax
288 shrl $11, %eax
289 movl %r10d, %r9d
290 imulq %rdx, %r10
291 imulq %rax, %r9
292 imulq %rax, %r8
293 movl 16(%rcx), %esi
294 movl 12(%rcx), %edi
295 movl %r10d, %r11d
296 shrq $32, %r10
297 addq %r10, %r9
298 addq %r8, %r11
299 movl %r11d, %r8d
300 shrq $32, %r11
301 addq %r11, %r9
302 movl %esi, %r10d
303 imulq %rdx, %rsi
304 imulq %rax, %r10
305 movl %edi, %r11d
306 imulq %rdx, %rdi
307 movl %esi, %ebx
308 shrq $32, %rsi
309 addq %rbx, %r9
310 movl %r9d, %ebx
311 shrq $32, %r9
312 addq %rsi, %r10
313 addq %r9, %r10
314 shlq $32, %rbx
315 orq %rbx, %r8
316 imulq %rax, %r11
317 movl 8(%rcx), %r9d
318 movl 4(%rcx), %esi
319 movl %edi, %ebx
320 shrq $32, %rdi
321 addq %rbx, %r10
322 movl %r10d, %ebx
323 shrq $32, %r10
324 addq %rdi, %r11
325 addq %r10, %r11
326 movq %r9, %rdi
327 imulq %rdx, %r9
328 imulq %rax, %rdi
329 movl %r9d, %r10d
330 shrq $32, %r9
331 addq %r10, %r11
332 movl %r11d, %r10d
333 shrq $32, %r11
334 addq %r9, %rdi
335 addq %r11, %rdi
336 movq %rsi, %r9
337 imulq %rdx, %rsi
338 imulq %rax, %r9
339 shlq $32, %r10
340 orq %rbx, %r10
341 movl (%rcx), %eax
342 movl %esi, %r11d
343 shrq $32, %rsi
344 addq %r11, %rdi
345 movl %edi, %r11d
346 shrq $32, %rdi
347 addq %rsi, %r9
348 addq %rdi, %r9
349 imulq %rax, %rdx
350 pextrw $3, %xmm0, %ebx
351 lea PI_INV_TABLE(%rip), %rdi
352 subq %rdi, %rcx
353 addl %ecx, %ecx
354 addl %ecx, %ecx
355 addl %ecx, %ecx
356 addl $19, %ecx
357 movl $32768, %esi
358 andl %ebx, %esi
359 shrl $4, %ebx
360 andl $2047, %ebx
361 subl $1023, %ebx
362 subl %ebx, %ecx
363 addq %rdx, %r9
364 movl %ecx, %edx
365 addl $32, %edx
366 cmpl $1, %ecx
367 jl .L_2TAG_PACKET_3.0.1
368 negl %ecx
369 addl $29, %ecx
370 shll %cl, %r9d
371 movl %r9d, %edi
372 andl $536870911, %r9d
373 testl $268435456, %r9d
374 jne .L_2TAG_PACKET_4.0.1
375 shrl %cl, %r9d
376 movl $0, %ebx
377 shlq $32, %r9
378 orq %r11, %r9
379.L_2TAG_PACKET_5.0.1:
380.L_2TAG_PACKET_6.0.1:
381 cmpq $0, %r9
382 je .L_2TAG_PACKET_7.0.1
383.L_2TAG_PACKET_8.0.1:
384 bsr %r9, %r11
385 movl $29, %ecx
386 subl %r11d, %ecx
387 jle .L_2TAG_PACKET_9.0.1
388 shlq %cl, %r9
389 movq %r10, %rax
390 shlq %cl, %r10
391 addl %ecx, %edx
392 negl %ecx
393 addl $64, %ecx
394 shrq %cl, %rax
395 shrq %cl, %r8
396 orq %rax, %r9
397 orq %r8, %r10
398.L_2TAG_PACKET_10.0.1:
399 cvtsi2sdq %r9, %xmm0
400 shrq $1, %r10
401 cvtsi2sdq %r10, %xmm3
402 xorpd %xmm4, %xmm4
403 shll $4, %edx
404 negl %edx
405 addl $16368, %edx
406 orl %esi, %edx
407 xorl %ebx, %edx
408 pinsrw $3, %edx, %xmm4
409 movq PI_4(%rip), %xmm2
410 movq 8+PI_4(%rip), %xmm6
411 xorpd %xmm5, %xmm5
412 subl $1008, %edx
413 pinsrw $3, %edx, %xmm5
414 mulsd %xmm4, %xmm0
415 shll $16, %esi
416 sarl $31, %esi
417 mulsd %xmm5, %xmm3
418 movq %xmm0, %xmm1
419 mulsd %xmm2, %xmm0
420 shrl $29, %edi
421 addsd %xmm3, %xmm1
422 mulsd %xmm2, %xmm3
423 addl %esi, %edi
424 xorl %esi, %edi
425 mulsd %xmm1, %xmm6
426 movl %edi, %eax
427 addsd %xmm3, %xmm6
428 movq %xmm0, %xmm2
429 addsd %xmm6, %xmm0
430 subsd %xmm0, %xmm2
431 addsd %xmm2, %xmm6
432.L_2TAG_PACKET_11.0.1:
433 movq PI32INV(%rip), %xmm1
434 mulsd %xmm0, %xmm1
435 movq ONEHALF(%rip), %xmm5
436 movq SIGN_MASK(%rip), %xmm4
437 andpd %xmm0, %xmm4
438 orps %xmm4, %xmm5
439 addpd %xmm5, %xmm1
440 cvttsd2si %xmm1, %rdx
441 cvtsi2sdq %rdx, %xmm1
442 movq P_1(%rip), %xmm3
443 movapd P_2(%rip), %xmm2
444 mulsd %xmm1, %xmm3
445 unpcklpd %xmm1, %xmm1
446 shll $3, %eax
447 addl $1865232, %edx
448 movq %xmm0, %xmm4
449 addl %eax, %edx
450 andl $63, %edx
451 movapd SC_4(%rip), %xmm5
452 lea Ctable(%rip), %rax
453 shll $5, %edx
454 addq %rdx, %rax
455 mulpd %xmm1, %xmm2
456 subsd %xmm3, %xmm0
457 mulsd P_3(%rip), %xmm1
458 subsd %xmm3, %xmm4
459 movq 8(%rax), %xmm7
460 unpcklpd %xmm0, %xmm0
461 movq %xmm4, %xmm3
462 subsd %xmm2, %xmm4
463 mulpd %xmm0, %xmm5
464 subpd %xmm2, %xmm0
465 mulsd %xmm4, %xmm7
466 subsd %xmm4, %xmm3
467 mulpd %xmm0, %xmm5
468 mulpd %xmm0, %xmm0
469 subsd %xmm2, %xmm3
470 movapd (%rax), %xmm2
471 subsd %xmm3, %xmm1
472 movq 24(%rax), %xmm3
473 addsd %xmm3, %xmm2
474 subsd %xmm2, %xmm7
475 subsd %xmm6, %xmm1
476 movapd SC_2(%rip), %xmm6
477 mulsd %xmm4, %xmm2
478 mulpd %xmm0, %xmm6
479 mulsd %xmm4, %xmm3
480 mulpd %xmm0, %xmm2
481 mulpd %xmm0, %xmm0
482 addpd SC_3(%rip), %xmm5
483 mulsd (%rax), %xmm4
484 addpd SC_1(%rip), %xmm6
485 mulpd %xmm0, %xmm5
486 movq %xmm3, %xmm0
487 addsd 8(%rax), %xmm3
488 mulpd %xmm7, %xmm1
489 movq %xmm4, %xmm7
490 addsd %xmm3, %xmm4
491 addpd %xmm5, %xmm6
492 movq 8(%rax), %xmm5
493 subsd %xmm3, %xmm5
494 subsd %xmm4, %xmm3
495 addsd 16(%rax), %xmm1
496 mulpd %xmm2, %xmm6
497 addsd %xmm0, %xmm5
498 addsd %xmm7, %xmm3
499 addsd %xmm5, %xmm1
500 addsd %xmm3, %xmm1
501 addsd %xmm6, %xmm1
502 unpckhpd %xmm6, %xmm6
503 movq %xmm4, %xmm0
504 addsd %xmm6, %xmm1
505 addsd %xmm1, %xmm0
506 jmp ..B1.4
507.L_2TAG_PACKET_7.0.1:
508 addl $64, %edx
509 movq %r10, %r9
510 movq %r8, %r10
511 movq $0, %r8
512 cmpq $0, %r9
513 jne .L_2TAG_PACKET_8.0.1
514 addl $64, %edx
515 movq %r10, %r9
516 movq %r8, %r10
517 cmpq $0, %r9
518 jne .L_2TAG_PACKET_8.0.1
519 xorpd %xmm0, %xmm0
520 xorpd %xmm6, %xmm6
521 jmp .L_2TAG_PACKET_11.0.1
522.L_2TAG_PACKET_9.0.1:
523 je .L_2TAG_PACKET_10.0.1
524 negl %ecx
525 shrq %cl, %r10
526 movq %r9, %rax
527 shrq %cl, %r9
528 subl %ecx, %edx
529 negl %ecx
530 addl $64, %ecx
531 shlq %cl, %rax
532 orq %rax, %r10
533 jmp .L_2TAG_PACKET_10.0.1
534.L_2TAG_PACKET_3.0.1:
535 negl %ecx
536 shlq $32, %r9
537 orq %r11, %r9
538 shlq %cl, %r9
539 movq %r9, %rdi
540 testl $-2147483648, %r9d
541 jne .L_2TAG_PACKET_12.0.1
542 shrl %cl, %r9d
543 movl $0, %ebx
544 shrq $3, %rdi
545 jmp .L_2TAG_PACKET_6.0.1
546.L_2TAG_PACKET_4.0.1:
547 shrl %cl, %r9d
548 movl $536870912, %ebx
549 shrl %cl, %ebx
550 shlq $32, %r9
551 orq %r11, %r9
552 shlq $32, %rbx
553 addl $536870912, %edi
554 movq $0, %rcx
555 movq $0, %r11
556 subq %r8, %rcx
557 sbbq %r10, %r11
558 sbbq %r9, %rbx
559 movq %rcx, %r8
560 movq %r11, %r10
561 movq %rbx, %r9
562 movl $32768, %ebx
563 jmp .L_2TAG_PACKET_5.0.1
564.L_2TAG_PACKET_12.0.1:
565 shrl %cl, %r9d
566 movq $0x100000000, %rbx
567 shrq %cl, %rbx
568 movq $0, %rcx
569 movq $0, %r11
570 subq %r8, %rcx
571 sbbq %r10, %r11
572 sbbq %r9, %rbx
573 movq %rcx, %r8
574 movq %r11, %r10
575 movq %rbx, %r9
576 movl $32768, %ebx
577 shrq $3, %rdi
578 addl $536870912, %edi
579 jmp .L_2TAG_PACKET_6.0.1
580.L_2TAG_PACKET_2.0.1:
581 movsd 8(%rsp), %xmm0
582 mulsd NEG_ZERO(%rip), %xmm0
583 movq %xmm0, (%rsp)
584.L_2TAG_PACKET_13.0.1:
585..B1.4:
586 addq $16, %rsp
587..___tag_value_cos.6:
588 popq %rbx
589..___tag_value_cos.8:
590 ret
591..___tag_value_cos.9:
592END(cos)
593# -- End cos
594 .section .rodata, "a"
595 .align 16
596 .align 16
597ONEHALF:
598 .long 0
599 .long 1071644672
600 .long 0
601 .long 1071644672
602 .type ONEHALF,@object
603 .size ONEHALF,16
604 .align 16
605P_2:
606 .long 442499072
607 .long 1032893537
608 .long 442499072
609 .long 1032893537
610 .type P_2,@object
611 .size P_2,16
612 .align 16
613SC_4:
614 .long 2773927732
615 .long 1053236707
616 .long 436314138
617 .long 1056571808
618 .type SC_4,@object
619 .size SC_4,16
620 .align 16
621Ctable:
622 .long 0
623 .long 0
624 .long 0
625 .long 0
626 .long 0
627 .long 0
628 .long 0
629 .long 1072693248
630 .long 393047345
631 .long 3212032302
632 .long 3156849708
633 .long 1069094822
634 .long 3758096384
635 .long 3158189848
636 .long 0
637 .long 1072693248
638 .long 18115067
639 .long 3214126342
640 .long 1013556747
641 .long 1070135480
642 .long 3221225472
643 .long 3160567065
644 .long 0
645 .long 1072693248
646 .long 2476548698
647 .long 3215330282
648 .long 785751814
649 .long 1070765062
650 .long 2684354560
651 .long 3161838221
652 .long 0
653 .long 1072693248
654 .long 2255197647
655 .long 3216211105
656 .long 2796464483
657 .long 1071152610
658 .long 3758096384
659 .long 3160878317
660 .long 0
661 .long 1072693248
662 .long 1945768569
663 .long 3216915048
664 .long 939980347
665 .long 1071524701
666 .long 536870912
667 .long 1012796809
668 .long 0
669 .long 1072693248
670 .long 1539668340
671 .long 3217396327
672 .long 967731400
673 .long 1071761211
674 .long 536870912
675 .long 1015752157
676 .long 0
677 .long 1072693248
678 .long 1403757309
679 .long 3217886718
680 .long 621354454
681 .long 1071926515
682 .long 536870912
683 .long 1013450602
684 .long 0
685 .long 1072693248
686 .long 2583490354
687 .long 1070236281
688 .long 1719614413
689 .long 1072079006
690 .long 536870912
691 .long 3163282740
692 .long 0
693 .long 1071644672
694 .long 2485417816
695 .long 1069626316
696 .long 1796544321
697 .long 1072217216
698 .long 536870912
699 .long 3162686945
700 .long 0
701 .long 1071644672
702 .long 2598800519
703 .long 1068266419
704 .long 688824739
705 .long 1072339814
706 .long 3758096384
707 .long 1010431536
708 .long 0
709 .long 1071644672
710 .long 2140183630
711 .long 3214756396
712 .long 4051746225
713 .long 1072445618
714 .long 2147483648
715 .long 3161907377
716 .long 0
717 .long 1071644672
718 .long 1699043957
719 .long 3216902261
720 .long 3476196678
721 .long 1072533611
722 .long 536870912
723 .long 1014257638
724 .long 0
725 .long 1071644672
726 .long 1991047213
727 .long 1067753521
728 .long 1455828442
729 .long 1072602945
730 .long 3758096384
731 .long 1015505073
732 .long 0
733 .long 1070596096
734 .long 240740309
735 .long 3215727903
736 .long 3489094832
737 .long 1072652951
738 .long 536870912
739 .long 1014325783
740 .long 0
741 .long 1070596096
742 .long 257503056
743 .long 3214647653
744 .long 2748392742
745 .long 1072683149
746 .long 1073741824
747 .long 3163061750
748 .long 0
749 .long 1069547520
750 .long 0
751 .long 0
752 .long 0
753 .long 1072693248
754 .long 0
755 .long 0
756 .long 0
757 .long 0
758 .long 257503056
759 .long 1067164005
760 .long 2748392742
761 .long 1072683149
762 .long 1073741824
763 .long 3163061750
764 .long 0
765 .long 3217031168
766 .long 240740309
767 .long 1068244255
768 .long 3489094832
769 .long 1072652951
770 .long 536870912
771 .long 1014325783
772 .long 0
773 .long 3218079744
774 .long 1991047213
775 .long 3215237169
776 .long 1455828442
777 .long 1072602945
778 .long 3758096384
779 .long 1015505073
780 .long 0
781 .long 3218079744
782 .long 1699043957
783 .long 1069418613
784 .long 3476196678
785 .long 1072533611
786 .long 536870912
787 .long 1014257638
788 .long 0
789 .long 3219128320
790 .long 2140183630
791 .long 1067272748
792 .long 4051746225
793 .long 1072445618
794 .long 2147483648
795 .long 3161907377
796 .long 0
797 .long 3219128320
798 .long 2598800519
799 .long 3215750067
800 .long 688824739
801 .long 1072339814
802 .long 3758096384
803 .long 1010431536
804 .long 0
805 .long 3219128320
806 .long 2485417816
807 .long 3217109964
808 .long 1796544321
809 .long 1072217216
810 .long 536870912
811 .long 3162686945
812 .long 0
813 .long 3219128320
814 .long 2583490354
815 .long 3217719929
816 .long 1719614413
817 .long 1072079006
818 .long 536870912
819 .long 3163282740
820 .long 0
821 .long 3219128320
822 .long 1403757309
823 .long 1070403070
824 .long 621354454
825 .long 1071926515
826 .long 536870912
827 .long 1013450602
828 .long 0
829 .long 3220176896
830 .long 1539668340
831 .long 1069912679
832 .long 967731400
833 .long 1071761211
834 .long 536870912
835 .long 1015752157
836 .long 0
837 .long 3220176896
838 .long 1945768569
839 .long 1069431400
840 .long 939980347
841 .long 1071524701
842 .long 536870912
843 .long 1012796809
844 .long 0
845 .long 3220176896
846 .long 2255197647
847 .long 1068727457
848 .long 2796464483
849 .long 1071152610
850 .long 3758096384
851 .long 3160878317
852 .long 0
853 .long 3220176896
854 .long 2476548698
855 .long 1067846634
856 .long 785751814
857 .long 1070765062
858 .long 2684354560
859 .long 3161838221
860 .long 0
861 .long 3220176896
862 .long 18115067
863 .long 1066642694
864 .long 1013556747
865 .long 1070135480
866 .long 3221225472
867 .long 3160567065
868 .long 0
869 .long 3220176896
870 .long 393047345
871 .long 1064548654
872 .long 3156849708
873 .long 1069094822
874 .long 3758096384
875 .long 3158189848
876 .long 0
877 .long 3220176896
878 .long 0
879 .long 0
880 .long 0
881 .long 0
882 .long 0
883 .long 0
884 .long 0
885 .long 3220176896
886 .long 393047345
887 .long 1064548654
888 .long 3156849708
889 .long 3216578470
890 .long 3758096384
891 .long 1010706200
892 .long 0
893 .long 3220176896
894 .long 18115067
895 .long 1066642694
896 .long 1013556747
897 .long 3217619128
898 .long 3221225472
899 .long 1013083417
900 .long 0
901 .long 3220176896
902 .long 2476548698
903 .long 1067846634
904 .long 785751814
905 .long 3218248710
906 .long 2684354560
907 .long 1014354573
908 .long 0
909 .long 3220176896
910 .long 2255197647
911 .long 1068727457
912 .long 2796464483
913 .long 3218636258
914 .long 3758096384
915 .long 1013394669
916 .long 0
917 .long 3220176896
918 .long 1945768569
919 .long 1069431400
920 .long 939980347
921 .long 3219008349
922 .long 536870912
923 .long 3160280457
924 .long 0
925 .long 3220176896
926 .long 1539668340
927 .long 1069912679
928 .long 967731400
929 .long 3219244859
930 .long 536870912
931 .long 3163235805
932 .long 0
933 .long 3220176896
934 .long 1403757309
935 .long 1070403070
936 .long 621354454
937 .long 3219410163
938 .long 536870912
939 .long 3160934250
940 .long 0
941 .long 3220176896
942 .long 2583490354
943 .long 3217719929
944 .long 1719614413
945 .long 3219562654
946 .long 536870912
947 .long 1015799092
948 .long 0
949 .long 3219128320
950 .long 2485417816
951 .long 3217109964
952 .long 1796544321
953 .long 3219700864
954 .long 536870912
955 .long 1015203297
956 .long 0
957 .long 3219128320
958 .long 2598800519
959 .long 3215750067
960 .long 688824739
961 .long 3219823462
962 .long 3758096384
963 .long 3157915184
964 .long 0
965 .long 3219128320
966 .long 2140183630
967 .long 1067272748
968 .long 4051746225
969 .long 3219929266
970 .long 2147483648
971 .long 1014423729
972 .long 0
973 .long 3219128320
974 .long 1699043957
975 .long 1069418613
976 .long 3476196678
977 .long 3220017259
978 .long 536870912
979 .long 3161741286
980 .long 0
981 .long 3219128320
982 .long 1991047213
983 .long 3215237169
984 .long 1455828442
985 .long 3220086593
986 .long 3758096384
987 .long 3162988721
988 .long 0
989 .long 3218079744
990 .long 240740309
991 .long 1068244255
992 .long 3489094832
993 .long 3220136599
994 .long 536870912
995 .long 3161809431
996 .long 0
997 .long 3218079744
998 .long 257503056
999 .long 1067164005
1000 .long 2748392742
1001 .long 3220166797
1002 .long 1073741824
1003 .long 1015578102
1004 .long 0
1005 .long 3217031168
1006 .long 0
1007 .long 0
1008 .long 0
1009 .long 3220176896
1010 .long 0
1011 .long 0
1012 .long 0
1013 .long 0
1014 .long 257503056
1015 .long 3214647653
1016 .long 2748392742
1017 .long 3220166797
1018 .long 1073741824
1019 .long 1015578102
1020 .long 0
1021 .long 1069547520
1022 .long 240740309
1023 .long 3215727903
1024 .long 3489094832
1025 .long 3220136599
1026 .long 536870912
1027 .long 3161809431
1028 .long 0
1029 .long 1070596096
1030 .long 1991047213
1031 .long 1067753521
1032 .long 1455828442
1033 .long 3220086593
1034 .long 3758096384
1035 .long 3162988721
1036 .long 0
1037 .long 1070596096
1038 .long 1699043957
1039 .long 3216902261
1040 .long 3476196678
1041 .long 3220017259
1042 .long 536870912
1043 .long 3161741286
1044 .long 0
1045 .long 1071644672
1046 .long 2140183630
1047 .long 3214756396
1048 .long 4051746225
1049 .long 3219929266
1050 .long 2147483648
1051 .long 1014423729
1052 .long 0
1053 .long 1071644672
1054 .long 2598800519
1055 .long 1068266419
1056 .long 688824739
1057 .long 3219823462
1058 .long 3758096384
1059 .long 3157915184
1060 .long 0
1061 .long 1071644672
1062 .long 2485417816
1063 .long 1069626316
1064 .long 1796544321
1065 .long 3219700864
1066 .long 536870912
1067 .long 1015203297
1068 .long 0
1069 .long 1071644672
1070 .long 2583490354
1071 .long 1070236281
1072 .long 1719614413
1073 .long 3219562654
1074 .long 536870912
1075 .long 1015799092
1076 .long 0
1077 .long 1071644672
1078 .long 1403757309
1079 .long 3217886718
1080 .long 621354454
1081 .long 3219410163
1082 .long 536870912
1083 .long 3160934250
1084 .long 0
1085 .long 1072693248
1086 .long 1539668340
1087 .long 3217396327
1088 .long 967731400
1089 .long 3219244859
1090 .long 536870912
1091 .long 3163235805
1092 .long 0
1093 .long 1072693248
1094 .long 1945768569
1095 .long 3216915048
1096 .long 939980347
1097 .long 3219008349
1098 .long 536870912
1099 .long 3160280457
1100 .long 0
1101 .long 1072693248
1102 .long 2255197647
1103 .long 3216211105
1104 .long 2796464483
1105 .long 3218636258
1106 .long 3758096384
1107 .long 1013394669
1108 .long 0
1109 .long 1072693248
1110 .long 2476548698
1111 .long 3215330282
1112 .long 785751814
1113 .long 3218248710
1114 .long 2684354560
1115 .long 1014354573
1116 .long 0
1117 .long 1072693248
1118 .long 18115067
1119 .long 3214126342
1120 .long 1013556747
1121 .long 3217619128
1122 .long 3221225472
1123 .long 1013083417
1124 .long 0
1125 .long 1072693248
1126 .long 393047345
1127 .long 3212032302
1128 .long 3156849708
1129 .long 3216578470
1130 .long 3758096384
1131 .long 1010706200
1132 .long 0
1133 .long 1072693248
1134 .type Ctable,@object
1135 .size Ctable,2048
1136 .align 16
1137SC_2:
1138 .long 286331153
1139 .long 1065423121
1140 .long 1431655765
1141 .long 1067799893
1142 .type SC_2,@object
1143 .size SC_2,16
1144 .align 16
1145SC_3:
1146 .long 436314138
1147 .long 3207201184
1148 .long 381774871
1149 .long 3210133868
1150 .type SC_3,@object
1151 .size SC_3,16
1152 .align 16
1153SC_1:
1154 .long 1431655765
1155 .long 3217380693
1156 .long 0
1157 .long 3219128320
1158 .type SC_1,@object
1159 .size SC_1,16
1160 .align 16
1161PI_INV_TABLE:
1162 .long 0
1163 .long 0
1164 .long 2734261102
1165 .long 1313084713
1166 .long 4230436817
1167 .long 4113882560
1168 .long 3680671129
1169 .long 1011060801
1170 .long 4266746795
1171 .long 3736847713
1172 .long 3072618042
1173 .long 1112396512
1174 .long 105459434
1175 .long 164729372
1176 .long 4263373596
1177 .long 2972297022
1178 .long 3900847605
1179 .long 784024708
1180 .long 3919343654
1181 .long 3026157121
1182 .long 965858873
1183 .long 2203269620
1184 .long 2625920907
1185 .long 3187222587
1186 .long 536385535
1187 .long 3724908559
1188 .long 4012839307
1189 .long 1510632735
1190 .long 1832287951
1191 .long 667617719
1192 .long 1330003814
1193 .long 2657085997
1194 .long 1965537991
1195 .long 3957715323
1196 .long 1023883767
1197 .long 2320667370
1198 .long 1811636145
1199 .long 529358088
1200 .long 1443049542
1201 .long 4235946923
1202 .long 4040145953
1203 .type PI_INV_TABLE,@object
1204 .size PI_INV_TABLE,164
1205 .space 12, 0x00 # pad
1206 .align 16
1207PI_4:
1208 .long 1073741824
1209 .long 1072243195
1210 .long 407279769
1211 .long 1046758445
1212 .type PI_4,@object
1213 .size PI_4,16
1214 .align 8
1215PI32INV:
1216 .long 1841940611
1217 .long 1076125488
1218 .type PI32INV,@object
1219 .size PI32INV,8
1220 .align 8
1221SIGN_MASK:
1222 .long 0
1223 .long 2147483648
1224 .type SIGN_MASK,@object
1225 .size SIGN_MASK,8
1226 .align 8
1227P_1:
1228 .long 1413480448
1229 .long 1069097467
1230 .type P_1,@object
1231 .size P_1,8
1232 .align 8
1233P_3:
1234 .long 771977331
1235 .long 996350346
1236 .type P_3,@object
1237 .size P_3,8
1238 .align 8
1239ONE:
1240 .long 0
1241 .long 1072693248
1242 .type ONE,@object
1243 .size ONE,8
1244 .align 8
1245NEG_ZERO:
1246 .long 0
1247 .long 2147483648
1248 .type NEG_ZERO,@object
1249 .size NEG_ZERO,8
1250 .data
1251 .section .note.GNU-stack, ""
1252// -- Begin DWARF2 SEGMENT .eh_frame
1253 .section .eh_frame,"a",@progbits
1254.eh_frame_seg:
1255 .align 1
1256 .4byte 0x00000014
1257 .8byte 0x00527a0100000000
1258 .8byte 0x08070c1b01107801
1259 .4byte 0x00000190
1260 .4byte 0x0000002c
1261 .4byte 0x0000001c
1262 .4byte ..___tag_value_cos.1-.
1263 .4byte ..___tag_value_cos.9-..___tag_value_cos.1
1264 .2byte 0x0400
1265 .4byte ..___tag_value_cos.3-..___tag_value_cos.1
1266 .4byte 0x0283100e
1267 .byte 0x04
1268 .4byte ..___tag_value_cos.5-..___tag_value_cos.3
1269 .2byte 0x200e
1270 .byte 0x04
1271 .4byte ..___tag_value_cos.6-..___tag_value_cos.5
1272 .4byte 0x04c3100e
1273 .4byte ..___tag_value_cos.8-..___tag_value_cos.6
1274 .2byte 0x080e
1275# End