xref: /freebsd/sys/crypto/openssl/amd64/keccak1600-x86_64.S (revision 924226fba12cc9a228c73b956e1b7fa24c60b055)
1/* $FreeBSD$ */
2/* Do not modify. This file is auto-generated from keccak1600-x86_64.pl. */
3.text
4
5.type	__KeccakF1600,@function
6.align	32
7__KeccakF1600:
8.cfi_startproc
9	movq	60(%rdi),%rax
10	movq	68(%rdi),%rbx
11	movq	76(%rdi),%rcx
12	movq	84(%rdi),%rdx
13	movq	92(%rdi),%rbp
14	jmp	.Loop
15
16.align	32
17.Loop:
18	movq	-100(%rdi),%r8
19	movq	-52(%rdi),%r9
20	movq	-4(%rdi),%r10
21	movq	44(%rdi),%r11
22
23	xorq	-84(%rdi),%rcx
24	xorq	-76(%rdi),%rdx
25	xorq	%r8,%rax
26	xorq	-92(%rdi),%rbx
27	xorq	-44(%rdi),%rcx
28	xorq	-60(%rdi),%rax
29	movq	%rbp,%r12
30	xorq	-68(%rdi),%rbp
31
32	xorq	%r10,%rcx
33	xorq	-20(%rdi),%rax
34	xorq	-36(%rdi),%rdx
35	xorq	%r9,%rbx
36	xorq	-28(%rdi),%rbp
37
38	xorq	36(%rdi),%rcx
39	xorq	20(%rdi),%rax
40	xorq	4(%rdi),%rdx
41	xorq	-12(%rdi),%rbx
42	xorq	12(%rdi),%rbp
43
44	movq	%rcx,%r13
45	rolq	$1,%rcx
46	xorq	%rax,%rcx
47	xorq	%r11,%rdx
48
49	rolq	$1,%rax
50	xorq	%rdx,%rax
51	xorq	28(%rdi),%rbx
52
53	rolq	$1,%rdx
54	xorq	%rbx,%rdx
55	xorq	52(%rdi),%rbp
56
57	rolq	$1,%rbx
58	xorq	%rbp,%rbx
59
60	rolq	$1,%rbp
61	xorq	%r13,%rbp
62	xorq	%rcx,%r9
63	xorq	%rdx,%r10
64	rolq	$44,%r9
65	xorq	%rbp,%r11
66	xorq	%rax,%r12
67	rolq	$43,%r10
68	xorq	%rbx,%r8
69	movq	%r9,%r13
70	rolq	$21,%r11
71	orq	%r10,%r9
72	xorq	%r8,%r9
73	rolq	$14,%r12
74
75	xorq	(%r15),%r9
76	leaq	8(%r15),%r15
77
78	movq	%r12,%r14
79	andq	%r11,%r12
80	movq	%r9,-100(%rsi)
81	xorq	%r10,%r12
82	notq	%r10
83	movq	%r12,-84(%rsi)
84
85	orq	%r11,%r10
86	movq	76(%rdi),%r12
87	xorq	%r13,%r10
88	movq	%r10,-92(%rsi)
89
90	andq	%r8,%r13
91	movq	-28(%rdi),%r9
92	xorq	%r14,%r13
93	movq	-20(%rdi),%r10
94	movq	%r13,-68(%rsi)
95
96	orq	%r8,%r14
97	movq	-76(%rdi),%r8
98	xorq	%r11,%r14
99	movq	28(%rdi),%r11
100	movq	%r14,-76(%rsi)
101
102
103	xorq	%rbp,%r8
104	xorq	%rdx,%r12
105	rolq	$28,%r8
106	xorq	%rcx,%r11
107	xorq	%rax,%r9
108	rolq	$61,%r12
109	rolq	$45,%r11
110	xorq	%rbx,%r10
111	rolq	$20,%r9
112	movq	%r8,%r13
113	orq	%r12,%r8
114	rolq	$3,%r10
115
116	xorq	%r11,%r8
117	movq	%r8,-36(%rsi)
118
119	movq	%r9,%r14
120	andq	%r13,%r9
121	movq	-92(%rdi),%r8
122	xorq	%r12,%r9
123	notq	%r12
124	movq	%r9,-28(%rsi)
125
126	orq	%r11,%r12
127	movq	-44(%rdi),%r9
128	xorq	%r10,%r12
129	movq	%r12,-44(%rsi)
130
131	andq	%r10,%r11
132	movq	60(%rdi),%r12
133	xorq	%r14,%r11
134	movq	%r11,-52(%rsi)
135
136	orq	%r10,%r14
137	movq	4(%rdi),%r10
138	xorq	%r13,%r14
139	movq	52(%rdi),%r11
140	movq	%r14,-60(%rsi)
141
142
143	xorq	%rbp,%r10
144	xorq	%rax,%r11
145	rolq	$25,%r10
146	xorq	%rdx,%r9
147	rolq	$8,%r11
148	xorq	%rbx,%r12
149	rolq	$6,%r9
150	xorq	%rcx,%r8
151	rolq	$18,%r12
152	movq	%r10,%r13
153	andq	%r11,%r10
154	rolq	$1,%r8
155
156	notq	%r11
157	xorq	%r9,%r10
158	movq	%r10,-12(%rsi)
159
160	movq	%r12,%r14
161	andq	%r11,%r12
162	movq	-12(%rdi),%r10
163	xorq	%r13,%r12
164	movq	%r12,-4(%rsi)
165
166	orq	%r9,%r13
167	movq	84(%rdi),%r12
168	xorq	%r8,%r13
169	movq	%r13,-20(%rsi)
170
171	andq	%r8,%r9
172	xorq	%r14,%r9
173	movq	%r9,12(%rsi)
174
175	orq	%r8,%r14
176	movq	-60(%rdi),%r9
177	xorq	%r11,%r14
178	movq	36(%rdi),%r11
179	movq	%r14,4(%rsi)
180
181
182	movq	-68(%rdi),%r8
183
184	xorq	%rcx,%r10
185	xorq	%rdx,%r11
186	rolq	$10,%r10
187	xorq	%rbx,%r9
188	rolq	$15,%r11
189	xorq	%rbp,%r12
190	rolq	$36,%r9
191	xorq	%rax,%r8
192	rolq	$56,%r12
193	movq	%r10,%r13
194	orq	%r11,%r10
195	rolq	$27,%r8
196
197	notq	%r11
198	xorq	%r9,%r10
199	movq	%r10,28(%rsi)
200
201	movq	%r12,%r14
202	orq	%r11,%r12
203	xorq	%r13,%r12
204	movq	%r12,36(%rsi)
205
206	andq	%r9,%r13
207	xorq	%r8,%r13
208	movq	%r13,20(%rsi)
209
210	orq	%r8,%r9
211	xorq	%r14,%r9
212	movq	%r9,52(%rsi)
213
214	andq	%r14,%r8
215	xorq	%r11,%r8
216	movq	%r8,44(%rsi)
217
218
219	xorq	-84(%rdi),%rdx
220	xorq	-36(%rdi),%rbp
221	rolq	$62,%rdx
222	xorq	68(%rdi),%rcx
223	rolq	$55,%rbp
224	xorq	12(%rdi),%rax
225	rolq	$2,%rcx
226	xorq	20(%rdi),%rbx
227	xchgq	%rsi,%rdi
228	rolq	$39,%rax
229	rolq	$41,%rbx
230	movq	%rdx,%r13
231	andq	%rbp,%rdx
232	notq	%rbp
233	xorq	%rcx,%rdx
234	movq	%rdx,92(%rdi)
235
236	movq	%rax,%r14
237	andq	%rbp,%rax
238	xorq	%r13,%rax
239	movq	%rax,60(%rdi)
240
241	orq	%rcx,%r13
242	xorq	%rbx,%r13
243	movq	%r13,84(%rdi)
244
245	andq	%rbx,%rcx
246	xorq	%r14,%rcx
247	movq	%rcx,76(%rdi)
248
249	orq	%r14,%rbx
250	xorq	%rbp,%rbx
251	movq	%rbx,68(%rdi)
252
253	movq	%rdx,%rbp
254	movq	%r13,%rdx
255
256	testq	$255,%r15
257	jnz	.Loop
258
259	leaq	-192(%r15),%r15
260	.byte	0xf3,0xc3
261.cfi_endproc
262.size	__KeccakF1600,.-__KeccakF1600
263
264.type	KeccakF1600,@function
265.align	32
266KeccakF1600:
267.cfi_startproc
268	pushq	%rbx
269.cfi_adjust_cfa_offset	8
270.cfi_offset	%rbx,-16
271	pushq	%rbp
272.cfi_adjust_cfa_offset	8
273.cfi_offset	%rbp,-24
274	pushq	%r12
275.cfi_adjust_cfa_offset	8
276.cfi_offset	%r12,-32
277	pushq	%r13
278.cfi_adjust_cfa_offset	8
279.cfi_offset	%r13,-40
280	pushq	%r14
281.cfi_adjust_cfa_offset	8
282.cfi_offset	%r14,-48
283	pushq	%r15
284.cfi_adjust_cfa_offset	8
285.cfi_offset	%r15,-56
286
287	leaq	100(%rdi),%rdi
288	subq	$200,%rsp
289.cfi_adjust_cfa_offset	200
290
291	notq	-92(%rdi)
292	notq	-84(%rdi)
293	notq	-36(%rdi)
294	notq	-4(%rdi)
295	notq	36(%rdi)
296	notq	60(%rdi)
297
298	leaq	iotas(%rip),%r15
299	leaq	100(%rsp),%rsi
300
301	call	__KeccakF1600
302
303	notq	-92(%rdi)
304	notq	-84(%rdi)
305	notq	-36(%rdi)
306	notq	-4(%rdi)
307	notq	36(%rdi)
308	notq	60(%rdi)
309	leaq	-100(%rdi),%rdi
310
311	addq	$200,%rsp
312.cfi_adjust_cfa_offset	-200
313
314	popq	%r15
315.cfi_adjust_cfa_offset	-8
316.cfi_restore	%r15
317	popq	%r14
318.cfi_adjust_cfa_offset	-8
319.cfi_restore	%r14
320	popq	%r13
321.cfi_adjust_cfa_offset	-8
322.cfi_restore	%r13
323	popq	%r12
324.cfi_adjust_cfa_offset	-8
325.cfi_restore	%r12
326	popq	%rbp
327.cfi_adjust_cfa_offset	-8
328.cfi_restore	%rbp
329	popq	%rbx
330.cfi_adjust_cfa_offset	-8
331.cfi_restore	%rbx
332	.byte	0xf3,0xc3
333.cfi_endproc
334.size	KeccakF1600,.-KeccakF1600
335.globl	SHA3_absorb
336.type	SHA3_absorb,@function
337.align	32
338SHA3_absorb:
339.cfi_startproc
340	pushq	%rbx
341.cfi_adjust_cfa_offset	8
342.cfi_offset	%rbx,-16
343	pushq	%rbp
344.cfi_adjust_cfa_offset	8
345.cfi_offset	%rbp,-24
346	pushq	%r12
347.cfi_adjust_cfa_offset	8
348.cfi_offset	%r12,-32
349	pushq	%r13
350.cfi_adjust_cfa_offset	8
351.cfi_offset	%r13,-40
352	pushq	%r14
353.cfi_adjust_cfa_offset	8
354.cfi_offset	%r14,-48
355	pushq	%r15
356.cfi_adjust_cfa_offset	8
357.cfi_offset	%r15,-56
358
359	leaq	100(%rdi),%rdi
360	subq	$232,%rsp
361.cfi_adjust_cfa_offset	232
362
363	movq	%rsi,%r9
364	leaq	100(%rsp),%rsi
365
366	notq	-92(%rdi)
367	notq	-84(%rdi)
368	notq	-36(%rdi)
369	notq	-4(%rdi)
370	notq	36(%rdi)
371	notq	60(%rdi)
372	leaq	iotas(%rip),%r15
373
374	movq	%rcx,216-100(%rsi)
375
376.Loop_absorb:
377	cmpq	%rcx,%rdx
378	jc	.Ldone_absorb
379
380	shrq	$3,%rcx
381	leaq	-100(%rdi),%r8
382
383.Lblock_absorb:
384	movq	(%r9),%rax
385	leaq	8(%r9),%r9
386	xorq	(%r8),%rax
387	leaq	8(%r8),%r8
388	subq	$8,%rdx
389	movq	%rax,-8(%r8)
390	subq	$1,%rcx
391	jnz	.Lblock_absorb
392
393	movq	%r9,200-100(%rsi)
394	movq	%rdx,208-100(%rsi)
395	call	__KeccakF1600
396	movq	200-100(%rsi),%r9
397	movq	208-100(%rsi),%rdx
398	movq	216-100(%rsi),%rcx
399	jmp	.Loop_absorb
400
401.align	32
402.Ldone_absorb:
403	movq	%rdx,%rax
404
405	notq	-92(%rdi)
406	notq	-84(%rdi)
407	notq	-36(%rdi)
408	notq	-4(%rdi)
409	notq	36(%rdi)
410	notq	60(%rdi)
411
412	addq	$232,%rsp
413.cfi_adjust_cfa_offset	-232
414
415	popq	%r15
416.cfi_adjust_cfa_offset	-8
417.cfi_restore	%r15
418	popq	%r14
419.cfi_adjust_cfa_offset	-8
420.cfi_restore	%r14
421	popq	%r13
422.cfi_adjust_cfa_offset	-8
423.cfi_restore	%r13
424	popq	%r12
425.cfi_adjust_cfa_offset	-8
426.cfi_restore	%r12
427	popq	%rbp
428.cfi_adjust_cfa_offset	-8
429.cfi_restore	%rbp
430	popq	%rbx
431.cfi_adjust_cfa_offset	-8
432.cfi_restore	%rbx
433	.byte	0xf3,0xc3
434.cfi_endproc
435.size	SHA3_absorb,.-SHA3_absorb
436.globl	SHA3_squeeze
437.type	SHA3_squeeze,@function
438.align	32
439SHA3_squeeze:
440.cfi_startproc
441	pushq	%r12
442.cfi_adjust_cfa_offset	8
443.cfi_offset	%r12,-16
444	pushq	%r13
445.cfi_adjust_cfa_offset	8
446.cfi_offset	%r13,-24
447	pushq	%r14
448.cfi_adjust_cfa_offset	8
449.cfi_offset	%r14,-32
450
451	shrq	$3,%rcx
452	movq	%rdi,%r8
453	movq	%rsi,%r12
454	movq	%rdx,%r13
455	movq	%rcx,%r14
456	jmp	.Loop_squeeze
457
458.align	32
459.Loop_squeeze:
460	cmpq	$8,%r13
461	jb	.Ltail_squeeze
462
463	movq	(%r8),%rax
464	leaq	8(%r8),%r8
465	movq	%rax,(%r12)
466	leaq	8(%r12),%r12
467	subq	$8,%r13
468	jz	.Ldone_squeeze
469
470	subq	$1,%rcx
471	jnz	.Loop_squeeze
472
473	call	KeccakF1600
474	movq	%rdi,%r8
475	movq	%r14,%rcx
476	jmp	.Loop_squeeze
477
478.Ltail_squeeze:
479	movq	%r8,%rsi
480	movq	%r12,%rdi
481	movq	%r13,%rcx
482.byte	0xf3,0xa4
483
484.Ldone_squeeze:
485	popq	%r14
486.cfi_adjust_cfa_offset	-8
487.cfi_restore	%r14
488	popq	%r13
489.cfi_adjust_cfa_offset	-8
490.cfi_restore	%r13
491	popq	%r12
492.cfi_adjust_cfa_offset	-8
493.cfi_restore	%r13
494	.byte	0xf3,0xc3
495.cfi_endproc
496.size	SHA3_squeeze,.-SHA3_squeeze
497.align	256
498.quad	0,0,0,0,0,0,0,0
499.type	iotas,@object
500iotas:
501.quad	0x0000000000000001
502.quad	0x0000000000008082
503.quad	0x800000000000808a
504.quad	0x8000000080008000
505.quad	0x000000000000808b
506.quad	0x0000000080000001
507.quad	0x8000000080008081
508.quad	0x8000000000008009
509.quad	0x000000000000008a
510.quad	0x0000000000000088
511.quad	0x0000000080008009
512.quad	0x000000008000000a
513.quad	0x000000008000808b
514.quad	0x800000000000008b
515.quad	0x8000000000008089
516.quad	0x8000000000008003
517.quad	0x8000000000008002
518.quad	0x8000000000000080
519.quad	0x000000000000800a
520.quad	0x800000008000000a
521.quad	0x8000000080008081
522.quad	0x8000000000008080
523.quad	0x0000000080000001
524.quad	0x8000000080008008
525.size	iotas,.-iotas
526.byte	75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
527