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