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 	cmpldi	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
222 Loop_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 	cmpld	9,5
260 	bgt	Loop_2x
261 
262 	cmplwi	6,0
263 	bne	Leven
264 
265 Lshort:
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 
284 Leven:
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:
296 Lgcm_ghash_p8_4x:
297 	stdu	1,-256(1)
298 	li	10,63
299 	li	11,79
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,252(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 	srdi	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 
387 Loop_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 
438 Ltail_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 	cmpldi	6,2
467 	li	6,-4
468 	blt	Lone
469 	.long	0x7E082E99
470 	beq	Ltwo
471 
472 Lthree:
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
494 Ltwo:
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
513 Lone:
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 
527 Ldone_4x:
528 
529 	.long	0x7C001F99
530 
531 	li	10,63
532 	li	11,79
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,256
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