1 #if defined(__x86_64__)
6 .globl _bn_mul_mont_gather5
7 .private_extern _bn_mul_mont_gather5
28 leaq (%rsp,%r11,8),%rsp
31 movq %rax,8(%rsp,%r9,8)
38 leaq L$magic_masks(%rip),%rax
40 leaq 96(%r12,%r11,8),%r12
41 movq 0(%rax,%r10,8),%xmm4
42 movq 8(%rax,%r10,8),%xmm5
43 movq 16(%rax,%r10,8),%xmm6
44 movq 24(%rax,%r10,8),%xmm7
59 .byte 102,72,15,126,195
102 movq (%rsi,%r15,8),%rax
107 movq %r13,-16(%rsp,%r15,8)
113 movq (%rcx,%r15,8),%rax
122 .byte 102,72,15,126,195
129 movq %r13,-16(%rsp,%r15,8)
136 movq %r13,-8(%rsp,%r9,8)
137 movq %rdx,(%rsp,%r9,8)
183 movq (%rsi,%r15,8),%rax
186 movq (%rsp,%r15,8),%r10
188 movq %r13,-16(%rsp,%r15,8)
194 movq (%rcx,%r15,8),%rax
205 .byte 102,72,15,126,195
211 movq (%rsp,%r15,8),%r10
213 movq %r13,-16(%rsp,%r15,8)
221 movq %r13,-8(%rsp,%r9,8)
222 movq %rdx,(%rsp,%r9,8)
234 L$sub: sbbq (%rcx,%r14,8),%rax
235 movq %rax,(%rdi,%r14,8)
236 movq 8(%rsi,%r14,8),%rax
246 movq (%rsp,%r14,8),%rsi
247 movq (%rdi,%r14,8),%rcx
251 movq %r14,(%rsp,%r14,8)
252 movq %rsi,(%rdi,%r14,8)
257 movq 8(%rsp,%r9,8),%rsi
271 bn_mul4x_mont_gather5:
294 leaq -64(%rsp,%r9,2),%r11
300 leaq -64(%rsp,%r9,2),%rsp
305 leaq 4096-64(,%r9,2),%r10
306 leaq -64(%rsp,%r9,2),%rsp
338 leaq 256(%rdx,%r9,1),%r13
344 leaq L$magic_masks(%rip),%rax
346 leaq 96(%rdx,%r11,8),%r12
347 movq 0(%rax,%r10,8),%xmm4
348 movq 8(%rax,%r10,8),%xmm5
350 movq 16(%rax,%r10,8),%xmm6
351 movq 24(%rax,%r10,8),%xmm7
376 .byte 102,72,15,126,195
383 leaq (%rsi,%r9,1),%rsi
403 leaq 64+8(%rsp,%r11,8),%r14
413 movq 8(%rsi,%r9,1),%rax
425 movq 16(%rsi,%r9,1),%rax
446 movq -8(%rsi,%r15,1),%rax
461 movq (%rsi,%r15,1),%rax
476 movq 8(%rsi,%r15,1),%rax
491 movq 16(%rsi,%r15,1),%rax
526 movq (%rsi,%r9,1),%rax
533 .byte 102,72,15,126,195
534 leaq (%rcx,%r9,2),%rcx
545 movq (%r14,%r9,1),%r10
568 leaq (%r14,%r9,1),%r14
574 movq 8(%rsi,%r9,1),%rax
588 movq 16(%rsi,%r9,1),%rax
610 movq -8(%rsi,%r15,1),%rax
627 movq (%rsi,%r15,1),%rax
644 movq 8(%rsi,%r15,1),%rax
661 movq 16(%rsi,%r15,1),%rax
701 movq (%rsi,%r9,1),%rax
708 .byte 102,72,15,126,195
710 leaq (%rcx,%r9,2),%rcx
725 leaq (%r14,%r9,1),%rbx
726 leaq (%rcx,%rdi,8),%rbp
733 .private_extern _bn_power5
756 leaq -64(%rsp,%r9,2),%r11
762 leaq -64(%rsp,%r9,2),%rsp
767 leaq 4096-64(,%r9,2),%r10
768 leaq -64(%rsp,%r9,2),%rsp
790 .byte 102,72,15,110,207
791 .byte 102,72,15,110,209
792 .byte 102,73,15,110,218
793 .byte 102,72,15,110,226
795 call __bn_sqr8x_internal
796 call __bn_sqr8x_internal
797 call __bn_sqr8x_internal
798 call __bn_sqr8x_internal
799 call __bn_sqr8x_internal
801 .byte 102,72,15,126,209
802 .byte 102,72,15,126,226
822 .globl _bn_sqr8x_internal
823 .private_extern _bn_sqr8x_internal
824 .private_extern _bn_sqr8x_internal
903 leaq (%rsi,%r9,1),%rsi
908 movq -32(%rsi,%rbp,1),%r14
909 leaq 48+8(%rsp,%r9,2),%rdi
910 movq -24(%rsi,%rbp,1),%rax
911 leaq -32(%rdi,%rbp,1),%rdi
912 movq -16(%rsi,%rbp,1),%rbx
919 movq %r10,-24(%rdi,%rbp,1)
925 movq %r11,-16(%rdi,%rbp,1)
929 movq -8(%rsi,%rbp,1),%rbx
943 movq %r10,-8(%rdi,%rcx,1)
948 movq (%rsi,%rcx,1),%rbx
958 movq 8(%rsi,%rcx,1),%rbx
968 movq %r11,(%rdi,%rcx,1)
975 movq 16(%rsi,%rcx,1),%rbx
984 movq %r10,8(%rdi,%rcx,1)
991 movq 24(%rsi,%rcx,1),%rbx
1001 movq %r11,16(%rdi,%rcx,1)
1013 movq %r10,-8(%rdi,%rcx,1)
1032 movq -32(%rsi,%rbp,1),%r14
1033 leaq 48+8(%rsp,%r9,2),%rdi
1034 movq -24(%rsi,%rbp,1),%rax
1035 leaq -32(%rdi,%rbp,1),%rdi
1036 movq -16(%rsi,%rbp,1),%rbx
1040 movq -24(%rdi,%rbp,1),%r10
1044 movq %r10,-24(%rdi,%rbp,1)
1051 addq -16(%rdi,%rbp,1),%r11
1054 movq %r11,-16(%rdi,%rbp,1)
1058 movq -8(%rsi,%rbp,1),%rbx
1063 addq -8(%rdi,%rbp,1),%r12
1074 movq %r10,-8(%rdi,%rbp,1)
1081 movq (%rsi,%rcx,1),%rbx
1087 addq (%rdi,%rcx,1),%r13
1094 movq 8(%rsi,%rcx,1),%rbx
1102 movq %r11,(%rdi,%rcx,1)
1106 addq 8(%rdi,%rcx,1),%r12
1117 movq %r10,-8(%rdi,%rcx,1)
1138 leaq 48+8(%rsp,%r9,2),%rdi
1140 leaq -32(%rdi,%rbp,1),%rdi
1199 movq -16(%rsi,%rbp,1),%rax
1200 leaq 48+8(%rsp),%rdi
1204 leaq (%r14,%r10,2),%r12
1206 leaq (%rcx,%r11,2),%r13
1215 movq -8(%rsi,%rbp,1),%rax
1219 leaq (%r14,%r10,2),%rbx
1223 leaq (%rcx,%r11,2),%r8
1232 movq 0(%rsi,%rbp,1),%rax
1239 jmp L$sqr4x_shift_n_add
1242 L$sqr4x_shift_n_add:
1243 leaq (%r14,%r10,2),%r12
1245 leaq (%rcx,%r11,2),%r13
1254 movq -8(%rsi,%rbp,1),%rax
1258 leaq (%r14,%r10,2),%rbx
1262 leaq (%rcx,%r11,2),%r8
1271 movq 0(%rsi,%rbp,1),%rax
1275 leaq (%r14,%r10,2),%r12
1279 leaq (%rcx,%r11,2),%r13
1288 movq 8(%rsi,%rbp,1),%rax
1292 leaq (%r14,%r10,2),%rbx
1296 leaq (%rcx,%r11,2),%r8
1305 movq 16(%rsi,%rbp,1),%rax
1312 jnz L$sqr4x_shift_n_add
1314 leaq (%r14,%r10,2),%r12
1317 leaq (%rcx,%r11,2),%r13
1330 leaq (%r14,%r10,2),%rbx
1334 leaq (%rcx,%r11,2),%r8
1343 .byte 102,72,15,126,213
1346 leaq (%rbp,%r9,2),%rcx
1347 leaq 48+8(%rsp,%r9,2),%rdx
1349 leaq 48+8(%rsp,%r9,1),%rdi
1352 jmp L$8x_reduction_loop
1355 L$8x_reduction_loop:
1356 leaq (%rdi,%r9,1),%rdi
1371 imulq 32+8(%rsp),%rbx
1389 movq %rbx,48-8+8(%rsp,%rcx,8)
1398 movq 32+8(%rsp),%rsi
1464 movq 48+56+8(%rsp),%rbx
1528 movq 48-16+8(%rsp,%rcx,8),%rbx
1544 movq 48+56+8(%rsp),%rbx
1579 .byte 102,72,15,126,213
1583 .byte 102,73,15,126,217
1593 jb L$8x_reduction_loop
1596 leaq (%rdi,%r9,1),%rbx
1600 .byte 102,72,15,126,207
1602 .byte 102,72,15,126,206
1603 leaq (%rbp,%rax,8),%rbp
1632 .globl _bn_from_montgomery
1633 .private_extern _bn_from_montgomery
1636 _bn_from_montgomery:
1667 leaq -64(%rsp,%r9,2),%r11
1673 leaq -64(%rsp,%r9,2),%rsp
1678 leaq 4096-64(,%r9,2),%r10
1679 leaq -64(%rsp,%r9,2),%rsp
1709 movdqu 16(%rsi),%xmm2
1710 movdqu 32(%rsi),%xmm3
1711 movdqa %xmm0,(%rax,%r9,1)
1712 movdqu 48(%rsi),%xmm4
1713 movdqa %xmm0,16(%rax,%r9,1)
1714 .byte 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00
1716 movdqa %xmm0,32(%rax,%r9,1)
1717 movdqa %xmm2,16(%rax)
1718 movdqa %xmm0,48(%rax,%r9,1)
1719 movdqa %xmm3,32(%rax)
1720 movdqa %xmm4,48(%rax)
1725 .byte 102,72,15,110,207
1726 .byte 102,72,15,110,209
1729 .byte 102,73,15,110,218
1730 call sqr8x_reduction
1735 jmp L$from_mont_zero
1739 movdqa %xmm0,0(%rax)
1740 movdqa %xmm0,16(%rax)
1741 movdqa %xmm0,32(%rax)
1742 movdqa %xmm0,48(%rax)
1745 jnz L$from_mont_zero
1759 .private_extern _bn_scatter5
1764 jz L$scatter_epilogue
1765 leaq (%rdx,%rcx,8),%rdx
1778 .private_extern _bn_gather5
1786 leaq L$magic_masks(%rip),%rax
1788 leaq 128(%rdx,%r11,8),%rdx
1789 movq 0(%rax,%rcx,8),%xmm4
1790 movq 8(%rax,%rcx,8),%xmm5
1791 movq 16(%rax,%rcx,8),%xmm6
1792 movq 24(%rax,%rcx,8),%xmm7
1796 movq -128(%rdx),%xmm0
1797 movq -64(%rdx),%xmm1
1815 L$SEH_end_bn_gather5:
1819 .long 0,0, 0,0, 0,0, -1,-1
1820 .long 0,0, 0,0, 0,0, 0,0
1821 .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0