Lines Matching +full:0 +full:- +full:9

1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 # Accelerated AES-GCM stitched implementation for ppc64le.
5 # Copyright 2022- IBM Inc. All rights reserved
22 # Hash keys = v3 - v14
29 # v31 - counter 1
32 # vs0 - vs14 for round keys
35 # This implementation uses stitched AES-GCM approach to improve overall performance.
48 # v15 - v18 - input states
49 # vs1 - vs9 - round keys
102 xxlor 23+32, 9, 9
110 # v15 - v22 - input states
111 # vs1 - vs9 - round keys
196 xxlor 23+32, 9, 9
228 xxlor 19+32, 9, 9
236 vxor 15, 15, 0
239 vpmsumd 24, 9, 16
290 # v15 - v22 - input blocks
294 vxor 15, 15, 0 # Xi + X
297 vpmsumd 24, 9, 16
344 vpmsumd 24, 9, 20
400 vxor 28, 28, 0
423 vmr 0, 22 # update hash
428 stdu 1,-640(1)
429 mflr 0
439 li 9, 256
440 stvx 20, 9, 1
441 addi 9, 9, 16
442 stvx 21, 9, 1
443 addi 9, 9, 16
444 stvx 22, 9, 1
445 addi 9, 9, 16
446 stvx 23, 9, 1
447 addi 9, 9, 16
448 stvx 24, 9, 1
449 addi 9, 9, 16
450 stvx 25, 9, 1
451 addi 9, 9, 16
452 stvx 26, 9, 1
453 addi 9, 9, 16
454 stvx 27, 9, 1
455 addi 9, 9, 16
456 stvx 28, 9, 1
457 addi 9, 9, 16
458 stvx 29, 9, 1
459 addi 9, 9, 16
460 stvx 30, 9, 1
461 addi 9, 9, 16
462 stvx 31, 9, 1
472 std 0, 656(1)
485 li 9, 256
486 lvx 20, 9, 1
487 addi 9, 9, 16
488 lvx 21, 9, 1
489 addi 9, 9, 16
490 lvx 22, 9, 1
491 addi 9, 9, 16
492 lvx 23, 9, 1
493 addi 9, 9, 16
494 lvx 24, 9, 1
495 addi 9, 9, 16
496 lvx 25, 9, 1
497 addi 9, 9, 16
498 lvx 26, 9, 1
499 addi 9, 9, 16
500 lvx 27, 9, 1
501 addi 9, 9, 16
502 lvx 28, 9, 1
503 addi 9, 9, 16
504 lvx 29, 9, 1
505 addi 9, 9, 16
506 lvx 30, 9, 1
507 addi 9, 9, 16
508 lvx 31, 9, 1
510 ld 0, 656(1)
520 mtlr 0
526 lxvb16x 32, 0, 8 # load Xi
528 # load Hash - h^4, h^3, h^2, h
546 lxvd2x 9+32, 10, 8 # H^3l
564 # r3 - inp
565 # r4 - out
566 # r5 - len
567 # r6 - AES round keys
568 # r7 - iv and other data
569 # r8 - Xi, HPoli, hash keys
572 # Xi is at 0 in gcm_table (Xip).
581 # initialize ICB: GHASH( IV ), IV - r7
582 lxvb16x 30+32, 0, 7 # load IV - v30
585 li 11, 0 # block index
593 lxv 0, 0(6)
594 lxv 1, 0x10(6)
595 lxv 2, 0x20(6)
596 lxv 3, 0x30(6)
597 lxv 4, 0x40(6)
598 lxv 5, 0x50(6)
599 lxv 6, 0x60(6)
600 lxv 7, 0x70(6)
601 lxv 8, 0x80(6)
602 lxv 9, 0x90(6)
603 lxv 10, 0xa0(6)
605 # load rounds - 10 (128), 12 (192), 14 (256)
606 lwz 9,240(6)
610 xxlor 32+29, 0, 0
611 vxor 15, 30, 29 # IV + round key - add round key 0
613 cmpdi 9, 10
617 lxv 11, 0xb0(6)
618 lxv 12, 0xc0(6)
620 cmpdi 9, 12
624 lxv 13, 0xd0(6)
625 lxv 14, 0xe0(6)
626 cmpdi 9, 14
634 mr 9, 4
641 cmpdi 15, 0
650 divdu 10, 12, 10 # n 128 bytes-blocks
651 cmpdi 10, 0
683 lxvb16x 15, 0, 14 # load block
761 stxvb16x 47, 0, 9 # store output
763 stxvb16x 48, 15, 9 # store output
769 stxvb16x 49, 16, 9 # store output
771 stxvb16x 50, 17, 9 # store output
777 stxvb16x 51, 18, 9 # store output
779 stxvb16x 52, 19, 9 # store output
785 stxvb16x 53, 20, 9 # store output
787 stxvb16x 54, 21, 9 # store output
789 addi 9, 9, 128
794 xxlor 27+32, 0, 0
813 addi 12, 12, -128
819 stxvb16x 30+32, 0, 7 # update IV
822 cmpdi 12, 0
837 lxvb16x 15, 0, 14 # load block
872 stxvb16x 47, 0, 9 # store output
874 addi 9, 9, 16
879 addi 12, 12, -16
881 xxlor 19+32, 0, 0
887 li 15, 0
889 stxvb16x 30+32, 0, 7 # update IV
890 cmpdi 12, 0
928 li 21, 0 # encrypt
930 cmpdi 15, 0
934 cmpdi 12, 0
940 lxvb16x 15, 0, 14 # load last block
947 vspltisb 16, -1 # first 16 bytes - 0xffff...ff
948 vspltisb 17, 0 # second 16 bytes - 0x0000...00
964 stxvb16x 30+32, 0, 7 # update IV
968 stxvb16x 32, 0, 8 # write out Xi
976 vspltisb 16, -1 # first 16 bytes - 0xffff...ff
977 vspltisb 17, 0 # second 16 bytes - 0x0000...00
986 lxvb16x \_mask, 0, 10 # load partial block mask
1005 lxvb16x 17+32, 0, 14 # load last block
1007 mtvsrdd 32+16, 0, 16
1012 vxor 0, 0, 0 # clear Xi
1015 cmpdi 21, 0 # encrypt/decrypt ops?
1025 vxor 0, 0, 29
1026 stxvb16x 32, 0, 8 # save Xi
1032 mtvsrdd 32+16, 0, 16
1034 #stxvb16x 15+32, 0, 9 # last block
1037 sub 17, 16, 15 # 16 - partial
1049 addi 10, 9, -1
1060 add 9, 9, 17
1069 stxvb16x 30+32, 0, 7 # update IV
1070 xxlor 32+29, 0, 0
1071 vxor 15, 30, 29 # IV + round key - add round key 0
1072 li 15, 0
1073 std 15, 56(7) # partial done - clear
1083 # r9 - output
1084 # r12 - remaining bytes
1085 # v15 - partial input data
1091 addi 10, 9, -1
1095 li 15, 0
1106 stxvb16x 32, 0, 8 # write out Xi
1122 # initialize ICB: GHASH( IV ), IV - r7
1123 lxvb16x 30+32, 0, 7 # load IV - v30
1126 li 11, 0 # block index
1134 lxv 0, 0(6)
1135 lxv 1, 0x10(6)
1136 lxv 2, 0x20(6)
1137 lxv 3, 0x30(6)
1138 lxv 4, 0x40(6)
1139 lxv 5, 0x50(6)
1140 lxv 6, 0x60(6)
1141 lxv 7, 0x70(6)
1142 lxv 8, 0x80(6)
1143 lxv 9, 0x90(6)
1144 lxv 10, 0xa0(6)
1146 # load rounds - 10 (128), 12 (192), 14 (256)
1147 lwz 9,240(6)
1151 xxlor 32+29, 0, 0
1152 vxor 15, 30, 29 # IV + round key - add round key 0
1154 cmpdi 9, 10
1158 lxv 11, 0xb0(6)
1159 lxv 12, 0xc0(6)
1161 cmpdi 9, 12
1165 lxv 13, 0xd0(6)
1166 lxv 14, 0xe0(6)
1167 cmpdi 9, 14
1175 mr 9, 4
1182 cmpdi 15, 0
1191 divdu 10, 12, 10 # n 128 bytes-blocks
1192 cmpdi 10, 0
1224 lxvb16x 15, 0, 14 # load block
1302 stxvb16x 47, 0, 9 # store output
1304 stxvb16x 48, 15, 9 # store output
1310 stxvb16x 49, 16, 9 # store output
1312 stxvb16x 50, 17, 9 # store output
1318 stxvb16x 51, 18, 9 # store output
1320 stxvb16x 52, 19, 9 # store output
1326 stxvb16x 53, 20, 9 # store output
1328 stxvb16x 54, 21, 9 # store output
1330 addi 9, 9, 128
1344 xxlor 27+32, 0, 0
1363 addi 12, 12, -128
1369 stxvb16x 30+32, 0, 7 # update IV
1372 cmpdi 12, 0
1387 lxvb16x 15, 0, 14 # load block
1422 stxvb16x 47, 0, 9 # store output
1424 addi 9, 9, 16
1430 addi 12, 12, -16
1432 xxlor 19+32, 0, 0
1438 li 15, 0
1440 stxvb16x 30+32, 0, 7 # update IV
1441 cmpdi 12, 0
1481 cmpdi 15, 0
1484 cmpdi 12, 0
1490 lxvb16x 15, 0, 14 # load last block
1497 vspltisb 16, -1 # first 16 bytes - 0xffff...ff
1498 vspltisb 17, 0 # second 16 bytes - 0x0000...00
1515 stxvb16x 30+32, 0, 7 # update IV
1519 stxvb16x 32, 0, 8 # write out Xi