• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 mul(dest, a, b *[5]uint64)
13TEXT ·mul(SB),0,$16-24
14	MOVQ dest+0(FP), DI
15	MOVQ a+8(FP), SI
16	MOVQ b+16(FP), DX
17
18	MOVQ DX,CX
19	MOVQ 24(SI),DX
20	IMUL3Q $19,DX,AX
21	MOVQ AX,0(SP)
22	MULQ 16(CX)
23	MOVQ AX,R8
24	MOVQ DX,R9
25	MOVQ 32(SI),DX
26	IMUL3Q $19,DX,AX
27	MOVQ AX,8(SP)
28	MULQ 8(CX)
29	ADDQ AX,R8
30	ADCQ DX,R9
31	MOVQ 0(SI),AX
32	MULQ 0(CX)
33	ADDQ AX,R8
34	ADCQ DX,R9
35	MOVQ 0(SI),AX
36	MULQ 8(CX)
37	MOVQ AX,R10
38	MOVQ DX,R11
39	MOVQ 0(SI),AX
40	MULQ 16(CX)
41	MOVQ AX,R12
42	MOVQ DX,R13
43	MOVQ 0(SI),AX
44	MULQ 24(CX)
45	MOVQ AX,R14
46	MOVQ DX,R15
47	MOVQ 0(SI),AX
48	MULQ 32(CX)
49	MOVQ AX,BX
50	MOVQ DX,BP
51	MOVQ 8(SI),AX
52	MULQ 0(CX)
53	ADDQ AX,R10
54	ADCQ DX,R11
55	MOVQ 8(SI),AX
56	MULQ 8(CX)
57	ADDQ AX,R12
58	ADCQ DX,R13
59	MOVQ 8(SI),AX
60	MULQ 16(CX)
61	ADDQ AX,R14
62	ADCQ DX,R15
63	MOVQ 8(SI),AX
64	MULQ 24(CX)
65	ADDQ AX,BX
66	ADCQ DX,BP
67	MOVQ 8(SI),DX
68	IMUL3Q $19,DX,AX
69	MULQ 32(CX)
70	ADDQ AX,R8
71	ADCQ DX,R9
72	MOVQ 16(SI),AX
73	MULQ 0(CX)
74	ADDQ AX,R12
75	ADCQ DX,R13
76	MOVQ 16(SI),AX
77	MULQ 8(CX)
78	ADDQ AX,R14
79	ADCQ DX,R15
80	MOVQ 16(SI),AX
81	MULQ 16(CX)
82	ADDQ AX,BX
83	ADCQ DX,BP
84	MOVQ 16(SI),DX
85	IMUL3Q $19,DX,AX
86	MULQ 24(CX)
87	ADDQ AX,R8
88	ADCQ DX,R9
89	MOVQ 16(SI),DX
90	IMUL3Q $19,DX,AX
91	MULQ 32(CX)
92	ADDQ AX,R10
93	ADCQ DX,R11
94	MOVQ 24(SI),AX
95	MULQ 0(CX)
96	ADDQ AX,R14
97	ADCQ DX,R15
98	MOVQ 24(SI),AX
99	MULQ 8(CX)
100	ADDQ AX,BX
101	ADCQ DX,BP
102	MOVQ 0(SP),AX
103	MULQ 24(CX)
104	ADDQ AX,R10
105	ADCQ DX,R11
106	MOVQ 0(SP),AX
107	MULQ 32(CX)
108	ADDQ AX,R12
109	ADCQ DX,R13
110	MOVQ 32(SI),AX
111	MULQ 0(CX)
112	ADDQ AX,BX
113	ADCQ DX,BP
114	MOVQ 8(SP),AX
115	MULQ 16(CX)
116	ADDQ AX,R10
117	ADCQ DX,R11
118	MOVQ 8(SP),AX
119	MULQ 24(CX)
120	ADDQ AX,R12
121	ADCQ DX,R13
122	MOVQ 8(SP),AX
123	MULQ 32(CX)
124	ADDQ AX,R14
125	ADCQ DX,R15
126	MOVQ $REDMASK51,SI
127	SHLQ $13,R9:R8
128	ANDQ SI,R8
129	SHLQ $13,R11:R10
130	ANDQ SI,R10
131	ADDQ R9,R10
132	SHLQ $13,R13:R12
133	ANDQ SI,R12
134	ADDQ R11,R12
135	SHLQ $13,R15:R14
136	ANDQ SI,R14
137	ADDQ R13,R14
138	SHLQ $13,BP:BX
139	ANDQ SI,BX
140	ADDQ R15,BX
141	IMUL3Q $19,BP,DX
142	ADDQ DX,R8
143	MOVQ R8,DX
144	SHRQ $51,DX
145	ADDQ R10,DX
146	MOVQ DX,CX
147	SHRQ $51,DX
148	ANDQ SI,R8
149	ADDQ R12,DX
150	MOVQ DX,R9
151	SHRQ $51,DX
152	ANDQ SI,CX
153	ADDQ R14,DX
154	MOVQ DX,AX
155	SHRQ $51,DX
156	ANDQ SI,R9
157	ADDQ BX,DX
158	MOVQ DX,R10
159	SHRQ $51,DX
160	ANDQ SI,AX
161	IMUL3Q $19,DX,DX
162	ADDQ DX,R8
163	ANDQ SI,R10
164	MOVQ R8,0(DI)
165	MOVQ CX,8(DI)
166	MOVQ R9,16(DI)
167	MOVQ AX,24(DI)
168	MOVQ R10,32(DI)
169	RET
170