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