1// +build !noasm
2// +build !gccgo
3
4// Generated by PeachPy 0.2.0 from metro.py
5
6// func Hash64(buffer_base uintptr, buffer_len int64, buffer_cap int64, seed uint64) uint64
7TEXT ·Hash64(SB),4,$0-40
8	MOVQ seed+24(FP), AX
9	MOVQ buffer_base+0(FP), BX
10	MOVQ buffer_len+8(FP), CX
11	MOVQ $3603962101, DX
12	IMULQ DX, AX
13	MOVQ $5961697176435608501, DX
14	ADDQ DX, AX
15	CMPQ CX, $32
16	JLT after32
17	MOVQ AX, DX
18	MOVQ AX, DI
19	MOVQ AX, SI
20	MOVQ AX, BP
21loop_begin:
22		MOVQ 0(BX), R8
23		MOVQ $3603962101, R9
24		IMULQ R9, R8
25		ADDQ R8, DX
26		RORQ $29, DX
27		ADDQ SI, DX
28		MOVQ 8(BX), R8
29		MOVQ $2729050939, R9
30		IMULQ R9, R8
31		ADDQ R8, DI
32		RORQ $29, DI
33		ADDQ BP, DI
34		MOVQ 16(BX), R8
35		MOVQ $1654206401, R9
36		IMULQ R9, R8
37		ADDQ R8, SI
38		RORQ $29, SI
39		ADDQ DX, SI
40		MOVQ 24(BX), R8
41		MOVQ $817650473, R9
42		IMULQ R9, R8
43		ADDQ R8, BP
44		RORQ $29, BP
45		ADDQ DI, BP
46		ADDQ $32, BX
47		SUBQ $32, CX
48		CMPQ CX, $32
49		JGE loop_begin
50	MOVQ DX, R8
51	ADDQ BP, R8
52	MOVQ $3603962101, R9
53	IMULQ R9, R8
54	ADDQ DI, R8
55	RORQ $37, R8
56	MOVQ $2729050939, R9
57	IMULQ R9, R8
58	XORQ R8, SI
59	MOVQ DI, R8
60	ADDQ SI, R8
61	MOVQ $2729050939, R9
62	IMULQ R9, R8
63	ADDQ DX, R8
64	RORQ $37, R8
65	MOVQ $3603962101, R9
66	IMULQ R9, R8
67	XORQ R8, BP
68	MOVQ DX, R8
69	ADDQ SI, R8
70	MOVQ $3603962101, R9
71	IMULQ R9, R8
72	ADDQ BP, R8
73	RORQ $37, R8
74	MOVQ $2729050939, R9
75	IMULQ R9, R8
76	XORQ R8, DX
77	MOVQ DI, R8
78	ADDQ BP, R8
79	MOVQ $2729050939, BP
80	IMULQ BP, R8
81	ADDQ SI, R8
82	RORQ $37, R8
83	MOVQ $3603962101, SI
84	IMULQ SI, R8
85	XORQ R8, DI
86	XORQ DI, DX
87	ADDQ DX, AX
88after32:
89	CMPQ CX, $16
90	JLT after16
91	MOVQ 0(BX), DX
92	MOVQ $1654206401, DI
93	IMULQ DI, DX
94	ADDQ AX, DX
95	ADDQ $8, BX
96	SUBQ $8, CX
97	RORQ $29, DX
98	MOVQ $817650473, DI
99	IMULQ DI, DX
100	MOVQ 0(BX), DI
101	MOVQ $1654206401, SI
102	IMULQ SI, DI
103	ADDQ AX, DI
104	ADDQ $8, BX
105	SUBQ $8, CX
106	RORQ $29, DI
107	MOVQ $817650473, SI
108	IMULQ SI, DI
109	MOVQ DX, SI
110	MOVQ $3603962101, BP
111	IMULQ BP, SI
112	RORQ $21, SI
113	ADDQ DI, SI
114	XORQ SI, DX
115	MOVQ DI, SI
116	MOVQ $817650473, BP
117	IMULQ BP, SI
118	RORQ $21, SI
119	ADDQ DX, SI
120	XORQ SI, DI
121	ADDQ DI, AX
122after16:
123	CMPQ CX, $8
124	JLT after8
125	MOVQ 0(BX), DX
126	MOVQ $817650473, DI
127	IMULQ DI, DX
128	ADDQ DX, AX
129	ADDQ $8, BX
130	SUBQ $8, CX
131	MOVQ AX, DX
132	RORQ $55, DX
133	MOVQ $2729050939, DI
134	IMULQ DI, DX
135	XORQ DX, AX
136after8:
137	CMPQ CX, $4
138	JLT after4
139	XORQ DX, DX
140	MOVL 0(BX), DX
141	MOVQ $817650473, DI
142	IMULQ DI, DX
143	ADDQ DX, AX
144	ADDQ $4, BX
145	SUBQ $4, CX
146	MOVQ AX, DX
147	RORQ $26, DX
148	MOVQ $2729050939, DI
149	IMULQ DI, DX
150	XORQ DX, AX
151after4:
152	CMPQ CX, $2
153	JLT after2
154	XORQ DX, DX
155	MOVW 0(BX), DX
156	MOVQ $817650473, DI
157	IMULQ DI, DX
158	ADDQ DX, AX
159	ADDQ $2, BX
160	SUBQ $2, CX
161	MOVQ AX, DX
162	RORQ $48, DX
163	MOVQ $2729050939, DI
164	IMULQ DI, DX
165	XORQ DX, AX
166after2:
167	CMPQ CX, $1
168	JLT after1
169	MOVBQZX 0(BX), BX
170	MOVQ $817650473, CX
171	IMULQ CX, BX
172	ADDQ BX, AX
173	MOVQ AX, BX
174	RORQ $37, BX
175	MOVQ $2729050939, CX
176	IMULQ CX, BX
177	XORQ BX, AX
178after1:
179	MOVQ AX, BX
180	RORQ $28, BX
181	XORQ BX, AX
182	MOVQ $3603962101, BX
183	IMULQ BX, AX
184	MOVQ AX, BX
185	RORQ $29, BX
186	XORQ BX, AX
187	MOVQ AX, ret+32(FP)
188	RET
189
190// func Hash64Str(buffer_base uintptr, buffer_len int64, seed uint64) uint64
191TEXT ·Hash64Str(SB),4,$0-32
192	MOVQ seed+16(FP), AX
193	MOVQ buffer_base+0(FP), BX
194	MOVQ buffer_len+8(FP), CX
195	MOVQ $3603962101, DX
196	IMULQ DX, AX
197	MOVQ $5961697176435608501, DX
198	ADDQ DX, AX
199	CMPQ CX, $32
200	JLT after32
201	MOVQ AX, DX
202	MOVQ AX, DI
203	MOVQ AX, SI
204	MOVQ AX, BP
205loop_begin:
206		MOVQ 0(BX), R8
207		MOVQ $3603962101, R9
208		IMULQ R9, R8
209		ADDQ R8, DX
210		RORQ $29, DX
211		ADDQ SI, DX
212		MOVQ 8(BX), R8
213		MOVQ $2729050939, R9
214		IMULQ R9, R8
215		ADDQ R8, DI
216		RORQ $29, DI
217		ADDQ BP, DI
218		MOVQ 16(BX), R8
219		MOVQ $1654206401, R9
220		IMULQ R9, R8
221		ADDQ R8, SI
222		RORQ $29, SI
223		ADDQ DX, SI
224		MOVQ 24(BX), R8
225		MOVQ $817650473, R9
226		IMULQ R9, R8
227		ADDQ R8, BP
228		RORQ $29, BP
229		ADDQ DI, BP
230		ADDQ $32, BX
231		SUBQ $32, CX
232		CMPQ CX, $32
233		JGE loop_begin
234	MOVQ DX, R8
235	ADDQ BP, R8
236	MOVQ $3603962101, R9
237	IMULQ R9, R8
238	ADDQ DI, R8
239	RORQ $37, R8
240	MOVQ $2729050939, R9
241	IMULQ R9, R8
242	XORQ R8, SI
243	MOVQ DI, R8
244	ADDQ SI, R8
245	MOVQ $2729050939, R9
246	IMULQ R9, R8
247	ADDQ DX, R8
248	RORQ $37, R8
249	MOVQ $3603962101, R9
250	IMULQ R9, R8
251	XORQ R8, BP
252	MOVQ DX, R8
253	ADDQ SI, R8
254	MOVQ $3603962101, R9
255	IMULQ R9, R8
256	ADDQ BP, R8
257	RORQ $37, R8
258	MOVQ $2729050939, R9
259	IMULQ R9, R8
260	XORQ R8, DX
261	MOVQ DI, R8
262	ADDQ BP, R8
263	MOVQ $2729050939, BP
264	IMULQ BP, R8
265	ADDQ SI, R8
266	RORQ $37, R8
267	MOVQ $3603962101, SI
268	IMULQ SI, R8
269	XORQ R8, DI
270	XORQ DI, DX
271	ADDQ DX, AX
272after32:
273	CMPQ CX, $16
274	JLT after16
275	MOVQ 0(BX), DX
276	MOVQ $1654206401, DI
277	IMULQ DI, DX
278	ADDQ AX, DX
279	ADDQ $8, BX
280	SUBQ $8, CX
281	RORQ $29, DX
282	MOVQ $817650473, DI
283	IMULQ DI, DX
284	MOVQ 0(BX), DI
285	MOVQ $1654206401, SI
286	IMULQ SI, DI
287	ADDQ AX, DI
288	ADDQ $8, BX
289	SUBQ $8, CX
290	RORQ $29, DI
291	MOVQ $817650473, SI
292	IMULQ SI, DI
293	MOVQ DX, SI
294	MOVQ $3603962101, BP
295	IMULQ BP, SI
296	RORQ $21, SI
297	ADDQ DI, SI
298	XORQ SI, DX
299	MOVQ DI, SI
300	MOVQ $817650473, BP
301	IMULQ BP, SI
302	RORQ $21, SI
303	ADDQ DX, SI
304	XORQ SI, DI
305	ADDQ DI, AX
306after16:
307	CMPQ CX, $8
308	JLT after8
309	MOVQ 0(BX), DX
310	MOVQ $817650473, DI
311	IMULQ DI, DX
312	ADDQ DX, AX
313	ADDQ $8, BX
314	SUBQ $8, CX
315	MOVQ AX, DX
316	RORQ $55, DX
317	MOVQ $2729050939, DI
318	IMULQ DI, DX
319	XORQ DX, AX
320after8:
321	CMPQ CX, $4
322	JLT after4
323	XORQ DX, DX
324	MOVL 0(BX), DX
325	MOVQ $817650473, DI
326	IMULQ DI, DX
327	ADDQ DX, AX
328	ADDQ $4, BX
329	SUBQ $4, CX
330	MOVQ AX, DX
331	RORQ $26, DX
332	MOVQ $2729050939, DI
333	IMULQ DI, DX
334	XORQ DX, AX
335after4:
336	CMPQ CX, $2
337	JLT after2
338	XORQ DX, DX
339	MOVW 0(BX), DX
340	MOVQ $817650473, DI
341	IMULQ DI, DX
342	ADDQ DX, AX
343	ADDQ $2, BX
344	SUBQ $2, CX
345	MOVQ AX, DX
346	RORQ $48, DX
347	MOVQ $2729050939, DI
348	IMULQ DI, DX
349	XORQ DX, AX
350after2:
351	CMPQ CX, $1
352	JLT after1
353	MOVBQZX 0(BX), BX
354	MOVQ $817650473, CX
355	IMULQ CX, BX
356	ADDQ BX, AX
357	MOVQ AX, BX
358	RORQ $37, BX
359	MOVQ $2729050939, CX
360	IMULQ CX, BX
361	XORQ BX, AX
362after1:
363	MOVQ AX, BX
364	RORQ $28, BX
365	XORQ BX, AX
366	MOVQ $3603962101, BX
367	IMULQ BX, AX
368	MOVQ AX, BX
369	RORQ $29, BX
370	XORQ BX, AX
371	MOVQ AX, ret+24(FP)
372	RET
373