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