1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// This code was translated into a form compatible with 6a from the public
6// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html
7
8// +build amd64,!gccgo,!appengine,!purego
9
10#define REDMASK51     0x0007FFFFFFFFFFFF
11
12// These constants cannot be encoded in non-MOVQ immediates.
13// We access them directly from memory instead.
14
15DATA ·_121666_213(SB)/8, $996687872
16GLOBL ·_121666_213(SB), 8, $8
17
18DATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA
19GLOBL ·_2P0(SB), 8, $8
20
21DATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE
22GLOBL ·_2P1234(SB), 8, $8
23
24// func freeze(inout *[5]uint64)
25TEXT ·freeze(SB),7,$0-8
26	MOVQ inout+0(FP), DI
27
28	MOVQ 0(DI),SI
29	MOVQ 8(DI),DX
30	MOVQ 16(DI),CX
31	MOVQ 24(DI),R8
32	MOVQ 32(DI),R9
33	MOVQ $REDMASK51,AX
34	MOVQ AX,R10
35	SUBQ $18,R10
36	MOVQ $3,R11
37REDUCELOOP:
38	MOVQ SI,R12
39	SHRQ $51,R12
40	ANDQ AX,SI
41	ADDQ R12,DX
42	MOVQ DX,R12
43	SHRQ $51,R12
44	ANDQ AX,DX
45	ADDQ R12,CX
46	MOVQ CX,R12
47	SHRQ $51,R12
48	ANDQ AX,CX
49	ADDQ R12,R8
50	MOVQ R8,R12
51	SHRQ $51,R12
52	ANDQ AX,R8
53	ADDQ R12,R9
54	MOVQ R9,R12
55	SHRQ $51,R12
56	ANDQ AX,R9
57	IMUL3Q $19,R12,R12
58	ADDQ R12,SI
59	SUBQ $1,R11
60	JA REDUCELOOP
61	MOVQ $1,R12
62	CMPQ R10,SI
63	CMOVQLT R11,R12
64	CMPQ AX,DX
65	CMOVQNE R11,R12
66	CMPQ AX,CX
67	CMOVQNE R11,R12
68	CMPQ AX,R8
69	CMOVQNE R11,R12
70	CMPQ AX,R9
71	CMOVQNE R11,R12
72	NEGQ R12
73	ANDQ R12,AX
74	ANDQ R12,R10
75	SUBQ R10,SI
76	SUBQ AX,DX
77	SUBQ AX,CX
78	SUBQ AX,R8
79	SUBQ AX,R9
80	MOVQ SI,0(DI)
81	MOVQ DX,8(DI)
82	MOVQ CX,16(DI)
83	MOVQ R8,24(DI)
84	MOVQ R9,32(DI)
85	RET
86
87// func ladderstep(inout *[5][5]uint64)
88TEXT ·ladderstep(SB),0,$296-8
89	MOVQ inout+0(FP),DI
90
91	MOVQ 40(DI),SI
92	MOVQ 48(DI),DX
93	MOVQ 56(DI),CX
94	MOVQ 64(DI),R8
95	MOVQ 72(DI),R9
96	MOVQ SI,AX
97	MOVQ DX,R10
98	MOVQ CX,R11
99	MOVQ R8,R12
100	MOVQ R9,R13
101	ADDQ ·_2P0(SB),AX
102	ADDQ ·_2P1234(SB),R10
103	ADDQ ·_2P1234(SB),R11
104	ADDQ ·_2P1234(SB),R12
105	ADDQ ·_2P1234(SB),R13
106	ADDQ 80(DI),SI
107	ADDQ 88(DI),DX
108	ADDQ 96(DI),CX
109	ADDQ 104(DI),R8
110	ADDQ 112(DI),R9
111	SUBQ 80(DI),AX
112	SUBQ 88(DI),R10
113	SUBQ 96(DI),R11
114	SUBQ 104(DI),R12
115	SUBQ 112(DI),R13
116	MOVQ SI,0(SP)
117	MOVQ DX,8(SP)
118	MOVQ CX,16(SP)
119	MOVQ R8,24(SP)
120	MOVQ R9,32(SP)
121	MOVQ AX,40(SP)
122	MOVQ R10,48(SP)
123	MOVQ R11,56(SP)
124	MOVQ R12,64(SP)
125	MOVQ R13,72(SP)
126	MOVQ 40(SP),AX
127	MULQ 40(SP)
128	MOVQ AX,SI
129	MOVQ DX,CX
130	MOVQ 40(SP),AX
131	SHLQ $1,AX
132	MULQ 48(SP)
133	MOVQ AX,R8
134	MOVQ DX,R9
135	MOVQ 40(SP),AX
136	SHLQ $1,AX
137	MULQ 56(SP)
138	MOVQ AX,R10
139	MOVQ DX,R11
140	MOVQ 40(SP),AX
141	SHLQ $1,AX
142	MULQ 64(SP)
143	MOVQ AX,R12
144	MOVQ DX,R13
145	MOVQ 40(SP),AX
146	SHLQ $1,AX
147	MULQ 72(SP)
148	MOVQ AX,R14
149	MOVQ DX,R15
150	MOVQ 48(SP),AX
151	MULQ 48(SP)
152	ADDQ AX,R10
153	ADCQ DX,R11
154	MOVQ 48(SP),AX
155	SHLQ $1,AX
156	MULQ 56(SP)
157	ADDQ AX,R12
158	ADCQ DX,R13
159	MOVQ 48(SP),AX
160	SHLQ $1,AX
161	MULQ 64(SP)
162	ADDQ AX,R14
163	ADCQ DX,R15
164	MOVQ 48(SP),DX
165	IMUL3Q $38,DX,AX
166	MULQ 72(SP)
167	ADDQ AX,SI
168	ADCQ DX,CX
169	MOVQ 56(SP),AX
170	MULQ 56(SP)
171	ADDQ AX,R14
172	ADCQ DX,R15
173	MOVQ 56(SP),DX
174	IMUL3Q $38,DX,AX
175	MULQ 64(SP)
176	ADDQ AX,SI
177	ADCQ DX,CX
178	MOVQ 56(SP),DX
179	IMUL3Q $38,DX,AX
180	MULQ 72(SP)
181	ADDQ AX,R8
182	ADCQ DX,R9
183	MOVQ 64(SP),DX
184	IMUL3Q $19,DX,AX
185	MULQ 64(SP)
186	ADDQ AX,R8
187	ADCQ DX,R9
188	MOVQ 64(SP),DX
189	IMUL3Q $38,DX,AX
190	MULQ 72(SP)
191	ADDQ AX,R10
192	ADCQ DX,R11
193	MOVQ 72(SP),DX
194	IMUL3Q $19,DX,AX
195	MULQ 72(SP)
196	ADDQ AX,R12
197	ADCQ DX,R13
198	MOVQ $REDMASK51,DX
199	SHLQ $13,SI,CX
200	ANDQ DX,SI
201	SHLQ $13,R8,R9
202	ANDQ DX,R8
203	ADDQ CX,R8
204	SHLQ $13,R10,R11
205	ANDQ DX,R10
206	ADDQ R9,R10
207	SHLQ $13,R12,R13
208	ANDQ DX,R12
209	ADDQ R11,R12
210	SHLQ $13,R14,R15
211	ANDQ DX,R14
212	ADDQ R13,R14
213	IMUL3Q $19,R15,CX
214	ADDQ CX,SI
215	MOVQ SI,CX
216	SHRQ $51,CX
217	ADDQ R8,CX
218	ANDQ DX,SI
219	MOVQ CX,R8
220	SHRQ $51,CX
221	ADDQ R10,CX
222	ANDQ DX,R8
223	MOVQ CX,R9
224	SHRQ $51,CX
225	ADDQ R12,CX
226	ANDQ DX,R9
227	MOVQ CX,AX
228	SHRQ $51,CX
229	ADDQ R14,CX
230	ANDQ DX,AX
231	MOVQ CX,R10
232	SHRQ $51,CX
233	IMUL3Q $19,CX,CX
234	ADDQ CX,SI
235	ANDQ DX,R10
236	MOVQ SI,80(SP)
237	MOVQ R8,88(SP)
238	MOVQ R9,96(SP)
239	MOVQ AX,104(SP)
240	MOVQ R10,112(SP)
241	MOVQ 0(SP),AX
242	MULQ 0(SP)
243	MOVQ AX,SI
244	MOVQ DX,CX
245	MOVQ 0(SP),AX
246	SHLQ $1,AX
247	MULQ 8(SP)
248	MOVQ AX,R8
249	MOVQ DX,R9
250	MOVQ 0(SP),AX
251	SHLQ $1,AX
252	MULQ 16(SP)
253	MOVQ AX,R10
254	MOVQ DX,R11
255	MOVQ 0(SP),AX
256	SHLQ $1,AX
257	MULQ 24(SP)
258	MOVQ AX,R12
259	MOVQ DX,R13
260	MOVQ 0(SP),AX
261	SHLQ $1,AX
262	MULQ 32(SP)
263	MOVQ AX,R14
264	MOVQ DX,R15
265	MOVQ 8(SP),AX
266	MULQ 8(SP)
267	ADDQ AX,R10
268	ADCQ DX,R11
269	MOVQ 8(SP),AX
270	SHLQ $1,AX
271	MULQ 16(SP)
272	ADDQ AX,R12
273	ADCQ DX,R13
274	MOVQ 8(SP),AX
275	SHLQ $1,AX
276	MULQ 24(SP)
277	ADDQ AX,R14
278	ADCQ DX,R15
279	MOVQ 8(SP),DX
280	IMUL3Q $38,DX,AX
281	MULQ 32(SP)
282	ADDQ AX,SI
283	ADCQ DX,CX
284	MOVQ 16(SP),AX
285	MULQ 16(SP)
286	ADDQ AX,R14
287	ADCQ DX,R15
288	MOVQ 16(SP),DX
289	IMUL3Q $38,DX,AX
290	MULQ 24(SP)
291	ADDQ AX,SI
292	ADCQ DX,CX
293	MOVQ 16(SP),DX
294	IMUL3Q $38,DX,AX
295	MULQ 32(SP)
296	ADDQ AX,R8
297	ADCQ DX,R9
298	MOVQ 24(SP),DX
299	IMUL3Q $19,DX,AX
300	MULQ 24(SP)
301	ADDQ AX,R8
302	ADCQ DX,R9
303	MOVQ 24(SP),DX
304	IMUL3Q $38,DX,AX
305	MULQ 32(SP)
306	ADDQ AX,R10
307	ADCQ DX,R11
308	MOVQ 32(SP),DX
309	IMUL3Q $19,DX,AX
310	MULQ 32(SP)
311	ADDQ AX,R12
312	ADCQ DX,R13
313	MOVQ $REDMASK51,DX
314	SHLQ $13,SI,CX
315	ANDQ DX,SI
316	SHLQ $13,R8,R9
317	ANDQ DX,R8
318	ADDQ CX,R8
319	SHLQ $13,R10,R11
320	ANDQ DX,R10
321	ADDQ R9,R10
322	SHLQ $13,R12,R13
323	ANDQ DX,R12
324	ADDQ R11,R12
325	SHLQ $13,R14,R15
326	ANDQ DX,R14
327	ADDQ R13,R14
328	IMUL3Q $19,R15,CX
329	ADDQ CX,SI
330	MOVQ SI,CX
331	SHRQ $51,CX
332	ADDQ R8,CX
333	ANDQ DX,SI
334	MOVQ CX,R8
335	SHRQ $51,CX
336	ADDQ R10,CX
337	ANDQ DX,R8
338	MOVQ CX,R9
339	SHRQ $51,CX
340	ADDQ R12,CX
341	ANDQ DX,R9
342	MOVQ CX,AX
343	SHRQ $51,CX
344	ADDQ R14,CX
345	ANDQ DX,AX
346	MOVQ CX,R10
347	SHRQ $51,CX
348	IMUL3Q $19,CX,CX
349	ADDQ CX,SI
350	ANDQ DX,R10
351	MOVQ SI,120(SP)
352	MOVQ R8,128(SP)
353	MOVQ R9,136(SP)
354	MOVQ AX,144(SP)
355	MOVQ R10,152(SP)
356	MOVQ SI,SI
357	MOVQ R8,DX
358	MOVQ R9,CX
359	MOVQ AX,R8
360	MOVQ R10,R9
361	ADDQ ·_2P0(SB),SI
362	ADDQ ·_2P1234(SB),DX
363	ADDQ ·_2P1234(SB),CX
364	ADDQ ·_2P1234(SB),R8
365	ADDQ ·_2P1234(SB),R9
366	SUBQ 80(SP),SI
367	SUBQ 88(SP),DX
368	SUBQ 96(SP),CX
369	SUBQ 104(SP),R8
370	SUBQ 112(SP),R9
371	MOVQ SI,160(SP)
372	MOVQ DX,168(SP)
373	MOVQ CX,176(SP)
374	MOVQ R8,184(SP)
375	MOVQ R9,192(SP)
376	MOVQ 120(DI),SI
377	MOVQ 128(DI),DX
378	MOVQ 136(DI),CX
379	MOVQ 144(DI),R8
380	MOVQ 152(DI),R9
381	MOVQ SI,AX
382	MOVQ DX,R10
383	MOVQ CX,R11
384	MOVQ R8,R12
385	MOVQ R9,R13
386	ADDQ ·_2P0(SB),AX
387	ADDQ ·_2P1234(SB),R10
388	ADDQ ·_2P1234(SB),R11
389	ADDQ ·_2P1234(SB),R12
390	ADDQ ·_2P1234(SB),R13
391	ADDQ 160(DI),SI
392	ADDQ 168(DI),DX
393	ADDQ 176(DI),CX
394	ADDQ 184(DI),R8
395	ADDQ 192(DI),R9
396	SUBQ 160(DI),AX
397	SUBQ 168(DI),R10
398	SUBQ 176(DI),R11
399	SUBQ 184(DI),R12
400	SUBQ 192(DI),R13
401	MOVQ SI,200(SP)
402	MOVQ DX,208(SP)
403	MOVQ CX,216(SP)
404	MOVQ R8,224(SP)
405	MOVQ R9,232(SP)
406	MOVQ AX,240(SP)
407	MOVQ R10,248(SP)
408	MOVQ R11,256(SP)
409	MOVQ R12,264(SP)
410	MOVQ R13,272(SP)
411	MOVQ 224(SP),SI
412	IMUL3Q $19,SI,AX
413	MOVQ AX,280(SP)
414	MULQ 56(SP)
415	MOVQ AX,SI
416	MOVQ DX,CX
417	MOVQ 232(SP),DX
418	IMUL3Q $19,DX,AX
419	MOVQ AX,288(SP)
420	MULQ 48(SP)
421	ADDQ AX,SI
422	ADCQ DX,CX
423	MOVQ 200(SP),AX
424	MULQ 40(SP)
425	ADDQ AX,SI
426	ADCQ DX,CX
427	MOVQ 200(SP),AX
428	MULQ 48(SP)
429	MOVQ AX,R8
430	MOVQ DX,R9
431	MOVQ 200(SP),AX
432	MULQ 56(SP)
433	MOVQ AX,R10
434	MOVQ DX,R11
435	MOVQ 200(SP),AX
436	MULQ 64(SP)
437	MOVQ AX,R12
438	MOVQ DX,R13
439	MOVQ 200(SP),AX
440	MULQ 72(SP)
441	MOVQ AX,R14
442	MOVQ DX,R15
443	MOVQ 208(SP),AX
444	MULQ 40(SP)
445	ADDQ AX,R8
446	ADCQ DX,R9
447	MOVQ 208(SP),AX
448	MULQ 48(SP)
449	ADDQ AX,R10
450	ADCQ DX,R11
451	MOVQ 208(SP),AX
452	MULQ 56(SP)
453	ADDQ AX,R12
454	ADCQ DX,R13
455	MOVQ 208(SP),AX
456	MULQ 64(SP)
457	ADDQ AX,R14
458	ADCQ DX,R15
459	MOVQ 208(SP),DX
460	IMUL3Q $19,DX,AX
461	MULQ 72(SP)
462	ADDQ AX,SI
463	ADCQ DX,CX
464	MOVQ 216(SP),AX
465	MULQ 40(SP)
466	ADDQ AX,R10
467	ADCQ DX,R11
468	MOVQ 216(SP),AX
469	MULQ 48(SP)
470	ADDQ AX,R12
471	ADCQ DX,R13
472	MOVQ 216(SP),AX
473	MULQ 56(SP)
474	ADDQ AX,R14
475	ADCQ DX,R15
476	MOVQ 216(SP),DX
477	IMUL3Q $19,DX,AX
478	MULQ 64(SP)
479	ADDQ AX,SI
480	ADCQ DX,CX
481	MOVQ 216(SP),DX
482	IMUL3Q $19,DX,AX
483	MULQ 72(SP)
484	ADDQ AX,R8
485	ADCQ DX,R9
486	MOVQ 224(SP),AX
487	MULQ 40(SP)
488	ADDQ AX,R12
489	ADCQ DX,R13
490	MOVQ 224(SP),AX
491	MULQ 48(SP)
492	ADDQ AX,R14
493	ADCQ DX,R15
494	MOVQ 280(SP),AX
495	MULQ 64(SP)
496	ADDQ AX,R8
497	ADCQ DX,R9
498	MOVQ 280(SP),AX
499	MULQ 72(SP)
500	ADDQ AX,R10
501	ADCQ DX,R11
502	MOVQ 232(SP),AX
503	MULQ 40(SP)
504	ADDQ AX,R14
505	ADCQ DX,R15
506	MOVQ 288(SP),AX
507	MULQ 56(SP)
508	ADDQ AX,R8
509	ADCQ DX,R9
510	MOVQ 288(SP),AX
511	MULQ 64(SP)
512	ADDQ AX,R10
513	ADCQ DX,R11
514	MOVQ 288(SP),AX
515	MULQ 72(SP)
516	ADDQ AX,R12
517	ADCQ DX,R13
518	MOVQ $REDMASK51,DX
519	SHLQ $13,SI,CX
520	ANDQ DX,SI
521	SHLQ $13,R8,R9
522	ANDQ DX,R8
523	ADDQ CX,R8
524	SHLQ $13,R10,R11
525	ANDQ DX,R10
526	ADDQ R9,R10
527	SHLQ $13,R12,R13
528	ANDQ DX,R12
529	ADDQ R11,R12
530	SHLQ $13,R14,R15
531	ANDQ DX,R14
532	ADDQ R13,R14
533	IMUL3Q $19,R15,CX
534	ADDQ CX,SI
535	MOVQ SI,CX
536	SHRQ $51,CX
537	ADDQ R8,CX
538	MOVQ CX,R8
539	SHRQ $51,CX
540	ANDQ DX,SI
541	ADDQ R10,CX
542	MOVQ CX,R9
543	SHRQ $51,CX
544	ANDQ DX,R8
545	ADDQ R12,CX
546	MOVQ CX,AX
547	SHRQ $51,CX
548	ANDQ DX,R9
549	ADDQ R14,CX
550	MOVQ CX,R10
551	SHRQ $51,CX
552	ANDQ DX,AX
553	IMUL3Q $19,CX,CX
554	ADDQ CX,SI
555	ANDQ DX,R10
556	MOVQ SI,40(SP)
557	MOVQ R8,48(SP)
558	MOVQ R9,56(SP)
559	MOVQ AX,64(SP)
560	MOVQ R10,72(SP)
561	MOVQ 264(SP),SI
562	IMUL3Q $19,SI,AX
563	MOVQ AX,200(SP)
564	MULQ 16(SP)
565	MOVQ AX,SI
566	MOVQ DX,CX
567	MOVQ 272(SP),DX
568	IMUL3Q $19,DX,AX
569	MOVQ AX,208(SP)
570	MULQ 8(SP)
571	ADDQ AX,SI
572	ADCQ DX,CX
573	MOVQ 240(SP),AX
574	MULQ 0(SP)
575	ADDQ AX,SI
576	ADCQ DX,CX
577	MOVQ 240(SP),AX
578	MULQ 8(SP)
579	MOVQ AX,R8
580	MOVQ DX,R9
581	MOVQ 240(SP),AX
582	MULQ 16(SP)
583	MOVQ AX,R10
584	MOVQ DX,R11
585	MOVQ 240(SP),AX
586	MULQ 24(SP)
587	MOVQ AX,R12
588	MOVQ DX,R13
589	MOVQ 240(SP),AX
590	MULQ 32(SP)
591	MOVQ AX,R14
592	MOVQ DX,R15
593	MOVQ 248(SP),AX
594	MULQ 0(SP)
595	ADDQ AX,R8
596	ADCQ DX,R9
597	MOVQ 248(SP),AX
598	MULQ 8(SP)
599	ADDQ AX,R10
600	ADCQ DX,R11
601	MOVQ 248(SP),AX
602	MULQ 16(SP)
603	ADDQ AX,R12
604	ADCQ DX,R13
605	MOVQ 248(SP),AX
606	MULQ 24(SP)
607	ADDQ AX,R14
608	ADCQ DX,R15
609	MOVQ 248(SP),DX
610	IMUL3Q $19,DX,AX
611	MULQ 32(SP)
612	ADDQ AX,SI
613	ADCQ DX,CX
614	MOVQ 256(SP),AX
615	MULQ 0(SP)
616	ADDQ AX,R10
617	ADCQ DX,R11
618	MOVQ 256(SP),AX
619	MULQ 8(SP)
620	ADDQ AX,R12
621	ADCQ DX,R13
622	MOVQ 256(SP),AX
623	MULQ 16(SP)
624	ADDQ AX,R14
625	ADCQ DX,R15
626	MOVQ 256(SP),DX
627	IMUL3Q $19,DX,AX
628	MULQ 24(SP)
629	ADDQ AX,SI
630	ADCQ DX,CX
631	MOVQ 256(SP),DX
632	IMUL3Q $19,DX,AX
633	MULQ 32(SP)
634	ADDQ AX,R8
635	ADCQ DX,R9
636	MOVQ 264(SP),AX
637	MULQ 0(SP)
638	ADDQ AX,R12
639	ADCQ DX,R13
640	MOVQ 264(SP),AX
641	MULQ 8(SP)
642	ADDQ AX,R14
643	ADCQ DX,R15
644	MOVQ 200(SP),AX
645	MULQ 24(SP)
646	ADDQ AX,R8
647	ADCQ DX,R9
648	MOVQ 200(SP),AX
649	MULQ 32(SP)
650	ADDQ AX,R10
651	ADCQ DX,R11
652	MOVQ 272(SP),AX
653	MULQ 0(SP)
654	ADDQ AX,R14
655	ADCQ DX,R15
656	MOVQ 208(SP),AX
657	MULQ 16(SP)
658	ADDQ AX,R8
659	ADCQ DX,R9
660	MOVQ 208(SP),AX
661	MULQ 24(SP)
662	ADDQ AX,R10
663	ADCQ DX,R11
664	MOVQ 208(SP),AX
665	MULQ 32(SP)
666	ADDQ AX,R12
667	ADCQ DX,R13
668	MOVQ $REDMASK51,DX
669	SHLQ $13,SI,CX
670	ANDQ DX,SI
671	SHLQ $13,R8,R9
672	ANDQ DX,R8
673	ADDQ CX,R8
674	SHLQ $13,R10,R11
675	ANDQ DX,R10
676	ADDQ R9,R10
677	SHLQ $13,R12,R13
678	ANDQ DX,R12
679	ADDQ R11,R12
680	SHLQ $13,R14,R15
681	ANDQ DX,R14
682	ADDQ R13,R14
683	IMUL3Q $19,R15,CX
684	ADDQ CX,SI
685	MOVQ SI,CX
686	SHRQ $51,CX
687	ADDQ R8,CX
688	MOVQ CX,R8
689	SHRQ $51,CX
690	ANDQ DX,SI
691	ADDQ R10,CX
692	MOVQ CX,R9
693	SHRQ $51,CX
694	ANDQ DX,R8
695	ADDQ R12,CX
696	MOVQ CX,AX
697	SHRQ $51,CX
698	ANDQ DX,R9
699	ADDQ R14,CX
700	MOVQ CX,R10
701	SHRQ $51,CX
702	ANDQ DX,AX
703	IMUL3Q $19,CX,CX
704	ADDQ CX,SI
705	ANDQ DX,R10
706	MOVQ SI,DX
707	MOVQ R8,CX
708	MOVQ R9,R11
709	MOVQ AX,R12
710	MOVQ R10,R13
711	ADDQ ·_2P0(SB),DX
712	ADDQ ·_2P1234(SB),CX
713	ADDQ ·_2P1234(SB),R11
714	ADDQ ·_2P1234(SB),R12
715	ADDQ ·_2P1234(SB),R13
716	ADDQ 40(SP),SI
717	ADDQ 48(SP),R8
718	ADDQ 56(SP),R9
719	ADDQ 64(SP),AX
720	ADDQ 72(SP),R10
721	SUBQ 40(SP),DX
722	SUBQ 48(SP),CX
723	SUBQ 56(SP),R11
724	SUBQ 64(SP),R12
725	SUBQ 72(SP),R13
726	MOVQ SI,120(DI)
727	MOVQ R8,128(DI)
728	MOVQ R9,136(DI)
729	MOVQ AX,144(DI)
730	MOVQ R10,152(DI)
731	MOVQ DX,160(DI)
732	MOVQ CX,168(DI)
733	MOVQ R11,176(DI)
734	MOVQ R12,184(DI)
735	MOVQ R13,192(DI)
736	MOVQ 120(DI),AX
737	MULQ 120(DI)
738	MOVQ AX,SI
739	MOVQ DX,CX
740	MOVQ 120(DI),AX
741	SHLQ $1,AX
742	MULQ 128(DI)
743	MOVQ AX,R8
744	MOVQ DX,R9
745	MOVQ 120(DI),AX
746	SHLQ $1,AX
747	MULQ 136(DI)
748	MOVQ AX,R10
749	MOVQ DX,R11
750	MOVQ 120(DI),AX
751	SHLQ $1,AX
752	MULQ 144(DI)
753	MOVQ AX,R12
754	MOVQ DX,R13
755	MOVQ 120(DI),AX
756	SHLQ $1,AX
757	MULQ 152(DI)
758	MOVQ AX,R14
759	MOVQ DX,R15
760	MOVQ 128(DI),AX
761	MULQ 128(DI)
762	ADDQ AX,R10
763	ADCQ DX,R11
764	MOVQ 128(DI),AX
765	SHLQ $1,AX
766	MULQ 136(DI)
767	ADDQ AX,R12
768	ADCQ DX,R13
769	MOVQ 128(DI),AX
770	SHLQ $1,AX
771	MULQ 144(DI)
772	ADDQ AX,R14
773	ADCQ DX,R15
774	MOVQ 128(DI),DX
775	IMUL3Q $38,DX,AX
776	MULQ 152(DI)
777	ADDQ AX,SI
778	ADCQ DX,CX
779	MOVQ 136(DI),AX
780	MULQ 136(DI)
781	ADDQ AX,R14
782	ADCQ DX,R15
783	MOVQ 136(DI),DX
784	IMUL3Q $38,DX,AX
785	MULQ 144(DI)
786	ADDQ AX,SI
787	ADCQ DX,CX
788	MOVQ 136(DI),DX
789	IMUL3Q $38,DX,AX
790	MULQ 152(DI)
791	ADDQ AX,R8
792	ADCQ DX,R9
793	MOVQ 144(DI),DX
794	IMUL3Q $19,DX,AX
795	MULQ 144(DI)
796	ADDQ AX,R8
797	ADCQ DX,R9
798	MOVQ 144(DI),DX
799	IMUL3Q $38,DX,AX
800	MULQ 152(DI)
801	ADDQ AX,R10
802	ADCQ DX,R11
803	MOVQ 152(DI),DX
804	IMUL3Q $19,DX,AX
805	MULQ 152(DI)
806	ADDQ AX,R12
807	ADCQ DX,R13
808	MOVQ $REDMASK51,DX
809	SHLQ $13,SI,CX
810	ANDQ DX,SI
811	SHLQ $13,R8,R9
812	ANDQ DX,R8
813	ADDQ CX,R8
814	SHLQ $13,R10,R11
815	ANDQ DX,R10
816	ADDQ R9,R10
817	SHLQ $13,R12,R13
818	ANDQ DX,R12
819	ADDQ R11,R12
820	SHLQ $13,R14,R15
821	ANDQ DX,R14
822	ADDQ R13,R14
823	IMUL3Q $19,R15,CX
824	ADDQ CX,SI
825	MOVQ SI,CX
826	SHRQ $51,CX
827	ADDQ R8,CX
828	ANDQ DX,SI
829	MOVQ CX,R8
830	SHRQ $51,CX
831	ADDQ R10,CX
832	ANDQ DX,R8
833	MOVQ CX,R9
834	SHRQ $51,CX
835	ADDQ R12,CX
836	ANDQ DX,R9
837	MOVQ CX,AX
838	SHRQ $51,CX
839	ADDQ R14,CX
840	ANDQ DX,AX
841	MOVQ CX,R10
842	SHRQ $51,CX
843	IMUL3Q $19,CX,CX
844	ADDQ CX,SI
845	ANDQ DX,R10
846	MOVQ SI,120(DI)
847	MOVQ R8,128(DI)
848	MOVQ R9,136(DI)
849	MOVQ AX,144(DI)
850	MOVQ R10,152(DI)
851	MOVQ 160(DI),AX
852	MULQ 160(DI)
853	MOVQ AX,SI
854	MOVQ DX,CX
855	MOVQ 160(DI),AX
856	SHLQ $1,AX
857	MULQ 168(DI)
858	MOVQ AX,R8
859	MOVQ DX,R9
860	MOVQ 160(DI),AX
861	SHLQ $1,AX
862	MULQ 176(DI)
863	MOVQ AX,R10
864	MOVQ DX,R11
865	MOVQ 160(DI),AX
866	SHLQ $1,AX
867	MULQ 184(DI)
868	MOVQ AX,R12
869	MOVQ DX,R13
870	MOVQ 160(DI),AX
871	SHLQ $1,AX
872	MULQ 192(DI)
873	MOVQ AX,R14
874	MOVQ DX,R15
875	MOVQ 168(DI),AX
876	MULQ 168(DI)
877	ADDQ AX,R10
878	ADCQ DX,R11
879	MOVQ 168(DI),AX
880	SHLQ $1,AX
881	MULQ 176(DI)
882	ADDQ AX,R12
883	ADCQ DX,R13
884	MOVQ 168(DI),AX
885	SHLQ $1,AX
886	MULQ 184(DI)
887	ADDQ AX,R14
888	ADCQ DX,R15
889	MOVQ 168(DI),DX
890	IMUL3Q $38,DX,AX
891	MULQ 192(DI)
892	ADDQ AX,SI
893	ADCQ DX,CX
894	MOVQ 176(DI),AX
895	MULQ 176(DI)
896	ADDQ AX,R14
897	ADCQ DX,R15
898	MOVQ 176(DI),DX
899	IMUL3Q $38,DX,AX
900	MULQ 184(DI)
901	ADDQ AX,SI
902	ADCQ DX,CX
903	MOVQ 176(DI),DX
904	IMUL3Q $38,DX,AX
905	MULQ 192(DI)
906	ADDQ AX,R8
907	ADCQ DX,R9
908	MOVQ 184(DI),DX
909	IMUL3Q $19,DX,AX
910	MULQ 184(DI)
911	ADDQ AX,R8
912	ADCQ DX,R9
913	MOVQ 184(DI),DX
914	IMUL3Q $38,DX,AX
915	MULQ 192(DI)
916	ADDQ AX,R10
917	ADCQ DX,R11
918	MOVQ 192(DI),DX
919	IMUL3Q $19,DX,AX
920	MULQ 192(DI)
921	ADDQ AX,R12
922	ADCQ DX,R13
923	MOVQ $REDMASK51,DX
924	SHLQ $13,SI,CX
925	ANDQ DX,SI
926	SHLQ $13,R8,R9
927	ANDQ DX,R8
928	ADDQ CX,R8
929	SHLQ $13,R10,R11
930	ANDQ DX,R10
931	ADDQ R9,R10
932	SHLQ $13,R12,R13
933	ANDQ DX,R12
934	ADDQ R11,R12
935	SHLQ $13,R14,R15
936	ANDQ DX,R14
937	ADDQ R13,R14
938	IMUL3Q $19,R15,CX
939	ADDQ CX,SI
940	MOVQ SI,CX
941	SHRQ $51,CX
942	ADDQ R8,CX
943	ANDQ DX,SI
944	MOVQ CX,R8
945	SHRQ $51,CX
946	ADDQ R10,CX
947	ANDQ DX,R8
948	MOVQ CX,R9
949	SHRQ $51,CX
950	ADDQ R12,CX
951	ANDQ DX,R9
952	MOVQ CX,AX
953	SHRQ $51,CX
954	ADDQ R14,CX
955	ANDQ DX,AX
956	MOVQ CX,R10
957	SHRQ $51,CX
958	IMUL3Q $19,CX,CX
959	ADDQ CX,SI
960	ANDQ DX,R10
961	MOVQ SI,160(DI)
962	MOVQ R8,168(DI)
963	MOVQ R9,176(DI)
964	MOVQ AX,184(DI)
965	MOVQ R10,192(DI)
966	MOVQ 184(DI),SI
967	IMUL3Q $19,SI,AX
968	MOVQ AX,0(SP)
969	MULQ 16(DI)
970	MOVQ AX,SI
971	MOVQ DX,CX
972	MOVQ 192(DI),DX
973	IMUL3Q $19,DX,AX
974	MOVQ AX,8(SP)
975	MULQ 8(DI)
976	ADDQ AX,SI
977	ADCQ DX,CX
978	MOVQ 160(DI),AX
979	MULQ 0(DI)
980	ADDQ AX,SI
981	ADCQ DX,CX
982	MOVQ 160(DI),AX
983	MULQ 8(DI)
984	MOVQ AX,R8
985	MOVQ DX,R9
986	MOVQ 160(DI),AX
987	MULQ 16(DI)
988	MOVQ AX,R10
989	MOVQ DX,R11
990	MOVQ 160(DI),AX
991	MULQ 24(DI)
992	MOVQ AX,R12
993	MOVQ DX,R13
994	MOVQ 160(DI),AX
995	MULQ 32(DI)
996	MOVQ AX,R14
997	MOVQ DX,R15
998	MOVQ 168(DI),AX
999	MULQ 0(DI)
1000	ADDQ AX,R8
1001	ADCQ DX,R9
1002	MOVQ 168(DI),AX
1003	MULQ 8(DI)
1004	ADDQ AX,R10
1005	ADCQ DX,R11
1006	MOVQ 168(DI),AX
1007	MULQ 16(DI)
1008	ADDQ AX,R12
1009	ADCQ DX,R13
1010	MOVQ 168(DI),AX
1011	MULQ 24(DI)
1012	ADDQ AX,R14
1013	ADCQ DX,R15
1014	MOVQ 168(DI),DX
1015	IMUL3Q $19,DX,AX
1016	MULQ 32(DI)
1017	ADDQ AX,SI
1018	ADCQ DX,CX
1019	MOVQ 176(DI),AX
1020	MULQ 0(DI)
1021	ADDQ AX,R10
1022	ADCQ DX,R11
1023	MOVQ 176(DI),AX
1024	MULQ 8(DI)
1025	ADDQ AX,R12
1026	ADCQ DX,R13
1027	MOVQ 176(DI),AX
1028	MULQ 16(DI)
1029	ADDQ AX,R14
1030	ADCQ DX,R15
1031	MOVQ 176(DI),DX
1032	IMUL3Q $19,DX,AX
1033	MULQ 24(DI)
1034	ADDQ AX,SI
1035	ADCQ DX,CX
1036	MOVQ 176(DI),DX
1037	IMUL3Q $19,DX,AX
1038	MULQ 32(DI)
1039	ADDQ AX,R8
1040	ADCQ DX,R9
1041	MOVQ 184(DI),AX
1042	MULQ 0(DI)
1043	ADDQ AX,R12
1044	ADCQ DX,R13
1045	MOVQ 184(DI),AX
1046	MULQ 8(DI)
1047	ADDQ AX,R14
1048	ADCQ DX,R15
1049	MOVQ 0(SP),AX
1050	MULQ 24(DI)
1051	ADDQ AX,R8
1052	ADCQ DX,R9
1053	MOVQ 0(SP),AX
1054	MULQ 32(DI)
1055	ADDQ AX,R10
1056	ADCQ DX,R11
1057	MOVQ 192(DI),AX
1058	MULQ 0(DI)
1059	ADDQ AX,R14
1060	ADCQ DX,R15
1061	MOVQ 8(SP),AX
1062	MULQ 16(DI)
1063	ADDQ AX,R8
1064	ADCQ DX,R9
1065	MOVQ 8(SP),AX
1066	MULQ 24(DI)
1067	ADDQ AX,R10
1068	ADCQ DX,R11
1069	MOVQ 8(SP),AX
1070	MULQ 32(DI)
1071	ADDQ AX,R12
1072	ADCQ DX,R13
1073	MOVQ $REDMASK51,DX
1074	SHLQ $13,SI,CX
1075	ANDQ DX,SI
1076	SHLQ $13,R8,R9
1077	ANDQ DX,R8
1078	ADDQ CX,R8
1079	SHLQ $13,R10,R11
1080	ANDQ DX,R10
1081	ADDQ R9,R10
1082	SHLQ $13,R12,R13
1083	ANDQ DX,R12
1084	ADDQ R11,R12
1085	SHLQ $13,R14,R15
1086	ANDQ DX,R14
1087	ADDQ R13,R14
1088	IMUL3Q $19,R15,CX
1089	ADDQ CX,SI
1090	MOVQ SI,CX
1091	SHRQ $51,CX
1092	ADDQ R8,CX
1093	MOVQ CX,R8
1094	SHRQ $51,CX
1095	ANDQ DX,SI
1096	ADDQ R10,CX
1097	MOVQ CX,R9
1098	SHRQ $51,CX
1099	ANDQ DX,R8
1100	ADDQ R12,CX
1101	MOVQ CX,AX
1102	SHRQ $51,CX
1103	ANDQ DX,R9
1104	ADDQ R14,CX
1105	MOVQ CX,R10
1106	SHRQ $51,CX
1107	ANDQ DX,AX
1108	IMUL3Q $19,CX,CX
1109	ADDQ CX,SI
1110	ANDQ DX,R10
1111	MOVQ SI,160(DI)
1112	MOVQ R8,168(DI)
1113	MOVQ R9,176(DI)
1114	MOVQ AX,184(DI)
1115	MOVQ R10,192(DI)
1116	MOVQ 144(SP),SI
1117	IMUL3Q $19,SI,AX
1118	MOVQ AX,0(SP)
1119	MULQ 96(SP)
1120	MOVQ AX,SI
1121	MOVQ DX,CX
1122	MOVQ 152(SP),DX
1123	IMUL3Q $19,DX,AX
1124	MOVQ AX,8(SP)
1125	MULQ 88(SP)
1126	ADDQ AX,SI
1127	ADCQ DX,CX
1128	MOVQ 120(SP),AX
1129	MULQ 80(SP)
1130	ADDQ AX,SI
1131	ADCQ DX,CX
1132	MOVQ 120(SP),AX
1133	MULQ 88(SP)
1134	MOVQ AX,R8
1135	MOVQ DX,R9
1136	MOVQ 120(SP),AX
1137	MULQ 96(SP)
1138	MOVQ AX,R10
1139	MOVQ DX,R11
1140	MOVQ 120(SP),AX
1141	MULQ 104(SP)
1142	MOVQ AX,R12
1143	MOVQ DX,R13
1144	MOVQ 120(SP),AX
1145	MULQ 112(SP)
1146	MOVQ AX,R14
1147	MOVQ DX,R15
1148	MOVQ 128(SP),AX
1149	MULQ 80(SP)
1150	ADDQ AX,R8
1151	ADCQ DX,R9
1152	MOVQ 128(SP),AX
1153	MULQ 88(SP)
1154	ADDQ AX,R10
1155	ADCQ DX,R11
1156	MOVQ 128(SP),AX
1157	MULQ 96(SP)
1158	ADDQ AX,R12
1159	ADCQ DX,R13
1160	MOVQ 128(SP),AX
1161	MULQ 104(SP)
1162	ADDQ AX,R14
1163	ADCQ DX,R15
1164	MOVQ 128(SP),DX
1165	IMUL3Q $19,DX,AX
1166	MULQ 112(SP)
1167	ADDQ AX,SI
1168	ADCQ DX,CX
1169	MOVQ 136(SP),AX
1170	MULQ 80(SP)
1171	ADDQ AX,R10
1172	ADCQ DX,R11
1173	MOVQ 136(SP),AX
1174	MULQ 88(SP)
1175	ADDQ AX,R12
1176	ADCQ DX,R13
1177	MOVQ 136(SP),AX
1178	MULQ 96(SP)
1179	ADDQ AX,R14
1180	ADCQ DX,R15
1181	MOVQ 136(SP),DX
1182	IMUL3Q $19,DX,AX
1183	MULQ 104(SP)
1184	ADDQ AX,SI
1185	ADCQ DX,CX
1186	MOVQ 136(SP),DX
1187	IMUL3Q $19,DX,AX
1188	MULQ 112(SP)
1189	ADDQ AX,R8
1190	ADCQ DX,R9
1191	MOVQ 144(SP),AX
1192	MULQ 80(SP)
1193	ADDQ AX,R12
1194	ADCQ DX,R13
1195	MOVQ 144(SP),AX
1196	MULQ 88(SP)
1197	ADDQ AX,R14
1198	ADCQ DX,R15
1199	MOVQ 0(SP),AX
1200	MULQ 104(SP)
1201	ADDQ AX,R8
1202	ADCQ DX,R9
1203	MOVQ 0(SP),AX
1204	MULQ 112(SP)
1205	ADDQ AX,R10
1206	ADCQ DX,R11
1207	MOVQ 152(SP),AX
1208	MULQ 80(SP)
1209	ADDQ AX,R14
1210	ADCQ DX,R15
1211	MOVQ 8(SP),AX
1212	MULQ 96(SP)
1213	ADDQ AX,R8
1214	ADCQ DX,R9
1215	MOVQ 8(SP),AX
1216	MULQ 104(SP)
1217	ADDQ AX,R10
1218	ADCQ DX,R11
1219	MOVQ 8(SP),AX
1220	MULQ 112(SP)
1221	ADDQ AX,R12
1222	ADCQ DX,R13
1223	MOVQ $REDMASK51,DX
1224	SHLQ $13,SI,CX
1225	ANDQ DX,SI
1226	SHLQ $13,R8,R9
1227	ANDQ DX,R8
1228	ADDQ CX,R8
1229	SHLQ $13,R10,R11
1230	ANDQ DX,R10
1231	ADDQ R9,R10
1232	SHLQ $13,R12,R13
1233	ANDQ DX,R12
1234	ADDQ R11,R12
1235	SHLQ $13,R14,R15
1236	ANDQ DX,R14
1237	ADDQ R13,R14
1238	IMUL3Q $19,R15,CX
1239	ADDQ CX,SI
1240	MOVQ SI,CX
1241	SHRQ $51,CX
1242	ADDQ R8,CX
1243	MOVQ CX,R8
1244	SHRQ $51,CX
1245	ANDQ DX,SI
1246	ADDQ R10,CX
1247	MOVQ CX,R9
1248	SHRQ $51,CX
1249	ANDQ DX,R8
1250	ADDQ R12,CX
1251	MOVQ CX,AX
1252	SHRQ $51,CX
1253	ANDQ DX,R9
1254	ADDQ R14,CX
1255	MOVQ CX,R10
1256	SHRQ $51,CX
1257	ANDQ DX,AX
1258	IMUL3Q $19,CX,CX
1259	ADDQ CX,SI
1260	ANDQ DX,R10
1261	MOVQ SI,40(DI)
1262	MOVQ R8,48(DI)
1263	MOVQ R9,56(DI)
1264	MOVQ AX,64(DI)
1265	MOVQ R10,72(DI)
1266	MOVQ 160(SP),AX
1267	MULQ ·_121666_213(SB)
1268	SHRQ $13,AX
1269	MOVQ AX,SI
1270	MOVQ DX,CX
1271	MOVQ 168(SP),AX
1272	MULQ ·_121666_213(SB)
1273	SHRQ $13,AX
1274	ADDQ AX,CX
1275	MOVQ DX,R8
1276	MOVQ 176(SP),AX
1277	MULQ ·_121666_213(SB)
1278	SHRQ $13,AX
1279	ADDQ AX,R8
1280	MOVQ DX,R9
1281	MOVQ 184(SP),AX
1282	MULQ ·_121666_213(SB)
1283	SHRQ $13,AX
1284	ADDQ AX,R9
1285	MOVQ DX,R10
1286	MOVQ 192(SP),AX
1287	MULQ ·_121666_213(SB)
1288	SHRQ $13,AX
1289	ADDQ AX,R10
1290	IMUL3Q $19,DX,DX
1291	ADDQ DX,SI
1292	ADDQ 80(SP),SI
1293	ADDQ 88(SP),CX
1294	ADDQ 96(SP),R8
1295	ADDQ 104(SP),R9
1296	ADDQ 112(SP),R10
1297	MOVQ SI,80(DI)
1298	MOVQ CX,88(DI)
1299	MOVQ R8,96(DI)
1300	MOVQ R9,104(DI)
1301	MOVQ R10,112(DI)
1302	MOVQ 104(DI),SI
1303	IMUL3Q $19,SI,AX
1304	MOVQ AX,0(SP)
1305	MULQ 176(SP)
1306	MOVQ AX,SI
1307	MOVQ DX,CX
1308	MOVQ 112(DI),DX
1309	IMUL3Q $19,DX,AX
1310	MOVQ AX,8(SP)
1311	MULQ 168(SP)
1312	ADDQ AX,SI
1313	ADCQ DX,CX
1314	MOVQ 80(DI),AX
1315	MULQ 160(SP)
1316	ADDQ AX,SI
1317	ADCQ DX,CX
1318	MOVQ 80(DI),AX
1319	MULQ 168(SP)
1320	MOVQ AX,R8
1321	MOVQ DX,R9
1322	MOVQ 80(DI),AX
1323	MULQ 176(SP)
1324	MOVQ AX,R10
1325	MOVQ DX,R11
1326	MOVQ 80(DI),AX
1327	MULQ 184(SP)
1328	MOVQ AX,R12
1329	MOVQ DX,R13
1330	MOVQ 80(DI),AX
1331	MULQ 192(SP)
1332	MOVQ AX,R14
1333	MOVQ DX,R15
1334	MOVQ 88(DI),AX
1335	MULQ 160(SP)
1336	ADDQ AX,R8
1337	ADCQ DX,R9
1338	MOVQ 88(DI),AX
1339	MULQ 168(SP)
1340	ADDQ AX,R10
1341	ADCQ DX,R11
1342	MOVQ 88(DI),AX
1343	MULQ 176(SP)
1344	ADDQ AX,R12
1345	ADCQ DX,R13
1346	MOVQ 88(DI),AX
1347	MULQ 184(SP)
1348	ADDQ AX,R14
1349	ADCQ DX,R15
1350	MOVQ 88(DI),DX
1351	IMUL3Q $19,DX,AX
1352	MULQ 192(SP)
1353	ADDQ AX,SI
1354	ADCQ DX,CX
1355	MOVQ 96(DI),AX
1356	MULQ 160(SP)
1357	ADDQ AX,R10
1358	ADCQ DX,R11
1359	MOVQ 96(DI),AX
1360	MULQ 168(SP)
1361	ADDQ AX,R12
1362	ADCQ DX,R13
1363	MOVQ 96(DI),AX
1364	MULQ 176(SP)
1365	ADDQ AX,R14
1366	ADCQ DX,R15
1367	MOVQ 96(DI),DX
1368	IMUL3Q $19,DX,AX
1369	MULQ 184(SP)
1370	ADDQ AX,SI
1371	ADCQ DX,CX
1372	MOVQ 96(DI),DX
1373	IMUL3Q $19,DX,AX
1374	MULQ 192(SP)
1375	ADDQ AX,R8
1376	ADCQ DX,R9
1377	MOVQ 104(DI),AX
1378	MULQ 160(SP)
1379	ADDQ AX,R12
1380	ADCQ DX,R13
1381	MOVQ 104(DI),AX
1382	MULQ 168(SP)
1383	ADDQ AX,R14
1384	ADCQ DX,R15
1385	MOVQ 0(SP),AX
1386	MULQ 184(SP)
1387	ADDQ AX,R8
1388	ADCQ DX,R9
1389	MOVQ 0(SP),AX
1390	MULQ 192(SP)
1391	ADDQ AX,R10
1392	ADCQ DX,R11
1393	MOVQ 112(DI),AX
1394	MULQ 160(SP)
1395	ADDQ AX,R14
1396	ADCQ DX,R15
1397	MOVQ 8(SP),AX
1398	MULQ 176(SP)
1399	ADDQ AX,R8
1400	ADCQ DX,R9
1401	MOVQ 8(SP),AX
1402	MULQ 184(SP)
1403	ADDQ AX,R10
1404	ADCQ DX,R11
1405	MOVQ 8(SP),AX
1406	MULQ 192(SP)
1407	ADDQ AX,R12
1408	ADCQ DX,R13
1409	MOVQ $REDMASK51,DX
1410	SHLQ $13,SI,CX
1411	ANDQ DX,SI
1412	SHLQ $13,R8,R9
1413	ANDQ DX,R8
1414	ADDQ CX,R8
1415	SHLQ $13,R10,R11
1416	ANDQ DX,R10
1417	ADDQ R9,R10
1418	SHLQ $13,R12,R13
1419	ANDQ DX,R12
1420	ADDQ R11,R12
1421	SHLQ $13,R14,R15
1422	ANDQ DX,R14
1423	ADDQ R13,R14
1424	IMUL3Q $19,R15,CX
1425	ADDQ CX,SI
1426	MOVQ SI,CX
1427	SHRQ $51,CX
1428	ADDQ R8,CX
1429	MOVQ CX,R8
1430	SHRQ $51,CX
1431	ANDQ DX,SI
1432	ADDQ R10,CX
1433	MOVQ CX,R9
1434	SHRQ $51,CX
1435	ANDQ DX,R8
1436	ADDQ R12,CX
1437	MOVQ CX,AX
1438	SHRQ $51,CX
1439	ANDQ DX,R9
1440	ADDQ R14,CX
1441	MOVQ CX,R10
1442	SHRQ $51,CX
1443	ANDQ DX,AX
1444	IMUL3Q $19,CX,CX
1445	ADDQ CX,SI
1446	ANDQ DX,R10
1447	MOVQ SI,80(DI)
1448	MOVQ R8,88(DI)
1449	MOVQ R9,96(DI)
1450	MOVQ AX,104(DI)
1451	MOVQ R10,112(DI)
1452	RET
1453
1454// func cswap(inout *[4][5]uint64, v uint64)
1455TEXT ·cswap(SB),7,$0
1456	MOVQ inout+0(FP),DI
1457	MOVQ v+8(FP),SI
1458
1459	SUBQ $1, SI
1460	NOTQ SI
1461	MOVQ SI, X15
1462	PSHUFD $0x44, X15, X15
1463
1464	MOVOU 0(DI), X0
1465	MOVOU 16(DI), X2
1466	MOVOU 32(DI), X4
1467	MOVOU 48(DI), X6
1468	MOVOU 64(DI), X8
1469	MOVOU 80(DI), X1
1470	MOVOU 96(DI), X3
1471	MOVOU 112(DI), X5
1472	MOVOU 128(DI), X7
1473	MOVOU 144(DI), X9
1474
1475	MOVO X1, X10
1476	MOVO X3, X11
1477	MOVO X5, X12
1478	MOVO X7, X13
1479	MOVO X9, X14
1480
1481	PXOR X0, X10
1482	PXOR X2, X11
1483	PXOR X4, X12
1484	PXOR X6, X13
1485	PXOR X8, X14
1486	PAND X15, X10
1487	PAND X15, X11
1488	PAND X15, X12
1489	PAND X15, X13
1490	PAND X15, X14
1491	PXOR X10, X0
1492	PXOR X10, X1
1493	PXOR X11, X2
1494	PXOR X11, X3
1495	PXOR X12, X4
1496	PXOR X12, X5
1497	PXOR X13, X6
1498	PXOR X13, X7
1499	PXOR X14, X8
1500	PXOR X14, X9
1501
1502	MOVOU X0, 0(DI)
1503	MOVOU X2, 16(DI)
1504	MOVOU X4, 32(DI)
1505	MOVOU X6, 48(DI)
1506	MOVOU X8, 64(DI)
1507	MOVOU X1, 80(DI)
1508	MOVOU X3, 96(DI)
1509	MOVOU X5, 112(DI)
1510	MOVOU X7, 128(DI)
1511	MOVOU X9, 144(DI)
1512	RET
1513
1514// func mul(dest, a, b *[5]uint64)
1515TEXT ·mul(SB),0,$16-24
1516	MOVQ dest+0(FP), DI
1517	MOVQ a+8(FP), SI
1518	MOVQ b+16(FP), DX
1519
1520	MOVQ DX,CX
1521	MOVQ 24(SI),DX
1522	IMUL3Q $19,DX,AX
1523	MOVQ AX,0(SP)
1524	MULQ 16(CX)
1525	MOVQ AX,R8
1526	MOVQ DX,R9
1527	MOVQ 32(SI),DX
1528	IMUL3Q $19,DX,AX
1529	MOVQ AX,8(SP)
1530	MULQ 8(CX)
1531	ADDQ AX,R8
1532	ADCQ DX,R9
1533	MOVQ 0(SI),AX
1534	MULQ 0(CX)
1535	ADDQ AX,R8
1536	ADCQ DX,R9
1537	MOVQ 0(SI),AX
1538	MULQ 8(CX)
1539	MOVQ AX,R10
1540	MOVQ DX,R11
1541	MOVQ 0(SI),AX
1542	MULQ 16(CX)
1543	MOVQ AX,R12
1544	MOVQ DX,R13
1545	MOVQ 0(SI),AX
1546	MULQ 24(CX)
1547	MOVQ AX,R14
1548	MOVQ DX,R15
1549	MOVQ 0(SI),AX
1550	MULQ 32(CX)
1551	MOVQ AX,BX
1552	MOVQ DX,BP
1553	MOVQ 8(SI),AX
1554	MULQ 0(CX)
1555	ADDQ AX,R10
1556	ADCQ DX,R11
1557	MOVQ 8(SI),AX
1558	MULQ 8(CX)
1559	ADDQ AX,R12
1560	ADCQ DX,R13
1561	MOVQ 8(SI),AX
1562	MULQ 16(CX)
1563	ADDQ AX,R14
1564	ADCQ DX,R15
1565	MOVQ 8(SI),AX
1566	MULQ 24(CX)
1567	ADDQ AX,BX
1568	ADCQ DX,BP
1569	MOVQ 8(SI),DX
1570	IMUL3Q $19,DX,AX
1571	MULQ 32(CX)
1572	ADDQ AX,R8
1573	ADCQ DX,R9
1574	MOVQ 16(SI),AX
1575	MULQ 0(CX)
1576	ADDQ AX,R12
1577	ADCQ DX,R13
1578	MOVQ 16(SI),AX
1579	MULQ 8(CX)
1580	ADDQ AX,R14
1581	ADCQ DX,R15
1582	MOVQ 16(SI),AX
1583	MULQ 16(CX)
1584	ADDQ AX,BX
1585	ADCQ DX,BP
1586	MOVQ 16(SI),DX
1587	IMUL3Q $19,DX,AX
1588	MULQ 24(CX)
1589	ADDQ AX,R8
1590	ADCQ DX,R9
1591	MOVQ 16(SI),DX
1592	IMUL3Q $19,DX,AX
1593	MULQ 32(CX)
1594	ADDQ AX,R10
1595	ADCQ DX,R11
1596	MOVQ 24(SI),AX
1597	MULQ 0(CX)
1598	ADDQ AX,R14
1599	ADCQ DX,R15
1600	MOVQ 24(SI),AX
1601	MULQ 8(CX)
1602	ADDQ AX,BX
1603	ADCQ DX,BP
1604	MOVQ 0(SP),AX
1605	MULQ 24(CX)
1606	ADDQ AX,R10
1607	ADCQ DX,R11
1608	MOVQ 0(SP),AX
1609	MULQ 32(CX)
1610	ADDQ AX,R12
1611	ADCQ DX,R13
1612	MOVQ 32(SI),AX
1613	MULQ 0(CX)
1614	ADDQ AX,BX
1615	ADCQ DX,BP
1616	MOVQ 8(SP),AX
1617	MULQ 16(CX)
1618	ADDQ AX,R10
1619	ADCQ DX,R11
1620	MOVQ 8(SP),AX
1621	MULQ 24(CX)
1622	ADDQ AX,R12
1623	ADCQ DX,R13
1624	MOVQ 8(SP),AX
1625	MULQ 32(CX)
1626	ADDQ AX,R14
1627	ADCQ DX,R15
1628	MOVQ $REDMASK51,SI
1629	SHLQ $13,R8,R9
1630	ANDQ SI,R8
1631	SHLQ $13,R10,R11
1632	ANDQ SI,R10
1633	ADDQ R9,R10
1634	SHLQ $13,R12,R13
1635	ANDQ SI,R12
1636	ADDQ R11,R12
1637	SHLQ $13,R14,R15
1638	ANDQ SI,R14
1639	ADDQ R13,R14
1640	SHLQ $13,BX,BP
1641	ANDQ SI,BX
1642	ADDQ R15,BX
1643	IMUL3Q $19,BP,DX
1644	ADDQ DX,R8
1645	MOVQ R8,DX
1646	SHRQ $51,DX
1647	ADDQ R10,DX
1648	MOVQ DX,CX
1649	SHRQ $51,DX
1650	ANDQ SI,R8
1651	ADDQ R12,DX
1652	MOVQ DX,R9
1653	SHRQ $51,DX
1654	ANDQ SI,CX
1655	ADDQ R14,DX
1656	MOVQ DX,AX
1657	SHRQ $51,DX
1658	ANDQ SI,R9
1659	ADDQ BX,DX
1660	MOVQ DX,R10
1661	SHRQ $51,DX
1662	ANDQ SI,AX
1663	IMUL3Q $19,DX,DX
1664	ADDQ DX,R8
1665	ANDQ SI,R10
1666	MOVQ R8,0(DI)
1667	MOVQ CX,8(DI)
1668	MOVQ R9,16(DI)
1669	MOVQ AX,24(DI)
1670	MOVQ R10,32(DI)
1671	RET
1672
1673// func square(out, in *[5]uint64)
1674TEXT ·square(SB),7,$0-16
1675	MOVQ out+0(FP), DI
1676	MOVQ in+8(FP), SI
1677
1678	MOVQ 0(SI),AX
1679	MULQ 0(SI)
1680	MOVQ AX,CX
1681	MOVQ DX,R8
1682	MOVQ 0(SI),AX
1683	SHLQ $1,AX
1684	MULQ 8(SI)
1685	MOVQ AX,R9
1686	MOVQ DX,R10
1687	MOVQ 0(SI),AX
1688	SHLQ $1,AX
1689	MULQ 16(SI)
1690	MOVQ AX,R11
1691	MOVQ DX,R12
1692	MOVQ 0(SI),AX
1693	SHLQ $1,AX
1694	MULQ 24(SI)
1695	MOVQ AX,R13
1696	MOVQ DX,R14
1697	MOVQ 0(SI),AX
1698	SHLQ $1,AX
1699	MULQ 32(SI)
1700	MOVQ AX,R15
1701	MOVQ DX,BX
1702	MOVQ 8(SI),AX
1703	MULQ 8(SI)
1704	ADDQ AX,R11
1705	ADCQ DX,R12
1706	MOVQ 8(SI),AX
1707	SHLQ $1,AX
1708	MULQ 16(SI)
1709	ADDQ AX,R13
1710	ADCQ DX,R14
1711	MOVQ 8(SI),AX
1712	SHLQ $1,AX
1713	MULQ 24(SI)
1714	ADDQ AX,R15
1715	ADCQ DX,BX
1716	MOVQ 8(SI),DX
1717	IMUL3Q $38,DX,AX
1718	MULQ 32(SI)
1719	ADDQ AX,CX
1720	ADCQ DX,R8
1721	MOVQ 16(SI),AX
1722	MULQ 16(SI)
1723	ADDQ AX,R15
1724	ADCQ DX,BX
1725	MOVQ 16(SI),DX
1726	IMUL3Q $38,DX,AX
1727	MULQ 24(SI)
1728	ADDQ AX,CX
1729	ADCQ DX,R8
1730	MOVQ 16(SI),DX
1731	IMUL3Q $38,DX,AX
1732	MULQ 32(SI)
1733	ADDQ AX,R9
1734	ADCQ DX,R10
1735	MOVQ 24(SI),DX
1736	IMUL3Q $19,DX,AX
1737	MULQ 24(SI)
1738	ADDQ AX,R9
1739	ADCQ DX,R10
1740	MOVQ 24(SI),DX
1741	IMUL3Q $38,DX,AX
1742	MULQ 32(SI)
1743	ADDQ AX,R11
1744	ADCQ DX,R12
1745	MOVQ 32(SI),DX
1746	IMUL3Q $19,DX,AX
1747	MULQ 32(SI)
1748	ADDQ AX,R13
1749	ADCQ DX,R14
1750	MOVQ $REDMASK51,SI
1751	SHLQ $13,CX,R8
1752	ANDQ SI,CX
1753	SHLQ $13,R9,R10
1754	ANDQ SI,R9
1755	ADDQ R8,R9
1756	SHLQ $13,R11,R12
1757	ANDQ SI,R11
1758	ADDQ R10,R11
1759	SHLQ $13,R13,R14
1760	ANDQ SI,R13
1761	ADDQ R12,R13
1762	SHLQ $13,R15,BX
1763	ANDQ SI,R15
1764	ADDQ R14,R15
1765	IMUL3Q $19,BX,DX
1766	ADDQ DX,CX
1767	MOVQ CX,DX
1768	SHRQ $51,DX
1769	ADDQ R9,DX
1770	ANDQ SI,CX
1771	MOVQ DX,R8
1772	SHRQ $51,DX
1773	ADDQ R11,DX
1774	ANDQ SI,R8
1775	MOVQ DX,R9
1776	SHRQ $51,DX
1777	ADDQ R13,DX
1778	ANDQ SI,R9
1779	MOVQ DX,AX
1780	SHRQ $51,DX
1781	ADDQ R15,DX
1782	ANDQ SI,AX
1783	MOVQ DX,R10
1784	SHRQ $51,DX
1785	IMUL3Q $19,DX,DX
1786	ADDQ DX,CX
1787	ANDQ SI,R10
1788	MOVQ CX,0(DI)
1789	MOVQ R8,8(DI)
1790	MOVQ R9,16(DI)
1791	MOVQ AX,24(DI)
1792	MOVQ R10,32(DI)
1793	RET
1794