xref: /linux/arch/s390/crypto/chacha-s390.S (revision fd2527f2)
1b087dfabSPatrick Steuer/* SPDX-License-Identifier: GPL-2.0 */
2b087dfabSPatrick Steuer/*
3b087dfabSPatrick Steuer * Original implementation written by Andy Polyakov, @dot-asm.
4b087dfabSPatrick Steuer * This is an adaptation of the original code for kernel use.
5b087dfabSPatrick Steuer *
6b087dfabSPatrick Steuer * Copyright (C) 2006-2019 CRYPTOGAMS by <appro@openssl.org>. All Rights Reserved.
7b087dfabSPatrick Steuer */
8b087dfabSPatrick Steuer
9b087dfabSPatrick Steuer#include <linux/linkage.h>
10b087dfabSPatrick Steuer#include <asm/nospec-insn.h>
11*fd2527f2SHeiko Carstens#include <asm/fpu-insn.h>
12b087dfabSPatrick Steuer
13b087dfabSPatrick Steuer#define SP	%r15
14b087dfabSPatrick Steuer#define FRAME	(16 * 8 + 4 * 8)
15b087dfabSPatrick Steuer
16b087dfabSPatrick Steuer	.data
173e5e5107SHeiko Carstens	.balign	32
18b087dfabSPatrick Steuer
193e5e5107SHeiko CarstensSYM_DATA_START_LOCAL(sigma)
20b087dfabSPatrick Steuer	.long	0x61707865,0x3320646e,0x79622d32,0x6b206574	# endian-neutral
21b087dfabSPatrick Steuer	.long	1,0,0,0
22b087dfabSPatrick Steuer	.long	2,0,0,0
23b087dfabSPatrick Steuer	.long	3,0,0,0
24b087dfabSPatrick Steuer	.long	0x03020100,0x07060504,0x0b0a0908,0x0f0e0d0c	# byte swap
25b087dfabSPatrick Steuer
26b087dfabSPatrick Steuer	.long	0,1,2,3
27b087dfabSPatrick Steuer	.long	0x61707865,0x61707865,0x61707865,0x61707865	# smashed sigma
28b087dfabSPatrick Steuer	.long	0x3320646e,0x3320646e,0x3320646e,0x3320646e
29b087dfabSPatrick Steuer	.long	0x79622d32,0x79622d32,0x79622d32,0x79622d32
30b087dfabSPatrick Steuer	.long	0x6b206574,0x6b206574,0x6b206574,0x6b206574
313e5e5107SHeiko CarstensSYM_DATA_END(sigma)
32b087dfabSPatrick Steuer
33b087dfabSPatrick Steuer	.previous
34b087dfabSPatrick Steuer
35b087dfabSPatrick Steuer	GEN_BR_THUNK %r14
36b087dfabSPatrick Steuer
37b087dfabSPatrick Steuer	.text
38b087dfabSPatrick Steuer
39b087dfabSPatrick Steuer#############################################################################
40b087dfabSPatrick Steuer# void chacha20_vx_4x(u8 *out, counst u8 *inp, size_t len,
41b087dfabSPatrick Steuer#		      counst u32 *key, const u32 *counter)
42b087dfabSPatrick Steuer
43b087dfabSPatrick Steuer#define	OUT		%r2
44b087dfabSPatrick Steuer#define	INP		%r3
45b087dfabSPatrick Steuer#define	LEN		%r4
46b087dfabSPatrick Steuer#define	KEY		%r5
47b087dfabSPatrick Steuer#define	COUNTER		%r6
48b087dfabSPatrick Steuer
49b087dfabSPatrick Steuer#define BEPERM		%v31
50b087dfabSPatrick Steuer#define CTR		%v26
51b087dfabSPatrick Steuer
52b087dfabSPatrick Steuer#define K0		%v16
53b087dfabSPatrick Steuer#define K1		%v17
54b087dfabSPatrick Steuer#define K2		%v18
55b087dfabSPatrick Steuer#define K3		%v19
56b087dfabSPatrick Steuer
57b087dfabSPatrick Steuer#define XA0		%v0
58b087dfabSPatrick Steuer#define XA1		%v1
59b087dfabSPatrick Steuer#define XA2		%v2
60b087dfabSPatrick Steuer#define XA3		%v3
61b087dfabSPatrick Steuer
62b087dfabSPatrick Steuer#define XB0		%v4
63b087dfabSPatrick Steuer#define XB1		%v5
64b087dfabSPatrick Steuer#define XB2		%v6
65b087dfabSPatrick Steuer#define XB3		%v7
66b087dfabSPatrick Steuer
67b087dfabSPatrick Steuer#define XC0		%v8
68b087dfabSPatrick Steuer#define XC1		%v9
69b087dfabSPatrick Steuer#define XC2		%v10
70b087dfabSPatrick Steuer#define XC3		%v11
71b087dfabSPatrick Steuer
72b087dfabSPatrick Steuer#define XD0		%v12
73b087dfabSPatrick Steuer#define XD1		%v13
74b087dfabSPatrick Steuer#define XD2		%v14
75b087dfabSPatrick Steuer#define XD3		%v15
76b087dfabSPatrick Steuer
77b087dfabSPatrick Steuer#define XT0		%v27
78b087dfabSPatrick Steuer#define XT1		%v28
79b087dfabSPatrick Steuer#define XT2		%v29
80b087dfabSPatrick Steuer#define XT3		%v30
81b087dfabSPatrick Steuer
823e5e5107SHeiko CarstensSYM_FUNC_START(chacha20_vx_4x)
83b087dfabSPatrick Steuer	stmg	%r6,%r7,6*8(SP)
84b087dfabSPatrick Steuer
853e5e5107SHeiko Carstens	larl	%r7,sigma
86b087dfabSPatrick Steuer	lhi	%r0,10
87b087dfabSPatrick Steuer	lhi	%r1,0
88b087dfabSPatrick Steuer
89b087dfabSPatrick Steuer	VL	K0,0,,%r7		# load sigma
90b087dfabSPatrick Steuer	VL	K1,0,,KEY		# load key
91b087dfabSPatrick Steuer	VL	K2,16,,KEY
92b087dfabSPatrick Steuer	VL	K3,0,,COUNTER		# load counter
93b087dfabSPatrick Steuer
94b087dfabSPatrick Steuer	VL	BEPERM,0x40,,%r7
95b087dfabSPatrick Steuer	VL	CTR,0x50,,%r7
96b087dfabSPatrick Steuer
97b087dfabSPatrick Steuer	VLM	XA0,XA3,0x60,%r7,4	# load [smashed] sigma
98b087dfabSPatrick Steuer
99b087dfabSPatrick Steuer	VREPF	XB0,K1,0		# smash the key
100b087dfabSPatrick Steuer	VREPF	XB1,K1,1
101b087dfabSPatrick Steuer	VREPF	XB2,K1,2
102b087dfabSPatrick Steuer	VREPF	XB3,K1,3
103b087dfabSPatrick Steuer
104b087dfabSPatrick Steuer	VREPF	XD0,K3,0
105b087dfabSPatrick Steuer	VREPF	XD1,K3,1
106b087dfabSPatrick Steuer	VREPF	XD2,K3,2
107b087dfabSPatrick Steuer	VREPF	XD3,K3,3
108b087dfabSPatrick Steuer	VAF	XD0,XD0,CTR
109b087dfabSPatrick Steuer
110b087dfabSPatrick Steuer	VREPF	XC0,K2,0
111b087dfabSPatrick Steuer	VREPF	XC1,K2,1
112b087dfabSPatrick Steuer	VREPF	XC2,K2,2
113b087dfabSPatrick Steuer	VREPF	XC3,K2,3
114b087dfabSPatrick Steuer
115b087dfabSPatrick Steuer.Loop_4x:
116b087dfabSPatrick Steuer	VAF	XA0,XA0,XB0
117b087dfabSPatrick Steuer	VX	XD0,XD0,XA0
118b087dfabSPatrick Steuer	VERLLF	XD0,XD0,16
119b087dfabSPatrick Steuer
120b087dfabSPatrick Steuer	VAF	XA1,XA1,XB1
121b087dfabSPatrick Steuer	VX	XD1,XD1,XA1
122b087dfabSPatrick Steuer	VERLLF	XD1,XD1,16
123b087dfabSPatrick Steuer
124b087dfabSPatrick Steuer	VAF	XA2,XA2,XB2
125b087dfabSPatrick Steuer	VX	XD2,XD2,XA2
126b087dfabSPatrick Steuer	VERLLF	XD2,XD2,16
127b087dfabSPatrick Steuer
128b087dfabSPatrick Steuer	VAF	XA3,XA3,XB3
129b087dfabSPatrick Steuer	VX	XD3,XD3,XA3
130b087dfabSPatrick Steuer	VERLLF	XD3,XD3,16
131b087dfabSPatrick Steuer
132b087dfabSPatrick Steuer	VAF	XC0,XC0,XD0
133b087dfabSPatrick Steuer	VX	XB0,XB0,XC0
134b087dfabSPatrick Steuer	VERLLF	XB0,XB0,12
135b087dfabSPatrick Steuer
136b087dfabSPatrick Steuer	VAF	XC1,XC1,XD1
137b087dfabSPatrick Steuer	VX	XB1,XB1,XC1
138b087dfabSPatrick Steuer	VERLLF	XB1,XB1,12
139b087dfabSPatrick Steuer
140b087dfabSPatrick Steuer	VAF	XC2,XC2,XD2
141b087dfabSPatrick Steuer	VX	XB2,XB2,XC2
142b087dfabSPatrick Steuer	VERLLF	XB2,XB2,12
143b087dfabSPatrick Steuer
144b087dfabSPatrick Steuer	VAF	XC3,XC3,XD3
145b087dfabSPatrick Steuer	VX	XB3,XB3,XC3
146b087dfabSPatrick Steuer	VERLLF	XB3,XB3,12
147b087dfabSPatrick Steuer
148b087dfabSPatrick Steuer	VAF	XA0,XA0,XB0
149b087dfabSPatrick Steuer	VX	XD0,XD0,XA0
150b087dfabSPatrick Steuer	VERLLF	XD0,XD0,8
151b087dfabSPatrick Steuer
152b087dfabSPatrick Steuer	VAF	XA1,XA1,XB1
153b087dfabSPatrick Steuer	VX	XD1,XD1,XA1
154b087dfabSPatrick Steuer	VERLLF	XD1,XD1,8
155b087dfabSPatrick Steuer
156b087dfabSPatrick Steuer	VAF	XA2,XA2,XB2
157b087dfabSPatrick Steuer	VX	XD2,XD2,XA2
158b087dfabSPatrick Steuer	VERLLF	XD2,XD2,8
159b087dfabSPatrick Steuer
160b087dfabSPatrick Steuer	VAF	XA3,XA3,XB3
161b087dfabSPatrick Steuer	VX	XD3,XD3,XA3
162b087dfabSPatrick Steuer	VERLLF	XD3,XD3,8
163b087dfabSPatrick Steuer
164b087dfabSPatrick Steuer	VAF	XC0,XC0,XD0
165b087dfabSPatrick Steuer	VX	XB0,XB0,XC0
166b087dfabSPatrick Steuer	VERLLF	XB0,XB0,7
167b087dfabSPatrick Steuer
168b087dfabSPatrick Steuer	VAF	XC1,XC1,XD1
169b087dfabSPatrick Steuer	VX	XB1,XB1,XC1
170b087dfabSPatrick Steuer	VERLLF	XB1,XB1,7
171b087dfabSPatrick Steuer
172b087dfabSPatrick Steuer	VAF	XC2,XC2,XD2
173b087dfabSPatrick Steuer	VX	XB2,XB2,XC2
174b087dfabSPatrick Steuer	VERLLF	XB2,XB2,7
175b087dfabSPatrick Steuer
176b087dfabSPatrick Steuer	VAF	XC3,XC3,XD3
177b087dfabSPatrick Steuer	VX	XB3,XB3,XC3
178b087dfabSPatrick Steuer	VERLLF	XB3,XB3,7
179b087dfabSPatrick Steuer
180b087dfabSPatrick Steuer	VAF	XA0,XA0,XB1
181b087dfabSPatrick Steuer	VX	XD3,XD3,XA0
182b087dfabSPatrick Steuer	VERLLF	XD3,XD3,16
183b087dfabSPatrick Steuer
184b087dfabSPatrick Steuer	VAF	XA1,XA1,XB2
185b087dfabSPatrick Steuer	VX	XD0,XD0,XA1
186b087dfabSPatrick Steuer	VERLLF	XD0,XD0,16
187b087dfabSPatrick Steuer
188b087dfabSPatrick Steuer	VAF	XA2,XA2,XB3
189b087dfabSPatrick Steuer	VX	XD1,XD1,XA2
190b087dfabSPatrick Steuer	VERLLF	XD1,XD1,16
191b087dfabSPatrick Steuer
192b087dfabSPatrick Steuer	VAF	XA3,XA3,XB0
193b087dfabSPatrick Steuer	VX	XD2,XD2,XA3
194b087dfabSPatrick Steuer	VERLLF	XD2,XD2,16
195b087dfabSPatrick Steuer
196b087dfabSPatrick Steuer	VAF	XC2,XC2,XD3
197b087dfabSPatrick Steuer	VX	XB1,XB1,XC2
198b087dfabSPatrick Steuer	VERLLF	XB1,XB1,12
199b087dfabSPatrick Steuer
200b087dfabSPatrick Steuer	VAF	XC3,XC3,XD0
201b087dfabSPatrick Steuer	VX	XB2,XB2,XC3
202b087dfabSPatrick Steuer	VERLLF	XB2,XB2,12
203b087dfabSPatrick Steuer
204b087dfabSPatrick Steuer	VAF	XC0,XC0,XD1
205b087dfabSPatrick Steuer	VX	XB3,XB3,XC0
206b087dfabSPatrick Steuer	VERLLF	XB3,XB3,12
207b087dfabSPatrick Steuer
208b087dfabSPatrick Steuer	VAF	XC1,XC1,XD2
209b087dfabSPatrick Steuer	VX	XB0,XB0,XC1
210b087dfabSPatrick Steuer	VERLLF	XB0,XB0,12
211b087dfabSPatrick Steuer
212b087dfabSPatrick Steuer	VAF	XA0,XA0,XB1
213b087dfabSPatrick Steuer	VX	XD3,XD3,XA0
214b087dfabSPatrick Steuer	VERLLF	XD3,XD3,8
215b087dfabSPatrick Steuer
216b087dfabSPatrick Steuer	VAF	XA1,XA1,XB2
217b087dfabSPatrick Steuer	VX	XD0,XD0,XA1
218b087dfabSPatrick Steuer	VERLLF	XD0,XD0,8
219b087dfabSPatrick Steuer
220b087dfabSPatrick Steuer	VAF	XA2,XA2,XB3
221b087dfabSPatrick Steuer	VX	XD1,XD1,XA2
222b087dfabSPatrick Steuer	VERLLF	XD1,XD1,8
223b087dfabSPatrick Steuer
224b087dfabSPatrick Steuer	VAF	XA3,XA3,XB0
225b087dfabSPatrick Steuer	VX	XD2,XD2,XA3
226b087dfabSPatrick Steuer	VERLLF	XD2,XD2,8
227b087dfabSPatrick Steuer
228b087dfabSPatrick Steuer	VAF	XC2,XC2,XD3
229b087dfabSPatrick Steuer	VX	XB1,XB1,XC2
230b087dfabSPatrick Steuer	VERLLF	XB1,XB1,7
231b087dfabSPatrick Steuer
232b087dfabSPatrick Steuer	VAF	XC3,XC3,XD0
233b087dfabSPatrick Steuer	VX	XB2,XB2,XC3
234b087dfabSPatrick Steuer	VERLLF	XB2,XB2,7
235b087dfabSPatrick Steuer
236b087dfabSPatrick Steuer	VAF	XC0,XC0,XD1
237b087dfabSPatrick Steuer	VX	XB3,XB3,XC0
238b087dfabSPatrick Steuer	VERLLF	XB3,XB3,7
239b087dfabSPatrick Steuer
240b087dfabSPatrick Steuer	VAF	XC1,XC1,XD2
241b087dfabSPatrick Steuer	VX	XB0,XB0,XC1
242b087dfabSPatrick Steuer	VERLLF	XB0,XB0,7
243b087dfabSPatrick Steuer	brct	%r0,.Loop_4x
244b087dfabSPatrick Steuer
245b087dfabSPatrick Steuer	VAF	XD0,XD0,CTR
246b087dfabSPatrick Steuer
247b087dfabSPatrick Steuer	VMRHF	XT0,XA0,XA1		# transpose data
248b087dfabSPatrick Steuer	VMRHF	XT1,XA2,XA3
249b087dfabSPatrick Steuer	VMRLF	XT2,XA0,XA1
250b087dfabSPatrick Steuer	VMRLF	XT3,XA2,XA3
251b087dfabSPatrick Steuer	VPDI	XA0,XT0,XT1,0b0000
252b087dfabSPatrick Steuer	VPDI	XA1,XT0,XT1,0b0101
253b087dfabSPatrick Steuer	VPDI	XA2,XT2,XT3,0b0000
254b087dfabSPatrick Steuer	VPDI	XA3,XT2,XT3,0b0101
255b087dfabSPatrick Steuer
256b087dfabSPatrick Steuer	VMRHF	XT0,XB0,XB1
257b087dfabSPatrick Steuer	VMRHF	XT1,XB2,XB3
258b087dfabSPatrick Steuer	VMRLF	XT2,XB0,XB1
259b087dfabSPatrick Steuer	VMRLF	XT3,XB2,XB3
260b087dfabSPatrick Steuer	VPDI	XB0,XT0,XT1,0b0000
261b087dfabSPatrick Steuer	VPDI	XB1,XT0,XT1,0b0101
262b087dfabSPatrick Steuer	VPDI	XB2,XT2,XT3,0b0000
263b087dfabSPatrick Steuer	VPDI	XB3,XT2,XT3,0b0101
264b087dfabSPatrick Steuer
265b087dfabSPatrick Steuer	VMRHF	XT0,XC0,XC1
266b087dfabSPatrick Steuer	VMRHF	XT1,XC2,XC3
267b087dfabSPatrick Steuer	VMRLF	XT2,XC0,XC1
268b087dfabSPatrick Steuer	VMRLF	XT3,XC2,XC3
269b087dfabSPatrick Steuer	VPDI	XC0,XT0,XT1,0b0000
270b087dfabSPatrick Steuer	VPDI	XC1,XT0,XT1,0b0101
271b087dfabSPatrick Steuer	VPDI	XC2,XT2,XT3,0b0000
272b087dfabSPatrick Steuer	VPDI	XC3,XT2,XT3,0b0101
273b087dfabSPatrick Steuer
274b087dfabSPatrick Steuer	VMRHF	XT0,XD0,XD1
275b087dfabSPatrick Steuer	VMRHF	XT1,XD2,XD3
276b087dfabSPatrick Steuer	VMRLF	XT2,XD0,XD1
277b087dfabSPatrick Steuer	VMRLF	XT3,XD2,XD3
278b087dfabSPatrick Steuer	VPDI	XD0,XT0,XT1,0b0000
279b087dfabSPatrick Steuer	VPDI	XD1,XT0,XT1,0b0101
280b087dfabSPatrick Steuer	VPDI	XD2,XT2,XT3,0b0000
281b087dfabSPatrick Steuer	VPDI	XD3,XT2,XT3,0b0101
282b087dfabSPatrick Steuer
283b087dfabSPatrick Steuer	VAF	XA0,XA0,K0
284b087dfabSPatrick Steuer	VAF	XB0,XB0,K1
285b087dfabSPatrick Steuer	VAF	XC0,XC0,K2
286b087dfabSPatrick Steuer	VAF	XD0,XD0,K3
287b087dfabSPatrick Steuer
288b087dfabSPatrick Steuer	VPERM	XA0,XA0,XA0,BEPERM
289b087dfabSPatrick Steuer	VPERM	XB0,XB0,XB0,BEPERM
290b087dfabSPatrick Steuer	VPERM	XC0,XC0,XC0,BEPERM
291b087dfabSPatrick Steuer	VPERM	XD0,XD0,XD0,BEPERM
292b087dfabSPatrick Steuer
293b087dfabSPatrick Steuer	VLM	XT0,XT3,0,INP,0
294b087dfabSPatrick Steuer
295b087dfabSPatrick Steuer	VX	XT0,XT0,XA0
296b087dfabSPatrick Steuer	VX	XT1,XT1,XB0
297b087dfabSPatrick Steuer	VX	XT2,XT2,XC0
298b087dfabSPatrick Steuer	VX	XT3,XT3,XD0
299b087dfabSPatrick Steuer
300b087dfabSPatrick Steuer	VSTM	XT0,XT3,0,OUT,0
301b087dfabSPatrick Steuer
302b087dfabSPatrick Steuer	la	INP,0x40(INP)
303b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
304b087dfabSPatrick Steuer	aghi	LEN,-0x40
305b087dfabSPatrick Steuer
306b087dfabSPatrick Steuer	VAF	XA0,XA1,K0
307b087dfabSPatrick Steuer	VAF	XB0,XB1,K1
308b087dfabSPatrick Steuer	VAF	XC0,XC1,K2
309b087dfabSPatrick Steuer	VAF	XD0,XD1,K3
310b087dfabSPatrick Steuer
311b087dfabSPatrick Steuer	VPERM	XA0,XA0,XA0,BEPERM
312b087dfabSPatrick Steuer	VPERM	XB0,XB0,XB0,BEPERM
313b087dfabSPatrick Steuer	VPERM	XC0,XC0,XC0,BEPERM
314b087dfabSPatrick Steuer	VPERM	XD0,XD0,XD0,BEPERM
315b087dfabSPatrick Steuer
316731efc96SVasily Gorbik	clgfi	LEN,0x40
317b087dfabSPatrick Steuer	jl	.Ltail_4x
318b087dfabSPatrick Steuer
319b087dfabSPatrick Steuer	VLM	XT0,XT3,0,INP,0
320b087dfabSPatrick Steuer
321b087dfabSPatrick Steuer	VX	XT0,XT0,XA0
322b087dfabSPatrick Steuer	VX	XT1,XT1,XB0
323b087dfabSPatrick Steuer	VX	XT2,XT2,XC0
324b087dfabSPatrick Steuer	VX	XT3,XT3,XD0
325b087dfabSPatrick Steuer
326b087dfabSPatrick Steuer	VSTM	XT0,XT3,0,OUT,0
327b087dfabSPatrick Steuer
328b087dfabSPatrick Steuer	la	INP,0x40(INP)
329b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
330b087dfabSPatrick Steuer	aghi	LEN,-0x40
331b087dfabSPatrick Steuer	je	.Ldone_4x
332b087dfabSPatrick Steuer
333b087dfabSPatrick Steuer	VAF	XA0,XA2,K0
334b087dfabSPatrick Steuer	VAF	XB0,XB2,K1
335b087dfabSPatrick Steuer	VAF	XC0,XC2,K2
336b087dfabSPatrick Steuer	VAF	XD0,XD2,K3
337b087dfabSPatrick Steuer
338b087dfabSPatrick Steuer	VPERM	XA0,XA0,XA0,BEPERM
339b087dfabSPatrick Steuer	VPERM	XB0,XB0,XB0,BEPERM
340b087dfabSPatrick Steuer	VPERM	XC0,XC0,XC0,BEPERM
341b087dfabSPatrick Steuer	VPERM	XD0,XD0,XD0,BEPERM
342b087dfabSPatrick Steuer
343731efc96SVasily Gorbik	clgfi	LEN,0x40
344b087dfabSPatrick Steuer	jl	.Ltail_4x
345b087dfabSPatrick Steuer
346b087dfabSPatrick Steuer	VLM	XT0,XT3,0,INP,0
347b087dfabSPatrick Steuer
348b087dfabSPatrick Steuer	VX	XT0,XT0,XA0
349b087dfabSPatrick Steuer	VX	XT1,XT1,XB0
350b087dfabSPatrick Steuer	VX	XT2,XT2,XC0
351b087dfabSPatrick Steuer	VX	XT3,XT3,XD0
352b087dfabSPatrick Steuer
353b087dfabSPatrick Steuer	VSTM	XT0,XT3,0,OUT,0
354b087dfabSPatrick Steuer
355b087dfabSPatrick Steuer	la	INP,0x40(INP)
356b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
357b087dfabSPatrick Steuer	aghi	LEN,-0x40
358b087dfabSPatrick Steuer	je	.Ldone_4x
359b087dfabSPatrick Steuer
360b087dfabSPatrick Steuer	VAF	XA0,XA3,K0
361b087dfabSPatrick Steuer	VAF	XB0,XB3,K1
362b087dfabSPatrick Steuer	VAF	XC0,XC3,K2
363b087dfabSPatrick Steuer	VAF	XD0,XD3,K3
364b087dfabSPatrick Steuer
365b087dfabSPatrick Steuer	VPERM	XA0,XA0,XA0,BEPERM
366b087dfabSPatrick Steuer	VPERM	XB0,XB0,XB0,BEPERM
367b087dfabSPatrick Steuer	VPERM	XC0,XC0,XC0,BEPERM
368b087dfabSPatrick Steuer	VPERM	XD0,XD0,XD0,BEPERM
369b087dfabSPatrick Steuer
370731efc96SVasily Gorbik	clgfi	LEN,0x40
371b087dfabSPatrick Steuer	jl	.Ltail_4x
372b087dfabSPatrick Steuer
373b087dfabSPatrick Steuer	VLM	XT0,XT3,0,INP,0
374b087dfabSPatrick Steuer
375b087dfabSPatrick Steuer	VX	XT0,XT0,XA0
376b087dfabSPatrick Steuer	VX	XT1,XT1,XB0
377b087dfabSPatrick Steuer	VX	XT2,XT2,XC0
378b087dfabSPatrick Steuer	VX	XT3,XT3,XD0
379b087dfabSPatrick Steuer
380b087dfabSPatrick Steuer	VSTM	XT0,XT3,0,OUT,0
381b087dfabSPatrick Steuer
382b087dfabSPatrick Steuer.Ldone_4x:
383b087dfabSPatrick Steuer	lmg	%r6,%r7,6*8(SP)
384b087dfabSPatrick Steuer	BR_EX	%r14
385b087dfabSPatrick Steuer
386b087dfabSPatrick Steuer.Ltail_4x:
387b087dfabSPatrick Steuer	VLR	XT0,XC0
388b087dfabSPatrick Steuer	VLR	XT1,XD0
389b087dfabSPatrick Steuer
390b087dfabSPatrick Steuer	VST	XA0,8*8+0x00,,SP
391b087dfabSPatrick Steuer	VST	XB0,8*8+0x10,,SP
392b087dfabSPatrick Steuer	VST	XT0,8*8+0x20,,SP
393b087dfabSPatrick Steuer	VST	XT1,8*8+0x30,,SP
394b087dfabSPatrick Steuer
395b087dfabSPatrick Steuer	lghi	%r1,0
396b087dfabSPatrick Steuer
397b087dfabSPatrick Steuer.Loop_tail_4x:
398b087dfabSPatrick Steuer	llgc	%r5,0(%r1,INP)
399b087dfabSPatrick Steuer	llgc	%r6,8*8(%r1,SP)
400b087dfabSPatrick Steuer	xr	%r6,%r5
401b087dfabSPatrick Steuer	stc	%r6,0(%r1,OUT)
402b087dfabSPatrick Steuer	la	%r1,1(%r1)
403b087dfabSPatrick Steuer	brct	LEN,.Loop_tail_4x
404b087dfabSPatrick Steuer
405b087dfabSPatrick Steuer	lmg	%r6,%r7,6*8(SP)
406b087dfabSPatrick Steuer	BR_EX	%r14
4073e5e5107SHeiko CarstensSYM_FUNC_END(chacha20_vx_4x)
408b087dfabSPatrick Steuer
409b087dfabSPatrick Steuer#undef	OUT
410b087dfabSPatrick Steuer#undef	INP
411b087dfabSPatrick Steuer#undef	LEN
412b087dfabSPatrick Steuer#undef	KEY
413b087dfabSPatrick Steuer#undef	COUNTER
414b087dfabSPatrick Steuer
415b087dfabSPatrick Steuer#undef BEPERM
416b087dfabSPatrick Steuer
417b087dfabSPatrick Steuer#undef K0
418b087dfabSPatrick Steuer#undef K1
419b087dfabSPatrick Steuer#undef K2
420b087dfabSPatrick Steuer#undef K3
421b087dfabSPatrick Steuer
422b087dfabSPatrick Steuer
423b087dfabSPatrick Steuer#############################################################################
424b087dfabSPatrick Steuer# void chacha20_vx(u8 *out, counst u8 *inp, size_t len,
425b087dfabSPatrick Steuer#		   counst u32 *key, const u32 *counter)
426b087dfabSPatrick Steuer
427b087dfabSPatrick Steuer#define	OUT		%r2
428b087dfabSPatrick Steuer#define	INP		%r3
429b087dfabSPatrick Steuer#define	LEN		%r4
430b087dfabSPatrick Steuer#define	KEY		%r5
431b087dfabSPatrick Steuer#define	COUNTER		%r6
432b087dfabSPatrick Steuer
433b087dfabSPatrick Steuer#define BEPERM		%v31
434b087dfabSPatrick Steuer
435b087dfabSPatrick Steuer#define K0		%v27
436b087dfabSPatrick Steuer#define K1		%v24
437b087dfabSPatrick Steuer#define K2		%v25
438b087dfabSPatrick Steuer#define K3		%v26
439b087dfabSPatrick Steuer
440b087dfabSPatrick Steuer#define A0		%v0
441b087dfabSPatrick Steuer#define B0		%v1
442b087dfabSPatrick Steuer#define C0		%v2
443b087dfabSPatrick Steuer#define D0		%v3
444b087dfabSPatrick Steuer
445b087dfabSPatrick Steuer#define A1		%v4
446b087dfabSPatrick Steuer#define B1		%v5
447b087dfabSPatrick Steuer#define C1		%v6
448b087dfabSPatrick Steuer#define D1		%v7
449b087dfabSPatrick Steuer
450b087dfabSPatrick Steuer#define A2		%v8
451b087dfabSPatrick Steuer#define B2		%v9
452b087dfabSPatrick Steuer#define C2		%v10
453b087dfabSPatrick Steuer#define D2		%v11
454b087dfabSPatrick Steuer
455b087dfabSPatrick Steuer#define A3		%v12
456b087dfabSPatrick Steuer#define B3		%v13
457b087dfabSPatrick Steuer#define C3		%v14
458b087dfabSPatrick Steuer#define D3		%v15
459b087dfabSPatrick Steuer
460b087dfabSPatrick Steuer#define A4		%v16
461b087dfabSPatrick Steuer#define B4		%v17
462b087dfabSPatrick Steuer#define C4		%v18
463b087dfabSPatrick Steuer#define D4		%v19
464b087dfabSPatrick Steuer
465b087dfabSPatrick Steuer#define A5		%v20
466b087dfabSPatrick Steuer#define B5		%v21
467b087dfabSPatrick Steuer#define C5		%v22
468b087dfabSPatrick Steuer#define D5		%v23
469b087dfabSPatrick Steuer
470b087dfabSPatrick Steuer#define T0		%v27
471b087dfabSPatrick Steuer#define T1		%v28
472b087dfabSPatrick Steuer#define T2		%v29
473b087dfabSPatrick Steuer#define T3		%v30
474b087dfabSPatrick Steuer
4753e5e5107SHeiko CarstensSYM_FUNC_START(chacha20_vx)
476731efc96SVasily Gorbik	clgfi	LEN,256
477b087dfabSPatrick Steuer	jle	chacha20_vx_4x
478b087dfabSPatrick Steuer	stmg	%r6,%r7,6*8(SP)
479b087dfabSPatrick Steuer
480b087dfabSPatrick Steuer	lghi	%r1,-FRAME
481b087dfabSPatrick Steuer	lgr	%r0,SP
482b087dfabSPatrick Steuer	la	SP,0(%r1,SP)
483b087dfabSPatrick Steuer	stg	%r0,0(SP)		# back-chain
484b087dfabSPatrick Steuer
4853e5e5107SHeiko Carstens	larl	%r7,sigma
486b087dfabSPatrick Steuer	lhi	%r0,10
487b087dfabSPatrick Steuer
488b087dfabSPatrick Steuer	VLM	K1,K2,0,KEY,0		# load key
489b087dfabSPatrick Steuer	VL	K3,0,,COUNTER		# load counter
490b087dfabSPatrick Steuer
491b087dfabSPatrick Steuer	VLM	K0,BEPERM,0,%r7,4	# load sigma, increments, ...
492b087dfabSPatrick Steuer
493b087dfabSPatrick Steuer.Loop_outer_vx:
494b087dfabSPatrick Steuer	VLR	A0,K0
495b087dfabSPatrick Steuer	VLR	B0,K1
496b087dfabSPatrick Steuer	VLR	A1,K0
497b087dfabSPatrick Steuer	VLR	B1,K1
498b087dfabSPatrick Steuer	VLR	A2,K0
499b087dfabSPatrick Steuer	VLR	B2,K1
500b087dfabSPatrick Steuer	VLR	A3,K0
501b087dfabSPatrick Steuer	VLR	B3,K1
502b087dfabSPatrick Steuer	VLR	A4,K0
503b087dfabSPatrick Steuer	VLR	B4,K1
504b087dfabSPatrick Steuer	VLR	A5,K0
505b087dfabSPatrick Steuer	VLR	B5,K1
506b087dfabSPatrick Steuer
507b087dfabSPatrick Steuer	VLR	D0,K3
508b087dfabSPatrick Steuer	VAF	D1,K3,T1		# K[3]+1
509b087dfabSPatrick Steuer	VAF	D2,K3,T2		# K[3]+2
510b087dfabSPatrick Steuer	VAF	D3,K3,T3		# K[3]+3
511b087dfabSPatrick Steuer	VAF	D4,D2,T2		# K[3]+4
512b087dfabSPatrick Steuer	VAF	D5,D2,T3		# K[3]+5
513b087dfabSPatrick Steuer
514b087dfabSPatrick Steuer	VLR	C0,K2
515b087dfabSPatrick Steuer	VLR	C1,K2
516b087dfabSPatrick Steuer	VLR	C2,K2
517b087dfabSPatrick Steuer	VLR	C3,K2
518b087dfabSPatrick Steuer	VLR	C4,K2
519b087dfabSPatrick Steuer	VLR	C5,K2
520b087dfabSPatrick Steuer
521b087dfabSPatrick Steuer	VLR	T1,D1
522b087dfabSPatrick Steuer	VLR	T2,D2
523b087dfabSPatrick Steuer	VLR	T3,D3
524b087dfabSPatrick Steuer
525b087dfabSPatrick Steuer.Loop_vx:
526b087dfabSPatrick Steuer	VAF	A0,A0,B0
527b087dfabSPatrick Steuer	VAF	A1,A1,B1
528b087dfabSPatrick Steuer	VAF	A2,A2,B2
529b087dfabSPatrick Steuer	VAF	A3,A3,B3
530b087dfabSPatrick Steuer	VAF	A4,A4,B4
531b087dfabSPatrick Steuer	VAF	A5,A5,B5
532b087dfabSPatrick Steuer	VX	D0,D0,A0
533b087dfabSPatrick Steuer	VX	D1,D1,A1
534b087dfabSPatrick Steuer	VX	D2,D2,A2
535b087dfabSPatrick Steuer	VX	D3,D3,A3
536b087dfabSPatrick Steuer	VX	D4,D4,A4
537b087dfabSPatrick Steuer	VX	D5,D5,A5
538b087dfabSPatrick Steuer	VERLLF	D0,D0,16
539b087dfabSPatrick Steuer	VERLLF	D1,D1,16
540b087dfabSPatrick Steuer	VERLLF	D2,D2,16
541b087dfabSPatrick Steuer	VERLLF	D3,D3,16
542b087dfabSPatrick Steuer	VERLLF	D4,D4,16
543b087dfabSPatrick Steuer	VERLLF	D5,D5,16
544b087dfabSPatrick Steuer
545b087dfabSPatrick Steuer	VAF	C0,C0,D0
546b087dfabSPatrick Steuer	VAF	C1,C1,D1
547b087dfabSPatrick Steuer	VAF	C2,C2,D2
548b087dfabSPatrick Steuer	VAF	C3,C3,D3
549b087dfabSPatrick Steuer	VAF	C4,C4,D4
550b087dfabSPatrick Steuer	VAF	C5,C5,D5
551b087dfabSPatrick Steuer	VX	B0,B0,C0
552b087dfabSPatrick Steuer	VX	B1,B1,C1
553b087dfabSPatrick Steuer	VX	B2,B2,C2
554b087dfabSPatrick Steuer	VX	B3,B3,C3
555b087dfabSPatrick Steuer	VX	B4,B4,C4
556b087dfabSPatrick Steuer	VX	B5,B5,C5
557b087dfabSPatrick Steuer	VERLLF	B0,B0,12
558b087dfabSPatrick Steuer	VERLLF	B1,B1,12
559b087dfabSPatrick Steuer	VERLLF	B2,B2,12
560b087dfabSPatrick Steuer	VERLLF	B3,B3,12
561b087dfabSPatrick Steuer	VERLLF	B4,B4,12
562b087dfabSPatrick Steuer	VERLLF	B5,B5,12
563b087dfabSPatrick Steuer
564b087dfabSPatrick Steuer	VAF	A0,A0,B0
565b087dfabSPatrick Steuer	VAF	A1,A1,B1
566b087dfabSPatrick Steuer	VAF	A2,A2,B2
567b087dfabSPatrick Steuer	VAF	A3,A3,B3
568b087dfabSPatrick Steuer	VAF	A4,A4,B4
569b087dfabSPatrick Steuer	VAF	A5,A5,B5
570b087dfabSPatrick Steuer	VX	D0,D0,A0
571b087dfabSPatrick Steuer	VX	D1,D1,A1
572b087dfabSPatrick Steuer	VX	D2,D2,A2
573b087dfabSPatrick Steuer	VX	D3,D3,A3
574b087dfabSPatrick Steuer	VX	D4,D4,A4
575b087dfabSPatrick Steuer	VX	D5,D5,A5
576b087dfabSPatrick Steuer	VERLLF	D0,D0,8
577b087dfabSPatrick Steuer	VERLLF	D1,D1,8
578b087dfabSPatrick Steuer	VERLLF	D2,D2,8
579b087dfabSPatrick Steuer	VERLLF	D3,D3,8
580b087dfabSPatrick Steuer	VERLLF	D4,D4,8
581b087dfabSPatrick Steuer	VERLLF	D5,D5,8
582b087dfabSPatrick Steuer
583b087dfabSPatrick Steuer	VAF	C0,C0,D0
584b087dfabSPatrick Steuer	VAF	C1,C1,D1
585b087dfabSPatrick Steuer	VAF	C2,C2,D2
586b087dfabSPatrick Steuer	VAF	C3,C3,D3
587b087dfabSPatrick Steuer	VAF	C4,C4,D4
588b087dfabSPatrick Steuer	VAF	C5,C5,D5
589b087dfabSPatrick Steuer	VX	B0,B0,C0
590b087dfabSPatrick Steuer	VX	B1,B1,C1
591b087dfabSPatrick Steuer	VX	B2,B2,C2
592b087dfabSPatrick Steuer	VX	B3,B3,C3
593b087dfabSPatrick Steuer	VX	B4,B4,C4
594b087dfabSPatrick Steuer	VX	B5,B5,C5
595b087dfabSPatrick Steuer	VERLLF	B0,B0,7
596b087dfabSPatrick Steuer	VERLLF	B1,B1,7
597b087dfabSPatrick Steuer	VERLLF	B2,B2,7
598b087dfabSPatrick Steuer	VERLLF	B3,B3,7
599b087dfabSPatrick Steuer	VERLLF	B4,B4,7
600b087dfabSPatrick Steuer	VERLLF	B5,B5,7
601b087dfabSPatrick Steuer
602b087dfabSPatrick Steuer	VSLDB	C0,C0,C0,8
603b087dfabSPatrick Steuer	VSLDB	C1,C1,C1,8
604b087dfabSPatrick Steuer	VSLDB	C2,C2,C2,8
605b087dfabSPatrick Steuer	VSLDB	C3,C3,C3,8
606b087dfabSPatrick Steuer	VSLDB	C4,C4,C4,8
607b087dfabSPatrick Steuer	VSLDB	C5,C5,C5,8
608b087dfabSPatrick Steuer	VSLDB	B0,B0,B0,4
609b087dfabSPatrick Steuer	VSLDB	B1,B1,B1,4
610b087dfabSPatrick Steuer	VSLDB	B2,B2,B2,4
611b087dfabSPatrick Steuer	VSLDB	B3,B3,B3,4
612b087dfabSPatrick Steuer	VSLDB	B4,B4,B4,4
613b087dfabSPatrick Steuer	VSLDB	B5,B5,B5,4
614b087dfabSPatrick Steuer	VSLDB	D0,D0,D0,12
615b087dfabSPatrick Steuer	VSLDB	D1,D1,D1,12
616b087dfabSPatrick Steuer	VSLDB	D2,D2,D2,12
617b087dfabSPatrick Steuer	VSLDB	D3,D3,D3,12
618b087dfabSPatrick Steuer	VSLDB	D4,D4,D4,12
619b087dfabSPatrick Steuer	VSLDB	D5,D5,D5,12
620b087dfabSPatrick Steuer
621b087dfabSPatrick Steuer	VAF	A0,A0,B0
622b087dfabSPatrick Steuer	VAF	A1,A1,B1
623b087dfabSPatrick Steuer	VAF	A2,A2,B2
624b087dfabSPatrick Steuer	VAF	A3,A3,B3
625b087dfabSPatrick Steuer	VAF	A4,A4,B4
626b087dfabSPatrick Steuer	VAF	A5,A5,B5
627b087dfabSPatrick Steuer	VX	D0,D0,A0
628b087dfabSPatrick Steuer	VX	D1,D1,A1
629b087dfabSPatrick Steuer	VX	D2,D2,A2
630b087dfabSPatrick Steuer	VX	D3,D3,A3
631b087dfabSPatrick Steuer	VX	D4,D4,A4
632b087dfabSPatrick Steuer	VX	D5,D5,A5
633b087dfabSPatrick Steuer	VERLLF	D0,D0,16
634b087dfabSPatrick Steuer	VERLLF	D1,D1,16
635b087dfabSPatrick Steuer	VERLLF	D2,D2,16
636b087dfabSPatrick Steuer	VERLLF	D3,D3,16
637b087dfabSPatrick Steuer	VERLLF	D4,D4,16
638b087dfabSPatrick Steuer	VERLLF	D5,D5,16
639b087dfabSPatrick Steuer
640b087dfabSPatrick Steuer	VAF	C0,C0,D0
641b087dfabSPatrick Steuer	VAF	C1,C1,D1
642b087dfabSPatrick Steuer	VAF	C2,C2,D2
643b087dfabSPatrick Steuer	VAF	C3,C3,D3
644b087dfabSPatrick Steuer	VAF	C4,C4,D4
645b087dfabSPatrick Steuer	VAF	C5,C5,D5
646b087dfabSPatrick Steuer	VX	B0,B0,C0
647b087dfabSPatrick Steuer	VX	B1,B1,C1
648b087dfabSPatrick Steuer	VX	B2,B2,C2
649b087dfabSPatrick Steuer	VX	B3,B3,C3
650b087dfabSPatrick Steuer	VX	B4,B4,C4
651b087dfabSPatrick Steuer	VX	B5,B5,C5
652b087dfabSPatrick Steuer	VERLLF	B0,B0,12
653b087dfabSPatrick Steuer	VERLLF	B1,B1,12
654b087dfabSPatrick Steuer	VERLLF	B2,B2,12
655b087dfabSPatrick Steuer	VERLLF	B3,B3,12
656b087dfabSPatrick Steuer	VERLLF	B4,B4,12
657b087dfabSPatrick Steuer	VERLLF	B5,B5,12
658b087dfabSPatrick Steuer
659b087dfabSPatrick Steuer	VAF	A0,A0,B0
660b087dfabSPatrick Steuer	VAF	A1,A1,B1
661b087dfabSPatrick Steuer	VAF	A2,A2,B2
662b087dfabSPatrick Steuer	VAF	A3,A3,B3
663b087dfabSPatrick Steuer	VAF	A4,A4,B4
664b087dfabSPatrick Steuer	VAF	A5,A5,B5
665b087dfabSPatrick Steuer	VX	D0,D0,A0
666b087dfabSPatrick Steuer	VX	D1,D1,A1
667b087dfabSPatrick Steuer	VX	D2,D2,A2
668b087dfabSPatrick Steuer	VX	D3,D3,A3
669b087dfabSPatrick Steuer	VX	D4,D4,A4
670b087dfabSPatrick Steuer	VX	D5,D5,A5
671b087dfabSPatrick Steuer	VERLLF	D0,D0,8
672b087dfabSPatrick Steuer	VERLLF	D1,D1,8
673b087dfabSPatrick Steuer	VERLLF	D2,D2,8
674b087dfabSPatrick Steuer	VERLLF	D3,D3,8
675b087dfabSPatrick Steuer	VERLLF	D4,D4,8
676b087dfabSPatrick Steuer	VERLLF	D5,D5,8
677b087dfabSPatrick Steuer
678b087dfabSPatrick Steuer	VAF	C0,C0,D0
679b087dfabSPatrick Steuer	VAF	C1,C1,D1
680b087dfabSPatrick Steuer	VAF	C2,C2,D2
681b087dfabSPatrick Steuer	VAF	C3,C3,D3
682b087dfabSPatrick Steuer	VAF	C4,C4,D4
683b087dfabSPatrick Steuer	VAF	C5,C5,D5
684b087dfabSPatrick Steuer	VX	B0,B0,C0
685b087dfabSPatrick Steuer	VX	B1,B1,C1
686b087dfabSPatrick Steuer	VX	B2,B2,C2
687b087dfabSPatrick Steuer	VX	B3,B3,C3
688b087dfabSPatrick Steuer	VX	B4,B4,C4
689b087dfabSPatrick Steuer	VX	B5,B5,C5
690b087dfabSPatrick Steuer	VERLLF	B0,B0,7
691b087dfabSPatrick Steuer	VERLLF	B1,B1,7
692b087dfabSPatrick Steuer	VERLLF	B2,B2,7
693b087dfabSPatrick Steuer	VERLLF	B3,B3,7
694b087dfabSPatrick Steuer	VERLLF	B4,B4,7
695b087dfabSPatrick Steuer	VERLLF	B5,B5,7
696b087dfabSPatrick Steuer
697b087dfabSPatrick Steuer	VSLDB	C0,C0,C0,8
698b087dfabSPatrick Steuer	VSLDB	C1,C1,C1,8
699b087dfabSPatrick Steuer	VSLDB	C2,C2,C2,8
700b087dfabSPatrick Steuer	VSLDB	C3,C3,C3,8
701b087dfabSPatrick Steuer	VSLDB	C4,C4,C4,8
702b087dfabSPatrick Steuer	VSLDB	C5,C5,C5,8
703b087dfabSPatrick Steuer	VSLDB	B0,B0,B0,12
704b087dfabSPatrick Steuer	VSLDB	B1,B1,B1,12
705b087dfabSPatrick Steuer	VSLDB	B2,B2,B2,12
706b087dfabSPatrick Steuer	VSLDB	B3,B3,B3,12
707b087dfabSPatrick Steuer	VSLDB	B4,B4,B4,12
708b087dfabSPatrick Steuer	VSLDB	B5,B5,B5,12
709b087dfabSPatrick Steuer	VSLDB	D0,D0,D0,4
710b087dfabSPatrick Steuer	VSLDB	D1,D1,D1,4
711b087dfabSPatrick Steuer	VSLDB	D2,D2,D2,4
712b087dfabSPatrick Steuer	VSLDB	D3,D3,D3,4
713b087dfabSPatrick Steuer	VSLDB	D4,D4,D4,4
714b087dfabSPatrick Steuer	VSLDB	D5,D5,D5,4
715b087dfabSPatrick Steuer	brct	%r0,.Loop_vx
716b087dfabSPatrick Steuer
717b087dfabSPatrick Steuer	VAF	A0,A0,K0
718b087dfabSPatrick Steuer	VAF	B0,B0,K1
719b087dfabSPatrick Steuer	VAF	C0,C0,K2
720b087dfabSPatrick Steuer	VAF	D0,D0,K3
721b087dfabSPatrick Steuer	VAF	A1,A1,K0
722b087dfabSPatrick Steuer	VAF	D1,D1,T1		# +K[3]+1
723b087dfabSPatrick Steuer
724b087dfabSPatrick Steuer	VPERM	A0,A0,A0,BEPERM
725b087dfabSPatrick Steuer	VPERM	B0,B0,B0,BEPERM
726b087dfabSPatrick Steuer	VPERM	C0,C0,C0,BEPERM
727b087dfabSPatrick Steuer	VPERM	D0,D0,D0,BEPERM
728b087dfabSPatrick Steuer
729731efc96SVasily Gorbik	clgfi	LEN,0x40
730b087dfabSPatrick Steuer	jl	.Ltail_vx
731b087dfabSPatrick Steuer
732b087dfabSPatrick Steuer	VAF	D2,D2,T2		# +K[3]+2
733b087dfabSPatrick Steuer	VAF	D3,D3,T3		# +K[3]+3
734b087dfabSPatrick Steuer	VLM	T0,T3,0,INP,0
735b087dfabSPatrick Steuer
736b087dfabSPatrick Steuer	VX	A0,A0,T0
737b087dfabSPatrick Steuer	VX	B0,B0,T1
738b087dfabSPatrick Steuer	VX	C0,C0,T2
739b087dfabSPatrick Steuer	VX	D0,D0,T3
740b087dfabSPatrick Steuer
741b087dfabSPatrick Steuer	VLM	K0,T3,0,%r7,4		# re-load sigma and increments
742b087dfabSPatrick Steuer
743b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
744b087dfabSPatrick Steuer
745b087dfabSPatrick Steuer	la	INP,0x40(INP)
746b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
747b087dfabSPatrick Steuer	aghi	LEN,-0x40
748b087dfabSPatrick Steuer	je	.Ldone_vx
749b087dfabSPatrick Steuer
750b087dfabSPatrick Steuer	VAF	B1,B1,K1
751b087dfabSPatrick Steuer	VAF	C1,C1,K2
752b087dfabSPatrick Steuer
753b087dfabSPatrick Steuer	VPERM	A0,A1,A1,BEPERM
754b087dfabSPatrick Steuer	VPERM	B0,B1,B1,BEPERM
755b087dfabSPatrick Steuer	VPERM	C0,C1,C1,BEPERM
756b087dfabSPatrick Steuer	VPERM	D0,D1,D1,BEPERM
757b087dfabSPatrick Steuer
758731efc96SVasily Gorbik	clgfi	LEN,0x40
759b087dfabSPatrick Steuer	jl	.Ltail_vx
760b087dfabSPatrick Steuer
761b087dfabSPatrick Steuer	VLM	A1,D1,0,INP,0
762b087dfabSPatrick Steuer
763b087dfabSPatrick Steuer	VX	A0,A0,A1
764b087dfabSPatrick Steuer	VX	B0,B0,B1
765b087dfabSPatrick Steuer	VX	C0,C0,C1
766b087dfabSPatrick Steuer	VX	D0,D0,D1
767b087dfabSPatrick Steuer
768b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
769b087dfabSPatrick Steuer
770b087dfabSPatrick Steuer	la	INP,0x40(INP)
771b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
772b087dfabSPatrick Steuer	aghi	LEN,-0x40
773b087dfabSPatrick Steuer	je	.Ldone_vx
774b087dfabSPatrick Steuer
775b087dfabSPatrick Steuer	VAF	A2,A2,K0
776b087dfabSPatrick Steuer	VAF	B2,B2,K1
777b087dfabSPatrick Steuer	VAF	C2,C2,K2
778b087dfabSPatrick Steuer
779b087dfabSPatrick Steuer	VPERM	A0,A2,A2,BEPERM
780b087dfabSPatrick Steuer	VPERM	B0,B2,B2,BEPERM
781b087dfabSPatrick Steuer	VPERM	C0,C2,C2,BEPERM
782b087dfabSPatrick Steuer	VPERM	D0,D2,D2,BEPERM
783b087dfabSPatrick Steuer
784731efc96SVasily Gorbik	clgfi	LEN,0x40
785b087dfabSPatrick Steuer	jl	.Ltail_vx
786b087dfabSPatrick Steuer
787b087dfabSPatrick Steuer	VLM	A1,D1,0,INP,0
788b087dfabSPatrick Steuer
789b087dfabSPatrick Steuer	VX	A0,A0,A1
790b087dfabSPatrick Steuer	VX	B0,B0,B1
791b087dfabSPatrick Steuer	VX	C0,C0,C1
792b087dfabSPatrick Steuer	VX	D0,D0,D1
793b087dfabSPatrick Steuer
794b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
795b087dfabSPatrick Steuer
796b087dfabSPatrick Steuer	la	INP,0x40(INP)
797b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
798b087dfabSPatrick Steuer	aghi	LEN,-0x40
799b087dfabSPatrick Steuer	je	.Ldone_vx
800b087dfabSPatrick Steuer
801b087dfabSPatrick Steuer	VAF	A3,A3,K0
802b087dfabSPatrick Steuer	VAF	B3,B3,K1
803b087dfabSPatrick Steuer	VAF	C3,C3,K2
804b087dfabSPatrick Steuer	VAF	D2,K3,T3		# K[3]+3
805b087dfabSPatrick Steuer
806b087dfabSPatrick Steuer	VPERM	A0,A3,A3,BEPERM
807b087dfabSPatrick Steuer	VPERM	B0,B3,B3,BEPERM
808b087dfabSPatrick Steuer	VPERM	C0,C3,C3,BEPERM
809b087dfabSPatrick Steuer	VPERM	D0,D3,D3,BEPERM
810b087dfabSPatrick Steuer
811731efc96SVasily Gorbik	clgfi	LEN,0x40
812b087dfabSPatrick Steuer	jl	.Ltail_vx
813b087dfabSPatrick Steuer
814b087dfabSPatrick Steuer	VAF	D3,D2,T1		# K[3]+4
815b087dfabSPatrick Steuer	VLM	A1,D1,0,INP,0
816b087dfabSPatrick Steuer
817b087dfabSPatrick Steuer	VX	A0,A0,A1
818b087dfabSPatrick Steuer	VX	B0,B0,B1
819b087dfabSPatrick Steuer	VX	C0,C0,C1
820b087dfabSPatrick Steuer	VX	D0,D0,D1
821b087dfabSPatrick Steuer
822b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
823b087dfabSPatrick Steuer
824b087dfabSPatrick Steuer	la	INP,0x40(INP)
825b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
826b087dfabSPatrick Steuer	aghi	LEN,-0x40
827b087dfabSPatrick Steuer	je	.Ldone_vx
828b087dfabSPatrick Steuer
829b087dfabSPatrick Steuer	VAF	A4,A4,K0
830b087dfabSPatrick Steuer	VAF	B4,B4,K1
831b087dfabSPatrick Steuer	VAF	C4,C4,K2
832b087dfabSPatrick Steuer	VAF	D4,D4,D3		# +K[3]+4
833b087dfabSPatrick Steuer	VAF	D3,D3,T1		# K[3]+5
834b087dfabSPatrick Steuer	VAF	K3,D2,T3		# K[3]+=6
835b087dfabSPatrick Steuer
836b087dfabSPatrick Steuer	VPERM	A0,A4,A4,BEPERM
837b087dfabSPatrick Steuer	VPERM	B0,B4,B4,BEPERM
838b087dfabSPatrick Steuer	VPERM	C0,C4,C4,BEPERM
839b087dfabSPatrick Steuer	VPERM	D0,D4,D4,BEPERM
840b087dfabSPatrick Steuer
841731efc96SVasily Gorbik	clgfi	LEN,0x40
842b087dfabSPatrick Steuer	jl	.Ltail_vx
843b087dfabSPatrick Steuer
844b087dfabSPatrick Steuer	VLM	A1,D1,0,INP,0
845b087dfabSPatrick Steuer
846b087dfabSPatrick Steuer	VX	A0,A0,A1
847b087dfabSPatrick Steuer	VX	B0,B0,B1
848b087dfabSPatrick Steuer	VX	C0,C0,C1
849b087dfabSPatrick Steuer	VX	D0,D0,D1
850b087dfabSPatrick Steuer
851b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
852b087dfabSPatrick Steuer
853b087dfabSPatrick Steuer	la	INP,0x40(INP)
854b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
855b087dfabSPatrick Steuer	aghi	LEN,-0x40
856b087dfabSPatrick Steuer	je	.Ldone_vx
857b087dfabSPatrick Steuer
858b087dfabSPatrick Steuer	VAF	A5,A5,K0
859b087dfabSPatrick Steuer	VAF	B5,B5,K1
860b087dfabSPatrick Steuer	VAF	C5,C5,K2
861b087dfabSPatrick Steuer	VAF	D5,D5,D3		# +K[3]+5
862b087dfabSPatrick Steuer
863b087dfabSPatrick Steuer	VPERM	A0,A5,A5,BEPERM
864b087dfabSPatrick Steuer	VPERM	B0,B5,B5,BEPERM
865b087dfabSPatrick Steuer	VPERM	C0,C5,C5,BEPERM
866b087dfabSPatrick Steuer	VPERM	D0,D5,D5,BEPERM
867b087dfabSPatrick Steuer
868731efc96SVasily Gorbik	clgfi	LEN,0x40
869b087dfabSPatrick Steuer	jl	.Ltail_vx
870b087dfabSPatrick Steuer
871b087dfabSPatrick Steuer	VLM	A1,D1,0,INP,0
872b087dfabSPatrick Steuer
873b087dfabSPatrick Steuer	VX	A0,A0,A1
874b087dfabSPatrick Steuer	VX	B0,B0,B1
875b087dfabSPatrick Steuer	VX	C0,C0,C1
876b087dfabSPatrick Steuer	VX	D0,D0,D1
877b087dfabSPatrick Steuer
878b087dfabSPatrick Steuer	VSTM	A0,D0,0,OUT,0
879b087dfabSPatrick Steuer
880b087dfabSPatrick Steuer	la	INP,0x40(INP)
881b087dfabSPatrick Steuer	la	OUT,0x40(OUT)
882b087dfabSPatrick Steuer	lhi	%r0,10
883b087dfabSPatrick Steuer	aghi	LEN,-0x40
884b087dfabSPatrick Steuer	jne	.Loop_outer_vx
885b087dfabSPatrick Steuer
886b087dfabSPatrick Steuer.Ldone_vx:
887b087dfabSPatrick Steuer	lmg	%r6,%r7,FRAME+6*8(SP)
888b087dfabSPatrick Steuer	la	SP,FRAME(SP)
889b087dfabSPatrick Steuer	BR_EX	%r14
890b087dfabSPatrick Steuer
891b087dfabSPatrick Steuer.Ltail_vx:
892b087dfabSPatrick Steuer	VSTM	A0,D0,8*8,SP,3
893b087dfabSPatrick Steuer	lghi	%r1,0
894b087dfabSPatrick Steuer
895b087dfabSPatrick Steuer.Loop_tail_vx:
896b087dfabSPatrick Steuer	llgc	%r5,0(%r1,INP)
897b087dfabSPatrick Steuer	llgc	%r6,8*8(%r1,SP)
898b087dfabSPatrick Steuer	xr	%r6,%r5
899b087dfabSPatrick Steuer	stc	%r6,0(%r1,OUT)
900b087dfabSPatrick Steuer	la	%r1,1(%r1)
901b087dfabSPatrick Steuer	brct	LEN,.Loop_tail_vx
902b087dfabSPatrick Steuer
903b087dfabSPatrick Steuer	lmg	%r6,%r7,FRAME+6*8(SP)
904b087dfabSPatrick Steuer	la	SP,FRAME(SP)
905b087dfabSPatrick Steuer	BR_EX	%r14
9063e5e5107SHeiko CarstensSYM_FUNC_END(chacha20_vx)
907b087dfabSPatrick Steuer
908b087dfabSPatrick Steuer.previous
909