8 .quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
12 .quad 0x0000000000000003, 0xfffffffbffffffff, 0xfffffffffffffffe, 0x00000004fffffffd
21 .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
23 .globl ecp_nistz256_mul_by_2
24 .type ecp_nistz256_mul_by_2,@function
26 ecp_nistz256_mul_by_2:
36 leaq .Lpoly(%rip),%rsi
63 .size ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
67 .globl ecp_nistz256_div_by_2
68 .type ecp_nistz256_div_by_2,@function
70 ecp_nistz256_div_by_2:
79 leaq .Lpoly(%rip),%rsi
123 .size ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2
127 .globl ecp_nistz256_mul_by_3
128 .type ecp_nistz256_mul_by_3,@function
130 ecp_nistz256_mul_by_3:
149 sbbq .Lpoly+8(%rip),%r9
152 sbbq .Lpoly+24(%rip),%r11
171 sbbq .Lpoly+8(%rip),%r9
174 sbbq .Lpoly+24(%rip),%r11
189 .size ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
193 .globl ecp_nistz256_add
194 .type ecp_nistz256_add,@function
205 leaq .Lpoly(%rip),%rsi
235 .size ecp_nistz256_add,.-ecp_nistz256_add
239 .globl ecp_nistz256_sub
240 .type ecp_nistz256_sub,@function
251 leaq .Lpoly(%rip),%rsi
281 .size ecp_nistz256_sub,.-ecp_nistz256_sub
285 .globl ecp_nistz256_neg
286 .type ecp_nistz256_neg,@function
303 leaq .Lpoly(%rip),%rsi
327 .size ecp_nistz256_neg,.-ecp_nistz256_neg
332 .globl ecp_nistz256_to_mont
333 .type ecp_nistz256_to_mont,@function
335 ecp_nistz256_to_mont:
338 .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont
346 .globl ecp_nistz256_mul_mont
347 .type ecp_nistz256_mul_mont,@function
349 ecp_nistz256_mul_mont:
364 call __ecp_nistz256_mul_montq
373 .size ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
375 .type __ecp_nistz256_mul_montq,@function
377 __ecp_nistz256_mul_montq:
382 movq .Lpoly+8(%rip),%r14
388 movq .Lpoly+24(%rip),%r15
589 .size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
598 .globl ecp_nistz256_sqr_mont
599 .type ecp_nistz256_sqr_mont,@function
601 ecp_nistz256_sqr_mont:
613 call __ecp_nistz256_sqr_montq
622 .size ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
624 .type __ecp_nistz256_sqr_montq,@function
626 __ecp_nistz256_sqr_montq:
701 movq .Lpoly+8(%rip),%rsi
702 movq .Lpoly+24(%rip),%rbp
784 .size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq
791 .globl ecp_nistz256_from_mont
792 .type ecp_nistz256_from_mont,@function
794 ecp_nistz256_from_mont:
799 movq .Lpoly+24(%rip),%r13
804 movq .Lpoly+8(%rip),%r12
880 .size ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
883 .globl ecp_nistz256_select_w5
884 .type ecp_nistz256_select_w5,@function
886 ecp_nistz256_select_w5:
887 movdqa .LOne(%rip),%xmm0
898 pshufd $0,%xmm1,%xmm1
901 .Lselect_loop_sse_w5:
908 movdqa 16(%rsi),%xmm10
909 movdqa 32(%rsi),%xmm11
910 movdqa 48(%rsi),%xmm12
911 movdqa 64(%rsi),%xmm13
912 movdqa 80(%rsi),%xmm14
929 jnz .Lselect_loop_sse_w5
932 movdqu %xmm3,16(%rdi)
933 movdqu %xmm4,32(%rdi)
934 movdqu %xmm5,48(%rdi)
935 movdqu %xmm6,64(%rdi)
936 movdqu %xmm7,80(%rdi)
938 .size ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
942 .globl ecp_nistz256_select_w7
943 .type ecp_nistz256_select_w7,@function
945 ecp_nistz256_select_w7:
946 movdqa .LOne(%rip),%xmm8
955 pshufd $0,%xmm1,%xmm1
958 .Lselect_loop_sse_w7:
962 movdqa 16(%rsi),%xmm10
964 movdqa 32(%rsi),%xmm11
965 movdqa 48(%rsi),%xmm12
979 jnz .Lselect_loop_sse_w7
982 movdqu %xmm3,16(%rdi)
983 movdqu %xmm4,32(%rdi)
984 movdqu %xmm5,48(%rdi)
986 .size ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
987 .globl ecp_nistz256_avx2_select_w7
988 .type ecp_nistz256_avx2_select_w7,@function
990 ecp_nistz256_avx2_select_w7:
993 .size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7
994 .type __ecp_nistz256_add_toq,@function
996 __ecp_nistz256_add_toq:
1023 .size __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq
1025 .type __ecp_nistz256_sub_fromq,@function
1027 __ecp_nistz256_sub_fromq:
1054 .size __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq
1056 .type __ecp_nistz256_subq,@function
1058 __ecp_nistz256_subq:
1081 .size __ecp_nistz256_subq,.-__ecp_nistz256_subq
1083 .type __ecp_nistz256_mul_by_2q,@function
1085 __ecp_nistz256_mul_by_2q:
1112 .size __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q
1113 .globl ecp_nistz256_point_double
1114 .type ecp_nistz256_point_double,@function
1116 ecp_nistz256_point_double:
1125 .Lpoint_double_shortcutq:
1126 movdqu 0(%rsi),%xmm0
1128 movdqu 16(%rsi),%xmm1
1129 movq 32+0(%rsi),%r12
1130 movq 32+8(%rsi),%r13
1131 movq 32+16(%rsi),%r8
1132 movq 32+24(%rsi),%r9
1133 movq .Lpoly+8(%rip),%r14
1134 movq .Lpoly+24(%rip),%r15
1135 movdqa %xmm0,96(%rsp)
1136 movdqa %xmm1,96+16(%rsp)
1139 .byte 102,72,15,110,199
1140 .byte 102,73,15,110,202
1141 .byte 102,73,15,110,211
1144 call __ecp_nistz256_mul_by_2q
1146 movq 64+0(%rsi),%rax
1147 movq 64+8(%rsi),%r14
1148 movq 64+16(%rsi),%r15
1149 movq 64+24(%rsi),%r8
1150 leaq 64-0(%rsi),%rsi
1152 call __ecp_nistz256_sqr_montq
1157 movq 16+0(%rsp),%r15
1160 call __ecp_nistz256_sqr_montq
1164 movq 64+8(%rbx),%r10
1165 movq 64+16(%rbx),%r11
1166 movq 64+24(%rbx),%r12
1167 leaq 64-0(%rbx),%rsi
1169 .byte 102,72,15,126,215
1170 call __ecp_nistz256_mul_montq
1171 call __ecp_nistz256_mul_by_2q
1173 movq 96+0(%rsp),%r12
1174 movq 96+8(%rsp),%r13
1176 movq 96+16(%rsp),%r8
1177 movq 96+24(%rsp),%r9
1179 call __ecp_nistz256_add_toq
1181 movq 96+0(%rsp),%r12
1182 movq 96+8(%rsp),%r13
1184 movq 96+16(%rsp),%r8
1185 movq 96+24(%rsp),%r9
1187 call __ecp_nistz256_sub_fromq
1192 movq 16+0(%rsp),%r15
1194 .byte 102,72,15,126,207
1195 call __ecp_nistz256_sqr_montq
1237 movq 8+32(%rsp),%r10
1238 leaq 0+32(%rsp),%rsi
1239 movq 16+32(%rsp),%r11
1240 movq 24+32(%rsp),%r12
1242 call __ecp_nistz256_mul_montq
1245 call __ecp_nistz256_mul_by_2q
1249 call __ecp_nistz256_add_toq
1256 movq 16+0(%rsp),%r11
1257 movq 24+0(%rsp),%r12
1259 call __ecp_nistz256_mul_montq
1262 call __ecp_nistz256_mul_by_2q
1264 movq 0+32(%rsp),%rax
1265 movq 8+32(%rsp),%r14
1266 leaq 0+32(%rsp),%rsi
1267 movq 16+32(%rsp),%r15
1268 movq 24+32(%rsp),%r8
1269 .byte 102,72,15,126,199
1270 call __ecp_nistz256_sqr_montq
1277 call __ecp_nistz256_sub_fromq
1281 movq 0+16(%rsp),%rcx
1282 movq 0+24(%rsp),%r10
1284 call __ecp_nistz256_subq
1300 call __ecp_nistz256_mul_montq
1302 .byte 102,72,15,126,203
1303 .byte 102,72,15,126,207
1304 call __ecp_nistz256_sub_fromq
1314 .size ecp_nistz256_point_double,.-ecp_nistz256_point_double
1315 .globl ecp_nistz256_point_add
1316 .type ecp_nistz256_point_add,@function
1318 ecp_nistz256_point_add:
1327 movdqu 0(%rsi),%xmm0
1328 movdqu 16(%rsi),%xmm1
1329 movdqu 32(%rsi),%xmm2
1330 movdqu 48(%rsi),%xmm3
1331 movdqu 64(%rsi),%xmm4
1332 movdqu 80(%rsi),%xmm5
1335 movdqa %xmm0,384(%rsp)
1336 movdqa %xmm1,384+16(%rsp)
1338 movdqa %xmm2,416(%rsp)
1339 movdqa %xmm3,416+16(%rsp)
1341 movdqa %xmm4,448(%rsp)
1342 movdqa %xmm5,448+16(%rsp)
1345 movdqu 0(%rsi),%xmm0
1346 pshufd $0xb1,%xmm3,%xmm5
1347 movdqu 16(%rsi),%xmm1
1348 movdqu 32(%rsi),%xmm2
1350 movdqu 48(%rsi),%xmm3
1351 movq 64+0(%rsi),%rax
1352 movq 64+8(%rsi),%r14
1353 movq 64+16(%rsi),%r15
1354 movq 64+24(%rsi),%r8
1355 movdqa %xmm0,480(%rsp)
1356 pshufd $0x1e,%xmm5,%xmm4
1357 movdqa %xmm1,480+16(%rsp)
1359 .byte 102,72,15,110,199
1360 movdqa %xmm2,512(%rsp)
1361 movdqa %xmm3,512+16(%rsp)
1367 leaq 64-0(%rsi),%rsi
1368 movq %rax,544+0(%rsp)
1369 movq %r14,544+8(%rsp)
1370 movq %r15,544+16(%rsp)
1371 movq %r8,544+24(%rsp)
1373 call __ecp_nistz256_sqr_montq
1376 pshufd $0xb1,%xmm3,%xmm4
1378 pshufd $0,%xmm5,%xmm5
1379 pshufd $0x1e,%xmm4,%xmm3
1383 pshufd $0,%xmm4,%xmm4
1384 movq 64+0(%rbx),%rax
1385 movq 64+8(%rbx),%r14
1386 movq 64+16(%rbx),%r15
1387 movq 64+24(%rbx),%r8
1388 .byte 102,72,15,110,203
1390 leaq 64-0(%rbx),%rsi
1392 call __ecp_nistz256_sqr_montq
1397 movq 8+96(%rsp),%r10
1398 leaq 0+96(%rsp),%rsi
1399 movq 16+96(%rsp),%r11
1400 movq 24+96(%rsp),%r12
1402 call __ecp_nistz256_mul_montq
1407 movq 8+32(%rsp),%r10
1408 leaq 0+32(%rsp),%rsi
1409 movq 16+32(%rsp),%r11
1410 movq 24+32(%rsp),%r12
1412 call __ecp_nistz256_mul_montq
1416 movq 0+224(%rsp),%r9
1417 movq 8+224(%rsp),%r10
1418 leaq 0+224(%rsp),%rsi
1419 movq 16+224(%rsp),%r11
1420 movq 24+224(%rsp),%r12
1422 call __ecp_nistz256_mul_montq
1426 movq 0+256(%rsp),%r9
1427 movq 8+256(%rsp),%r10
1428 leaq 0+256(%rsp),%rsi
1429 movq 16+256(%rsp),%r11
1430 movq 24+256(%rsp),%r12
1432 call __ecp_nistz256_mul_montq
1436 call __ecp_nistz256_sub_fromq
1443 .byte 102,73,15,110,220
1448 movq 8+96(%rsp),%r10
1449 leaq 0+96(%rsp),%rsi
1450 movq 16+96(%rsp),%r11
1451 movq 24+96(%rsp),%r12
1453 call __ecp_nistz256_mul_montq
1458 movq 8+32(%rsp),%r10
1459 leaq 0+32(%rsp),%rsi
1460 movq 16+32(%rsp),%r11
1461 movq 24+32(%rsp),%r12
1463 call __ecp_nistz256_mul_montq
1467 call __ecp_nistz256_sub_fromq
1475 .byte 102,73,15,126,208
1476 .byte 102,73,15,126,217
1482 .byte 102,72,15,126,199
1484 movdqu %xmm0,0(%rdi)
1485 movdqu %xmm0,16(%rdi)
1486 movdqu %xmm0,32(%rdi)
1487 movdqu %xmm0,48(%rdi)
1488 movdqu %xmm0,64(%rdi)
1489 movdqu %xmm0,80(%rdi)
1494 .byte 102,72,15,126,206
1495 .byte 102,72,15,126,199
1497 jmp .Lpoint_double_shortcutq
1501 movq 0+64(%rsp),%rax
1502 movq 8+64(%rsp),%r14
1503 leaq 0+64(%rsp),%rsi
1504 movq 16+64(%rsp),%r15
1505 movq 24+64(%rsp),%r8
1507 call __ecp_nistz256_sqr_montq
1514 movq 16+0(%rsp),%r11
1515 movq 24+0(%rsp),%r12
1517 call __ecp_nistz256_mul_montq
1522 movq 16+0(%rsp),%r15
1525 call __ecp_nistz256_sqr_montq
1529 movq 0+352(%rsp),%r9
1530 movq 8+352(%rsp),%r10
1531 leaq 0+352(%rsp),%rsi
1532 movq 16+352(%rsp),%r11
1533 movq 24+352(%rsp),%r12
1535 call __ecp_nistz256_mul_montq
1540 movq 8+32(%rsp),%r10
1541 leaq 0+32(%rsp),%rsi
1542 movq 16+32(%rsp),%r11
1543 movq 24+32(%rsp),%r12
1545 call __ecp_nistz256_mul_montq
1550 movq 8+32(%rsp),%r10
1551 leaq 0+32(%rsp),%rsi
1552 movq 16+32(%rsp),%r11
1553 movq 24+32(%rsp),%r12
1555 call __ecp_nistz256_mul_montq
1586 call __ecp_nistz256_subq
1590 call __ecp_nistz256_sub_fromq
1592 movq 192+0(%rsp),%rax
1593 movq 192+8(%rsp),%rbp
1594 movq 192+16(%rsp),%rcx
1595 movq 192+24(%rsp),%r10
1598 call __ecp_nistz256_subq
1606 movq 0+224(%rsp),%r9
1607 movq 8+224(%rsp),%r10
1608 leaq 0+224(%rsp),%rsi
1609 movq 16+224(%rsp),%r11
1610 movq 24+224(%rsp),%r12
1612 call __ecp_nistz256_mul_montq
1617 movq 8+64(%rsp),%r10
1618 leaq 0+64(%rsp),%rsi
1619 movq 16+64(%rsp),%r11
1620 movq 24+64(%rsp),%r12
1622 call __ecp_nistz256_mul_montq
1626 call __ecp_nistz256_sub_fromq
1628 .byte 102,72,15,126,199
1632 pandn 352(%rsp),%xmm0
1634 pandn 352+16(%rsp),%xmm1
1636 pand 544(%rsp),%xmm2
1637 pand 544+16(%rsp),%xmm3
1647 pand 448(%rsp),%xmm2
1648 pand 448+16(%rsp),%xmm3
1651 movdqu %xmm2,64(%rdi)
1652 movdqu %xmm3,80(%rdi)
1656 pandn 288(%rsp),%xmm0
1658 pandn 288+16(%rsp),%xmm1
1660 pand 480(%rsp),%xmm2
1661 pand 480+16(%rsp),%xmm3
1671 pand 384(%rsp),%xmm2
1672 pand 384+16(%rsp),%xmm3
1675 movdqu %xmm2,0(%rdi)
1676 movdqu %xmm3,16(%rdi)
1680 pandn 320(%rsp),%xmm0
1682 pandn 320+16(%rsp),%xmm1
1684 pand 512(%rsp),%xmm2
1685 pand 512+16(%rsp),%xmm3
1695 pand 416(%rsp),%xmm2
1696 pand 416+16(%rsp),%xmm3
1699 movdqu %xmm2,32(%rdi)
1700 movdqu %xmm3,48(%rdi)
1711 .size ecp_nistz256_point_add,.-ecp_nistz256_point_add
1712 .globl ecp_nistz256_point_add_affine
1713 .type ecp_nistz256_point_add_affine,@function
1715 ecp_nistz256_point_add_affine:
1724 movdqu 0(%rsi),%xmm0
1726 movdqu 16(%rsi),%xmm1
1727 movdqu 32(%rsi),%xmm2
1728 movdqu 48(%rsi),%xmm3
1729 movdqu 64(%rsi),%xmm4
1730 movdqu 80(%rsi),%xmm5
1731 movq 64+0(%rsi),%rax
1732 movq 64+8(%rsi),%r14
1733 movq 64+16(%rsi),%r15
1734 movq 64+24(%rsi),%r8
1735 movdqa %xmm0,320(%rsp)
1736 movdqa %xmm1,320+16(%rsp)
1738 movdqa %xmm2,352(%rsp)
1739 movdqa %xmm3,352+16(%rsp)
1741 movdqa %xmm4,384(%rsp)
1742 movdqa %xmm5,384+16(%rsp)
1745 movdqu 0(%rbx),%xmm0
1746 pshufd $0xb1,%xmm3,%xmm5
1747 movdqu 16(%rbx),%xmm1
1748 movdqu 32(%rbx),%xmm2
1750 movdqu 48(%rbx),%xmm3
1751 movdqa %xmm0,416(%rsp)
1752 pshufd $0x1e,%xmm5,%xmm4
1753 movdqa %xmm1,416+16(%rsp)
1755 .byte 102,72,15,110,199
1756 movdqa %xmm2,448(%rsp)
1757 movdqa %xmm3,448+16(%rsp)
1763 leaq 64-0(%rsi),%rsi
1765 call __ecp_nistz256_sqr_montq
1768 pshufd $0xb1,%xmm3,%xmm4
1773 pshufd $0,%xmm5,%xmm5
1774 pshufd $0x1e,%xmm4,%xmm3
1780 pshufd $0,%xmm4,%xmm4
1782 leaq 32-0(%rsp),%rsi
1785 call __ecp_nistz256_mul_montq
1789 call __ecp_nistz256_sub_fromq
1794 movq 8+32(%rsp),%r10
1795 leaq 0+32(%rsp),%rsi
1796 movq 16+32(%rsp),%r11
1797 movq 24+32(%rsp),%r12
1799 call __ecp_nistz256_mul_montq
1804 movq 8+64(%rsp),%r10
1805 leaq 0+64(%rsp),%rsi
1806 movq 16+64(%rsp),%r11
1807 movq 24+64(%rsp),%r12
1809 call __ecp_nistz256_mul_montq
1814 movq 8+32(%rsp),%r10
1815 leaq 0+32(%rsp),%rsi
1816 movq 16+32(%rsp),%r11
1817 movq 24+32(%rsp),%r12
1819 call __ecp_nistz256_mul_montq
1823 call __ecp_nistz256_sub_fromq
1825 movq 0+64(%rsp),%rax
1826 movq 8+64(%rsp),%r14
1827 leaq 0+64(%rsp),%rsi
1828 movq 16+64(%rsp),%r15
1829 movq 24+64(%rsp),%r8
1831 call __ecp_nistz256_sqr_montq
1833 movq 0+96(%rsp),%rax
1834 movq 8+96(%rsp),%r14
1835 leaq 0+96(%rsp),%rsi
1836 movq 16+96(%rsp),%r15
1837 movq 24+96(%rsp),%r8
1839 call __ecp_nistz256_sqr_montq
1844 movq 8+64(%rsp),%r10
1845 leaq 0+64(%rsp),%rsi
1846 movq 16+64(%rsp),%r11
1847 movq 24+64(%rsp),%r12
1849 call __ecp_nistz256_mul_montq
1853 movq 0+128(%rsp),%r9
1854 movq 8+128(%rsp),%r10
1855 leaq 0+128(%rsp),%rsi
1856 movq 16+128(%rsp),%r11
1857 movq 24+128(%rsp),%r12
1859 call __ecp_nistz256_mul_montq
1890 call __ecp_nistz256_subq
1894 call __ecp_nistz256_sub_fromq
1898 movq 0+16(%rsp),%rcx
1899 movq 0+24(%rsp),%r10
1902 call __ecp_nistz256_subq
1910 movq 0+160(%rsp),%r9
1911 movq 8+160(%rsp),%r10
1912 leaq 0+160(%rsp),%rsi
1913 movq 16+160(%rsp),%r11
1914 movq 24+160(%rsp),%r12
1916 call __ecp_nistz256_mul_montq
1921 movq 8+64(%rsp),%r10
1922 leaq 0+64(%rsp),%rsi
1923 movq 16+64(%rsp),%r11
1924 movq 24+64(%rsp),%r12
1926 call __ecp_nistz256_mul_montq
1930 call __ecp_nistz256_sub_fromq
1932 .byte 102,72,15,126,199
1936 pandn 288(%rsp),%xmm0
1938 pandn 288+16(%rsp),%xmm1
1940 pand .LONE_mont(%rip),%xmm2
1941 pand .LONE_mont+16(%rip),%xmm3
1951 pand 384(%rsp),%xmm2
1952 pand 384+16(%rsp),%xmm3
1955 movdqu %xmm2,64(%rdi)
1956 movdqu %xmm3,80(%rdi)
1960 pandn 224(%rsp),%xmm0
1962 pandn 224+16(%rsp),%xmm1
1964 pand 416(%rsp),%xmm2
1965 pand 416+16(%rsp),%xmm3
1975 pand 320(%rsp),%xmm2
1976 pand 320+16(%rsp),%xmm3
1979 movdqu %xmm2,0(%rdi)
1980 movdqu %xmm3,16(%rdi)
1984 pandn 256(%rsp),%xmm0
1986 pandn 256+16(%rsp),%xmm1
1988 pand 448(%rsp),%xmm2
1989 pand 448+16(%rsp),%xmm3
1999 pand 352(%rsp),%xmm2
2000 pand 352+16(%rsp),%xmm3
2003 movdqu %xmm2,32(%rdi)
2004 movdqu %xmm3,48(%rdi)
2014 .size ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine