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: http://bench.cr.yp.to/supercop.html
7
8// +build amd64,!gccgo,!appengine
9
10#include "const_amd64.h"
11
12// func square(out, in *[5]uint64)
13TEXT ·square(SB),7,$0-16
14	MOVQ out+0(FP), DI
15	MOVQ in+8(FP), SI
16
17	MOVQ 0(SI),AX
18	MULQ 0(SI)
19	MOVQ AX,CX
20	MOVQ DX,R8
21	MOVQ 0(SI),AX
22	SHLQ $1,AX
23	MULQ 8(SI)
24	MOVQ AX,R9
25	MOVQ DX,R10
26	MOVQ 0(SI),AX
27	SHLQ $1,AX
28	MULQ 16(SI)
29	MOVQ AX,R11
30	MOVQ DX,R12
31	MOVQ 0(SI),AX
32	SHLQ $1,AX
33	MULQ 24(SI)
34	MOVQ AX,R13
35	MOVQ DX,R14
36	MOVQ 0(SI),AX
37	SHLQ $1,AX
38	MULQ 32(SI)
39	MOVQ AX,R15
40	MOVQ DX,BX
41	MOVQ 8(SI),AX
42	MULQ 8(SI)
43	ADDQ AX,R11
44	ADCQ DX,R12
45	MOVQ 8(SI),AX
46	SHLQ $1,AX
47	MULQ 16(SI)
48	ADDQ AX,R13
49	ADCQ DX,R14
50	MOVQ 8(SI),AX
51	SHLQ $1,AX
52	MULQ 24(SI)
53	ADDQ AX,R15
54	ADCQ DX,BX
55	MOVQ 8(SI),DX
56	IMUL3Q $38,DX,AX
57	MULQ 32(SI)
58	ADDQ AX,CX
59	ADCQ DX,R8
60	MOVQ 16(SI),AX
61	MULQ 16(SI)
62	ADDQ AX,R15
63	ADCQ DX,BX
64	MOVQ 16(SI),DX
65	IMUL3Q $38,DX,AX
66	MULQ 24(SI)
67	ADDQ AX,CX
68	ADCQ DX,R8
69	MOVQ 16(SI),DX
70	IMUL3Q $38,DX,AX
71	MULQ 32(SI)
72	ADDQ AX,R9
73	ADCQ DX,R10
74	MOVQ 24(SI),DX
75	IMUL3Q $19,DX,AX
76	MULQ 24(SI)
77	ADDQ AX,R9
78	ADCQ DX,R10
79	MOVQ 24(SI),DX
80	IMUL3Q $38,DX,AX
81	MULQ 32(SI)
82	ADDQ AX,R11
83	ADCQ DX,R12
84	MOVQ 32(SI),DX
85	IMUL3Q $19,DX,AX
86	MULQ 32(SI)
87	ADDQ AX,R13
88	ADCQ DX,R14
89	MOVQ $REDMASK51,SI
90	SHLQ $13,R8:CX
91	ANDQ SI,CX
92	SHLQ $13,R10:R9
93	ANDQ SI,R9
94	ADDQ R8,R9
95	SHLQ $13,R12:R11
96	ANDQ SI,R11
97	ADDQ R10,R11
98	SHLQ $13,R14:R13
99	ANDQ SI,R13
100	ADDQ R12,R13
101	SHLQ $13,BX:R15
102	ANDQ SI,R15
103	ADDQ R14,R15
104	IMUL3Q $19,BX,DX
105	ADDQ DX,CX
106	MOVQ CX,DX
107	SHRQ $51,DX
108	ADDQ R9,DX
109	ANDQ SI,CX
110	MOVQ DX,R8
111	SHRQ $51,DX
112	ADDQ R11,DX
113	ANDQ SI,R8
114	MOVQ DX,R9
115	SHRQ $51,DX
116	ADDQ R13,DX
117	ANDQ SI,R9
118	MOVQ DX,AX
119	SHRQ $51,DX
120	ADDQ R15,DX
121	ANDQ SI,AX
122	MOVQ DX,R10
123	SHRQ $51,DX
124	IMUL3Q $19,DX,DX
125	ADDQ DX,CX
126	ANDQ SI,R10
127	MOVQ CX,0(DI)
128	MOVQ R8,8(DI)
129	MOVQ R9,16(DI)
130	MOVQ AX,24(DI)
131	MOVQ R10,32(DI)
132	RET
133