1 #include <machine/asm.h>
5 .type bn_mul_mont,@function
29 leaq (%rsp,%r10,8),%rsp
32 movq %r11,8(%rsp,%r9,8)
62 movq (%rsi,%r15,8),%rax
67 movq %r13,-16(%rsp,%r15,8)
73 movq (%rcx,%r15,8),%rax
87 movq %r13,-16(%rsp,%r15,8)
94 movq %r13,-8(%rsp,%r9,8)
95 movq %rdx,(%rsp,%r9,8)
101 movq (%r12,%r14,8),%rbx
126 movq (%rsi,%r15,8),%rax
129 movq (%rsp,%r15,8),%r10
131 movq %r13,-16(%rsp,%r15,8)
137 movq (%rcx,%r15,8),%rax
152 movq (%rsp,%r15,8),%r10
154 movq %r13,-16(%rsp,%r15,8)
162 movq %r13,-8(%rsp,%r9,8)
163 movq %rdx,(%rsp,%r9,8)
175 .Lsub: sbbq (%rcx,%r14,8),%rax
176 movq %rax,(%rdi,%r14,8)
177 movq 8(%rsi,%r14,8),%rax
192 movq (%rsi,%r14,8),%rax
193 movq %r14,(%rsp,%r14,8)
194 movq %rax,(%rdi,%r14,8)
199 movq 8(%rsp,%r9,8),%rsi
210 .size bn_mul_mont,.-bn_mul_mont
211 .type bn_mul4x_mont,@function
226 leaq (%rsp,%r10,8),%rsp
229 movq %r11,8(%rsp,%r9,8)
231 movq %rdi,16(%rsp,%r9,8)
274 movq -16(%rcx,%r15,8),%rax
280 movq -8(%rsi,%r15,8),%rax
284 movq %r13,-24(%rsp,%r15,8)
289 movq -8(%rcx,%r15,8),%rax
295 movq (%rsi,%r15,8),%rax
299 movq %rdi,-16(%rsp,%r15,8)
304 movq (%rcx,%r15,8),%rax
310 movq 8(%rsi,%r15,8),%rax
314 movq %r13,-8(%rsp,%r15,8)
319 movq 8(%rcx,%r15,8),%rax
326 movq -16(%rsi,%r15,8),%rax
330 movq %rdi,-32(%rsp,%r15,8)
337 movq -16(%rcx,%r15,8),%rax
343 movq -8(%rsi,%r15,8),%rax
347 movq %r13,-24(%rsp,%r15,8)
352 movq -8(%rcx,%r15,8),%rax
362 movq %rdi,-16(%rsp,%r15,8)
368 movq %r13,-8(%rsp,%r15,8)
369 movq %rdi,(%rsp,%r15,8)
374 movq (%r12,%r14,8),%rbx
414 movq -16(%rcx,%r15,8),%rax
416 addq -16(%rsp,%r15,8),%r10
422 movq -8(%rsi,%r15,8),%rax
426 movq %r13,-24(%rsp,%r15,8)
431 movq -8(%rcx,%r15,8),%rax
433 addq -8(%rsp,%r15,8),%r11
439 movq (%rsi,%r15,8),%rax
443 movq %rdi,-16(%rsp,%r15,8)
448 movq (%rcx,%r15,8),%rax
450 addq (%rsp,%r15,8),%r10
456 movq 8(%rsi,%r15,8),%rax
460 movq %r13,-8(%rsp,%r15,8)
465 movq 8(%rcx,%r15,8),%rax
467 addq 8(%rsp,%r15,8),%r11
474 movq -16(%rsi,%r15,8),%rax
478 movq %rdi,-32(%rsp,%r15,8)
485 movq -16(%rcx,%r15,8),%rax
487 addq -16(%rsp,%r15,8),%r10
493 movq -8(%rsi,%r15,8),%rax
497 movq %r13,-24(%rsp,%r15,8)
502 movq -8(%rcx,%r15,8),%rax
504 addq -8(%rsp,%r15,8),%r11
515 movq %rdi,-16(%rsp,%r15,8)
521 addq (%rsp,%r9,8),%r13
523 movq %r13,-8(%rsp,%r15,8)
524 movq %rdi,(%rsp,%r15,8)
528 movq 16(%rsp,%r9,8),%rdi
544 movq %rax,0(%rdi,%r14,8)
545 movq %rdx,8(%rdi,%r14,8)
546 sbbq 16(%rcx,%r14,8),%rbx
547 movq 32(%rsi,%r14,8),%rax
548 movq 40(%rsi,%r14,8),%rdx
549 sbbq 24(%rcx,%r14,8),%rbp
550 movq %rbx,16(%rdi,%r14,8)
551 movq %rbp,24(%rdi,%r14,8)
552 sbbq 32(%rcx,%r14,8),%rax
553 movq 48(%rsi,%r14,8),%rbx
554 movq 56(%rsi,%r14,8),%rbp
555 sbbq 40(%rcx,%r14,8),%rdx
560 movq %rax,0(%rdi,%r14,8)
561 movq 32(%rsi,%r14,8),%rax
562 sbbq 16(%rcx,%r14,8),%rbx
563 movq %rdx,8(%rdi,%r14,8)
564 sbbq 24(%rcx,%r14,8),%rbp
565 movq %rbx,16(%rdi,%r14,8)
568 movq %rbp,24(%rdi,%r14,8)
583 movdqu 16(%rsi,%r14,1),%xmm2
584 movdqu 32(%rsi,%r14,1),%xmm1
585 movdqa %xmm0,16(%rsp,%r14,1)
586 movdqu %xmm2,16(%rdi,%r14,1)
587 movdqa %xmm0,32(%rsp,%r14,1)
588 movdqu %xmm1,32(%rdi,%r14,1)
594 movdqu 16(%rsi,%r14,1),%xmm2
595 movdqa %xmm0,16(%rsp,%r14,1)
596 movdqu %xmm2,16(%rdi,%r14,1)
597 movq 8(%rsp,%r9,8),%rsi
608 .size bn_mul4x_mont,.-bn_mul4x_mont
609 .type bn_sqr4x_mont,@function
625 leaq -72(%rsp,%r10,2),%rsp
651 leaq (%rsi,%r9,1),%rsi
656 movq -32(%rsi,%rbp,1),%r14
657 leaq 64(%rsp,%r9,2),%rdi
658 movq -24(%rsi,%rbp,1),%rax
659 leaq -32(%rdi,%rbp,1),%rdi
660 movq -16(%rsi,%rbp,1),%rbx
667 movq %r10,-24(%rdi,%rbp,1)
674 movq %r11,-16(%rdi,%rbp,1)
679 movq 8(%rsi,%rcx,1),%rbx
693 movq %r10,-8(%rdi,%rcx,1)
698 movq (%rsi,%rcx,1),%rbx
712 movq %r11,(%rdi,%rcx,1)
715 movq 8(%rsi,%rcx,1),%rbx
729 movq %r10,8(%rdi,%rcx,1)
731 movq 16(%rsi,%rcx,1),%rbx
745 movq %r11,16(%rdi,%rcx,1)
748 movq 24(%rsi,%rcx,1),%rbx
763 movq %r10,-8(%rdi,%rcx,1)
782 movq -32(%rsi,%rbp,1),%r14
783 leaq 64(%rsp,%r9,2),%rdi
784 movq -24(%rsi,%rbp,1),%rax
785 leaq -32(%rdi,%rbp,1),%rdi
786 movq -16(%rsi,%rbp,1),%rbx
789 movq -24(%rdi,%rbp,1),%r10
795 movq %r10,-24(%rdi,%rbp,1)
798 addq -16(%rdi,%rbp,1),%r11
804 movq %r11,-16(%rdi,%rbp,1)
810 movq 8(%rsi,%rcx,1),%rbx
812 addq 8(%rdi,%rcx,1),%r12
826 movq %r10,8(%rdi,%rcx,1)
833 movq (%rsi,%rcx,1),%rbx
835 addq (%rdi,%rcx,1),%r13
849 movq %r11,(%rdi,%rcx,1)
851 movq 8(%rsi,%rcx,1),%rbx
853 addq 8(%rdi,%rcx,1),%r12
868 movq %r10,-8(%rdi,%rcx,1)
888 leaq 64(%rsp,%r9,2),%rdi
890 leaq -32(%rdi,%rbp,1),%rdi
949 movq -16(%rsi,%rbp,1),%rax
950 leaq 64(%rsp,%r9,2),%rdi
952 movq -24(%rdi,%rbp,2),%r11
954 leaq (%r14,%r10,2),%r12
956 leaq (%rcx,%r11,2),%r13
959 movq -16(%rdi,%rbp,2),%r10
963 movq -8(%rdi,%rbp,2),%r11
965 movq -8(%rsi,%rbp,1),%rax
966 movq %r12,-32(%rdi,%rbp,2)
969 leaq (%r14,%r10,2),%rbx
970 movq %r13,-24(%rdi,%rbp,2)
973 leaq (%rcx,%r11,2),%r8
976 movq 0(%rdi,%rbp,2),%r10
980 movq 8(%rdi,%rbp,2),%r11
982 movq 0(%rsi,%rbp,1),%rax
983 movq %rbx,-16(%rdi,%rbp,2)
986 movq %r8,-40(%rdi,%rbp,2)
988 jmp .Lsqr4x_shift_n_add
992 leaq (%r14,%r10,2),%r12
994 leaq (%rcx,%r11,2),%r13
997 movq -16(%rdi,%rbp,2),%r10
1001 movq -8(%rdi,%rbp,2),%r11
1003 movq -8(%rsi,%rbp,1),%rax
1004 movq %r12,-32(%rdi,%rbp,2)
1007 leaq (%r14,%r10,2),%rbx
1008 movq %r13,-24(%rdi,%rbp,2)
1011 leaq (%rcx,%r11,2),%r8
1014 movq 0(%rdi,%rbp,2),%r10
1018 movq 8(%rdi,%rbp,2),%r11
1020 movq 0(%rsi,%rbp,1),%rax
1021 movq %rbx,-16(%rdi,%rbp,2)
1024 leaq (%r14,%r10,2),%r12
1025 movq %r8,-8(%rdi,%rbp,2)
1028 leaq (%rcx,%r11,2),%r13
1031 movq 16(%rdi,%rbp,2),%r10
1035 movq 24(%rdi,%rbp,2),%r11
1037 movq 8(%rsi,%rbp,1),%rax
1038 movq %r12,0(%rdi,%rbp,2)
1041 leaq (%r14,%r10,2),%rbx
1042 movq %r13,8(%rdi,%rbp,2)
1045 leaq (%rcx,%r11,2),%r8
1048 movq 32(%rdi,%rbp,2),%r10
1052 movq 40(%rdi,%rbp,2),%r11
1054 movq 16(%rsi,%rbp,1),%rax
1055 movq %rbx,16(%rdi,%rbp,2)
1057 movq %r8,24(%rdi,%rbp,2)
1060 jnz .Lsqr4x_shift_n_add
1062 leaq (%r14,%r10,2),%r12
1064 leaq (%rcx,%r11,2),%r13
1077 leaq (%r14,%r10,2),%rbx
1081 leaq (%rcx,%r11,2),%r8
1097 leaq 64(%rsp,%r9,2),%rax
1098 leaq 64(%rsp,%r9,1),%rdi
1100 leaq (%rsi,%r9,1),%rsi
1103 movq 0(%rsi,%rcx,1),%rax
1104 movq 8(%rsi,%rcx,1),%r9
1107 jmp .Lsqr4x_mont_outer
1119 addq 8(%rdi,%rcx,1),%r11
1128 movq 16(%rsi,%rcx,1),%rbx
1136 movq %r12,8(%rdi,%rcx,1)
1139 addq 16(%rdi,%rcx,1),%r10
1146 movq 24(%rsi,%rcx,1),%r9
1154 movq %r13,16(%rdi,%rcx,1)
1157 addq 24(%rdi,%rcx,1),%r11
1164 jmp .Lsqr4x_mont_inner
1168 movq (%rsi,%rcx,1),%rbx
1176 movq %r12,-8(%rdi,%rcx,1)
1179 addq (%rdi,%rcx,1),%r10
1186 movq 8(%rsi,%rcx,1),%r9
1194 movq %r13,(%rdi,%rcx,1)
1197 addq 8(%rdi,%rcx,1),%r11
1205 movq 16(%rsi,%rcx,1),%rbx
1213 movq %r12,8(%rdi,%rcx,1)
1216 addq 16(%rdi,%rcx,1),%r10
1223 movq 24(%rsi,%rcx,1),%r9
1231 movq %r13,16(%rdi,%rcx,1)
1234 addq 24(%rdi,%rcx,1),%r11
1242 jne .Lsqr4x_mont_inner
1259 movq 0(%rsi,%rcx,1),%rbx
1263 imulq 16(%rdi,%rcx,1),%r14
1265 movq 8(%rsi,%rcx,1),%r9
1267 movq 16(%rdi,%rcx,1),%r10
1283 jb .Lsqr4x_mont_outer
1287 movq 64(%rsp,%r9,1),%rax
1288 leaq 64(%rsp,%r9,1),%rbx
1303 movq %rax,0(%rdi,%rbp,8)
1304 movq %rdx,8(%rdi,%rbp,8)
1305 sbbq 16(%rsi,%rbp,8),%r10
1306 movq 32(%rbx,%rbp,8),%rax
1307 movq 40(%rbx,%rbp,8),%rdx
1308 sbbq 24(%rsi,%rbp,8),%r11
1309 movq %r10,16(%rdi,%rbp,8)
1310 movq %r11,24(%rdi,%rbp,8)
1311 sbbq 32(%rsi,%rbp,8),%rax
1312 movq 48(%rbx,%rbp,8),%r10
1313 movq 56(%rbx,%rbp,8),%r11
1314 sbbq 40(%rsi,%rbp,8),%rdx
1319 movq %rax,0(%rdi,%rbp,8)
1320 movq 32(%rbx,%rbp,8),%rax
1321 sbbq 16(%rsi,%rbp,8),%r10
1322 movq %rdx,8(%rdi,%rbp,8)
1323 sbbq 24(%rsi,%rbp,8),%r11
1324 movq %r10,16(%rdi,%rbp,8)
1327 movq %r11,24(%rdi,%rbp,8)
1337 leaq 64(%rsp,%r9,8),%rsi
1339 leaq (%rsi,%r9,8),%rsi
1340 movdqa %xmm0,64(%rsp)
1346 movdqu 16(%rbx,%rbp,1),%xmm2
1347 movdqu 32(%rbx,%rbp,1),%xmm1
1348 movdqa %xmm0,80(%rsp,%rbp,1)
1349 movdqa %xmm0,96(%rsp,%rbp,1)
1350 movdqa %xmm0,16(%rsi,%rbp,1)
1351 movdqa %xmm0,32(%rsi,%rbp,1)
1352 movdqu %xmm2,16(%rdi,%rbp,1)
1353 movdqu %xmm1,32(%rdi,%rbp,1)
1358 movdqu 16(%rbx,%rbp,1),%xmm2
1359 movdqa %xmm0,80(%rsp,%rbp,1)
1360 movdqa %xmm0,16(%rsi,%rbp,1)
1361 movdqu %xmm2,16(%rdi,%rbp,1)
1373 .size bn_sqr4x_mont,.-bn_sqr4x_mont
1374 .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,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