1e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydefault	rel
2e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%define XMMWORD
3e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%define YMMWORD
4e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%define ZMMWORD
5e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleysection	.text code align=64
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
81c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_1024_sqr_avx2
9e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
101c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	64
111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanrsaz_1024_sqr_avx2:
121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[8+rsp],rdi	;WIN64 prologue
131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[16+rsp],rsi
141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rsp
151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_begin_rsaz_1024_sqr_avx2:
161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,rcx
171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,rdx
181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,r8
191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rcx,r9
201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[40+rsp]
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rax,[rsp]
251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbx
271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbp
291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r12
311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r13
331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r14
351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r15
371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[((-168))+rsp]
401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-216)+rax],xmm6
411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-200)+rax],xmm7
421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-184)+rax],xmm8
431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-168)+rax],xmm9
441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-152)+rax],xmm10
451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-136)+rax],xmm11
461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-120)+rax],xmm12
471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-104)+rax],xmm13
481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-88)+rax],xmm14
491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-72)+rax],xmm15
501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$sqr_1024_body:
511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,rax
521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r13,rdx
541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsp,832
551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,r13
561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rdi,-128
571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsi,-128
581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	r13,-128
591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r15,4095
611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r15,32*10
621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r15,12
631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm9,ymm9,ymm9
641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jz	NEAR $L$sqr_1024_no_n_copy
651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsp,32*10
711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((0-128))+r13]
721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	rsp,-2048
731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm1,YMMWORD[((32-128))+r13]
741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm2,YMMWORD[((64-128))+r13]
751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm3,YMMWORD[((96-128))+r13]
761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm4,YMMWORD[((128-128))+r13]
771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm5,YMMWORD[((160-128))+r13]
781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm6,YMMWORD[((192-128))+r13]
791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm7,YMMWORD[((224-128))+r13]
801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm8,YMMWORD[((256-128))+r13]
811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r13,[((832+128))+rsp]
821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(0-128)+r13],ymm0
831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(32-128)+r13],ymm1
841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(64-128)+r13],ymm2
851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(96-128)+r13],ymm3
861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(128-128)+r13],ymm4
871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(160-128)+r13],ymm5
881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(192-128)+r13],ymm6
891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(224-128)+r13],ymm7
901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(256-128)+r13],ymm8
911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-128)+r13],ymm9
921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$sqr_1024_no_n_copy:
941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	rsp,-1024
951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm1,YMMWORD[((32-128))+rsi]
971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm2,YMMWORD[((64-128))+rsi]
981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm3,YMMWORD[((96-128))+rsi]
991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm4,YMMWORD[((128-128))+rsi]
1001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm5,YMMWORD[((160-128))+rsi]
1011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm6,YMMWORD[((192-128))+rsi]
1021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm7,YMMWORD[((224-128))+rsi]
1031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm8,YMMWORD[((256-128))+rsi]
1041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rbx,[192+rsp]
1061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm15,QWORD[$L$and_mask]
1071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jmp	NEAR $L$OOP_GRANDE_SQR_1024
1081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1091c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
1101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$OOP_GRANDE_SQR_1024:
1111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r9,[((576+128))+rsp]
1121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r12,[448+rsp]
1131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm1
1181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((0-128))+rsi]
1191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm2
1201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(0-128)+r9],ymm1
1211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm3
1221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(32-128)+r9],ymm2
1231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm4
1241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(64-128)+r9],ymm3
1251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm5
1261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(96-128)+r9],ymm4
1271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm6
1281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(128-128)+r9],ymm5
1291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm7
1301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(160-128)+r9],ymm6
1311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm8
1321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(192-128)+r9],ymm7
1331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm9,ymm9,ymm9
1341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(224-128)+r9],ymm8
1351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm10,YMMWORD[((0-128))+rsi]
1371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,QWORD[((32-128))+rsi]
1381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-192)+rbx],ymm9
1391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm1,ymm1,ymm10
1401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(320-448)+r12],ymm9
1411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm2,ymm2,ymm10
1421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(352-448)+r12],ymm9
1431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm3,ymm3,ymm10
1441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(384-448)+r12],ymm9
1451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm4,ymm4,ymm10
1461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(416-448)+r12],ymm9
1471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm5,ymm5,ymm10
1481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(448-448)+r12],ymm9
1491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm6,ymm6,ymm10
1501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(480-448)+r12],ymm9
1511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm7,ymm7,ymm10
1521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(512-448)+r12],ymm9
1531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm8,ymm8,ymm10
1541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((64-128))+rsi]
1551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(544-448)+r12],ymm9
1561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,rsi
1581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14d,4
1591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jmp	NEAR $L$sqr_entry_1024
1601c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
1611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$OOP_SQR_1024:
1621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,QWORD[((32-128))+r15]
1631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm10,YMMWORD[((0-128))+rsi]
1641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,YMMWORD[((0-192))+rbx]
1651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm1,ymm10,YMMWORD[((0-128))+r9]
1661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,YMMWORD[((32-192))+rbx]
1671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm2,ymm10,YMMWORD[((32-128))+r9]
1681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,YMMWORD[((64-192))+rbx]
1691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm3,ymm10,YMMWORD[((64-128))+r9]
1701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,YMMWORD[((96-192))+rbx]
1711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm4,ymm10,YMMWORD[((96-128))+r9]
1721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,YMMWORD[((128-192))+rbx]
1731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm5,ymm10,YMMWORD[((128-128))+r9]
1741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,YMMWORD[((160-192))+rbx]
1751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm6,ymm10,YMMWORD[((160-128))+r9]
1761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,YMMWORD[((192-192))+rbx]
1771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm7,ymm10,YMMWORD[((192-128))+r9]
1781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,YMMWORD[((224-192))+rbx]
1791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm8,ymm10,YMMWORD[((224-128))+r9]
1801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((64-128))+r15]
1811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,YMMWORD[((256-192))+rbx]
1821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$sqr_entry_1024:
1831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(0-192)+rbx],ymm0
1841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(32-192)+rbx],ymm1
1851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
1861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((32-128))+rsi]
1871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
1881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm11,YMMWORD[((32-128))+r9]
1891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm14
1901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((64-128))+r9]
1911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm13
1921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((96-128))+r9]
1931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
1941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm11,YMMWORD[((128-128))+r9]
1951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm14
1961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((160-128))+r9]
1971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm13
1981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((192-128))+r9]
1991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
2001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm11,YMMWORD[((224-128))+r9]
2011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,QWORD[((96-128))+r15]
2021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,YMMWORD[((288-192))+rbx]
2031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(64-192)+rbx],ymm2
2051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(96-192)+rbx],ymm3
2061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm10,YMMWORD[((64-128))+rsi]
2081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm13
2091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((64-128))+r9]
2101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
2111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm10,YMMWORD[((96-128))+r9]
2121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm14
2131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm10,YMMWORD[((128-128))+r9]
2141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm13
2151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((160-128))+r9]
2161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
2171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm10,YMMWORD[((192-128))+r9]
2181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm14
2191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm1,ymm10,YMMWORD[((224-128))+r9]
2201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((128-128))+r15]
2211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,YMMWORD[((320-448))+r12]
2221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(128-192)+rbx],ymm4
2241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(160-192)+rbx],ymm5
2251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((96-128))+rsi]
2271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm12
2281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm11,YMMWORD[((96-128))+r9]
2291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm14
2301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((128-128))+r9]
2311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm13
2321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((160-128))+r9]
2331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm12
2341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm11,YMMWORD[((192-128))+r9]
2351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm14
2361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm2,ymm11,YMMWORD[((224-128))+r9]
2371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,QWORD[((160-128))+r15]
2381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,YMMWORD[((352-448))+r12]
2391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(192-192)+rbx],ymm6
2411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(224-192)+rbx],ymm7
2421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((128-128))+rsi]
2441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
2451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm10,YMMWORD[((128-128))+r9]
2461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm14
2471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm10,YMMWORD[((160-128))+r9]
2481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm13
2491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((192-128))+r9]
2501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
2511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm3,ymm10,YMMWORD[((224-128))+r9]
2521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((192-128))+r15]
2531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,YMMWORD[((384-448))+r12]
2541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(256-192)+rbx],ymm8
2561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-192)+rbx],ymm0
2571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rbx,[8+rbx]
2581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((160-128))+rsi]
2601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm13
2611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((160-128))+r9]
2621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
2631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm11,YMMWORD[((192-128))+r9]
2641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm14
2651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm4,ymm11,YMMWORD[((224-128))+r9]
2661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,QWORD[((224-128))+r15]
2671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,YMMWORD[((416-448))+r12]
2681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(320-448)+r12],ymm1
2701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(352-448)+r12],ymm2
2711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((192-128))+rsi]
2731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm12
2741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm10,YMMWORD[((192-128))+r9]
2751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm0,QWORD[((256-128))+r15]
2761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm14
2771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm5,ymm10,YMMWORD[((224-128))+r9]
2781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[((0+8-128))+r15]
2791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,YMMWORD[((448-448))+r12]
2801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(384-448)+r12],ymm3
2821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(416-448)+r12],ymm4
2831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r15,[8+r15]
2841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((224-128))+rsi]
2861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
2871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm6,ymm11,YMMWORD[((224-128))+r9]
2881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,YMMWORD[((480-448))+r12]
2891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm7,ymm0,YMMWORD[((256-128))+rsi]
2911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(448-448)+r12],ymm5
2921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,YMMWORD[((512-448))+r12]
2931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(480-448)+r12],ymm6
2941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(512-448)+r12],ymm7
2951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r12,[8+r12]
2961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
2971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	r14d
2981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jnz	NEAR $L$OOP_SQR_1024
2991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm8,YMMWORD[256+rsp]
3011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm1,YMMWORD[288+rsp]
3021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm2,YMMWORD[320+rsp]
3031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rbx,[192+rsp]
3041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm14,ymm8,29
3061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm8,ymm8,ymm15
3071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm1,29
3081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,ymm15
3091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm14,ymm14,0x93
3111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm9,ymm9,ymm9
3121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
3131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm14,ymm9,3
3151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm14,ymm11,ymm14,3
3161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm10
3171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm9,ymm11,3
3181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm14
3191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm11
3201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-192)+rbx],ymm1
3211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(320-192)+rbx],ymm2
3221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,QWORD[rsp]
3241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[8+rsp]
3251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[16+rsp]
3261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,QWORD[24+rsp]
3271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm1,YMMWORD[32+rsp]
3281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm2,YMMWORD[((64-192))+rbx]
3291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm3,YMMWORD[((96-192))+rbx]
3301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm4,YMMWORD[((128-192))+rbx]
3311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm5,YMMWORD[((160-192))+rbx]
3321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm6,YMMWORD[((192-192))+rbx]
3331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm7,YMMWORD[((224-192))+rbx]
3341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,rax
3361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
3371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
3381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm12,eax
3391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
3411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+r13]
3421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm12,xmm12
3431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r9,rax
3441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
3451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+r13]
3461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,29
3471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
3481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
3491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((16-128))+r13]
3501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,r9
3511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
3521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rdx,QWORD[((24-128))+r13]
3531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rdx
3541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r10
3561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
3571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
3581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14d,9
3601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jmp	NEAR $L$OOP_REDUCE_1024
3611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3621c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
3631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$OOP_REDUCE_1024:
3641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm13,eax
3651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm13,xmm13
3661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
3671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm12,YMMWORD[((32-128))+r13]
3681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
3691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+r13]
3701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm10
3711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
3721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm12,YMMWORD[((64-128))+r13]
3731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
3741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+r13]
3751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm14
3761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm12,YMMWORD[((96-128))+r13]
3771c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
3781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
3791c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
3801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
3811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((16-128))+r13]
3821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,29
3831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm11
3841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm12,YMMWORD[((128-128))+r13]
3851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rax
3861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,r10
3871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm10
3881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm12,YMMWORD[((160-128))+r13]
3891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r11
3901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
3911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm14
3921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm12,YMMWORD[((192-128))+r13]
3931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
3941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm11
3951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm12,YMMWORD[((224-128))+r13]
3961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm10
3971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm12,YMMWORD[((256-128))+r13]
3981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm12,eax
3991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm14
4011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm12,xmm12
4031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm13,YMMWORD[((32-8-128))+r13]
4051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((96-8-128))+r13]
4061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
4071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+r13]
4081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm11
4091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm13,YMMWORD[((64-8-128))+r13]
4101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((128-8-128))+r13]
4111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
4121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
4131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+r13]
4141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm10
4151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r12
4161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,29
4171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm13
4181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((160-8-128))+r13]
4191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
4201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm14
4211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm13
4221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((192-8-128))+r13]
4231c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
4241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,rax
4251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
4261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm11
4271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm13
4281c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
4291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
4301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm10
4311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm13
4321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((256-8-128))+r13]
4331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm14
4341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm13
4351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm9,YMMWORD[((288-8-128))+r13]
4361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm0,eax
4371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+r13]
4381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm11
4391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm13
4401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((32-16-128))+r13]
4411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm0,xmm0
4421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm10
4431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm9,ymm9,ymm13
4441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((64-16-128))+r13]
4451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rax
4461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((32-24-128))+r13]
4481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm12
4491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((96-16-128))+r13]
4501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm14
4511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm0
4521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm12
4531c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
4541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm13,ymm13,ymm1
4551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm11
4561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm12
4571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((160-16-128))+r13]
4581c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
4591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	rax,xmm13
4601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[rsp],ymm13
4611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm10
4621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm12
4631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((192-16-128))+r13]
4641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm14
4651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm12
4661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((224-16-128))+r13]
4671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm11
4681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm12
4691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((256-16-128))+r13]
4701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm10
4711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm12
4721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r12,29
4731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((288-16-128))+r13]
4741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r12
4751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm14
4761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm12
4771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,rax
4791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
4801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm11
4811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm12
4821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
4831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm12,eax
4841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((96-24-128))+r13]
4851c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
4861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm9,ymm9,ymm10
4871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm12,xmm12
4881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
4891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm0,YMMWORD[((64-24-128))+r13]
4901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((128-24-128))+r13]
4911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
4921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+r13]
4931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[8+rsp]
4941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm2,ymm14
4951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm0
4961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((160-24-128))+r13]
4971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r9,rax
4981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
4991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+r13]
5001c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
5011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,29
5021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[16+rsp]
5031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm3,ymm11
5041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm0
5051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((192-24-128))+r13]
5061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
5071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
5081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((16-128))+r13]
5091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm4,ymm10
5101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm0
5111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm10,YMMWORD[((224-24-128))+r13]
5121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rdx,QWORD[((24-128))+r13]
5131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
5141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rax,[r10*1+r9]
5151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm5,ymm14
5161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm0
5171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm14,YMMWORD[((256-24-128))+r13]
5181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,rax
5191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,ecx
5201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm10,ymm10,ymm0
5211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm6,ymm11
5221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm11,YMMWORD[((288-24-128))+r13]
5231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
5241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm7,ymm10
5251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm14,ymm14,ymm0
5261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rdx,QWORD[24+rsp]
5271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm8,ymm14
5281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm11,ymm11,ymm0
5291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm9,ymm11
5301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	xmm9,r12
5311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,rdx
5321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	r14d
5341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jnz	NEAR $L$OOP_REDUCE_1024
5351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r12,[448+rsp]
5361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm13,ymm9
5371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm9,ymm9,ymm9
5381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,YMMWORD[((288-192))+rbx]
5401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,YMMWORD[((320-448))+r12]
5411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,YMMWORD[((352-448))+r12]
5421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,YMMWORD[((384-448))+r12]
5431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,YMMWORD[((416-448))+r12]
5441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,YMMWORD[((448-448))+r12]
5451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,YMMWORD[((480-448))+r12]
5461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,YMMWORD[((512-448))+r12]
5471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,YMMWORD[((544-448))+r12]
5481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm14,ymm0,29
5501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,ymm15
5511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm1,29
5521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,ymm15
5531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm2,29
5541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm14,ymm14,0x93
5551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,ymm15
5561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm3,29
5571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
5581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,ymm15
5591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
5601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm14,ymm9,3
5621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
5631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm14,ymm11,ymm14,3
5641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm10
5651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm12,ymm11,3
5661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm14
5671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
5681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm11
5691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm9,ymm13,3
5701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm12
5711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm13
5721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm14,ymm0,29
5741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,ymm15
5751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm1,29
5761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,ymm15
5771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm2,29
5781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm14,ymm14,0x93
5791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,ymm15
5801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm3,29
5811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
5821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,ymm15
5831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
5841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
5851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm14,ymm9,3
5861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
5871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm14,ymm11,ymm14,3
5881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm10
5891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm12,ymm11,3
5901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm14
5911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(0-128)+rdi],ymm0
5921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
5931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm11
5941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(32-128)+rdi],ymm1
5951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm9,ymm13,3
5961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm12
5971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(64-128)+rdi],ymm2
5981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm13
5991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(96-128)+rdi],ymm3
6001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm14,ymm4,29
6011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm4,ymm4,ymm15
6021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm5,29
6031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm5,ymm5,ymm15
6041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm6,29
6051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm14,ymm14,0x93
6061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm6,ymm6,ymm15
6071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm7,29
6081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
6091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm7,ymm7,ymm15
6101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm0,ymm8,29
6111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
6121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm8,ymm8,ymm15
6131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
6141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm14,ymm9,3
6161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm0,ymm0,0x93
6171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm14,ymm11,ymm14,3
6181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm10
6191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm12,ymm11,3
6201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm14
6211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
6221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm11
6231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm0,ymm13,3
6241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm12
6251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm13
6261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm14,ymm4,29
6281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm4,ymm4,ymm15
6291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm5,29
6301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm5,ymm5,ymm15
6311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm6,29
6321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm14,ymm14,0x93
6331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm6,ymm6,ymm15
6341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm7,29
6351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
6361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm7,ymm7,ymm15
6371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm0,ymm8,29
6381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
6391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm8,ymm8,ymm15
6401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
6411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm14,ymm9,3
6431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm0,ymm0,0x93
6441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm14,ymm11,ymm14,3
6451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm10
6461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm12,ymm11,3
6471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm14
6481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(128-128)+rdi],ymm4
6491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
6501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm11
6511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(160-128)+rdi],ymm5
6521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm0,ymm13,3
6531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm12
6541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(192-128)+rdi],ymm6
6551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm13
6561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(224-128)+rdi],ymm7
6571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(256-128)+rdi],ymm8
6581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,rdi
6601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	r8d
6611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jne	NEAR $L$OOP_GRANDE_SQR_1024
6621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroall
6641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbp
6651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$sqr_1024_in_tail:
6671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm6,XMMWORD[((-216))+rax]
6681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm7,XMMWORD[((-200))+rax]
6691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm8,XMMWORD[((-184))+rax]
6701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm9,XMMWORD[((-168))+rax]
6711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm10,XMMWORD[((-152))+rax]
6721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm11,XMMWORD[((-136))+rax]
6731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm12,XMMWORD[((-120))+rax]
6741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm13,XMMWORD[((-104))+rax]
6751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm14,XMMWORD[((-88))+rax]
6761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm15,XMMWORD[((-72))+rax]
6771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,QWORD[((-48))+rax]
6781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14,QWORD[((-40))+rax]
6801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r13,QWORD[((-32))+rax]
6821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,QWORD[((-24))+rax]
6841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,QWORD[((-16))+rax]
6861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbx,QWORD[((-8))+rax]
6881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[rax]
6901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$sqr_1024_epilogue:
6921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
6931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,QWORD[16+rsp]
6941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
6951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
6961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_end_rsaz_1024_sqr_avx2:
697e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	rsaz_1024_mul_avx2
698e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
6991c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	64
700e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyrsaz_1024_mul_avx2:
7011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[8+rsp],rdi	;WIN64 prologue
7021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[16+rsp],rsi
7031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rsp
7041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_begin_rsaz_1024_mul_avx2:
7051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,rcx
7061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,rdx
7071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,r8
7081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rcx,r9
7091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[40+rsp]
7101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rax,[rsp]
7141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbx
7161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbp
7181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r12
7201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r13
7221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r14
7241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r15
7261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
7281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[((-168))+rsp]
7291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-216)+rax],xmm6
7301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-200)+rax],xmm7
7311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-184)+rax],xmm8
7321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-168)+rax],xmm9
7331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-152)+rax],xmm10
7341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-136)+rax],xmm11
7351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-120)+rax],xmm12
7361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-104)+rax],xmm13
7371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-88)+rax],xmm14
7381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovaps	XMMWORD[(-72)+rax],xmm15
7391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$mul_1024_body:
7401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,rax
7411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroall
7431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r13,rdx
7441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsp,64
7451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7511c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67,0x67
7521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,rsi
7531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r15,4095
7541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r15,32*10
7551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r15,12
7561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,rsi
7571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmovnz	rsi,r13
7581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmovnz	r13,r15
7591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,rcx
7611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsi,-128
7621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rcx,-128
7631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rdi,-128
7641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r15,4095
7661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r15,32*10
7671c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67,0x67
7681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r15,12
7691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jz	NEAR $L$mul_1024_no_n_copy
7701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
7751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsp,32*10
7761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((0-128))+rcx]
7771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	rsp,-512
7781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm1,YMMWORD[((32-128))+rcx]
7791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm2,YMMWORD[((64-128))+rcx]
7801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm3,YMMWORD[((96-128))+rcx]
7811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm4,YMMWORD[((128-128))+rcx]
7821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm5,YMMWORD[((160-128))+rcx]
7831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm6,YMMWORD[((192-128))+rcx]
7841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm7,YMMWORD[((224-128))+rcx]
7851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm8,YMMWORD[((256-128))+rcx]
7861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rcx,[((64+128))+rsp]
7871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(0-128)+rcx],ymm0
7881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm0,ymm0,ymm0
7891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(32-128)+rcx],ymm1
7901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm1,ymm1,ymm1
7911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(64-128)+rcx],ymm2
7921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm2,ymm2,ymm2
7931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(96-128)+rcx],ymm3
7941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm3,ymm3,ymm3
7951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(128-128)+rcx],ymm4
7961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm4,ymm4,ymm4
7971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(160-128)+rcx],ymm5
7981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm5,ymm5,ymm5
7991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(192-128)+rcx],ymm6
8001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm6,ymm6,ymm6
8011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(224-128)+rcx],ymm7
8021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm7,ymm7,ymm7
8031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(256-128)+rcx],ymm8
8041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm8,ymm0
8051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-128)+rcx],ymm9
8061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$mul_1024_no_n_copy:
8071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	rsp,-64
8081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbx,QWORD[r13]
8101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[r13]
8111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[rsp],ymm0
8121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	r9,r9
8131c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x67
8141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	r10,r10
8151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	r11,r11
8161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	r12,r12
8171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm15,YMMWORD[$L$and_mask]
8191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14d,9
8201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(288-128)+rdi],ymm9
8211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jmp	NEAR $L$oop_mul_1024
8221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8231c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
8241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$oop_mul_1024:
8251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm9,ymm3,29
8261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbx
8271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rsi]
8281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
8291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,rbx
8301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	r10,QWORD[((8-128))+rsi]
8311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,QWORD[8+rsp]
8321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,rax
8341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,r8d
8351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
8361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,rbx
8381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	r11,QWORD[((16-128))+rsi]
8391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,QWORD[16+rsp]
8401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,rbx
8421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	r12,QWORD[((24-128))+rsi]
8431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,QWORD[24+rsp]
8441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm10,YMMWORD[((32-128))+rsi]
8451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm11,eax
8461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm0
8471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((64-128))+rsi]
8481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,xmm11
8491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
8501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm10,YMMWORD[((96-128))+rsi]
8511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,ymm15
8521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm13
8531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm10,YMMWORD[((128-128))+rsi]
8541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm0
8551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((160-128))+rsi]
8561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
8571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm10,YMMWORD[((192-128))+rsi]
8581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
8591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm10,YMMWORD[((224-128))+rsi]
8601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm9,ymm9,0x93
8611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm0
8621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm10,YMMWORD[((256-128))+rsi]
8631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[8+r13]
8641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
8651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
8671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rcx]
8681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r9,rax
8691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
8701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+rcx]
8711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
8721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
8731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((16-128))+rcx]
8741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
8751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,29
8761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rdx,QWORD[((24-128))+rcx]
8771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rdx
8781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,r9
8791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
8801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((32-128))+rcx]
8811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	rbx,xmm10
8821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm13
8831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm11,YMMWORD[((64-128))+rcx]
8841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm0
8851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((96-128))+rcx]
8861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm12
8871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((128-128))+rcx]
8881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm13
8891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm11,YMMWORD[((160-128))+rcx]
8901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm0
8911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm11,YMMWORD[((192-128))+rcx]
8921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm12
8931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm11,YMMWORD[((224-128))+rcx]
8941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm9,ymm9,ymm14,3
8951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm13
8961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm11,YMMWORD[((256-128))+rcx]
8971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm9
8981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm0
8991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbx
9011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rsi]
9021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
9031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+32-128))+rsi]
9041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbx
9051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+rsi]
9061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
9071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+64-128))+rsi]
9081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r10
9101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,r8d
9111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
9121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rbx,QWORD[((16-128))+rsi]
9141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rbx
9151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
9161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm11,eax
9171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-8+96-128))+rsi]
9181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm12
9191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
9201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,xmm11
9211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+128-128))+rsi]
9221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm13
9231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
9241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+160-128))+rsi]
9251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm0
9261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
9271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-8+192-128))+rsi]
9281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm12
9291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
9301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+224-128))+rsi]
9311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm13
9321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
9331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+256-128))+rsi]
9341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm0
9351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
9361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm9,YMMWORD[((-8+288-128))+rsi]
9371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm12
9381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
9391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm13
9401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm9,ymm9,ymm10
9411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[16+r13]
9421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
9441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rcx]
9451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r10,rax
9461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-8+32-128))+rcx]
9471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rdx
9481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((8-128))+rcx]
9491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
9501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+64-128))+rcx]
9511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,29
9521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rdx,QWORD[((16-128))+rcx]
9531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rdx
9541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,r10
9551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
9571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	rbx,xmm10
9581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+96-128))+rcx]
9591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm0
9601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
9611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-8+128-128))+rcx]
9621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
9631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
9641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+160-128))+rcx]
9651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm13
9661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
9671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+192-128))+rcx]
9681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm0
9691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
9701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-8+224-128))+rcx]
9711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
9721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
9731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-8+256-128))+rcx]
9741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
9751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
9761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-8+288-128))+rcx]
9771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm0
9781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
9791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
9801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
9811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm9,ymm9,ymm13
9821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+32-128))+rsi]
9841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbx
9851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rsi]
9861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
9871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+64-128))+rsi]
9891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,rax
9901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,r8d
9911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
9921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
9931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rbx,QWORD[((8-128))+rsi]
9941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rbx
9951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
9961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm11,eax
9971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+96-128))+rsi]
9981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm0
9991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,xmm11
10011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+128-128))+rsi]
10021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
10031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+160-128))+rsi]
10051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm13
10061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
10071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+192-128))+rsi]
10081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm0
10091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+224-128))+rsi]
10111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
10121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+256-128))+rsi]
10141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
10151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
10161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+288-128))+rsi]
10171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm0
10181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
10201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[24+r13]
10221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm9,ymm9,ymm13
10231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
10241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+32-128))+rcx]
10251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,rax
10261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rcx]
10271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r11,rax
10281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+64-128))+rcx]
10291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rdx,QWORD[((8-128))+rcx]
10301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rdx
10311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,29
10321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
10331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
10341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	rbx,xmm10
10351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+96-128))+rcx]
10361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm0
10371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
10381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+128-128))+rcx]
10391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
10401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
10411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+160-128))+rcx]
10421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm13
10431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
10441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+192-128))+rcx]
10451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm0
10461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
10471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-16+224-128))+rcx]
10481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
10491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
10501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-16+256-128))+rcx]
10511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
10521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
10531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-16+288-128))+rcx]
10541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm0
10551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
10561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+32-128))+rsi]
10571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
10581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
10591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+64-128))+rsi]
10601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm9,ymm9,ymm13
10611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
10621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,r11
10631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rbx,QWORD[((-128))+rsi]
10641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rbx
10651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
10661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r12
10671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	eax,r8d
10681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,0x1fffffff
10691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
10701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
10711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm11,eax
10721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+96-128))+rsi]
10731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm0
10741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm11,xmm11
10761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+128-128))+rsi]
10771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm12
10781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+160-128))+rsi]
10801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm13
10811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
10821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+192-128))+rsi]
10831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm0
10841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+224-128))+rsi]
10861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
10871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+256-128))+rsi]
10891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
10901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm10
10911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+288-128))+rsi]
10921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm0
10931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm10
10941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm12
10951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm10
10961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastq	ymm10,QWORD[32+r13]
10971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm9,ymm9,ymm13
10981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r13,32
10991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+32-128))+rcx]
11011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	imul	rax,QWORD[((-128))+rcx]
11021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r12,rax
11031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r12,29
11041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+64-128))+rcx]
11061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
11071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	rbx,xmm10
11081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+96-128))+rcx]
11091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm1,ymm0
11101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
11111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[rsp],ymm0
11121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm2,ymm12
11131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+128-128))+rcx]
11141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
11151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+160-128))+rcx]
11161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm3,ymm13
11171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
11181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+192-128))+rcx]
11191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm4,ymm0
11201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
11211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[((-24+224-128))+rcx]
11221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm5,ymm12
11231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
11241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm12,YMMWORD[((-24+256-128))+rcx]
11251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm6,ymm13
11261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm0,ymm0,ymm11
11271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm13,YMMWORD[((-24+288-128))+rcx]
11281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r12
11291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm7,ymm0
11301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm12,ymm12,ymm11
11311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	r9,QWORD[rsp]
11321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm8,ymm12
11331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpmuludq	ymm13,ymm13,ymm11
11341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovq	xmm12,r12
11351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm9,ymm13
11361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	r14d
11381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jnz	NEAR $L$oop_mul_1024
11391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm15,ymm15,0
11401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm12,YMMWORD[rsp]
11411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm0,29
11431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,ymm15
11441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm1,29
11451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,ymm15
11461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm10,ymm2,29
11471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
11481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,ymm15
11491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm3,29
11501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
11511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,ymm15
11521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm9,ymm12,ymm14,3
11541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm10,ymm10,0x93
11551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
11561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
11571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm9
11581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm10,ymm13,3
11591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm12
11601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm11,ymm10,3
11611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm13
11621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm14,ymm11,3
11631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm10
11641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm11
11651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm0,29
11671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,ymm15
11681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm1,29
11691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,ymm15
11701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm10,ymm2,29
11711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
11721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,ymm15
11731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm3,29
11741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
11751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,ymm15
11761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm10,ymm10,0x93
11771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm9,ymm12,ymm14,3
11791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
11801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
11811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm0,ymm0,ymm9
11821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm10,ymm13,3
11831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm1,ymm1,ymm12
11841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm11,ymm10,3
11851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm2,ymm2,ymm13
11861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm14,ymm11,3
11871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm3,ymm3,ymm10
11881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm11
11891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
11901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(0-128)+rdi],ymm0
11911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(32-128)+rdi],ymm1
11921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(64-128)+rdi],ymm2
11931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(96-128)+rdi],ymm3
11941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm4,29
11951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm4,ymm4,ymm15
11961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm5,29
11971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm5,ymm5,ymm15
11981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm10,ymm6,29
11991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
12001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm6,ymm6,ymm15
12011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm7,29
12021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
12031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm7,ymm7,ymm15
12041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm0,ymm8,29
12051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm10,ymm10,0x93
12061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm8,ymm8,ymm15
12071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
12081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm9,ymm12,ymm14,3
12101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm0,ymm0,0x93
12111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
12121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm9
12131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm10,ymm13,3
12141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
12151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm11,ymm10,3
12161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
12171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm0,ymm11,3
12181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm10
12191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm11
12201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm12,ymm4,29
12221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm4,ymm4,ymm15
12231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm13,ymm5,29
12241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm5,ymm5,ymm15
12251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm10,ymm6,29
12261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm12,ymm12,0x93
12271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm6,ymm6,ymm15
12281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm11,ymm7,29
12291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm13,ymm13,0x93
12301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm7,ymm7,ymm15
12311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpsrlq	ymm0,ymm8,29
12321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm10,ymm10,0x93
12331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm8,ymm8,ymm15
12341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm11,ymm11,0x93
12351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm9,ymm12,ymm14,3
12371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermq	ymm0,ymm0,0x93
12381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm12,ymm13,ymm12,3
12391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm4,ymm4,ymm9
12401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm13,ymm10,ymm13,3
12411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm5,ymm5,ymm12
12421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm10,ymm11,ymm10,3
12431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm6,ymm6,ymm13
12441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpblendd	ymm11,ymm0,ymm11,3
12451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm7,ymm7,ymm10
12461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddq	ymm8,ymm8,ymm11
12471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(128-128)+rdi],ymm4
12491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(160-128)+rdi],ymm5
12501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(192-128)+rdi],ymm6
12511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(224-128)+rdi],ymm7
12521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[(256-128)+rdi],ymm8
12531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
12541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,rbp
12561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$mul_1024_in_tail:
12581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm6,XMMWORD[((-216))+rax]
12591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm7,XMMWORD[((-200))+rax]
12601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm8,XMMWORD[((-184))+rax]
12611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm9,XMMWORD[((-168))+rax]
12621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm10,XMMWORD[((-152))+rax]
12631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm11,XMMWORD[((-136))+rax]
12641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm12,XMMWORD[((-120))+rax]
12651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm13,XMMWORD[((-104))+rax]
12661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm14,XMMWORD[((-88))+rax]
12671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm15,XMMWORD[((-72))+rax]
12681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,QWORD[((-48))+rax]
12691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14,QWORD[((-40))+rax]
12711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r13,QWORD[((-32))+rax]
12731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,QWORD[((-24))+rax]
12751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,QWORD[((-16))+rax]
12771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbx,QWORD[((-8))+rax]
12791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[rax]
12811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$mul_1024_epilogue:
12831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
12841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,QWORD[16+rsp]
12851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
12861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_end_rsaz_1024_mul_avx2:
12881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_1024_red2norm_avx2
12891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
12901c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
1291e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyrsaz_1024_red2norm_avx2:
12921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rdx,-128
12931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	rax,rax
12941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[((-128))+rdx]
12951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[((-120))+rdx]
12961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[((-112))+rdx]
12971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,0
12981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,29
12991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r10
13001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,58
13011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,6
13021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
13031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
13041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
13051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r11,0
13061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[rcx],rax
13071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r11
13081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[((-104))+rdx]
13091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[((-96))+rdx]
13101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,23
13111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r9
13121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,52
13131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,12
13141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
13151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
13161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r10,0
13171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[8+rcx],rax
13181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r10
13191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[((-88))+rdx]
13201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[((-80))+rdx]
13211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,17
13221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r8
13231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,46
13241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,18
13251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
13261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
13271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r9,0
13281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[16+rcx],rax
13291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r9
13301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[((-72))+rdx]
13311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[((-64))+rdx]
13321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,11
13331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
13341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,40
13351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,24
13361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
13371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
13381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
13391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[24+rcx],rax
13401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
13411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[((-56))+rdx]
13421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[((-48))+rdx]
13431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[((-40))+rdx]
13441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,5
13451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,34
13461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
13471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,63
13481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,1
13491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
13501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
13511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
13521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
13531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[32+rcx],rax
13541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
13551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[((-32))+rdx]
13561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[((-24))+rdx]
13571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,28
13581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r10
13591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,57
13601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,7
13611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
13621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
13631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r11,0
13641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[40+rcx],rax
13651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r11
13661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[((-16))+rdx]
13671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[((-8))+rdx]
13681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,22
13691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r9
13701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,51
13711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,13
13721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
13731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
13741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r10,0
13751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[48+rcx],rax
13761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r10
13771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[rdx]
13781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[8+rdx]
13791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,16
13801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r8
13811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,45
13821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,19
13831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
13841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
13851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r9,0
13861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[56+rcx],rax
13871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r9
13881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[16+rdx]
13891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[24+rdx]
13901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,10
13911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
13921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,39
13931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,25
13941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
13951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
13961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
13971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[64+rcx],rax
13981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
13991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[32+rdx]
14001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[40+rdx]
14011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[48+rdx]
14021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,4
14031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,33
14041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
14051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,62
14061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,2
14071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
14081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
14091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
14101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
14111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[72+rcx],rax
14121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
14131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[56+rdx]
14141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[64+rdx]
14151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,27
14161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r10
14171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,56
14181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,8
14191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
14201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
14211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r11,0
14221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[80+rcx],rax
14231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r11
14241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[72+rdx]
14251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[80+rdx]
14261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,21
14271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r9
14281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,50
14291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,14
14301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
14311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
14321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r10,0
14331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[88+rcx],rax
14341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r10
14351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[88+rdx]
14361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[96+rdx]
14371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,15
14381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r8
14391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8,44
14401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,20
14411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
14421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r8
14431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r9,0
14441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[96+rcx],rax
14451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r9
14461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[104+rdx]
14471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[112+rdx]
14481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,9
14491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
14501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,38
14511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,26
14521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
14531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
14541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
14551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[104+rcx],rax
14561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
14571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[120+rdx]
14581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[128+rdx]
14591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[136+rdx]
14601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,3
14611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,32
14621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r11
14631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r11,61
14641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,3
14651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
14661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
14671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r11
14681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r8,0
14691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[112+rcx],rax
14701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r8
14711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[144+rdx]
14721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[152+rdx]
14731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r9,26
14741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r10
14751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r10,55
14761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,9
14771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r9
14781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rax,r10
14791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	adc	r11,0
14801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[120+rcx],rax
14811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,r11
14821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
14831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
14841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
14851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_1024_norm2red_avx2
14861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
14871c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
14881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanrsaz_1024_norm2red_avx2:
14891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rcx,-128
14901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[rdx]
14911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	eax,0x1fffffff
14921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[8+rdx]
14931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r8
14941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,0
14951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
14961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-128))+rcx],r11
14971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r8
14981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,29
14991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-120))+rcx],r10
15011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r8,r9,58
15021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-112))+rcx],r8
15041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[16+rdx]
15051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r9
15061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,23
15071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-104))+rcx],r8
15091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r9,r10,52
15101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-96))+rcx],r9
15121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[24+rdx]
15131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r10
15141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,17
15151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-88))+rcx],r9
15171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r10,r11,46
15181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-80))+rcx],r10
15201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[32+rdx]
15211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r11
15221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,11
15231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-72))+rcx],r10
15251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r11,r8,40
15261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-64))+rcx],r11
15281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[40+rdx]
15291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r8
15301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,5
15311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-56))+rcx],r11
15331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r8
15341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,34
15351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-48))+rcx],r10
15371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r8,r9,63
15381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-40))+rcx],r8
15401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[48+rdx]
15411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r9
15421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,28
15431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-32))+rcx],r8
15451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r9,r10,57
15461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-24))+rcx],r9
15481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[56+rdx]
15491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r10
15501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,22
15511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-16))+rcx],r9
15531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r10,r11,51
15541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[((-8))+rcx],r10
15561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[64+rdx]
15571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r11
15581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,16
15591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[rcx],r10
15611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r11,r8,45
15621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[8+rcx],r11
15641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[72+rdx]
15651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r8
15661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,10
15671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[16+rcx],r11
15691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r8,r9,39
15701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[24+rcx],r8
15721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[80+rdx]
15731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r9
15741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,4
15751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
15761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[32+rcx],r8
15771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r9
15781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,33
15791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[40+rcx],r11
15811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r9,r10,62
15821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[48+rcx],r9
15841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[88+rdx]
15851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r10
15861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,27
15871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
15881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[56+rcx],r9
15891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r10,r11,56
15901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[64+rcx],r10
15921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[96+rdx]
15931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r11
15941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,21
15951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
15961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[72+rcx],r10
15971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r11,r8,50
15981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
15991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[80+rcx],r11
16001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[104+rdx]
16011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,r8
16021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r11,15
16031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
16041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[88+rcx],r11
16051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r8,r9,44
16061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
16071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[96+rcx],r8
16081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[112+rdx]
16091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r9
16101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,9
16111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
16121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[104+rcx],r8
16131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r9,r10,38
16141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
16151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[112+rcx],r9
16161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[120+rdx]
16171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,r10
16181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r9,3
16191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r9,rax
16201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[120+rcx],r9
16211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,r10
16221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r8,32
16231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r8,rax
16241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[128+rcx],r8
16251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r10,r11,61
16261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
16271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[136+rcx],r10
16281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	r8,r8
16291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,r11
16301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	r10,26
16311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r10,rax
16321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[144+rcx],r10
16331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shrd	r11,r8,55
16341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	r11,rax
16351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[152+rcx],r11
16361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[160+rcx],r8
16371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[168+rcx],r8
16381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[176+rcx],r8
16391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[184+rcx],r8
16401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
16411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_1024_scatter5_avx2
16431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16441c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
1645e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyrsaz_1024_scatter5_avx2:
16461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
16471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm5,YMMWORD[$L$scatter_permd]
16481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shl	r8d,4
16491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rcx,[r8*1+rcx]
16501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	eax,9
16511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jmp	NEAR $L$oop_scatter_1024
16521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16531c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
16541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$oop_scatter_1024:
16551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	ymm0,YMMWORD[rdx]
16561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rdx,[32+rdx]
16571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermd	ymm0,ymm5,ymm0
16581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	XMMWORD[rcx],xmm0
16591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rcx,[512+rcx]
16601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	eax
16611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jnz	NEAR $L$oop_scatter_1024
16621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
16641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
16651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_1024_gather5_avx2
16681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16691c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
1670e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyrsaz_1024_gather5_avx2:
16711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
16731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,rsp
16741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rax,[((-136))+rsp]
16761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_begin_rsaz_1024_gather5:
16771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16781c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x48,0x8d,0x60,0xe0
16791c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0xf8,0x29,0x70,0xe0
16801c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0xf8,0x29,0x78,0xf0
16811c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x40,0x00
16821c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x48,0x10
16831c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x50,0x20
16841c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x58,0x30
16851c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x60,0x40
16861c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x68,0x50
16871c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x70,0x60
16881c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0xc5,0x78,0x29,0x78,0x70
16891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[((-256))+rsp]
16901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	rsp,-32
16911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r10,[$L$inc]
16921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rax,[((-128))+rsp]
16931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
16941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovd	xmm4,r8d
16951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm0,YMMWORD[r10]
16961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm1,YMMWORD[32+r10]
16971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm5,YMMWORD[64+r10]
16981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpbroadcastd	ymm4,xmm4
16991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
17001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm2,ymm0,ymm5
17011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm0,ymm0,ymm4
17021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm3,ymm1,ymm5
17031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm1,ymm1,ymm4
17041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(0+128)+rax],ymm0
17051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm0,ymm2,ymm5
17061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm2,ymm2,ymm4
17071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(32+128)+rax],ymm1
17081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm1,ymm3,ymm5
17091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm3,ymm3,ymm4
17101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(64+128)+rax],ymm2
17111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm2,ymm0,ymm5
17121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm0,ymm0,ymm4
17131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(96+128)+rax],ymm3
17141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm3,ymm1,ymm5
17151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm1,ymm1,ymm4
17161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(128+128)+rax],ymm0
17171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm8,ymm2,ymm5
17181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm2,ymm2,ymm4
17191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(160+128)+rax],ymm1
17201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm9,ymm3,ymm5
17211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm3,ymm3,ymm4
17221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(192+128)+rax],ymm2
17231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm10,ymm8,ymm5
17241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm8,ymm8,ymm4
17251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	YMMWORD[(224+128)+rax],ymm3
17261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm11,ymm9,ymm5
17271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm9,ymm9,ymm4
17281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm12,ymm10,ymm5
17291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm10,ymm10,ymm4
17301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm13,ymm11,ymm5
17311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm11,ymm11,ymm4
17321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm14,ymm12,ymm5
17331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm12,ymm12,ymm4
17341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpaddd	ymm15,ymm13,ymm5
17351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm13,ymm13,ymm4
17361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm14,ymm14,ymm4
17371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpcmpeqd	ymm15,ymm15,ymm4
17381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
17391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm7,YMMWORD[((-32))+r10]
17401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rdx,[128+rdx]
17411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8d,9
17421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
17431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$oop_gather_1024:
17441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm0,YMMWORD[((0-128))+rdx]
17451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm1,YMMWORD[((32-128))+rdx]
17461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm2,YMMWORD[((64-128))+rdx]
17471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm3,YMMWORD[((96-128))+rdx]
17481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,YMMWORD[((0+128))+rax]
17491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,YMMWORD[((32+128))+rax]
17501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,YMMWORD[((64+128))+rax]
17511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm1,ymm0
17521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,YMMWORD[((96+128))+rax]
17531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm0,YMMWORD[((128-128))+rdx]
17541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm1,YMMWORD[((160-128))+rdx]
17551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm3,ymm2
17561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm2,YMMWORD[((192-128))+rdx]
17571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqa	ymm3,YMMWORD[((224-128))+rdx]
17581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm0,YMMWORD[((128+128))+rax]
17591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm1,YMMWORD[((160+128))+rax]
17601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm2,YMMWORD[((192+128))+rax]
17611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm0
17621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm3,YMMWORD[((224+128))+rax]
17631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm8,YMMWORD[((256-128))+rdx]
17641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm1
17651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm9,YMMWORD[((288-128))+rdx]
17661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm2
17671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm10,YMMWORD[((320-128))+rdx]
17681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm3
17691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm11,YMMWORD[((352-128))+rdx]
17701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm0
17711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm0,ymm12,YMMWORD[((384-128))+rdx]
17721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm1
17731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm1,ymm13,YMMWORD[((416-128))+rdx]
17741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm2
17751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm2,ymm14,YMMWORD[((448-128))+rdx]
17761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm3
17771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpand	ymm3,ymm15,YMMWORD[((480-128))+rdx]
17781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rdx,[512+rdx]
17791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm0
17801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm1
17811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm2
17821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm5,ymm5,ymm3
17831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
17841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	ymm4,ymm4,ymm5
17851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vextracti128	xmm5,ymm4,1
17861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpor	xmm5,xmm5,xmm4
17871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpermd	ymm5,ymm7,ymm5
17881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[rcx],ymm5
17891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rcx,[32+rcx]
17901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	dec	r8d
17911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jnz	NEAR $L$oop_gather_1024
17921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
17931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vpxor	ymm0,ymm0,ymm0
17941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vmovdqu	YMMWORD[rcx],ymm0
17951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	vzeroupper
17961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm6,XMMWORD[((-168))+r11]
17971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm7,XMMWORD[((-152))+r11]
17981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm8,XMMWORD[((-136))+r11]
17991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm9,XMMWORD[((-120))+r11]
18001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm10,XMMWORD[((-104))+r11]
18011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm11,XMMWORD[((-88))+r11]
18021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm12,XMMWORD[((-72))+r11]
18031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm13,XMMWORD[((-56))+r11]
18041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm14,XMMWORD[((-40))+r11]
18051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	movaps	xmm15,XMMWORD[((-24))+r11]
18061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsp,[r11]
18071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
18091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_end_rsaz_1024_gather5:
18111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18121c9db5392e4ec0845f9a934061677636f5400d14Robert SloanEXTERN	OPENSSL_ia32cap_P
18131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanglobal	rsaz_avx2_eligible
18141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18151c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	32
18161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanrsaz_avx2_eligible:
18171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	eax,DWORD[((OPENSSL_ia32cap_P+8))]
18181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	ecx,524544
18191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	edx,0
18201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	ecx,eax
18211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmp	ecx,524544
18221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmove	eax,edx
18231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	and	eax,32
18241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	shr	eax,5
18251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DB	0F3h,0C3h		;repret
18261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18281c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	64
18291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$and_mask:
18301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DQ	0x1fffffff,0x1fffffff,0x1fffffff,-1
18311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$scatter_permd:
18321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0,2,4,6,7,7,7,7
18331c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$gather_permd:
18341c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0,7,1,7,2,7,3,7
18351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$inc:
18361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0,0,0,0,1,1,1,1
18371c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	2,2,2,2,3,3,3,3
18381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	4,4,4,4,4,4,4,4
18391c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	64
18401c9db5392e4ec0845f9a934061677636f5400d14Robert SloanEXTERN	__imp_RtlVirtualUnwind
18411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18421c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	16
18431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloanrsaz_se_handler:
18441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rsi
18451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rdi
18461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbx
18471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	rbp
18481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r12
18491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r13
18501c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r14
18511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	push	r15
18521c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pushfq
18531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	sub	rsp,64
18541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rax,QWORD[120+r8]
18561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbx,QWORD[248+r8]
18571c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,QWORD[8+r9]
18591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r11,QWORD[56+r9]
18601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10d,DWORD[r11]
18621c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r10,[r10*1+rsi]
18631c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmp	rbx,r10
18641c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jb	NEAR $L$common_seh_tail
18651c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18661c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10d,DWORD[4+r11]
18671c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r10,[r10*1+rsi]
18681c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmp	rbx,r10
18691c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	jae	NEAR $L$common_seh_tail
18701c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18711c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,QWORD[160+r8]
18721c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18731c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10d,DWORD[8+r11]
18741c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r10,[r10*1+rsi]
18751c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmp	rbx,r10
18761c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	cmovc	rax,rbp
18771c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18781c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r15,QWORD[((-48))+rax]
18791c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r14,QWORD[((-40))+rax]
18801c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r13,QWORD[((-32))+rax]
18811c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r12,QWORD[((-24))+rax]
18821c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbp,QWORD[((-16))+rax]
18831c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rbx,QWORD[((-8))+rax]
18841c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[240+r8],r15
18851c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[232+r8],r14
18861c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[224+r8],r13
18871c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[216+r8],r12
18881c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[160+r8],rbp
18891c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[144+r8],rbx
18901c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18911c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rsi,[((-216))+rax]
18921c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	rdi,[512+r8]
18931c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	ecx,20
18941c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0xa548f3fc
18951c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
18961c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$common_seh_tail:
18971c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,QWORD[8+rax]
18981c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,QWORD[16+rax]
18991c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[152+r8],rax
19001c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[168+r8],rsi
19011c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[176+r8],rdi
19021c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19031c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdi,QWORD[40+r9]
19041c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,r8
19051c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	ecx,154
19061c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0xa548f3fc
19071c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19081c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rsi,r9
19091c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	xor	rcx,rcx
19101c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	rdx,QWORD[8+rsi]
19111c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r8,QWORD[rsi]
19121c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r9,QWORD[16+rsi]
19131c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	r10,QWORD[40+rsi]
19141c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r11,[56+rsi]
19151c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	lea	r12,[24+rsi]
19161c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[32+rsp],r10
19171c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[40+rsp],r11
19181c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[48+rsp],r12
19191c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	QWORD[56+rsp],rcx
19201c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	call	QWORD[__imp_RtlVirtualUnwind]
19211c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19221c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	mov	eax,1
19231c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	add	rsp,64
19241c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	popfq
19251c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	r15
19261c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	r14
19271c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	r13
19281c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	r12
19291c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	rbp
19301c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	rbx
19311c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	rdi
19321c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	pop	rsi
1933d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	DB	0F3h,0C3h		;repret
1934d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
19351c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19361c9db5392e4ec0845f9a934061677636f5400d14Robert Sloansection	.pdata rdata align=4
19371c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	4
19381c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_begin_rsaz_1024_sqr_avx2 wrt ..imagebase
19391c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_end_rsaz_1024_sqr_avx2 wrt ..imagebase
19401c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_info_rsaz_1024_sqr_avx2 wrt ..imagebase
19411c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19421c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_begin_rsaz_1024_mul_avx2 wrt ..imagebase
19431c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_end_rsaz_1024_mul_avx2 wrt ..imagebase
19441c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_info_rsaz_1024_mul_avx2 wrt ..imagebase
19451c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan
19461c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_begin_rsaz_1024_gather5 wrt ..imagebase
19471c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_end_rsaz_1024_gather5 wrt ..imagebase
19481c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$SEH_info_rsaz_1024_gather5 wrt ..imagebase
19491c9db5392e4ec0845f9a934061677636f5400d14Robert Sloansection	.xdata rdata align=8
19501c9db5392e4ec0845f9a934061677636f5400d14Robert SloanALIGN	8
19511c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_info_rsaz_1024_sqr_avx2:
19521c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	9,0,0,0
19531c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	rsaz_se_handler wrt ..imagebase
19541c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$sqr_1024_body wrt ..imagebase,$L$sqr_1024_epilogue wrt ..imagebase,$L$sqr_1024_in_tail wrt ..imagebase
19551c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0
19561c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_info_rsaz_1024_mul_avx2:
19571c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	9,0,0,0
19581c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	rsaz_se_handler wrt ..imagebase
19591c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	$L$mul_1024_body wrt ..imagebase,$L$mul_1024_epilogue wrt ..imagebase,$L$mul_1024_in_tail wrt ..imagebase
19601c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan	DD	0
19611c9db5392e4ec0845f9a934061677636f5400d14Robert Sloan$L$SEH_info_rsaz_1024_gather5:
19621c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x01,0x36,0x17,0x0b
19631c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x36,0xf8,0x09,0x00
19641c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x31,0xe8,0x08,0x00
19651c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x2c,0xd8,0x07,0x00
19661c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x27,0xc8,0x06,0x00
19671c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x22,0xb8,0x05,0x00
19681c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x1d,0xa8,0x04,0x00
19691c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x18,0x98,0x03,0x00
19701c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x13,0x88,0x02,0x00
19711c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x0e,0x78,0x01,0x00
19721c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x09,0x68,0x00,0x00
19731c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x04,0x01,0x15,0x00
19741c9db5392e4ec0845f9a934061677636f5400d14Robert SloanDB	0x00,0xb3,0x00,0x00
1975