1/* Do not modify. This file is auto-generated from vpaes-ppc.pl. */ 2.machine "any" 3 4.abiversion 2 5.text 6 7.align 7 8_vpaes_consts: 9.Lk_mc_forward: 10.byte 0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c 11.byte 0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00 12.byte 0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04 13.byte 0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08 14.Lk_mc_backward: 15.byte 0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e 16.byte 0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a 17.byte 0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06 18.byte 0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02 19.Lk_sr: 20.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f 21.byte 0x00,0x05,0x0a,0x0f,0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07,0x0c,0x01,0x06,0x0b 22.byte 0x00,0x09,0x02,0x0b,0x04,0x0d,0x06,0x0f,0x08,0x01,0x0a,0x03,0x0c,0x05,0x0e,0x07 23.byte 0x00,0x0d,0x0a,0x07,0x04,0x01,0x0e,0x0b,0x08,0x05,0x02,0x0f,0x0c,0x09,0x06,0x03 24 25 26 27 28.Lk_inv: 29.byte 0xf0,0x01,0x08,0x0d,0x0f,0x06,0x05,0x0e,0x02,0x0c,0x0b,0x0a,0x09,0x03,0x07,0x04 30.byte 0xf0,0x07,0x0b,0x0f,0x06,0x0a,0x04,0x01,0x09,0x08,0x05,0x02,0x0c,0x0e,0x0d,0x03 31.Lk_ipt: 32.byte 0x00,0x70,0x2a,0x5a,0x98,0xe8,0xb2,0xc2,0x08,0x78,0x22,0x52,0x90,0xe0,0xba,0xca 33.byte 0x00,0x4d,0x7c,0x31,0x7d,0x30,0x01,0x4c,0x81,0xcc,0xfd,0xb0,0xfc,0xb1,0x80,0xcd 34.Lk_sbo: 35.byte 0x00,0xc7,0xbd,0x6f,0x17,0x6d,0xd2,0xd0,0x78,0xa8,0x02,0xc5,0x7a,0xbf,0xaa,0x15 36.byte 0x00,0x6a,0xbb,0x5f,0xa5,0x74,0xe4,0xcf,0xfa,0x35,0x2b,0x41,0xd1,0x90,0x1e,0x8e 37.Lk_sb1: 38.byte 0x00,0x23,0xe2,0xfa,0x15,0xd4,0x18,0x36,0xef,0xd9,0x2e,0x0d,0xc1,0xcc,0xf7,0x3b 39.byte 0x00,0x3e,0x50,0xcb,0x8f,0xe1,0x9b,0xb1,0x44,0xf5,0x2a,0x14,0x6e,0x7a,0xdf,0xa5 40.Lk_sb2: 41.byte 0x00,0x29,0xe1,0x0a,0x40,0x88,0xeb,0x69,0x4a,0x23,0x82,0xab,0xc8,0x63,0xa1,0xc2 42.byte 0x00,0x24,0x71,0x0b,0xc6,0x93,0x7a,0xe2,0xcd,0x2f,0x98,0xbc,0x55,0xe9,0xb7,0x5e 43 44 45 46 47.Lk_dipt: 48.byte 0x00,0x5f,0x54,0x0b,0x04,0x5b,0x50,0x0f,0x1a,0x45,0x4e,0x11,0x1e,0x41,0x4a,0x15 49.byte 0x00,0x65,0x05,0x60,0xe6,0x83,0xe3,0x86,0x94,0xf1,0x91,0xf4,0x72,0x17,0x77,0x12 50.Lk_dsbo: 51.byte 0x00,0x40,0xf9,0x7e,0x53,0xea,0x87,0x13,0x2d,0x3e,0x94,0xd4,0xb9,0x6d,0xaa,0xc7 52.byte 0x00,0x1d,0x44,0x93,0x0f,0x56,0xd7,0x12,0x9c,0x8e,0xc5,0xd8,0x59,0x81,0x4b,0xca 53.Lk_dsb9: 54.byte 0x00,0xd6,0x86,0x9a,0x53,0x03,0x1c,0x85,0xc9,0x4c,0x99,0x4f,0x50,0x1f,0xd5,0xca 55.byte 0x00,0x49,0xd7,0xec,0x89,0x17,0x3b,0xc0,0x65,0xa5,0xfb,0xb2,0x9e,0x2c,0x5e,0x72 56.Lk_dsbd: 57.byte 0x00,0xa2,0xb1,0xe6,0xdf,0xcc,0x57,0x7d,0x39,0x44,0x2a,0x88,0x13,0x9b,0x6e,0xf5 58.byte 0x00,0xcb,0xc6,0x24,0xf7,0xfa,0xe2,0x3c,0xd3,0xef,0xde,0x15,0x0d,0x18,0x31,0x29 59.Lk_dsbb: 60.byte 0x00,0x42,0xb4,0x96,0x92,0x64,0x22,0xd0,0x04,0xd4,0xf2,0xb0,0xf6,0x46,0x26,0x60 61.byte 0x00,0x67,0x59,0xcd,0xa6,0x98,0x94,0xc1,0x6b,0xaa,0x55,0x32,0x3e,0x0c,0xff,0xf3 62.Lk_dsbe: 63.byte 0x00,0xd0,0xd4,0x26,0x96,0x92,0xf2,0x46,0xb0,0xf6,0xb4,0x64,0x04,0x60,0x42,0x22 64.byte 0x00,0xc1,0xaa,0xff,0xcd,0xa6,0x55,0x0c,0x32,0x3e,0x59,0x98,0x6b,0xf3,0x67,0x94 65 66 67 68 69.Lk_dksd: 70.byte 0x00,0x47,0xe4,0xa3,0x5d,0x1a,0xb9,0xfe,0xf9,0xbe,0x1d,0x5a,0xa4,0xe3,0x40,0x07 71.byte 0x00,0x83,0x36,0xb5,0xf4,0x77,0xc2,0x41,0x1e,0x9d,0x28,0xab,0xea,0x69,0xdc,0x5f 72.Lk_dksb: 73.byte 0x00,0xd5,0x50,0x85,0x1f,0xca,0x4f,0x9a,0x99,0x4c,0xc9,0x1c,0x86,0x53,0xd6,0x03 74.byte 0x00,0x4a,0xfc,0xb6,0xa7,0xed,0x5b,0x11,0xc8,0x82,0x34,0x7e,0x6f,0x25,0x93,0xd9 75.Lk_dkse: 76.byte 0x00,0xd6,0xc9,0x1f,0xca,0x1c,0x03,0xd5,0x86,0x50,0x4f,0x99,0x4c,0x9a,0x85,0x53 77.byte 0xe8,0x7b,0xdc,0x4f,0x05,0x96,0x31,0xa2,0x87,0x14,0xb3,0x20,0x6a,0xf9,0x5e,0xcd 78.Lk_dks9: 79.byte 0x00,0xa7,0xd9,0x7e,0xc8,0x6f,0x11,0xb6,0xfc,0x5b,0x25,0x82,0x34,0x93,0xed,0x4a 80.byte 0x00,0x33,0x14,0x27,0x62,0x51,0x76,0x45,0xce,0xfd,0xda,0xe9,0xac,0x9f,0xb8,0x8b 81 82.Lk_rcon: 83.byte 0xb6,0xee,0x9d,0xaf,0xb9,0x91,0x83,0x1f,0x81,0x7d,0x7c,0x4d,0x08,0x98,0x2a,0x70 84.Lk_s63: 85.byte 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b 86 87.Lk_opt: 88.byte 0x00,0x60,0xb6,0xd6,0x29,0x49,0x9f,0xff,0x08,0x68,0xbe,0xde,0x21,0x41,0x97,0xf7 89.byte 0x00,0xec,0xbc,0x50,0x51,0xbd,0xed,0x01,0xe0,0x0c,0x5c,0xb0,0xb1,0x5d,0x0d,0xe1 90.Lk_deskew: 91.byte 0x00,0xe3,0xa4,0x47,0x40,0xa3,0xe4,0x07,0x1a,0xf9,0xbe,0x5d,0x5a,0xb9,0xfe,0x1d 92.byte 0x00,0x69,0xea,0x83,0xdc,0xb5,0x36,0x5f,0x77,0x1e,0x9d,0xf4,0xab,0xc2,0x41,0x28 93.align 5 94.Lconsts: 95 mflr 0 96 bcl 20,31,$+4 97 mflr 12 98 addi 12,12,-0x308 99 mtlr 0 100 blr 101.long 0 102.byte 0,12,0x14,0,0,0,0,0 103.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,108,116,105,86,101,99,44,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0 104.align 2 105.align 6 106 107 108 109 110 111 112.align 4 113_vpaes_encrypt_preheat: 114 mflr 8 115 bl .Lconsts 116 mtlr 8 117 li 11, 0xc0 118 li 10, 0xd0 119 li 9, 0xe0 120 li 8, 0xf0 121 vxor 7, 7, 7 122 vspltisb 8,4 123 vspltisb 9,0x0f 124 lvx 10, 12, 11 125 li 11, 0x100 126 lvx 11, 12, 10 127 li 10, 0x110 128 lvx 12, 12, 9 129 li 9, 0x120 130 lvx 13, 12, 8 131 li 8, 0x130 132 lvx 14, 12, 11 133 li 11, 0x140 134 lvx 15, 12, 10 135 li 10, 0x150 136 lvx 16, 12, 9 137 lvx 17, 12, 8 138 lvx 18, 12, 11 139 lvx 19, 12, 10 140 blr 141.long 0 142.byte 0,12,0x14,0,0,0,0,0 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158.align 5 159_vpaes_encrypt_core: 160 lwz 8, 240(5) 161 li 9, 16 162 lvx 5, 0, 5 163 li 11, 0x10 164 lvx 6, 9, 5 165 addi 9, 9, 16 166 vperm 5, 5, 6, 31 167 addi 10, 11, 0x40 168 vsrb 1, 0, 8 169 vperm 0, 12, 12, 0 170 vperm 1, 13, 13, 1 171 vxor 0, 0, 5 172 vxor 0, 0, 1 173 mtctr 8 174 b .Lenc_entry 175 176.align 4 177.Lenc_loop: 178 179 vperm 4, 17, 7, 2 180 lvx 1, 12, 11 181 addi 11, 11, 16 182 vperm 0, 16, 7, 3 183 vxor 4, 4, 5 184 andi. 11, 11, 0x30 185 vperm 5, 19, 7, 2 186 vxor 0, 0, 4 187 vperm 2, 18, 7, 3 188 lvx 4, 12, 10 189 addi 10, 11, 0x40 190 vperm 3, 0, 7, 1 191 vxor 2, 2, 5 192 vperm 0, 0, 7, 4 193 vxor 3, 3, 2 194 vperm 4, 3, 7, 1 195 vxor 0, 0, 3 196 vxor 0, 0, 4 197 198.Lenc_entry: 199 200 vsrb 1, 0, 8 201 vperm 5, 11, 11, 0 202 vxor 0, 0, 1 203 vperm 3, 10, 10, 1 204 vperm 4, 10, 10, 0 205 vand 0, 0, 9 206 vxor 3, 3, 5 207 vxor 4, 4, 5 208 vperm 2, 10, 7, 3 209 vor 5,6,6 210 lvx 6, 9, 5 211 vperm 3, 10, 7, 4 212 addi 9, 9, 16 213 vxor 2, 2, 0 214 vperm 5, 5, 6, 31 215 vxor 3, 3, 1 216 bdnz .Lenc_loop 217 218 219 addi 10, 11, 0x80 220 221 222 vperm 4, 14, 7, 2 223 lvx 1, 12, 10 224 vperm 0, 15, 7, 3 225 vxor 4, 4, 5 226 vxor 0, 0, 4 227 vperm 0, 0, 7, 1 228 blr 229.long 0 230.byte 0,12,0x14,0,0,0,0,0 231 232.globl vpaes_encrypt 233.type vpaes_encrypt,@function 234.align 5 235vpaes_encrypt: 236.localentry vpaes_encrypt,0 237 238 stdu 1,-256(1) 239 li 10,63 240 li 11,79 241 mflr 6 242 li 7,-1 243 stvx 20,10,1 244 addi 10,10,32 245 stvx 21,11,1 246 addi 11,11,32 247 stvx 22,10,1 248 addi 10,10,32 249 stvx 23,11,1 250 addi 11,11,32 251 stvx 24,10,1 252 addi 10,10,32 253 stvx 25,11,1 254 addi 11,11,32 255 stvx 26,10,1 256 addi 10,10,32 257 stvx 27,11,1 258 addi 11,11,32 259 stvx 28,10,1 260 addi 10,10,32 261 stvx 29,11,1 262 addi 11,11,32 263 stvx 30,10,1 264 stvx 31,11,1 265 stw 7,252(1) 266 li 0, -1 267 std 6,272(1) 268 or 0,0,0 269 270 bl _vpaes_encrypt_preheat 271 272 lvsl 27, 0, 3 273 lvx 0, 0, 3 274 addi 3, 3, 15 275 lvsr 29, 0, 4 276 lvsl 31, 0, 5 277 lvx 26, 0, 3 278 vperm 0, 0, 26, 27 279 280 bl _vpaes_encrypt_core 281 282 andi. 8, 4, 15 283 li 9, 16 284 beq .Lenc_out_aligned 285 286 vperm 0, 0, 0, 29 287 mtctr 9 288.Lenc_out_unaligned: 289 stvebx 0, 0, 4 290 addi 4, 4, 1 291 bdnz .Lenc_out_unaligned 292 b .Lenc_done 293 294.align 4 295.Lenc_out_aligned: 296 stvx 0, 0, 4 297.Lenc_done: 298 299 li 10,63 300 li 11,79 301 mtlr 6 302 or 7,7,7 303 lvx 20,10,1 304 addi 10,10,32 305 lvx 21,11,1 306 addi 11,11,32 307 lvx 22,10,1 308 addi 10,10,32 309 lvx 23,11,1 310 addi 11,11,32 311 lvx 24,10,1 312 addi 10,10,32 313 lvx 25,11,1 314 addi 11,11,32 315 lvx 26,10,1 316 addi 10,10,32 317 lvx 27,11,1 318 addi 11,11,32 319 lvx 28,10,1 320 addi 10,10,32 321 lvx 29,11,1 322 addi 11,11,32 323 lvx 30,10,1 324 lvx 31,11,1 325 addi 1,1,256 326 blr 327.long 0 328.byte 0,12,0x04,1,0x80,0,3,0 329.long 0 330.size vpaes_encrypt,.-vpaes_encrypt 331 332.align 4 333_vpaes_decrypt_preheat: 334 mflr 8 335 bl .Lconsts 336 mtlr 8 337 li 11, 0xc0 338 li 10, 0xd0 339 li 9, 0x160 340 li 8, 0x170 341 vxor 7, 7, 7 342 vspltisb 8,4 343 vspltisb 9,0x0f 344 lvx 10, 12, 11 345 li 11, 0x180 346 lvx 11, 12, 10 347 li 10, 0x190 348 lvx 12, 12, 9 349 li 9, 0x1a0 350 lvx 13, 12, 8 351 li 8, 0x1b0 352 lvx 14, 12, 11 353 li 11, 0x1c0 354 lvx 15, 12, 10 355 li 10, 0x1d0 356 lvx 16, 12, 9 357 li 9, 0x1e0 358 lvx 17, 12, 8 359 li 8, 0x1f0 360 lvx 18, 12, 11 361 li 11, 0x200 362 lvx 19, 12, 10 363 li 10, 0x210 364 lvx 20, 12, 9 365 lvx 21, 12, 8 366 lvx 22, 12, 11 367 lvx 23, 12, 10 368 blr 369.long 0 370.byte 0,12,0x14,0,0,0,0,0 371 372 373 374 375 376 377.align 4 378_vpaes_decrypt_core: 379 lwz 8, 240(5) 380 li 9, 16 381 lvx 5, 0, 5 382 li 11, 0x30 383 lvx 6, 9, 5 384 addi 9, 9, 16 385 vperm 5, 5, 6, 31 386 vsrb 1, 0, 8 387 vperm 0, 12, 12, 0 388 vperm 1, 13, 13, 1 389 vxor 0, 0, 5 390 vxor 0, 0, 1 391 mtctr 8 392 b .Ldec_entry 393 394.align 4 395.Ldec_loop: 396 397 398 399 lvx 0, 12, 11 400 401 402 vperm 4, 16, 7, 2 403 subi 11, 11, 16 404 vperm 1, 17, 7, 3 405 andi. 11, 11, 0x30 406 vxor 5, 5, 4 407 408 vxor 5, 5, 1 409 410 411 vperm 4, 18, 7, 2 412 vperm 5, 5, 7, 0 413 vperm 1, 19, 7, 3 414 vxor 5, 5, 4 415 416 vxor 5, 5, 1 417 418 419 vperm 4, 20, 7, 2 420 vperm 5, 5, 7, 0 421 vperm 1, 21, 7, 3 422 vxor 5, 5, 4 423 424 vxor 5, 5, 1 425 426 427 vperm 4, 22, 7, 2 428 vperm 5, 5, 7, 0 429 vperm 1, 23, 7, 3 430 vxor 0, 5, 4 431 vxor 0, 0, 1 432 433.Ldec_entry: 434 435 vsrb 1, 0, 8 436 vperm 2, 11, 11, 0 437 vxor 0, 0, 1 438 vperm 3, 10, 10, 1 439 vperm 4, 10, 10, 0 440 vand 0, 0, 9 441 vxor 3, 3, 2 442 vxor 4, 4, 2 443 vperm 2, 10, 7, 3 444 vor 5,6,6 445 lvx 6, 9, 5 446 vperm 3, 10, 7, 4 447 addi 9, 9, 16 448 vxor 2, 2, 0 449 vperm 5, 5, 6, 31 450 vxor 3, 3, 1 451 bdnz .Ldec_loop 452 453 454 addi 10, 11, 0x80 455 456 vperm 4, 14, 7, 2 457 458 lvx 2, 12, 10 459 vperm 1, 15, 7, 3 460 vxor 4, 4, 5 461 vxor 0, 1, 4 462 vperm 0, 0, 7, 2 463 blr 464.long 0 465.byte 0,12,0x14,0,0,0,0,0 466 467.globl vpaes_decrypt 468.type vpaes_decrypt,@function 469.align 5 470vpaes_decrypt: 471.localentry vpaes_decrypt,0 472 473 stdu 1,-256(1) 474 li 10,63 475 li 11,79 476 mflr 6 477 li 7,-1 478 stvx 20,10,1 479 addi 10,10,32 480 stvx 21,11,1 481 addi 11,11,32 482 stvx 22,10,1 483 addi 10,10,32 484 stvx 23,11,1 485 addi 11,11,32 486 stvx 24,10,1 487 addi 10,10,32 488 stvx 25,11,1 489 addi 11,11,32 490 stvx 26,10,1 491 addi 10,10,32 492 stvx 27,11,1 493 addi 11,11,32 494 stvx 28,10,1 495 addi 10,10,32 496 stvx 29,11,1 497 addi 11,11,32 498 stvx 30,10,1 499 stvx 31,11,1 500 stw 7,252(1) 501 li 0, -1 502 std 6,272(1) 503 or 0,0,0 504 505 bl _vpaes_decrypt_preheat 506 507 lvsl 27, 0, 3 508 lvx 0, 0, 3 509 addi 3, 3, 15 510 lvsr 29, 0, 4 511 lvsl 31, 0, 5 512 lvx 26, 0, 3 513 vperm 0, 0, 26, 27 514 515 bl _vpaes_decrypt_core 516 517 andi. 8, 4, 15 518 li 9, 16 519 beq .Ldec_out_aligned 520 521 vperm 0, 0, 0, 29 522 mtctr 9 523.Ldec_out_unaligned: 524 stvebx 0, 0, 4 525 addi 4, 4, 1 526 bdnz .Ldec_out_unaligned 527 b .Ldec_done 528 529.align 4 530.Ldec_out_aligned: 531 stvx 0, 0, 4 532.Ldec_done: 533 534 li 10,63 535 li 11,79 536 mtlr 6 537 or 7,7,7 538 lvx 20,10,1 539 addi 10,10,32 540 lvx 21,11,1 541 addi 11,11,32 542 lvx 22,10,1 543 addi 10,10,32 544 lvx 23,11,1 545 addi 11,11,32 546 lvx 24,10,1 547 addi 10,10,32 548 lvx 25,11,1 549 addi 11,11,32 550 lvx 26,10,1 551 addi 10,10,32 552 lvx 27,11,1 553 addi 11,11,32 554 lvx 28,10,1 555 addi 10,10,32 556 lvx 29,11,1 557 addi 11,11,32 558 lvx 30,10,1 559 lvx 31,11,1 560 addi 1,1,256 561 blr 562.long 0 563.byte 0,12,0x04,1,0x80,0,3,0 564.long 0 565.size vpaes_decrypt,.-vpaes_decrypt 566 567.globl vpaes_cbc_encrypt 568.type vpaes_cbc_encrypt,@function 569.align 5 570vpaes_cbc_encrypt: 571.localentry vpaes_cbc_encrypt,0 572 573 cmpldi 5,16 574 .long 0x4dc00020 575 576 stdu 1,-272(1) 577 mflr 0 578 li 10,63 579 li 11,79 580 li 12,-1 581 stvx 20,10,1 582 addi 10,10,32 583 stvx 21,11,1 584 addi 11,11,32 585 stvx 22,10,1 586 addi 10,10,32 587 stvx 23,11,1 588 addi 11,11,32 589 stvx 24,10,1 590 addi 10,10,32 591 stvx 25,11,1 592 addi 11,11,32 593 stvx 26,10,1 594 addi 10,10,32 595 stvx 27,11,1 596 addi 11,11,32 597 stvx 28,10,1 598 addi 10,10,32 599 stvx 29,11,1 600 addi 11,11,32 601 stvx 30,10,1 602 stvx 31,11,1 603 stw 12,252(1) 604 std 30,256(1) 605 std 31,264(1) 606 li 9, -16 607 std 0, 288(1) 608 609 and 30, 5, 9 610 andi. 9, 4, 15 611 mr 5, 6 612 mr 31, 7 613 li 6, -1 614 mcrf 1, 0 615 mr 7, 12 616 or 6,6,6 617 618 lvx 24, 0, 31 619 li 9, 15 620 lvsl 27, 0, 31 621 lvx 25, 9, 31 622 vperm 24, 24, 25, 27 623 624 cmpwi 8, 0 625 neg 8, 3 626 vxor 7, 7, 7 627 lvsl 31, 0, 5 628 lvsr 29, 0, 4 629 lvsr 27, 0, 8 630 vnor 30, 7, 7 631 lvx 26, 0, 3 632 vperm 30, 7, 30, 29 633 addi 3, 3, 15 634 635 beq .Lcbc_decrypt 636 637 bl _vpaes_encrypt_preheat 638 li 0, 16 639 640 beq 1, .Lcbc_enc_loop 641 642 vor 0,26,26 643 lvx 26, 0, 3 644 addi 3, 3, 16 645 vperm 0, 0, 26, 27 646 vxor 0, 0, 24 647 648 bl _vpaes_encrypt_core 649 650 andi. 8, 4, 15 651 vor 24,0,0 652 sub 9, 4, 8 653 vperm 28, 0, 0, 29 654 655.Lcbc_enc_head: 656 stvebx 28, 8, 9 657 cmpwi 8, 15 658 addi 8, 8, 1 659 bne .Lcbc_enc_head 660 661 sub. 30, 30, 0 662 addi 4, 4, 16 663 beq .Lcbc_unaligned_done 664 665.Lcbc_enc_loop: 666 vor 0,26,26 667 lvx 26, 0, 3 668 addi 3, 3, 16 669 vperm 0, 0, 26, 27 670 vxor 0, 0, 24 671 672 bl _vpaes_encrypt_core 673 674 vor 24,0,0 675 sub. 30, 30, 0 676 vperm 0, 0, 0, 29 677 vsel 1,28,0,30 678 vor 28,0,0 679 stvx 1, 0, 4 680 addi 4, 4, 16 681 bne .Lcbc_enc_loop 682 683 b .Lcbc_done 684 685.align 5 686.Lcbc_decrypt: 687 bl _vpaes_decrypt_preheat 688 li 0, 16 689 690 beq 1, .Lcbc_dec_loop 691 692 vor 0,26,26 693 lvx 26, 0, 3 694 addi 3, 3, 16 695 vperm 0, 0, 26, 27 696 vor 25,0,0 697 698 bl _vpaes_decrypt_core 699 700 andi. 8, 4, 15 701 vxor 0, 0, 24 702 vor 24,25,25 703 sub 9, 4, 8 704 vperm 28, 0, 0, 29 705 706.Lcbc_dec_head: 707 stvebx 28, 8, 9 708 cmpwi 8, 15 709 addi 8, 8, 1 710 bne .Lcbc_dec_head 711 712 sub. 30, 30, 0 713 addi 4, 4, 16 714 beq .Lcbc_unaligned_done 715 716.Lcbc_dec_loop: 717 vor 0,26,26 718 lvx 26, 0, 3 719 addi 3, 3, 16 720 vperm 0, 0, 26, 27 721 vor 25,0,0 722 723 bl _vpaes_decrypt_core 724 725 vxor 0, 0, 24 726 vor 24,25,25 727 sub. 30, 30, 0 728 vperm 0, 0, 0, 29 729 vsel 1,28,0,30 730 vor 28,0,0 731 stvx 1, 0, 4 732 addi 4, 4, 16 733 bne .Lcbc_dec_loop 734 735.Lcbc_done: 736 beq 1, .Lcbc_write_iv 737 738.Lcbc_unaligned_done: 739 andi. 8, 4, 15 740 sub 4, 4, 8 741 li 9, 0 742.Lcbc_tail: 743 stvebx 28, 9, 4 744 addi 9, 9, 1 745 cmpw 9, 8 746 bne .Lcbc_tail 747 748.Lcbc_write_iv: 749 neg 8, 31 750 li 10, 4 751 lvsl 29, 0, 8 752 li 11, 8 753 li 12, 12 754 vperm 24, 24, 24, 29 755 stvewx 24, 0, 31 756 stvewx 24, 10, 31 757 stvewx 24, 11, 31 758 stvewx 24, 12, 31 759 760 or 7,7,7 761 li 10,63 762 li 11,79 763 lvx 20,10,1 764 addi 10,10,32 765 lvx 21,11,1 766 addi 11,11,32 767 lvx 22,10,1 768 addi 10,10,32 769 lvx 23,11,1 770 addi 11,11,32 771 lvx 24,10,1 772 addi 10,10,32 773 lvx 25,11,1 774 addi 11,11,32 775 lvx 26,10,1 776 addi 10,10,32 777 lvx 27,11,1 778 addi 11,11,32 779 lvx 28,10,1 780 addi 10,10,32 781 lvx 29,11,1 782 addi 11,11,32 783 lvx 30,10,1 784 lvx 31,11,1 785.Lcbc_abort: 786 ld 0, 288(1) 787 ld 30,256(1) 788 ld 31,264(1) 789 mtlr 0 790 addi 1,1,272 791 blr 792.long 0 793.byte 0,12,0x04,1,0x80,2,6,0 794.long 0 795.size vpaes_cbc_encrypt,.-vpaes_cbc_encrypt 796 797 798 799 800 801.align 4 802_vpaes_key_preheat: 803 mflr 8 804 bl .Lconsts 805 mtlr 8 806 li 11, 0xc0 807 li 10, 0xd0 808 li 9, 0xe0 809 li 8, 0xf0 810 811 vspltisb 8,4 812 vxor 9,9,9 813 lvx 10, 12, 11 814 li 11, 0x120 815 lvx 11, 12, 10 816 li 10, 0x130 817 lvx 12, 12, 9 818 li 9, 0x220 819 lvx 13, 12, 8 820 li 8, 0x230 821 822 lvx 14, 12, 11 823 li 11, 0x240 824 lvx 15, 12, 10 825 li 10, 0x250 826 827 lvx 16, 12, 9 828 li 9, 0x260 829 lvx 17, 12, 8 830 li 8, 0x270 831 lvx 18, 12, 11 832 li 11, 0x280 833 lvx 19, 12, 10 834 li 10, 0x290 835 lvx 20, 12, 9 836 li 9, 0x2a0 837 lvx 21, 12, 8 838 li 8, 0x2b0 839 lvx 22, 12, 11 840 lvx 23, 12, 10 841 842 lvx 24, 12, 9 843 lvx 25, 0, 12 844 lvx 26, 12, 8 845 blr 846.long 0 847.byte 0,12,0x14,0,0,0,0,0 848 849.align 4 850_vpaes_schedule_core: 851 mflr 7 852 853 bl _vpaes_key_preheat 854 855 856 neg 8, 3 857 lvx 0, 0, 3 858 addi 3, 3, 15 859 lvsr 27, 0, 8 860 lvx 6, 0, 3 861 addi 3, 3, 8 862 vperm 0, 0, 6, 27 863 864 865 vor 3,0,0 866 bl _vpaes_schedule_transform 867 vor 7,0,0 868 869 bne 1, .Lschedule_am_decrypting 870 871 872 li 8, 0x30 873 li 9, 4 874 li 10, 8 875 li 11, 12 876 877 lvsr 29, 0, 5 878 vnor 30, 9, 9 879 vperm 30, 9, 30, 29 880 881 882 vperm 28, 0, 0, 29 883 stvewx 28, 0, 5 884 stvewx 28, 9, 5 885 stvewx 28, 10, 5 886 addi 10, 12, 0x80 887 stvewx 28, 11, 5 888 b .Lschedule_go 889 890.Lschedule_am_decrypting: 891 srwi 8, 4, 1 892 andi. 8, 8, 32 893 xori 8, 8, 32 894 addi 10, 12, 0x80 895 896 lvx 1, 8, 10 897 li 9, 4 898 li 10, 8 899 li 11, 12 900 vperm 4, 3, 3, 1 901 902 neg 0, 5 903 lvsl 29, 0, 0 904 vnor 30, 9, 9 905 vperm 30, 30, 9, 29 906 907 908 vperm 28, 4, 4, 29 909 stvewx 28, 0, 5 910 stvewx 28, 9, 5 911 stvewx 28, 10, 5 912 addi 10, 12, 0x80 913 stvewx 28, 11, 5 914 addi 5, 5, 15 915 xori 8, 8, 0x30 916 917.Lschedule_go: 918 cmplwi 4, 192 919 bgt .Lschedule_256 920 beq .Lschedule_192 921 922 923 924 925 926 927 928 929 930 931.Lschedule_128: 932 li 0, 10 933 mtctr 0 934 935.Loop_schedule_128: 936 bl _vpaes_schedule_round 937 bdz .Lschedule_mangle_last 938 bl _vpaes_schedule_mangle 939 b .Loop_schedule_128 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956.align 4 957.Lschedule_192: 958 li 0, 4 959 lvx 0, 0, 3 960 vperm 0, 6, 0, 27 961 vsldoi 0, 3, 0, 8 962 bl _vpaes_schedule_transform 963 vsldoi 6, 0, 9, 8 964 vsldoi 6, 9, 6, 8 965 mtctr 0 966 967.Loop_schedule_192: 968 bl _vpaes_schedule_round 969 vsldoi 0, 6, 0, 8 970 bl _vpaes_schedule_mangle 971 bl _vpaes_schedule_192_smear 972 bl _vpaes_schedule_mangle 973 bl _vpaes_schedule_round 974 bdz .Lschedule_mangle_last 975 bl _vpaes_schedule_mangle 976 bl _vpaes_schedule_192_smear 977 b .Loop_schedule_192 978 979 980 981 982 983 984 985 986 987 988 989.align 4 990.Lschedule_256: 991 li 0, 7 992 addi 3, 3, 8 993 lvx 0, 0, 3 994 vperm 0, 6, 0, 27 995 bl _vpaes_schedule_transform 996 mtctr 0 997 998.Loop_schedule_256: 999 bl _vpaes_schedule_mangle 1000 vor 6,0,0 1001 1002 1003 bl _vpaes_schedule_round 1004 bdz .Lschedule_mangle_last 1005 bl _vpaes_schedule_mangle 1006 1007 1008 vspltw 0, 0, 3 1009 vor 5,7,7 1010 vor 7,6,6 1011 bl _vpaes_schedule_low_round 1012 vor 7,5,5 1013 1014 b .Loop_schedule_256 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025.align 4 1026.Lschedule_mangle_last: 1027 1028 li 11, 0x2e0 1029 li 9, 0x2f0 1030 bne 1, .Lschedule_mangle_last_dec 1031 1032 1033 lvx 1, 8, 10 1034 li 11, 0x2c0 1035 li 9, 0x2d0 1036 vperm 0, 0, 0, 1 1037 1038 lvx 12, 11, 12 1039 lvx 13, 9, 12 1040 addi 5, 5, 16 1041 vxor 0, 0, 26 1042 bl _vpaes_schedule_transform 1043 1044 1045 vperm 0, 0, 0, 29 1046 li 10, 4 1047 vsel 2,28,0,30 1048 li 11, 8 1049 stvx 2, 0, 5 1050 li 12, 12 1051 stvewx 0, 0, 5 1052 stvewx 0, 10, 5 1053 stvewx 0, 11, 5 1054 stvewx 0, 12, 5 1055 b .Lschedule_mangle_done 1056 1057.align 4 1058.Lschedule_mangle_last_dec: 1059 lvx 12, 11, 12 1060 lvx 13, 9, 12 1061 addi 5, 5, -16 1062 vxor 0, 0, 26 1063 bl _vpaes_schedule_transform 1064 1065 1066 addi 9, 5, -15 1067 vperm 0, 0, 0, 29 1068 li 10, 4 1069 vsel 2,28,0,30 1070 li 11, 8 1071 stvx 2, 0, 5 1072 li 12, 12 1073 stvewx 0, 0, 9 1074 stvewx 0, 10, 9 1075 stvewx 0, 11, 9 1076 stvewx 0, 12, 9 1077 1078 1079.Lschedule_mangle_done: 1080 mtlr 7 1081 1082 vxor 0, 0, 0 1083 vxor 1, 1, 1 1084 vxor 2, 2, 2 1085 vxor 3, 3, 3 1086 vxor 4, 4, 4 1087 vxor 5, 5, 5 1088 vxor 6, 6, 6 1089 vxor 7, 7, 7 1090 1091 blr 1092.long 0 1093.byte 0,12,0x14,0,0,0,0,0 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109.align 4 1110_vpaes_schedule_192_smear: 1111 vspltw 0, 7, 3 1112 vsldoi 1, 9, 6, 12 1113 vsldoi 0, 7, 0, 8 1114 vxor 6, 6, 1 1115 vxor 6, 6, 0 1116 vor 0,6,6 1117 vsldoi 6, 6, 9, 8 1118 vsldoi 6, 9, 6, 8 1119 blr 1120.long 0 1121.byte 0,12,0x14,0,0,0,0,0 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141.align 4 1142_vpaes_schedule_round: 1143 1144 1145 vsldoi 1, 24, 9, 15 1146 vsldoi 24, 24, 24, 15 1147 vxor 7, 7, 1 1148 1149 1150 vspltw 0, 0, 3 1151 vsldoi 0, 0, 0, 1 1152 1153 1154 1155 1156_vpaes_schedule_low_round: 1157 1158 vsldoi 1, 9, 7, 12 1159 vxor 7, 7, 1 1160 vspltisb 1,0x0f 1161 vsldoi 4, 9, 7, 8 1162 1163 1164 vand 1, 1, 0 1165 vsrb 0, 0, 8 1166 vxor 7, 7, 4 1167 vperm 2, 11, 9, 1 1168 vxor 1, 1, 0 1169 vperm 3, 10, 9, 0 1170 vxor 3, 3, 2 1171 vperm 4, 10, 9, 1 1172 vxor 7, 7, 26 1173 vperm 3, 10, 9, 3 1174 vxor 4, 4, 2 1175 vperm 2, 10, 9, 4 1176 vxor 3, 3, 1 1177 vxor 2, 2, 0 1178 vperm 4, 15, 9, 3 1179 vperm 1, 14, 9, 2 1180 vxor 1, 1, 4 1181 1182 1183 vxor 0, 1, 7 1184 vxor 7, 1, 7 1185 blr 1186.long 0 1187.byte 0,12,0x14,0,0,0,0,0 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198.align 4 1199_vpaes_schedule_transform: 1200 1201 vsrb 2, 0, 8 1202 1203 vperm 0, 12, 12, 0 1204 1205 vperm 2, 13, 13, 2 1206 vxor 0, 0, 2 1207 blr 1208.long 0 1209.byte 0,12,0x14,0,0,0,0,0 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234.align 4 1235_vpaes_schedule_mangle: 1236 1237 1238 bne 1, .Lschedule_mangle_dec 1239 1240 1241 vxor 4, 0, 26 1242 addi 5, 5, 16 1243 vperm 4, 4, 4, 25 1244 vperm 1, 4, 4, 25 1245 vperm 3, 1, 1, 25 1246 vxor 4, 4, 1 1247 lvx 1, 8, 10 1248 vxor 3, 3, 4 1249 1250 vperm 3, 3, 3, 1 1251 addi 8, 8, -16 1252 andi. 8, 8, 0x30 1253 1254 1255 vperm 1, 3, 3, 29 1256 vsel 2,28,1,30 1257 vor 28,1,1 1258 stvx 2, 0, 5 1259 blr 1260 1261.align 4 1262.Lschedule_mangle_dec: 1263 1264 1265 vsrb 1, 0, 8 1266 1267 1268 1269 vperm 2, 16, 16, 0 1270 1271 vperm 3, 17, 17, 1 1272 vxor 3, 3, 2 1273 vperm 3, 3, 9, 25 1274 1275 1276 vperm 2, 18, 18, 0 1277 vxor 2, 2, 3 1278 1279 vperm 3, 19, 19, 1 1280 vxor 3, 3, 2 1281 vperm 3, 3, 9, 25 1282 1283 1284 vperm 2, 20, 20, 0 1285 vxor 2, 2, 3 1286 1287 vperm 3, 21, 21, 1 1288 vxor 3, 3, 2 1289 1290 1291 vperm 2, 22, 22, 0 1292 vperm 3, 3, 9, 25 1293 1294 vperm 4, 23, 23, 1 1295 lvx 1, 8, 10 1296 vxor 2, 2, 3 1297 vxor 3, 4, 2 1298 1299 addi 5, 5, -16 1300 1301 vperm 3, 3, 3, 1 1302 addi 8, 8, -16 1303 andi. 8, 8, 0x30 1304 1305 1306 vperm 1, 3, 3, 29 1307 vsel 2,28,1,30 1308 vor 28,1,1 1309 stvx 2, 0, 5 1310 blr 1311.long 0 1312.byte 0,12,0x14,0,0,0,0,0 1313 1314.globl vpaes_set_encrypt_key 1315.type vpaes_set_encrypt_key,@function 1316.align 5 1317vpaes_set_encrypt_key: 1318.localentry vpaes_set_encrypt_key,0 1319 1320 stdu 1,-256(1) 1321 li 10,63 1322 li 11,79 1323 mflr 0 1324 li 6,-1 1325 stvx 20,10,1 1326 addi 10,10,32 1327 stvx 21,11,1 1328 addi 11,11,32 1329 stvx 22,10,1 1330 addi 10,10,32 1331 stvx 23,11,1 1332 addi 11,11,32 1333 stvx 24,10,1 1334 addi 10,10,32 1335 stvx 25,11,1 1336 addi 11,11,32 1337 stvx 26,10,1 1338 addi 10,10,32 1339 stvx 27,11,1 1340 addi 11,11,32 1341 stvx 28,10,1 1342 addi 10,10,32 1343 stvx 29,11,1 1344 addi 11,11,32 1345 stvx 30,10,1 1346 stvx 31,11,1 1347 stw 6,252(1) 1348 li 7, -1 1349 std 0, 272(1) 1350 or 7,7,7 1351 1352 srwi 9, 4, 5 1353 addi 9, 9, 6 1354 stw 9, 240(5) 1355 1356 cmplw 1,4,4 1357 li 8, 0x30 1358 bl _vpaes_schedule_core 1359 1360 ld 0, 272(1) 1361 li 10,63 1362 li 11,79 1363 or 6,6,6 1364 mtlr 0 1365 xor 3, 3, 3 1366 lvx 20,10,1 1367 addi 10,10,32 1368 lvx 21,11,1 1369 addi 11,11,32 1370 lvx 22,10,1 1371 addi 10,10,32 1372 lvx 23,11,1 1373 addi 11,11,32 1374 lvx 24,10,1 1375 addi 10,10,32 1376 lvx 25,11,1 1377 addi 11,11,32 1378 lvx 26,10,1 1379 addi 10,10,32 1380 lvx 27,11,1 1381 addi 11,11,32 1382 lvx 28,10,1 1383 addi 10,10,32 1384 lvx 29,11,1 1385 addi 11,11,32 1386 lvx 30,10,1 1387 lvx 31,11,1 1388 addi 1,1,256 1389 blr 1390.long 0 1391.byte 0,12,0x04,1,0x80,0,3,0 1392.long 0 1393.size vpaes_set_encrypt_key,.-vpaes_set_encrypt_key 1394 1395.globl vpaes_set_decrypt_key 1396.type vpaes_set_decrypt_key,@function 1397.align 4 1398vpaes_set_decrypt_key: 1399.localentry vpaes_set_decrypt_key,0 1400 1401 stdu 1,-256(1) 1402 li 10,63 1403 li 11,79 1404 mflr 0 1405 li 6,-1 1406 stvx 20,10,1 1407 addi 10,10,32 1408 stvx 21,11,1 1409 addi 11,11,32 1410 stvx 22,10,1 1411 addi 10,10,32 1412 stvx 23,11,1 1413 addi 11,11,32 1414 stvx 24,10,1 1415 addi 10,10,32 1416 stvx 25,11,1 1417 addi 11,11,32 1418 stvx 26,10,1 1419 addi 10,10,32 1420 stvx 27,11,1 1421 addi 11,11,32 1422 stvx 28,10,1 1423 addi 10,10,32 1424 stvx 29,11,1 1425 addi 11,11,32 1426 stvx 30,10,1 1427 stvx 31,11,1 1428 stw 6,252(1) 1429 li 7, -1 1430 std 0, 272(1) 1431 or 7,7,7 1432 1433 srwi 9, 4, 5 1434 addi 9, 9, 6 1435 stw 9, 240(5) 1436 1437 slwi 9, 9, 4 1438 add 5, 5, 9 1439 1440 cmplwi 1, 4, 0 1441 srwi 8, 4, 1 1442 andi. 8, 8, 32 1443 xori 8, 8, 32 1444 bl _vpaes_schedule_core 1445 1446 ld 0, 272(1) 1447 li 10,63 1448 li 11,79 1449 or 6,6,6 1450 mtlr 0 1451 xor 3, 3, 3 1452 lvx 20,10,1 1453 addi 10,10,32 1454 lvx 21,11,1 1455 addi 11,11,32 1456 lvx 22,10,1 1457 addi 10,10,32 1458 lvx 23,11,1 1459 addi 11,11,32 1460 lvx 24,10,1 1461 addi 10,10,32 1462 lvx 25,11,1 1463 addi 11,11,32 1464 lvx 26,10,1 1465 addi 10,10,32 1466 lvx 27,11,1 1467 addi 11,11,32 1468 lvx 28,10,1 1469 addi 10,10,32 1470 lvx 29,11,1 1471 addi 11,11,32 1472 lvx 30,10,1 1473 lvx 31,11,1 1474 addi 1,1,256 1475 blr 1476.long 0 1477.byte 0,12,0x04,1,0x80,0,3,0 1478.long 0 1479.size vpaes_set_decrypt_key,.-vpaes_set_decrypt_key 1480