1.machine	"any"
2
3.csect	.text[PR],7
4
5.globl	.gcm_init_p8
6.align	5
7.gcm_init_p8:
8	li	0,-4096
9	li	8,0x10
10	li	12,-1
11	li	9,0x20
12	or	0,0,0
13	li	10,0x30
14	.long	0x7D202699
15
16	vspltisb	8,-16
17	vspltisb	5,1
18	vaddubm	8,8,8
19	vxor	4,4,4
20	vor	8,8,5
21	vsldoi	8,8,4,15
22	vsldoi	6,4,5,1
23	vaddubm	8,8,8
24	vspltisb	7,7
25	vor	8,8,6
26	vspltb	6,9,0
27	vsl	9,9,5
28	vsrab	6,6,7
29	vand	6,6,8
30	vxor	3,9,6
31
32	vsldoi	9,3,3,8
33	vsldoi	8,4,8,8
34	vsldoi	11,4,9,8
35	vsldoi	10,9,4,8
36
37	.long	0x7D001F99
38	.long	0x7D681F99
39	li	8,0x40
40	.long	0x7D291F99
41	li	9,0x50
42	.long	0x7D4A1F99
43	li	10,0x60
44
45	.long	0x10035CC8
46	.long	0x10234CC8
47	.long	0x104354C8
48
49	.long	0x10E044C8
50
51	vsldoi	5,1,4,8
52	vsldoi	6,4,1,8
53	vxor	0,0,5
54	vxor	2,2,6
55
56	vsldoi	0,0,0,8
57	vxor	0,0,7
58
59	vsldoi	6,0,0,8
60	.long	0x100044C8
61	vxor	6,6,2
62	vxor	16,0,6
63
64	vsldoi	17,16,16,8
65	vsldoi	19,4,17,8
66	vsldoi	18,17,4,8
67
68	.long	0x7E681F99
69	li	8,0x70
70	.long	0x7E291F99
71	li	9,0x80
72	.long	0x7E4A1F99
73	li	10,0x90
74	.long	0x10039CC8
75	.long	0x11B09CC8
76	.long	0x10238CC8
77	.long	0x11D08CC8
78	.long	0x104394C8
79	.long	0x11F094C8
80
81	.long	0x10E044C8
82	.long	0x114D44C8
83
84	vsldoi	5,1,4,8
85	vsldoi	6,4,1,8
86	vsldoi	11,14,4,8
87	vsldoi	9,4,14,8
88	vxor	0,0,5
89	vxor	2,2,6
90	vxor	13,13,11
91	vxor	15,15,9
92
93	vsldoi	0,0,0,8
94	vsldoi	13,13,13,8
95	vxor	0,0,7
96	vxor	13,13,10
97
98	vsldoi	6,0,0,8
99	vsldoi	9,13,13,8
100	.long	0x100044C8
101	.long	0x11AD44C8
102	vxor	6,6,2
103	vxor	9,9,15
104	vxor	0,0,6
105	vxor	13,13,9
106
107	vsldoi	9,0,0,8
108	vsldoi	17,13,13,8
109	vsldoi	11,4,9,8
110	vsldoi	10,9,4,8
111	vsldoi	19,4,17,8
112	vsldoi	18,17,4,8
113
114	.long	0x7D681F99
115	li	8,0xa0
116	.long	0x7D291F99
117	li	9,0xb0
118	.long	0x7D4A1F99
119	li	10,0xc0
120	.long	0x7E681F99
121	.long	0x7E291F99
122	.long	0x7E4A1F99
123
124	or	12,12,12
125	blr
126.long	0
127.byte	0,12,0x14,0,0,0,2,0
128.long	0
129
130.globl	.gcm_gmult_p8
131.align	5
132.gcm_gmult_p8:
133	lis	0,0xfff8
134	li	8,0x10
135	li	12,-1
136	li	9,0x20
137	or	0,0,0
138	li	10,0x30
139	.long	0x7C601E99
140
141	.long	0x7D682699
142
143	.long	0x7D292699
144
145	.long	0x7D4A2699
146
147	.long	0x7D002699
148
149	vxor	4,4,4
150
151	.long	0x10035CC8
152	.long	0x10234CC8
153	.long	0x104354C8
154
155	.long	0x10E044C8
156
157	vsldoi	5,1,4,8
158	vsldoi	6,4,1,8
159	vxor	0,0,5
160	vxor	2,2,6
161
162	vsldoi	0,0,0,8
163	vxor	0,0,7
164
165	vsldoi	6,0,0,8
166	.long	0x100044C8
167	vxor	6,6,2
168	vxor	0,0,6
169
170
171	.long	0x7C001F99
172
173	or	12,12,12
174	blr
175.long	0
176.byte	0,12,0x14,0,0,0,2,0
177.long	0
178
179
180.globl	.gcm_ghash_p8
181.align	5
182.gcm_ghash_p8:
183	li	0,-4096
184	li	8,0x10
185	li	12,-1
186	li	9,0x20
187	or	0,0,0
188	li	10,0x30
189	.long	0x7C001E99
190
191	.long	0x7D682699
192	li	8,0x40
193
194	.long	0x7D292699
195	li	9,0x50
196
197	.long	0x7D4A2699
198	li	10,0x60
199
200	.long	0x7D002699
201
202	vxor	4,4,4
203
204	cmplwi	6,64
205	bge	Lgcm_ghash_p8_4x
206
207	.long	0x7C602E99
208	addi	5,5,16
209	subic.	6,6,16
210
211	vxor	3,3,0
212	beq	Lshort
213
214	.long	0x7E682699
215	li	8,16
216	.long	0x7E292699
217	add	9,5,6
218	.long	0x7E4A2699
219	b	Loop_2x
220
221.align	5
222Loop_2x:
223	.long	0x7E002E99
224
225
226	subic	6,6,32
227	.long	0x10039CC8
228	.long	0x11B05CC8
229	subfe	0,0,0
230	.long	0x10238CC8
231	.long	0x11D04CC8
232	and	0,0,6
233	.long	0x104394C8
234	.long	0x11F054C8
235	add	5,5,0
236
237	vxor	0,0,13
238	vxor	1,1,14
239
240	.long	0x10E044C8
241
242	vsldoi	5,1,4,8
243	vsldoi	6,4,1,8
244	vxor	2,2,15
245	vxor	0,0,5
246	vxor	2,2,6
247
248	vsldoi	0,0,0,8
249	vxor	0,0,7
250	.long	0x7C682E99
251	addi	5,5,32
252
253	vsldoi	6,0,0,8
254	.long	0x100044C8
255
256	vxor	6,6,2
257	vxor	3,3,6
258	vxor	3,3,0
259	cmplw	0,9,5
260	bgt	Loop_2x
261
262	cmplwi	6,0
263	bne	Leven
264
265Lshort:
266	.long	0x10035CC8
267	.long	0x10234CC8
268	.long	0x104354C8
269
270	.long	0x10E044C8
271
272	vsldoi	5,1,4,8
273	vsldoi	6,4,1,8
274	vxor	0,0,5
275	vxor	2,2,6
276
277	vsldoi	0,0,0,8
278	vxor	0,0,7
279
280	vsldoi	6,0,0,8
281	.long	0x100044C8
282	vxor	6,6,2
283
284Leven:
285	vxor	0,0,6
286
287	.long	0x7C001F99
288
289	or	12,12,12
290	blr
291.long	0
292.byte	0,12,0x14,0,0,0,4,0
293.long	0
294.align	5
295.gcm_ghash_p8_4x:
296Lgcm_ghash_p8_4x:
297	stwu	1,-232(1)
298	li	10,39
299	li	11,55
300	stvx	20,10,1
301	addi	10,10,32
302	stvx	21,11,1
303	addi	11,11,32
304	stvx	22,10,1
305	addi	10,10,32
306	stvx	23,11,1
307	addi	11,11,32
308	stvx	24,10,1
309	addi	10,10,32
310	stvx	25,11,1
311	addi	11,11,32
312	stvx	26,10,1
313	addi	10,10,32
314	stvx	27,11,1
315	addi	11,11,32
316	stvx	28,10,1
317	addi	10,10,32
318	stvx	29,11,1
319	addi	11,11,32
320	stvx	30,10,1
321	li	10,0x60
322	stvx	31,11,1
323	li	0,-1
324	stw	12,228(1)
325	or	0,0,0
326
327	lvsl	5,0,8
328
329	li	8,0x70
330	.long	0x7E292699
331	li	9,0x80
332	vspltisb	6,8
333
334	li	10,0x90
335	.long	0x7EE82699
336	li	8,0xa0
337	.long	0x7F092699
338	li	9,0xb0
339	.long	0x7F2A2699
340	li	10,0xc0
341	.long	0x7FA82699
342	li	8,0x10
343	.long	0x7FC92699
344	li	9,0x20
345	.long	0x7FEA2699
346	li	10,0x30
347
348	vsldoi	7,4,6,8
349	vaddubm	18,5,7
350	vaddubm	19,6,18
351
352	srwi	6,6,4
353
354	.long	0x7C602E99
355	.long	0x7E082E99
356	subic.	6,6,8
357	.long	0x7EC92E99
358	.long	0x7F8A2E99
359	addi	5,5,0x40
360
361
362
363
364
365	vxor	2,3,0
366
367	.long	0x11B0BCC8
368	.long	0x11D0C4C8
369	.long	0x11F0CCC8
370
371	vperm	11,17,9,18
372	vperm	5,22,28,19
373	vperm	10,17,9,19
374	vperm	6,22,28,18
375	.long	0x12B68CC8
376	.long	0x12855CC8
377	.long	0x137C4CC8
378	.long	0x134654C8
379
380	vxor	21,21,14
381	vxor	20,20,13
382	vxor	27,27,21
383	vxor	26,26,15
384
385	blt	Ltail_4x
386
387Loop_4x:
388	.long	0x7C602E99
389	.long	0x7E082E99
390	subic.	6,6,4
391	.long	0x7EC92E99
392	.long	0x7F8A2E99
393	addi	5,5,0x40
394
395
396
397
398
399	.long	0x1002ECC8
400	.long	0x1022F4C8
401	.long	0x1042FCC8
402	.long	0x11B0BCC8
403	.long	0x11D0C4C8
404	.long	0x11F0CCC8
405
406	vxor	0,0,20
407	vxor	1,1,27
408	vxor	2,2,26
409	vperm	5,22,28,19
410	vperm	6,22,28,18
411
412	.long	0x10E044C8
413	.long	0x12855CC8
414	.long	0x134654C8
415
416	vsldoi	5,1,4,8
417	vsldoi	6,4,1,8
418	vxor	0,0,5
419	vxor	2,2,6
420
421	vsldoi	0,0,0,8
422	vxor	0,0,7
423
424	vsldoi	6,0,0,8
425	.long	0x12B68CC8
426	.long	0x137C4CC8
427	.long	0x100044C8
428
429	vxor	20,20,13
430	vxor	26,26,15
431	vxor	2,2,3
432	vxor	21,21,14
433	vxor	2,2,6
434	vxor	27,27,21
435	vxor	2,2,0
436	bge	Loop_4x
437
438Ltail_4x:
439	.long	0x1002ECC8
440	.long	0x1022F4C8
441	.long	0x1042FCC8
442
443	vxor	0,0,20
444	vxor	1,1,27
445
446	.long	0x10E044C8
447
448	vsldoi	5,1,4,8
449	vsldoi	6,4,1,8
450	vxor	2,2,26
451	vxor	0,0,5
452	vxor	2,2,6
453
454	vsldoi	0,0,0,8
455	vxor	0,0,7
456
457	vsldoi	6,0,0,8
458	.long	0x100044C8
459	vxor	6,6,2
460	vxor	0,0,6
461
462	addic.	6,6,4
463	beq	Ldone_4x
464
465	.long	0x7C602E99
466	cmplwi	6,2
467	li	6,-4
468	blt	Lone
469	.long	0x7E082E99
470	beq	Ltwo
471
472Lthree:
473	.long	0x7EC92E99
474
475
476
477
478	vxor	2,3,0
479	vor	29,23,23
480	vor	30,24,24
481	vor	31,25,25
482
483	vperm	5,16,22,19
484	vperm	6,16,22,18
485	.long	0x12B08CC8
486	.long	0x13764CC8
487	.long	0x12855CC8
488	.long	0x134654C8
489
490	vxor	27,27,21
491	b	Ltail_4x
492
493.align	4
494Ltwo:
495
496
497
498	vxor	2,3,0
499	vperm	5,4,16,19
500	vperm	6,4,16,18
501
502	vsldoi	29,4,17,8
503	vor	30,17,17
504	vsldoi	31,17,4,8
505
506	.long	0x12855CC8
507	.long	0x13704CC8
508	.long	0x134654C8
509
510	b	Ltail_4x
511
512.align	4
513Lone:
514
515
516	vsldoi	29,4,9,8
517	vor	30,9,9
518	vsldoi	31,9,4,8
519
520	vxor	2,3,0
521	vxor	20,20,20
522	vxor	27,27,27
523	vxor	26,26,26
524
525	b	Ltail_4x
526
527Ldone_4x:
528
529	.long	0x7C001F99
530
531	li	10,39
532	li	11,55
533	or	12,12,12
534	lvx	20,10,1
535	addi	10,10,32
536	lvx	21,11,1
537	addi	11,11,32
538	lvx	22,10,1
539	addi	10,10,32
540	lvx	23,11,1
541	addi	11,11,32
542	lvx	24,10,1
543	addi	10,10,32
544	lvx	25,11,1
545	addi	11,11,32
546	lvx	26,10,1
547	addi	10,10,32
548	lvx	27,11,1
549	addi	11,11,32
550	lvx	28,10,1
551	addi	10,10,32
552	lvx	29,11,1
553	addi	11,11,32
554	lvx	30,10,1
555	lvx	31,11,1
556	addi	1,1,232
557	blr
558.long	0
559.byte	0,12,0x04,0,0x80,0,4,0
560.long	0
561
562
563.byte	71,72,65,83,72,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
564.align	2
565.align	2
566