1 #include "s390x_arch.h"
2 .text
3 .globl	ChaCha20_ctr32
4 .type	ChaCha20_ctr32,@function
5 .align	32
6 ChaCha20_ctr32:
7 	larl	%r1,OPENSSL_s390xcap_P
8 	lghi	%r0,64
9 	ltr	%r4,%r4
10 	bzr	%r14
11 	lg	%r1,S390X_STFLE+16(%r1)
12 	clr	%r4,%r0
13 	jle	.Lshort
14 	tmhh	%r1,16384
15 	jnz	.LChaCha20_ctr32_vx
16 .Lshort:
17 	ahi	%r4,-64
18 	lhi	%r1,-176
19 	stm	%r6,%r15,6*4(%r15)
20 	slr	%r2,%r3
21 	la	%r4,0(%r3,%r4)
22 	larl	%r7,.Lsigma
23 	lgr	%r0,%r15
24 	la	%r15,0(%r1,%r15)
25 	st	%r0,0(%r15)
26 	lmg	%r8,%r11,0(%r5)
27 	lmg	%r12,%r13,0(%r6)
28 	lmg	%r6,%r7,0(%r7)
29 	la	%r14,0(%r3)
30 	st	%r2,176+3*4(%r15)
31 	st	%r4,176+4*4(%r15)
32 	stmg	%r6,%r13,96(%r15)
33 	srlg	%r10,%r12,32
34 	j	.Loop_outer
35 .align	16
36 .Loop_outer:
37 	lm	%r0,%r7,96+4*0(%r15)
38 	lm	%r8,%r9,96+4*10(%r15)
39 	lm	%r11,%r13,96+4*13(%r15)
40 	stm	%r8,%r9,96+4*8+4*10(%r15)
41 	lm	%r8,%r9,96+4*8(%r15)
42 	st	%r10,96+4*12(%r15)
43 	st	%r14,176+2*4(%r15)
44 	lhi	%r14,10
45 	j	.Loop
46 .align	4
47 .Loop:
48 	alr	%r0,%r4
49 	alr	%r1,%r5
50 	xr	%r10,%r0
51 	xr	%r11,%r1
52 	rll	%r10,%r10,16
53 	rll	%r11,%r11,16
54 	alr	%r8,%r10
55 	alr	%r9,%r11
56 	xr	%r4,%r8
57 	xr	%r5,%r9
58 	rll	%r4,%r4,12
59 	rll	%r5,%r5,12
60 	alr	%r0,%r4
61 	alr	%r1,%r5
62 	xr	%r10,%r0
63 	xr	%r11,%r1
64 	rll	%r10,%r10,8
65 	rll	%r11,%r11,8
66 	alr	%r8,%r10
67 	alr	%r9,%r11
68 	xr	%r4,%r8
69 	xr	%r5,%r9
70 	rll	%r4,%r4,7
71 	rll	%r5,%r5,7
72 	stm	%r8,%r9,96+4*8+4*8(%r15)
73 	lm	%r8,%r9,96+4*8+4*10(%r15)
74 	alr	%r2,%r6
75 	alr	%r3,%r7
76 	xr	%r12,%r2
77 	xr	%r13,%r3
78 	rll	%r12,%r12,16
79 	rll	%r13,%r13,16
80 	alr	%r8,%r12
81 	alr	%r9,%r13
82 	xr	%r6,%r8
83 	xr	%r7,%r9
84 	rll	%r6,%r6,12
85 	rll	%r7,%r7,12
86 	alr	%r2,%r6
87 	alr	%r3,%r7
88 	xr	%r12,%r2
89 	xr	%r13,%r3
90 	rll	%r12,%r12,8
91 	rll	%r13,%r13,8
92 	alr	%r8,%r12
93 	alr	%r9,%r13
94 	xr	%r6,%r8
95 	xr	%r7,%r9
96 	rll	%r6,%r6,7
97 	rll	%r7,%r7,7
98 	alr	%r0,%r5
99 	alr	%r1,%r6
100 	xr	%r13,%r0
101 	xr	%r10,%r1
102 	rll	%r13,%r13,16
103 	rll	%r10,%r10,16
104 	alr	%r8,%r13
105 	alr	%r9,%r10
106 	xr	%r5,%r8
107 	xr	%r6,%r9
108 	rll	%r5,%r5,12
109 	rll	%r6,%r6,12
110 	alr	%r0,%r5
111 	alr	%r1,%r6
112 	xr	%r13,%r0
113 	xr	%r10,%r1
114 	rll	%r13,%r13,8
115 	rll	%r10,%r10,8
116 	alr	%r8,%r13
117 	alr	%r9,%r10
118 	xr	%r5,%r8
119 	xr	%r6,%r9
120 	rll	%r5,%r5,7
121 	rll	%r6,%r6,7
122 	stm	%r8,%r9,96+4*8+4*10(%r15)
123 	lm	%r8,%r9,96+4*8+4*8(%r15)
124 	alr	%r2,%r7
125 	alr	%r3,%r4
126 	xr	%r11,%r2
127 	xr	%r12,%r3
128 	rll	%r11,%r11,16
129 	rll	%r12,%r12,16
130 	alr	%r8,%r11
131 	alr	%r9,%r12
132 	xr	%r7,%r8
133 	xr	%r4,%r9
134 	rll	%r7,%r7,12
135 	rll	%r4,%r4,12
136 	alr	%r2,%r7
137 	alr	%r3,%r4
138 	xr	%r11,%r2
139 	xr	%r12,%r3
140 	rll	%r11,%r11,8
141 	rll	%r12,%r12,8
142 	alr	%r8,%r11
143 	alr	%r9,%r12
144 	xr	%r7,%r8
145 	xr	%r4,%r9
146 	rll	%r7,%r7,7
147 	rll	%r4,%r4,7
148 	brct	%r14,.Loop
149 	l	%r14,176+2*4(%r15)
150 	stm	%r8,%r9,96+4*8+4*8(%r15)
151 	lm	%r8,%r9,176+3*4(%r15)
152 	al	%r0,96+4*0(%r15)
153 	al	%r1,96+4*1(%r15)
154 	al	%r2,96+4*2(%r15)
155 	al	%r3,96+4*3(%r15)
156 	al	%r4,96+4*4(%r15)
157 	al	%r5,96+4*5(%r15)
158 	al	%r6,96+4*6(%r15)
159 	al	%r7,96+4*7(%r15)
160 	lrvr	%r0,%r0
161 	lrvr	%r1,%r1
162 	lrvr	%r2,%r2
163 	lrvr	%r3,%r3
164 	lrvr	%r4,%r4
165 	lrvr	%r5,%r5
166 	lrvr	%r6,%r6
167 	lrvr	%r7,%r7
168 	al	%r10,96+4*12(%r15)
169 	al	%r11,96+4*13(%r15)
170 	al	%r12,96+4*14(%r15)
171 	al	%r13,96+4*15(%r15)
172 	lrvr	%r10,%r10
173 	lrvr	%r11,%r11
174 	lrvr	%r12,%r12
175 	lrvr	%r13,%r13
176 	la	%r8,0(%r8,%r14)
177 	clr	%r14,%r9
178 	jh	.Ltail
179 	x	%r0,4*0(%r14)
180 	x	%r1,4*1(%r14)
181 	st	%r0,4*0(%r8)
182 	x	%r2,4*2(%r14)
183 	st	%r1,4*1(%r8)
184 	x	%r3,4*3(%r14)
185 	st	%r2,4*2(%r8)
186 	x	%r4,4*4(%r14)
187 	st	%r3,4*3(%r8)
188 	lm	%r0,%r3,96+4*8+4*8(%r15)
189 	x	%r5,4*5(%r14)
190 	st	%r4,4*4(%r8)
191 	x	%r6,4*6(%r14)
192 	al	%r0,96+4*8(%r15)
193 	st	%r5,4*5(%r8)
194 	x	%r7,4*7(%r14)
195 	al	%r1,96+4*9(%r15)
196 	st	%r6,4*6(%r8)
197 	x	%r10,4*12(%r14)
198 	al	%r2,96+4*10(%r15)
199 	st	%r7,4*7(%r8)
200 	x	%r11,4*13(%r14)
201 	al	%r3,96+4*11(%r15)
202 	st	%r10,4*12(%r8)
203 	x	%r12,4*14(%r14)
204 	st	%r11,4*13(%r8)
205 	x	%r13,4*15(%r14)
206 	st	%r12,4*14(%r8)
207 	lrvr	%r0,%r0
208 	st	%r13,4*15(%r8)
209 	lrvr	%r1,%r1
210 	lrvr	%r2,%r2
211 	lrvr	%r3,%r3
212 	lhi	%r10,1
213 	x	%r0,4*8(%r14)
214 	al	%r10,96+4*12(%r15)
215 	x	%r1,4*9(%r14)
216 	st	%r0,4*8(%r8)
217 	x	%r2,4*10(%r14)
218 	st	%r1,4*9(%r8)
219 	x	%r3,4*11(%r14)
220 	st	%r2,4*10(%r8)
221 	st	%r3,4*11(%r8)
222 	clr	%r14,%r9
223 	la	%r14,64(%r14)
224 	jl	.Loop_outer
225 .Ldone:
226 	xgr	%r0,%r0
227 	xgr	%r1,%r1
228 	xgr	%r2,%r2
229 	xgr	%r3,%r3
230 	stmg	%r0,%r3,96+4*4(%r15)
231 	stmg	%r0,%r3,96+4*12(%r15)
232 	lm	%r6,%r15,176+6*4(%r15)
233 	br	%r14
234 .align	16
235 .Ltail:
236 	la	%r9,64(%r9)
237 	stm	%r0,%r7,96+4*0(%r15)
238 	slr	%r9,%r14
239 	lm	%r0,%r3,96+4*8+4*8(%r15)
240 	lhi	%r6,0
241 	stm	%r10,%r13,96+4*12(%r15)
242 	al	%r0,96+4*8(%r15)
243 	al	%r1,96+4*9(%r15)
244 	al	%r2,96+4*10(%r15)
245 	al	%r3,96+4*11(%r15)
246 	lrvr	%r0,%r0
247 	lrvr	%r1,%r1
248 	lrvr	%r2,%r2
249 	lrvr	%r3,%r3
250 	stm	%r0,%r3,96+4*8(%r15)
251 .Loop_tail:
252 	llgc	%r4,0(%r6,%r14)
253 	llgc	%r5,96(%r6,%r15)
254 	xr	%r5,%r4
255 	stc	%r5,0(%r6,%r8)
256 	la	%r6,1(%r6)
257 	brct	%r9,.Loop_tail
258 	j	.Ldone
259 .size	ChaCha20_ctr32,.-ChaCha20_ctr32
260 .align	32
261 ChaCha20_ctr32_4x:
262 .LChaCha20_ctr32_4x:
263 	stm	%r6,%r7,6*4(%r15)
264 	std	%f4,16*4+2*8(%r15)
265 	std	%f6,16*4+3*8(%r15)
266 	lhi	%r1,-160
267 	lgr	%r0,%r15
268 	la	%r15,0(%r1,%r15)
269 	st	%r0,0(%r15)
270 	larl	%r7,.Lsigma
271 	lhi	%r0,10
272 	lhi	%r1,0
273 	.word	0xe700,0x7000,0x0806	# vl	%v16,0(%r7)
274 	.word	0xe710,0x5000,0x0806	# vl	%v17,0(%r5)
275 	.word	0xe720,0x5010,0x0806	# vl	%v18,16(%r5)
276 	.word	0xe730,0x6000,0x0806	# vl	%v19,0(%r6)
277 	.word	0xe7f0,0x7040,0x0806	# vl	%v31,0x40(%r7)
278 	.word	0xe7c0,0x7050,0x0806	# vl	%v28,0x50(%r7)
279 	.word	0xe7a3,000000,0x2c4d	# vrep	%v26,%v19,0,2
280 	.word	0xe731,000000,0x2822	# vlvg	%v19,%r1,0,2
281 	.word	0xe7aa,0xc000,0x2ef3	# va	%v26,%v26,%v28,2
282 	.word	0xe703,0x7060,0x0036	# vlm	%v0,%v3,0x60(%r7)
283 	.word	0xe741,000000,0x244d	# vrep	%v4,%v17,0,2
284 	.word	0xe751,0x0001,0x244d	# vrep	%v5,%v17,1,2
285 	.word	0xe761,0x0002,0x244d	# vrep	%v6,%v17,2,2
286 	.word	0xe771,0x0003,0x244d	# vrep	%v7,%v17,3,2
287 	.word	0xe782,000000,0x244d	# vrep	%v8,%v18,0,2
288 	.word	0xe792,0x0001,0x244d	# vrep	%v9,%v18,1,2
289 	.word	0xe7a2,0x0002,0x244d	# vrep	%v10,%v18,2,2
290 	.word	0xe7b2,0x0003,0x244d	# vrep	%v11,%v18,3,2
291 	.word	0xe7ca,000000,0x0456	# vlr	%v12,%v26
292 	.word	0xe7d3,0x0001,0x244d	# vrep	%v13,%v19,1,2
293 	.word	0xe7e3,0x0002,0x244d	# vrep	%v14,%v19,2,2
294 	.word	0xe7f3,0x0003,0x244d	# vrep	%v15,%v19,3,2
295 .Loop_4x:
296 	.word	0xe700,0x4000,0x20f3	# va	%v0,%v0,%v4,2
297 	.word	0xe7cc,000000,0x006d	# vx	%v12,%v12,%v0
298 	.word	0xe7cc,0x0010,0x2033	# verll	%v12,%v12,16,2
299 	.word	0xe711,0x5000,0x20f3	# va	%v1,%v1,%v5,2
300 	.word	0xe7dd,0x1000,0x006d	# vx	%v13,%v13,%v1
301 	.word	0xe7dd,0x0010,0x2033	# verll	%v13,%v13,16,2
302 	.word	0xe722,0x6000,0x20f3	# va	%v2,%v2,%v6,2
303 	.word	0xe7ee,0x2000,0x006d	# vx	%v14,%v14,%v2
304 	.word	0xe7ee,0x0010,0x2033	# verll	%v14,%v14,16,2
305 	.word	0xe733,0x7000,0x20f3	# va	%v3,%v3,%v7,2
306 	.word	0xe7ff,0x3000,0x006d	# vx	%v15,%v15,%v3
307 	.word	0xe7ff,0x0010,0x2033	# verll	%v15,%v15,16,2
308 	.word	0xe788,0xc000,0x20f3	# va	%v8,%v8,%v12,2
309 	.word	0xe744,0x8000,0x006d	# vx	%v4,%v4,%v8
310 	.word	0xe744,0x000c,0x2033	# verll	%v4,%v4,12,2
311 	.word	0xe799,0xd000,0x20f3	# va	%v9,%v9,%v13,2
312 	.word	0xe755,0x9000,0x006d	# vx	%v5,%v5,%v9
313 	.word	0xe755,0x000c,0x2033	# verll	%v5,%v5,12,2
314 	.word	0xe7aa,0xe000,0x20f3	# va	%v10,%v10,%v14,2
315 	.word	0xe766,0xa000,0x006d	# vx	%v6,%v6,%v10
316 	.word	0xe766,0x000c,0x2033	# verll	%v6,%v6,12,2
317 	.word	0xe7bb,0xf000,0x20f3	# va	%v11,%v11,%v15,2
318 	.word	0xe777,0xb000,0x006d	# vx	%v7,%v7,%v11
319 	.word	0xe777,0x000c,0x2033	# verll	%v7,%v7,12,2
320 	.word	0xe700,0x4000,0x20f3	# va	%v0,%v0,%v4,2
321 	.word	0xe7cc,000000,0x006d	# vx	%v12,%v12,%v0
322 	.word	0xe7cc,0x0008,0x2033	# verll	%v12,%v12,8,2
323 	.word	0xe711,0x5000,0x20f3	# va	%v1,%v1,%v5,2
324 	.word	0xe7dd,0x1000,0x006d	# vx	%v13,%v13,%v1
325 	.word	0xe7dd,0x0008,0x2033	# verll	%v13,%v13,8,2
326 	.word	0xe722,0x6000,0x20f3	# va	%v2,%v2,%v6,2
327 	.word	0xe7ee,0x2000,0x006d	# vx	%v14,%v14,%v2
328 	.word	0xe7ee,0x0008,0x2033	# verll	%v14,%v14,8,2
329 	.word	0xe733,0x7000,0x20f3	# va	%v3,%v3,%v7,2
330 	.word	0xe7ff,0x3000,0x006d	# vx	%v15,%v15,%v3
331 	.word	0xe7ff,0x0008,0x2033	# verll	%v15,%v15,8,2
332 	.word	0xe788,0xc000,0x20f3	# va	%v8,%v8,%v12,2
333 	.word	0xe744,0x8000,0x006d	# vx	%v4,%v4,%v8
334 	.word	0xe744,0x0007,0x2033	# verll	%v4,%v4,7,2
335 	.word	0xe799,0xd000,0x20f3	# va	%v9,%v9,%v13,2
336 	.word	0xe755,0x9000,0x006d	# vx	%v5,%v5,%v9
337 	.word	0xe755,0x0007,0x2033	# verll	%v5,%v5,7,2
338 	.word	0xe7aa,0xe000,0x20f3	# va	%v10,%v10,%v14,2
339 	.word	0xe766,0xa000,0x006d	# vx	%v6,%v6,%v10
340 	.word	0xe766,0x0007,0x2033	# verll	%v6,%v6,7,2
341 	.word	0xe7bb,0xf000,0x20f3	# va	%v11,%v11,%v15,2
342 	.word	0xe777,0xb000,0x006d	# vx	%v7,%v7,%v11
343 	.word	0xe777,0x0007,0x2033	# verll	%v7,%v7,7,2
344 	.word	0xe700,0x5000,0x20f3	# va	%v0,%v0,%v5,2
345 	.word	0xe7ff,000000,0x006d	# vx	%v15,%v15,%v0
346 	.word	0xe7ff,0x0010,0x2033	# verll	%v15,%v15,16,2
347 	.word	0xe711,0x6000,0x20f3	# va	%v1,%v1,%v6,2
348 	.word	0xe7cc,0x1000,0x006d	# vx	%v12,%v12,%v1
349 	.word	0xe7cc,0x0010,0x2033	# verll	%v12,%v12,16,2
350 	.word	0xe722,0x7000,0x20f3	# va	%v2,%v2,%v7,2
351 	.word	0xe7dd,0x2000,0x006d	# vx	%v13,%v13,%v2
352 	.word	0xe7dd,0x0010,0x2033	# verll	%v13,%v13,16,2
353 	.word	0xe733,0x4000,0x20f3	# va	%v3,%v3,%v4,2
354 	.word	0xe7ee,0x3000,0x006d	# vx	%v14,%v14,%v3
355 	.word	0xe7ee,0x0010,0x2033	# verll	%v14,%v14,16,2
356 	.word	0xe7aa,0xf000,0x20f3	# va	%v10,%v10,%v15,2
357 	.word	0xe755,0xa000,0x006d	# vx	%v5,%v5,%v10
358 	.word	0xe755,0x000c,0x2033	# verll	%v5,%v5,12,2
359 	.word	0xe7bb,0xc000,0x20f3	# va	%v11,%v11,%v12,2
360 	.word	0xe766,0xb000,0x006d	# vx	%v6,%v6,%v11
361 	.word	0xe766,0x000c,0x2033	# verll	%v6,%v6,12,2
362 	.word	0xe788,0xd000,0x20f3	# va	%v8,%v8,%v13,2
363 	.word	0xe777,0x8000,0x006d	# vx	%v7,%v7,%v8
364 	.word	0xe777,0x000c,0x2033	# verll	%v7,%v7,12,2
365 	.word	0xe799,0xe000,0x20f3	# va	%v9,%v9,%v14,2
366 	.word	0xe744,0x9000,0x006d	# vx	%v4,%v4,%v9
367 	.word	0xe744,0x000c,0x2033	# verll	%v4,%v4,12,2
368 	.word	0xe700,0x5000,0x20f3	# va	%v0,%v0,%v5,2
369 	.word	0xe7ff,000000,0x006d	# vx	%v15,%v15,%v0
370 	.word	0xe7ff,0x0008,0x2033	# verll	%v15,%v15,8,2
371 	.word	0xe711,0x6000,0x20f3	# va	%v1,%v1,%v6,2
372 	.word	0xe7cc,0x1000,0x006d	# vx	%v12,%v12,%v1
373 	.word	0xe7cc,0x0008,0x2033	# verll	%v12,%v12,8,2
374 	.word	0xe722,0x7000,0x20f3	# va	%v2,%v2,%v7,2
375 	.word	0xe7dd,0x2000,0x006d	# vx	%v13,%v13,%v2
376 	.word	0xe7dd,0x0008,0x2033	# verll	%v13,%v13,8,2
377 	.word	0xe733,0x4000,0x20f3	# va	%v3,%v3,%v4,2
378 	.word	0xe7ee,0x3000,0x006d	# vx	%v14,%v14,%v3
379 	.word	0xe7ee,0x0008,0x2033	# verll	%v14,%v14,8,2
380 	.word	0xe7aa,0xf000,0x20f3	# va	%v10,%v10,%v15,2
381 	.word	0xe755,0xa000,0x006d	# vx	%v5,%v5,%v10
382 	.word	0xe755,0x0007,0x2033	# verll	%v5,%v5,7,2
383 	.word	0xe7bb,0xc000,0x20f3	# va	%v11,%v11,%v12,2
384 	.word	0xe766,0xb000,0x006d	# vx	%v6,%v6,%v11
385 	.word	0xe766,0x0007,0x2033	# verll	%v6,%v6,7,2
386 	.word	0xe788,0xd000,0x20f3	# va	%v8,%v8,%v13,2
387 	.word	0xe777,0x8000,0x006d	# vx	%v7,%v7,%v8
388 	.word	0xe777,0x0007,0x2033	# verll	%v7,%v7,7,2
389 	.word	0xe799,0xe000,0x20f3	# va	%v9,%v9,%v14,2
390 	.word	0xe744,0x9000,0x006d	# vx	%v4,%v4,%v9
391 	.word	0xe744,0x0007,0x2033	# verll	%v4,%v4,7,2
392 	brct	%r0,.Loop_4x
393 	.word	0xe7cc,0xa000,0x22f3	# va	%v12,%v12,%v26,2
394 	.word	0xe7b0,0x1000,0x2861	# vmrh	%v27,%v0,%v1,2
395 	.word	0xe7c2,0x3000,0x2861	# vmrh	%v28,%v2,%v3,2
396 	.word	0xe7d0,0x1000,0x2860	# vmrl	%v29,%v0,%v1,2
397 	.word	0xe7e2,0x3000,0x2860	# vmrl	%v30,%v2,%v3,2
398 	.word	0xe70b,0xc000,0x0684	# vpdi	%v0,%v27,%v28,0
399 	.word	0xe71b,0xc000,0x5684	# vpdi	%v1,%v27,%v28,5
400 	.word	0xe72d,0xe000,0x0684	# vpdi	%v2,%v29,%v30,0
401 	.word	0xe73d,0xe000,0x5684	# vpdi	%v3,%v29,%v30,5
402 	.word	0xe7b4,0x5000,0x2861	# vmrh	%v27,%v4,%v5,2
403 	.word	0xe7c6,0x7000,0x2861	# vmrh	%v28,%v6,%v7,2
404 	.word	0xe7d4,0x5000,0x2860	# vmrl	%v29,%v4,%v5,2
405 	.word	0xe7e6,0x7000,0x2860	# vmrl	%v30,%v6,%v7,2
406 	.word	0xe74b,0xc000,0x0684	# vpdi	%v4,%v27,%v28,0
407 	.word	0xe75b,0xc000,0x5684	# vpdi	%v5,%v27,%v28,5
408 	.word	0xe76d,0xe000,0x0684	# vpdi	%v6,%v29,%v30,0
409 	.word	0xe77d,0xe000,0x5684	# vpdi	%v7,%v29,%v30,5
410 	.word	0xe7b8,0x9000,0x2861	# vmrh	%v27,%v8,%v9,2
411 	.word	0xe7ca,0xb000,0x2861	# vmrh	%v28,%v10,%v11,2
412 	.word	0xe7d8,0x9000,0x2860	# vmrl	%v29,%v8,%v9,2
413 	.word	0xe7ea,0xb000,0x2860	# vmrl	%v30,%v10,%v11,2
414 	.word	0xe78b,0xc000,0x0684	# vpdi	%v8,%v27,%v28,0
415 	.word	0xe79b,0xc000,0x5684	# vpdi	%v9,%v27,%v28,5
416 	.word	0xe7ad,0xe000,0x0684	# vpdi	%v10,%v29,%v30,0
417 	.word	0xe7bd,0xe000,0x5684	# vpdi	%v11,%v29,%v30,5
418 	.word	0xe7bc,0xd000,0x2861	# vmrh	%v27,%v12,%v13,2
419 	.word	0xe7ce,0xf000,0x2861	# vmrh	%v28,%v14,%v15,2
420 	.word	0xe7dc,0xd000,0x2860	# vmrl	%v29,%v12,%v13,2
421 	.word	0xe7ee,0xf000,0x2860	# vmrl	%v30,%v14,%v15,2
422 	.word	0xe7cb,0xc000,0x0684	# vpdi	%v12,%v27,%v28,0
423 	.word	0xe7db,0xc000,0x5684	# vpdi	%v13,%v27,%v28,5
424 	.word	0xe7ed,0xe000,0x0684	# vpdi	%v14,%v29,%v30,0
425 	.word	0xe7fd,0xe000,0x5684	# vpdi	%v15,%v29,%v30,5
426 	.word	0xe700,000000,0x22f3	# va	%v0,%v0,%v16,2
427 	.word	0xe744,0x1000,0x22f3	# va	%v4,%v4,%v17,2
428 	.word	0xe788,0x2000,0x22f3	# va	%v8,%v8,%v18,2
429 	.word	0xe7cc,0x3000,0x22f3	# va	%v12,%v12,%v19,2
430 	.word	0xe700,000000,0xf18c	# vperm	%v0,%v0,%v0,%v31
431 	.word	0xe744,0x4000,0xf18c	# vperm	%v4,%v4,%v4,%v31
432 	.word	0xe788,0x8000,0xf18c	# vperm	%v8,%v8,%v8,%v31
433 	.word	0xe7cc,0xc000,0xf18c	# vperm	%v12,%v12,%v12,%v31
434 	.word	0xe7be,0x3000,0x0c36	# vlm	%v27,%v30,0(%r3)
435 	.word	0xe7bb,000000,0x0c6d	# vx	%v27,%v27,%v0
436 	.word	0xe7cc,0x4000,0x0c6d	# vx	%v28,%v28,%v4
437 	.word	0xe7dd,0x8000,0x0c6d	# vx	%v29,%v29,%v8
438 	.word	0xe7ee,0xc000,0x0c6d	# vx	%v30,%v30,%v12
439 	.word	0xe7be,0x2000,0x0c3e	# vstm	%v27,%v30,0(%r2)
440 	la	%r3,0x40(%r3)
441 	la	%r2,0x40(%r2)
442 	ahi	%r4,-64
443 	.word	0xe701,000000,0x22f3	# va	%v0,%v1,%v16,2
444 	.word	0xe745,0x1000,0x22f3	# va	%v4,%v5,%v17,2
445 	.word	0xe789,0x2000,0x22f3	# va	%v8,%v9,%v18,2
446 	.word	0xe7cd,0x3000,0x22f3	# va	%v12,%v13,%v19,2
447 	.word	0xe700,000000,0xf18c	# vperm	%v0,%v0,%v0,%v31
448 	.word	0xe744,0x4000,0xf18c	# vperm	%v4,%v4,%v4,%v31
449 	.word	0xe788,0x8000,0xf18c	# vperm	%v8,%v8,%v8,%v31
450 	.word	0xe7cc,0xc000,0xf18c	# vperm	%v12,%v12,%v12,%v31
451 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
452 	jl	.Ltail_4x
453 	.word	0xe7be,0x3000,0x0c36	# vlm	%v27,%v30,0(%r3)
454 	.word	0xe7bb,000000,0x0c6d	# vx	%v27,%v27,%v0
455 	.word	0xe7cc,0x4000,0x0c6d	# vx	%v28,%v28,%v4
456 	.word	0xe7dd,0x8000,0x0c6d	# vx	%v29,%v29,%v8
457 	.word	0xe7ee,0xc000,0x0c6d	# vx	%v30,%v30,%v12
458 	.word	0xe7be,0x2000,0x0c3e	# vstm	%v27,%v30,0(%r2)
459 	la	%r3,0x40(%r3)
460 	la	%r2,0x40(%r2)
461 	ahi	%r4,-64
462 	je	.Ldone_4x
463 	.word	0xe702,000000,0x22f3	# va	%v0,%v2,%v16,2
464 	.word	0xe746,0x1000,0x22f3	# va	%v4,%v6,%v17,2
465 	.word	0xe78a,0x2000,0x22f3	# va	%v8,%v10,%v18,2
466 	.word	0xe7ce,0x3000,0x22f3	# va	%v12,%v14,%v19,2
467 	.word	0xe700,000000,0xf18c	# vperm	%v0,%v0,%v0,%v31
468 	.word	0xe744,0x4000,0xf18c	# vperm	%v4,%v4,%v4,%v31
469 	.word	0xe788,0x8000,0xf18c	# vperm	%v8,%v8,%v8,%v31
470 	.word	0xe7cc,0xc000,0xf18c	# vperm	%v12,%v12,%v12,%v31
471 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
472 	jl	.Ltail_4x
473 	.word	0xe7be,0x3000,0x0c36	# vlm	%v27,%v30,0(%r3)
474 	.word	0xe7bb,000000,0x0c6d	# vx	%v27,%v27,%v0
475 	.word	0xe7cc,0x4000,0x0c6d	# vx	%v28,%v28,%v4
476 	.word	0xe7dd,0x8000,0x0c6d	# vx	%v29,%v29,%v8
477 	.word	0xe7ee,0xc000,0x0c6d	# vx	%v30,%v30,%v12
478 	.word	0xe7be,0x2000,0x0c3e	# vstm	%v27,%v30,0(%r2)
479 	la	%r3,0x40(%r3)
480 	la	%r2,0x40(%r2)
481 	ahi	%r4,-64
482 	je	.Ldone_4x
483 	.word	0xe703,000000,0x22f3	# va	%v0,%v3,%v16,2
484 	.word	0xe747,0x1000,0x22f3	# va	%v4,%v7,%v17,2
485 	.word	0xe78b,0x2000,0x22f3	# va	%v8,%v11,%v18,2
486 	.word	0xe7cf,0x3000,0x22f3	# va	%v12,%v15,%v19,2
487 	.word	0xe700,000000,0xf18c	# vperm	%v0,%v0,%v0,%v31
488 	.word	0xe744,0x4000,0xf18c	# vperm	%v4,%v4,%v4,%v31
489 	.word	0xe788,0x8000,0xf18c	# vperm	%v8,%v8,%v8,%v31
490 	.word	0xe7cc,0xc000,0xf18c	# vperm	%v12,%v12,%v12,%v31
491 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
492 	jl	.Ltail_4x
493 	.word	0xe7be,0x3000,0x0c36	# vlm	%v27,%v30,0(%r3)
494 	.word	0xe7bb,000000,0x0c6d	# vx	%v27,%v27,%v0
495 	.word	0xe7cc,0x4000,0x0c6d	# vx	%v28,%v28,%v4
496 	.word	0xe7dd,0x8000,0x0c6d	# vx	%v29,%v29,%v8
497 	.word	0xe7ee,0xc000,0x0c6d	# vx	%v30,%v30,%v12
498 	.word	0xe7be,0x2000,0x0c3e	# vstm	%v27,%v30,0(%r2)
499 .Ldone_4x:
500 	ld	%f4,160+16*4+2*8(%r15)
501 	ld	%f6,160+16*4+3*8(%r15)
502 	lm	%r6,%r7,160+6*4(%r15)
503 	la	%r15,160(%r15)
504 	br	%r14
505 .align	16
506 .Ltail_4x:
507 	.word	0xe7b4,000000,0x0856	# vlr	%v27,%v4
508 	ld	%f4,160+16*4+2*8(%r15)
509 	ld	%f6,160+16*4+3*8(%r15)
510 	.word	0xe700,0xf060,0x000e	# vst	%v0,96+0x00(%r15)
511 	.word	0xe7b0,0xf070,0x080e	# vst	%v27,96+0x10(%r15)
512 	.word	0xe780,0xf080,0x000e	# vst	%v8,96+0x20(%r15)
513 	.word	0xe7c0,0xf090,0x000e	# vst	%v12,96+0x30(%r15)
514 	lghi	%r1,0
515 .Loop_tail_4x:
516 	llgc	%r5,0(%r1,%r3)
517 	llgc	%r6,96(%r1,%r15)
518 	xr	%r6,%r5
519 	stc	%r6,0(%r1,%r2)
520 	la	%r1,1(%r1)
521 	brct	%r4,.Loop_tail_4x
522 	lm	%r6,%r7,160+6*4(%r15)
523 	la	%r15,160(%r15)
524 	br	%r14
525 .size	ChaCha20_ctr32_4x,.-ChaCha20_ctr32_4x
526 .globl	ChaCha20_ctr32_vx
527 .align	32
528 ChaCha20_ctr32_vx:
529 .LChaCha20_ctr32_vx:
530 	.word	0xc24f,000000,0x0100	# clfi	%r4,256
531 	jle	.LChaCha20_ctr32_4x
532 	stm	%r6,%r7,6*4(%r15)
533 	std	%f4,16*4+2*8(%r15)
534 	std	%f6,16*4+3*8(%r15)
535 	lhi	%r1,-160
536 	lgr	%r0,%r15
537 	la	%r15,0(%r1,%r15)
538 	st	%r0,0(%r15)
539 	larl	%r7,.Lsigma
540 	lhi	%r0,10
541 	.word	0xe789,0x5000,0x0c36	# vlm	%v24,%v25,0(%r5)
542 	.word	0xe7a0,0x6000,0x0806	# vl	%v26,0(%r6)
543 	.word	0xe7bf,0x7000,0x0c36	# vlm	%v27,%v31,0(%r7)
544 .Loop_outer_vx:
545 	.word	0xe70b,000000,0x0456	# vlr	%v0,%v27
546 	.word	0xe718,000000,0x0456	# vlr	%v1,%v24
547 	.word	0xe74b,000000,0x0456	# vlr	%v4,%v27
548 	.word	0xe758,000000,0x0456	# vlr	%v5,%v24
549 	.word	0xe78b,000000,0x0456	# vlr	%v8,%v27
550 	.word	0xe798,000000,0x0456	# vlr	%v9,%v24
551 	.word	0xe7cb,000000,0x0456	# vlr	%v12,%v27
552 	.word	0xe7d8,000000,0x0456	# vlr	%v13,%v24
553 	.word	0xe70b,000000,0x0c56	# vlr	%v16,%v27
554 	.word	0xe718,000000,0x0c56	# vlr	%v17,%v24
555 	.word	0xe74b,000000,0x0c56	# vlr	%v20,%v27
556 	.word	0xe758,000000,0x0c56	# vlr	%v21,%v24
557 	.word	0xe73a,000000,0x0456	# vlr	%v3,%v26
558 	.word	0xe77a,0xc000,0x26f3	# va	%v7,%v26,%v28,2
559 	.word	0xe7ba,0xd000,0x26f3	# va	%v11,%v26,%v29,2
560 	.word	0xe7fa,0xe000,0x26f3	# va	%v15,%v26,%v30,2
561 	.word	0xe73b,0xd000,0x2af3	# va	%v19,%v11,%v29,2
562 	.word	0xe77b,0xe000,0x2af3	# va	%v23,%v11,%v30,2
563 	.word	0xe729,000000,0x0456	# vlr	%v2,%v25
564 	.word	0xe769,000000,0x0456	# vlr	%v6,%v25
565 	.word	0xe7a9,000000,0x0456	# vlr	%v10,%v25
566 	.word	0xe7e9,000000,0x0456	# vlr	%v14,%v25
567 	.word	0xe729,000000,0x0c56	# vlr	%v18,%v25
568 	.word	0xe769,000000,0x0c56	# vlr	%v22,%v25
569 	.word	0xe7c7,000000,0x0856	# vlr	%v28,%v7
570 	.word	0xe7db,000000,0x0856	# vlr	%v29,%v11
571 	.word	0xe7ef,000000,0x0856	# vlr	%v30,%v15
572 .align	4
573 .Loop_vx:
574 	.word	0xe700,0x1000,0x20f3	# va	%v0,%v0,%v1,2
575 	.word	0xe744,0x5000,0x20f3	# va	%v4,%v4,%v5,2
576 	.word	0xe788,0x9000,0x20f3	# va	%v8,%v8,%v9,2
577 	.word	0xe7cc,0xd000,0x20f3	# va	%v12,%v12,%v13,2
578 	.word	0xe700,0x1000,0x2ef3	# va	%v16,%v16,%v17,2
579 	.word	0xe744,0x5000,0x2ef3	# va	%v20,%v20,%v21,2
580 	.word	0xe733,000000,0x006d	# vx	%v3,%v3,%v0
581 	.word	0xe777,0x4000,0x006d	# vx	%v7,%v7,%v4
582 	.word	0xe7bb,0x8000,0x006d	# vx	%v11,%v11,%v8
583 	.word	0xe7ff,0xc000,0x006d	# vx	%v15,%v15,%v12
584 	.word	0xe733,000000,0x0e6d	# vx	%v19,%v19,%v16
585 	.word	0xe777,0x4000,0x0e6d	# vx	%v23,%v23,%v20
586 	.word	0xe733,0x0010,0x2033	# verll	%v3,%v3,16,2
587 	.word	0xe777,0x0010,0x2033	# verll	%v7,%v7,16,2
588 	.word	0xe7bb,0x0010,0x2033	# verll	%v11,%v11,16,2
589 	.word	0xe7ff,0x0010,0x2033	# verll	%v15,%v15,16,2
590 	.word	0xe733,0x0010,0x2c33	# verll	%v19,%v19,16,2
591 	.word	0xe777,0x0010,0x2c33	# verll	%v23,%v23,16,2
592 	.word	0xe722,0x3000,0x20f3	# va	%v2,%v2,%v3,2
593 	.word	0xe766,0x7000,0x20f3	# va	%v6,%v6,%v7,2
594 	.word	0xe7aa,0xb000,0x20f3	# va	%v10,%v10,%v11,2
595 	.word	0xe7ee,0xf000,0x20f3	# va	%v14,%v14,%v15,2
596 	.word	0xe722,0x3000,0x2ef3	# va	%v18,%v18,%v19,2
597 	.word	0xe766,0x7000,0x2ef3	# va	%v22,%v22,%v23,2
598 	.word	0xe711,0x2000,0x006d	# vx	%v1,%v1,%v2
599 	.word	0xe755,0x6000,0x006d	# vx	%v5,%v5,%v6
600 	.word	0xe799,0xa000,0x006d	# vx	%v9,%v9,%v10
601 	.word	0xe7dd,0xe000,0x006d	# vx	%v13,%v13,%v14
602 	.word	0xe711,0x2000,0x0e6d	# vx	%v17,%v17,%v18
603 	.word	0xe755,0x6000,0x0e6d	# vx	%v21,%v21,%v22
604 	.word	0xe711,0x000c,0x2033	# verll	%v1,%v1,12,2
605 	.word	0xe755,0x000c,0x2033	# verll	%v5,%v5,12,2
606 	.word	0xe799,0x000c,0x2033	# verll	%v9,%v9,12,2
607 	.word	0xe7dd,0x000c,0x2033	# verll	%v13,%v13,12,2
608 	.word	0xe711,0x000c,0x2c33	# verll	%v17,%v17,12,2
609 	.word	0xe755,0x000c,0x2c33	# verll	%v21,%v21,12,2
610 	.word	0xe700,0x1000,0x20f3	# va	%v0,%v0,%v1,2
611 	.word	0xe744,0x5000,0x20f3	# va	%v4,%v4,%v5,2
612 	.word	0xe788,0x9000,0x20f3	# va	%v8,%v8,%v9,2
613 	.word	0xe7cc,0xd000,0x20f3	# va	%v12,%v12,%v13,2
614 	.word	0xe700,0x1000,0x2ef3	# va	%v16,%v16,%v17,2
615 	.word	0xe744,0x5000,0x2ef3	# va	%v20,%v20,%v21,2
616 	.word	0xe733,000000,0x006d	# vx	%v3,%v3,%v0
617 	.word	0xe777,0x4000,0x006d	# vx	%v7,%v7,%v4
618 	.word	0xe7bb,0x8000,0x006d	# vx	%v11,%v11,%v8
619 	.word	0xe7ff,0xc000,0x006d	# vx	%v15,%v15,%v12
620 	.word	0xe733,000000,0x0e6d	# vx	%v19,%v19,%v16
621 	.word	0xe777,0x4000,0x0e6d	# vx	%v23,%v23,%v20
622 	.word	0xe733,0x0008,0x2033	# verll	%v3,%v3,8,2
623 	.word	0xe777,0x0008,0x2033	# verll	%v7,%v7,8,2
624 	.word	0xe7bb,0x0008,0x2033	# verll	%v11,%v11,8,2
625 	.word	0xe7ff,0x0008,0x2033	# verll	%v15,%v15,8,2
626 	.word	0xe733,0x0008,0x2c33	# verll	%v19,%v19,8,2
627 	.word	0xe777,0x0008,0x2c33	# verll	%v23,%v23,8,2
628 	.word	0xe722,0x3000,0x20f3	# va	%v2,%v2,%v3,2
629 	.word	0xe766,0x7000,0x20f3	# va	%v6,%v6,%v7,2
630 	.word	0xe7aa,0xb000,0x20f3	# va	%v10,%v10,%v11,2
631 	.word	0xe7ee,0xf000,0x20f3	# va	%v14,%v14,%v15,2
632 	.word	0xe722,0x3000,0x2ef3	# va	%v18,%v18,%v19,2
633 	.word	0xe766,0x7000,0x2ef3	# va	%v22,%v22,%v23,2
634 	.word	0xe711,0x2000,0x006d	# vx	%v1,%v1,%v2
635 	.word	0xe755,0x6000,0x006d	# vx	%v5,%v5,%v6
636 	.word	0xe799,0xa000,0x006d	# vx	%v9,%v9,%v10
637 	.word	0xe7dd,0xe000,0x006d	# vx	%v13,%v13,%v14
638 	.word	0xe711,0x2000,0x0e6d	# vx	%v17,%v17,%v18
639 	.word	0xe755,0x6000,0x0e6d	# vx	%v21,%v21,%v22
640 	.word	0xe711,0x0007,0x2033	# verll	%v1,%v1,7,2
641 	.word	0xe755,0x0007,0x2033	# verll	%v5,%v5,7,2
642 	.word	0xe799,0x0007,0x2033	# verll	%v9,%v9,7,2
643 	.word	0xe7dd,0x0007,0x2033	# verll	%v13,%v13,7,2
644 	.word	0xe711,0x0007,0x2c33	# verll	%v17,%v17,7,2
645 	.word	0xe755,0x0007,0x2c33	# verll	%v21,%v21,7,2
646 	.word	0xe722,0x2008,0x0077	# vsldb	%v2,%v2,%v2,8
647 	.word	0xe766,0x6008,0x0077	# vsldb	%v6,%v6,%v6,8
648 	.word	0xe7aa,0xa008,0x0077	# vsldb	%v10,%v10,%v10,8
649 	.word	0xe7ee,0xe008,0x0077	# vsldb	%v14,%v14,%v14,8
650 	.word	0xe722,0x2008,0x0e77	# vsldb	%v18,%v18,%v18,8
651 	.word	0xe766,0x6008,0x0e77	# vsldb	%v22,%v22,%v22,8
652 	.word	0xe711,0x1004,0x0077	# vsldb	%v1,%v1,%v1,4
653 	.word	0xe755,0x5004,0x0077	# vsldb	%v5,%v5,%v5,4
654 	.word	0xe799,0x9004,0x0077	# vsldb	%v9,%v9,%v9,4
655 	.word	0xe7dd,0xd004,0x0077	# vsldb	%v13,%v13,%v13,4
656 	.word	0xe711,0x1004,0x0e77	# vsldb	%v17,%v17,%v17,4
657 	.word	0xe755,0x5004,0x0e77	# vsldb	%v21,%v21,%v21,4
658 	.word	0xe733,0x300c,0x0077	# vsldb	%v3,%v3,%v3,12
659 	.word	0xe777,0x700c,0x0077	# vsldb	%v7,%v7,%v7,12
660 	.word	0xe7bb,0xb00c,0x0077	# vsldb	%v11,%v11,%v11,12
661 	.word	0xe7ff,0xf00c,0x0077	# vsldb	%v15,%v15,%v15,12
662 	.word	0xe733,0x300c,0x0e77	# vsldb	%v19,%v19,%v19,12
663 	.word	0xe777,0x700c,0x0e77	# vsldb	%v23,%v23,%v23,12
664 	.word	0xe700,0x1000,0x20f3	# va	%v0,%v0,%v1,2
665 	.word	0xe744,0x5000,0x20f3	# va	%v4,%v4,%v5,2
666 	.word	0xe788,0x9000,0x20f3	# va	%v8,%v8,%v9,2
667 	.word	0xe7cc,0xd000,0x20f3	# va	%v12,%v12,%v13,2
668 	.word	0xe700,0x1000,0x2ef3	# va	%v16,%v16,%v17,2
669 	.word	0xe744,0x5000,0x2ef3	# va	%v20,%v20,%v21,2
670 	.word	0xe733,000000,0x006d	# vx	%v3,%v3,%v0
671 	.word	0xe777,0x4000,0x006d	# vx	%v7,%v7,%v4
672 	.word	0xe7bb,0x8000,0x006d	# vx	%v11,%v11,%v8
673 	.word	0xe7ff,0xc000,0x006d	# vx	%v15,%v15,%v12
674 	.word	0xe733,000000,0x0e6d	# vx	%v19,%v19,%v16
675 	.word	0xe777,0x4000,0x0e6d	# vx	%v23,%v23,%v20
676 	.word	0xe733,0x0010,0x2033	# verll	%v3,%v3,16,2
677 	.word	0xe777,0x0010,0x2033	# verll	%v7,%v7,16,2
678 	.word	0xe7bb,0x0010,0x2033	# verll	%v11,%v11,16,2
679 	.word	0xe7ff,0x0010,0x2033	# verll	%v15,%v15,16,2
680 	.word	0xe733,0x0010,0x2c33	# verll	%v19,%v19,16,2
681 	.word	0xe777,0x0010,0x2c33	# verll	%v23,%v23,16,2
682 	.word	0xe722,0x3000,0x20f3	# va	%v2,%v2,%v3,2
683 	.word	0xe766,0x7000,0x20f3	# va	%v6,%v6,%v7,2
684 	.word	0xe7aa,0xb000,0x20f3	# va	%v10,%v10,%v11,2
685 	.word	0xe7ee,0xf000,0x20f3	# va	%v14,%v14,%v15,2
686 	.word	0xe722,0x3000,0x2ef3	# va	%v18,%v18,%v19,2
687 	.word	0xe766,0x7000,0x2ef3	# va	%v22,%v22,%v23,2
688 	.word	0xe711,0x2000,0x006d	# vx	%v1,%v1,%v2
689 	.word	0xe755,0x6000,0x006d	# vx	%v5,%v5,%v6
690 	.word	0xe799,0xa000,0x006d	# vx	%v9,%v9,%v10
691 	.word	0xe7dd,0xe000,0x006d	# vx	%v13,%v13,%v14
692 	.word	0xe711,0x2000,0x0e6d	# vx	%v17,%v17,%v18
693 	.word	0xe755,0x6000,0x0e6d	# vx	%v21,%v21,%v22
694 	.word	0xe711,0x000c,0x2033	# verll	%v1,%v1,12,2
695 	.word	0xe755,0x000c,0x2033	# verll	%v5,%v5,12,2
696 	.word	0xe799,0x000c,0x2033	# verll	%v9,%v9,12,2
697 	.word	0xe7dd,0x000c,0x2033	# verll	%v13,%v13,12,2
698 	.word	0xe711,0x000c,0x2c33	# verll	%v17,%v17,12,2
699 	.word	0xe755,0x000c,0x2c33	# verll	%v21,%v21,12,2
700 	.word	0xe700,0x1000,0x20f3	# va	%v0,%v0,%v1,2
701 	.word	0xe744,0x5000,0x20f3	# va	%v4,%v4,%v5,2
702 	.word	0xe788,0x9000,0x20f3	# va	%v8,%v8,%v9,2
703 	.word	0xe7cc,0xd000,0x20f3	# va	%v12,%v12,%v13,2
704 	.word	0xe700,0x1000,0x2ef3	# va	%v16,%v16,%v17,2
705 	.word	0xe744,0x5000,0x2ef3	# va	%v20,%v20,%v21,2
706 	.word	0xe733,000000,0x006d	# vx	%v3,%v3,%v0
707 	.word	0xe777,0x4000,0x006d	# vx	%v7,%v7,%v4
708 	.word	0xe7bb,0x8000,0x006d	# vx	%v11,%v11,%v8
709 	.word	0xe7ff,0xc000,0x006d	# vx	%v15,%v15,%v12
710 	.word	0xe733,000000,0x0e6d	# vx	%v19,%v19,%v16
711 	.word	0xe777,0x4000,0x0e6d	# vx	%v23,%v23,%v20
712 	.word	0xe733,0x0008,0x2033	# verll	%v3,%v3,8,2
713 	.word	0xe777,0x0008,0x2033	# verll	%v7,%v7,8,2
714 	.word	0xe7bb,0x0008,0x2033	# verll	%v11,%v11,8,2
715 	.word	0xe7ff,0x0008,0x2033	# verll	%v15,%v15,8,2
716 	.word	0xe733,0x0008,0x2c33	# verll	%v19,%v19,8,2
717 	.word	0xe777,0x0008,0x2c33	# verll	%v23,%v23,8,2
718 	.word	0xe722,0x3000,0x20f3	# va	%v2,%v2,%v3,2
719 	.word	0xe766,0x7000,0x20f3	# va	%v6,%v6,%v7,2
720 	.word	0xe7aa,0xb000,0x20f3	# va	%v10,%v10,%v11,2
721 	.word	0xe7ee,0xf000,0x20f3	# va	%v14,%v14,%v15,2
722 	.word	0xe722,0x3000,0x2ef3	# va	%v18,%v18,%v19,2
723 	.word	0xe766,0x7000,0x2ef3	# va	%v22,%v22,%v23,2
724 	.word	0xe711,0x2000,0x006d	# vx	%v1,%v1,%v2
725 	.word	0xe755,0x6000,0x006d	# vx	%v5,%v5,%v6
726 	.word	0xe799,0xa000,0x006d	# vx	%v9,%v9,%v10
727 	.word	0xe7dd,0xe000,0x006d	# vx	%v13,%v13,%v14
728 	.word	0xe711,0x2000,0x0e6d	# vx	%v17,%v17,%v18
729 	.word	0xe755,0x6000,0x0e6d	# vx	%v21,%v21,%v22
730 	.word	0xe711,0x0007,0x2033	# verll	%v1,%v1,7,2
731 	.word	0xe755,0x0007,0x2033	# verll	%v5,%v5,7,2
732 	.word	0xe799,0x0007,0x2033	# verll	%v9,%v9,7,2
733 	.word	0xe7dd,0x0007,0x2033	# verll	%v13,%v13,7,2
734 	.word	0xe711,0x0007,0x2c33	# verll	%v17,%v17,7,2
735 	.word	0xe755,0x0007,0x2c33	# verll	%v21,%v21,7,2
736 	.word	0xe722,0x2008,0x0077	# vsldb	%v2,%v2,%v2,8
737 	.word	0xe766,0x6008,0x0077	# vsldb	%v6,%v6,%v6,8
738 	.word	0xe7aa,0xa008,0x0077	# vsldb	%v10,%v10,%v10,8
739 	.word	0xe7ee,0xe008,0x0077	# vsldb	%v14,%v14,%v14,8
740 	.word	0xe722,0x2008,0x0e77	# vsldb	%v18,%v18,%v18,8
741 	.word	0xe766,0x6008,0x0e77	# vsldb	%v22,%v22,%v22,8
742 	.word	0xe711,0x100c,0x0077	# vsldb	%v1,%v1,%v1,12
743 	.word	0xe755,0x500c,0x0077	# vsldb	%v5,%v5,%v5,12
744 	.word	0xe799,0x900c,0x0077	# vsldb	%v9,%v9,%v9,12
745 	.word	0xe7dd,0xd00c,0x0077	# vsldb	%v13,%v13,%v13,12
746 	.word	0xe711,0x100c,0x0e77	# vsldb	%v17,%v17,%v17,12
747 	.word	0xe755,0x500c,0x0e77	# vsldb	%v21,%v21,%v21,12
748 	.word	0xe733,0x3004,0x0077	# vsldb	%v3,%v3,%v3,4
749 	.word	0xe777,0x7004,0x0077	# vsldb	%v7,%v7,%v7,4
750 	.word	0xe7bb,0xb004,0x0077	# vsldb	%v11,%v11,%v11,4
751 	.word	0xe7ff,0xf004,0x0077	# vsldb	%v15,%v15,%v15,4
752 	.word	0xe733,0x3004,0x0e77	# vsldb	%v19,%v19,%v19,4
753 	.word	0xe777,0x7004,0x0e77	# vsldb	%v23,%v23,%v23,4
754 	brct	%r0,.Loop_vx
755 	.word	0xe700,0xb000,0x22f3	# va	%v0,%v0,%v27,2
756 	.word	0xe711,0x8000,0x22f3	# va	%v1,%v1,%v24,2
757 	.word	0xe722,0x9000,0x22f3	# va	%v2,%v2,%v25,2
758 	.word	0xe733,0xa000,0x22f3	# va	%v3,%v3,%v26,2
759 	.word	0xe744,0xb000,0x22f3	# va	%v4,%v4,%v27,2
760 	.word	0xe777,0xc000,0x22f3	# va	%v7,%v7,%v28,2
761 	.word	0xe700,000000,0xf18c	# vperm	%v0,%v0,%v0,%v31
762 	.word	0xe711,0x1000,0xf18c	# vperm	%v1,%v1,%v1,%v31
763 	.word	0xe722,0x2000,0xf18c	# vperm	%v2,%v2,%v2,%v31
764 	.word	0xe733,0x3000,0xf18c	# vperm	%v3,%v3,%v3,%v31
765 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
766 	jl	.Ltail_vx
767 	.word	0xe7bb,0xd000,0x22f3	# va	%v11,%v11,%v29,2
768 	.word	0xe7ff,0xe000,0x22f3	# va	%v15,%v15,%v30,2
769 	.word	0xe7be,0x3000,0x0c36	# vlm	%v27,%v30,0(%r3)
770 	.word	0xe700,0xb000,0x026d	# vx	%v0,%v0,%v27
771 	.word	0xe711,0xc000,0x026d	# vx	%v1,%v1,%v28
772 	.word	0xe722,0xd000,0x026d	# vx	%v2,%v2,%v29
773 	.word	0xe733,0xe000,0x026d	# vx	%v3,%v3,%v30
774 	.word	0xe7be,0x7000,0x0c36	# vlm	%v27,%v30,0(%r7)
775 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
776 	la	%r3,0x40(%r3)
777 	la	%r2,0x40(%r2)
778 	ahi	%r4,-64
779 	je	.Ldone_vx
780 	.word	0xe755,0x8000,0x22f3	# va	%v5,%v5,%v24,2
781 	.word	0xe766,0x9000,0x22f3	# va	%v6,%v6,%v25,2
782 	.word	0xe704,0x4000,0xf18c	# vperm	%v0,%v4,%v4,%v31
783 	.word	0xe715,0x5000,0xf18c	# vperm	%v1,%v5,%v5,%v31
784 	.word	0xe726,0x6000,0xf18c	# vperm	%v2,%v6,%v6,%v31
785 	.word	0xe737,0x7000,0xf18c	# vperm	%v3,%v7,%v7,%v31
786 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
787 	jl	.Ltail_vx
788 	.word	0xe747,0x3000,0x0036	# vlm	%v4,%v7,0(%r3)
789 	.word	0xe700,0x4000,0x006d	# vx	%v0,%v0,%v4
790 	.word	0xe711,0x5000,0x006d	# vx	%v1,%v1,%v5
791 	.word	0xe722,0x6000,0x006d	# vx	%v2,%v2,%v6
792 	.word	0xe733,0x7000,0x006d	# vx	%v3,%v3,%v7
793 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
794 	la	%r3,0x40(%r3)
795 	la	%r2,0x40(%r2)
796 	ahi	%r4,-64
797 	je	.Ldone_vx
798 	.word	0xe788,0xb000,0x22f3	# va	%v8,%v8,%v27,2
799 	.word	0xe799,0x8000,0x22f3	# va	%v9,%v9,%v24,2
800 	.word	0xe7aa,0x9000,0x22f3	# va	%v10,%v10,%v25,2
801 	.word	0xe708,0x8000,0xf18c	# vperm	%v0,%v8,%v8,%v31
802 	.word	0xe719,0x9000,0xf18c	# vperm	%v1,%v9,%v9,%v31
803 	.word	0xe72a,0xa000,0xf18c	# vperm	%v2,%v10,%v10,%v31
804 	.word	0xe73b,0xb000,0xf18c	# vperm	%v3,%v11,%v11,%v31
805 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
806 	jl	.Ltail_vx
807 	.word	0xe747,0x3000,0x0036	# vlm	%v4,%v7,0(%r3)
808 	.word	0xe700,0x4000,0x006d	# vx	%v0,%v0,%v4
809 	.word	0xe711,0x5000,0x006d	# vx	%v1,%v1,%v5
810 	.word	0xe722,0x6000,0x006d	# vx	%v2,%v2,%v6
811 	.word	0xe733,0x7000,0x006d	# vx	%v3,%v3,%v7
812 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
813 	la	%r3,0x40(%r3)
814 	la	%r2,0x40(%r2)
815 	ahi	%r4,-64
816 	je	.Ldone_vx
817 	.word	0xe7cc,0xb000,0x22f3	# va	%v12,%v12,%v27,2
818 	.word	0xe7dd,0x8000,0x22f3	# va	%v13,%v13,%v24,2
819 	.word	0xe7ee,0x9000,0x22f3	# va	%v14,%v14,%v25,2
820 	.word	0xe7ba,0xe000,0x26f3	# va	%v11,%v26,%v30,2
821 	.word	0xe70c,0xc000,0xf18c	# vperm	%v0,%v12,%v12,%v31
822 	.word	0xe71d,0xd000,0xf18c	# vperm	%v1,%v13,%v13,%v31
823 	.word	0xe72e,0xe000,0xf18c	# vperm	%v2,%v14,%v14,%v31
824 	.word	0xe73f,0xf000,0xf18c	# vperm	%v3,%v15,%v15,%v31
825 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
826 	jl	.Ltail_vx
827 	.word	0xe7fb,0xc000,0x22f3	# va	%v15,%v11,%v28,2
828 	.word	0xe747,0x3000,0x0036	# vlm	%v4,%v7,0(%r3)
829 	.word	0xe700,0x4000,0x006d	# vx	%v0,%v0,%v4
830 	.word	0xe711,0x5000,0x006d	# vx	%v1,%v1,%v5
831 	.word	0xe722,0x6000,0x006d	# vx	%v2,%v2,%v6
832 	.word	0xe733,0x7000,0x006d	# vx	%v3,%v3,%v7
833 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
834 	la	%r3,0x40(%r3)
835 	la	%r2,0x40(%r2)
836 	ahi	%r4,-64
837 	je	.Ldone_vx
838 	.word	0xe700,0xb000,0x2ef3	# va	%v16,%v16,%v27,2
839 	.word	0xe711,0x8000,0x2ef3	# va	%v17,%v17,%v24,2
840 	.word	0xe722,0x9000,0x2ef3	# va	%v18,%v18,%v25,2
841 	.word	0xe733,0xf000,0x2cf3	# va	%v19,%v19,%v15,2
842 	.word	0xe7ff,0xc000,0x22f3	# va	%v15,%v15,%v28,2
843 	.word	0xe7ab,0xe000,0x2af3	# va	%v26,%v11,%v30,2
844 	.word	0xe700,000000,0xf78c	# vperm	%v0,%v16,%v16,%v31
845 	.word	0xe711,0x1000,0xf78c	# vperm	%v1,%v17,%v17,%v31
846 	.word	0xe722,0x2000,0xf78c	# vperm	%v2,%v18,%v18,%v31
847 	.word	0xe733,0x3000,0xf78c	# vperm	%v3,%v19,%v19,%v31
848 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
849 	jl	.Ltail_vx
850 	.word	0xe747,0x3000,0x0036	# vlm	%v4,%v7,0(%r3)
851 	.word	0xe700,0x4000,0x006d	# vx	%v0,%v0,%v4
852 	.word	0xe711,0x5000,0x006d	# vx	%v1,%v1,%v5
853 	.word	0xe722,0x6000,0x006d	# vx	%v2,%v2,%v6
854 	.word	0xe733,0x7000,0x006d	# vx	%v3,%v3,%v7
855 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
856 	la	%r3,0x40(%r3)
857 	la	%r2,0x40(%r2)
858 	ahi	%r4,-64
859 	je	.Ldone_vx
860 	.word	0xe744,0xb000,0x2ef3	# va	%v20,%v20,%v27,2
861 	.word	0xe755,0x8000,0x2ef3	# va	%v21,%v21,%v24,2
862 	.word	0xe766,0x9000,0x2ef3	# va	%v22,%v22,%v25,2
863 	.word	0xe777,0xf000,0x2cf3	# va	%v23,%v23,%v15,2
864 	.word	0xe704,0x4000,0xf78c	# vperm	%v0,%v20,%v20,%v31
865 	.word	0xe715,0x5000,0xf78c	# vperm	%v1,%v21,%v21,%v31
866 	.word	0xe726,0x6000,0xf78c	# vperm	%v2,%v22,%v22,%v31
867 	.word	0xe737,0x7000,0xf78c	# vperm	%v3,%v23,%v23,%v31
868 	.word	0xc24f,000000,0x0040	# clfi	%r4,64
869 	jl	.Ltail_vx
870 	.word	0xe747,0x3000,0x0036	# vlm	%v4,%v7,0(%r3)
871 	.word	0xe700,0x4000,0x006d	# vx	%v0,%v0,%v4
872 	.word	0xe711,0x5000,0x006d	# vx	%v1,%v1,%v5
873 	.word	0xe722,0x6000,0x006d	# vx	%v2,%v2,%v6
874 	.word	0xe733,0x7000,0x006d	# vx	%v3,%v3,%v7
875 	.word	0xe703,0x2000,0x003e	# vstm	%v0,%v3,0(%r2)
876 	la	%r3,0x40(%r3)
877 	la	%r2,0x40(%r2)
878 	lhi	%r0,10
879 	ahi	%r4,-64
880 	jne	.Loop_outer_vx
881 .Ldone_vx:
882 	ld	%f4,160+16*4+2*8(%r15)
883 	ld	%f6,160+16*4+3*8(%r15)
884 	lm	%r6,%r7,160+6*4(%r15)
885 	la	%r15,160(%r15)
886 	br	%r14
887 .align	16
888 .Ltail_vx:
889 	ld	%f4,160+16*4+2*8(%r15)
890 	ld	%f6,160+16*4+3*8(%r15)
891 	.word	0xe703,0xf060,0x003e	# vstm	%v0,%v3,96(%r15)
892 	lghi	%r1,0
893 .Loop_tail_vx:
894 	llgc	%r5,0(%r1,%r3)
895 	llgc	%r6,96(%r1,%r15)
896 	xr	%r6,%r5
897 	stc	%r6,0(%r1,%r2)
898 	la	%r1,1(%r1)
899 	brct	%r4,.Loop_tail_vx
900 	lm	%r6,%r7,160+6*4(%r15)
901 	la	%r15,160(%r15)
902 	br	%r14
903 .size	ChaCha20_ctr32_vx,.-ChaCha20_ctr32_vx
904 .align	32
905 .Lsigma:
906 .long	1634760805,857760878,2036477234,1797285236
907 .long	1,0,0,0
908 .long	2,0,0,0
909 .long	3,0,0,0
910 .long	50462976,117835012,185207048,252579084
911 .long	0,1,2,3
912 .long	1634760805,1634760805,1634760805,1634760805
913 .long	857760878,857760878,857760878,857760878
914 .long	2036477234,2036477234,2036477234,2036477234
915 .long	1797285236,1797285236,1797285236,1797285236
916 .asciz	"ChaCha20 for s390x, CRYPTOGAMS by <appro@openssl.org>"
917 .align	4
918