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