1#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) 2.text 3 4 5 6 7 8.p2align 6 9_bsaes_encrypt8: 10 leaq L$BS0(%rip),%r11 11 12 movdqa (%rax),%xmm8 13 leaq 16(%rax),%rax 14 movdqa 80(%r11),%xmm7 15 pxor %xmm8,%xmm15 16 pxor %xmm8,%xmm0 17 pxor %xmm8,%xmm1 18 pxor %xmm8,%xmm2 19.byte 102,68,15,56,0,255 20.byte 102,15,56,0,199 21 pxor %xmm8,%xmm3 22 pxor %xmm8,%xmm4 23.byte 102,15,56,0,207 24.byte 102,15,56,0,215 25 pxor %xmm8,%xmm5 26 pxor %xmm8,%xmm6 27.byte 102,15,56,0,223 28.byte 102,15,56,0,231 29.byte 102,15,56,0,239 30.byte 102,15,56,0,247 31_bsaes_encrypt8_bitslice: 32 movdqa 0(%r11),%xmm7 33 movdqa 16(%r11),%xmm8 34 movdqa %xmm5,%xmm9 35 psrlq $1,%xmm5 36 movdqa %xmm3,%xmm10 37 psrlq $1,%xmm3 38 pxor %xmm6,%xmm5 39 pxor %xmm4,%xmm3 40 pand %xmm7,%xmm5 41 pand %xmm7,%xmm3 42 pxor %xmm5,%xmm6 43 psllq $1,%xmm5 44 pxor %xmm3,%xmm4 45 psllq $1,%xmm3 46 pxor %xmm9,%xmm5 47 pxor %xmm10,%xmm3 48 movdqa %xmm1,%xmm9 49 psrlq $1,%xmm1 50 movdqa %xmm15,%xmm10 51 psrlq $1,%xmm15 52 pxor %xmm2,%xmm1 53 pxor %xmm0,%xmm15 54 pand %xmm7,%xmm1 55 pand %xmm7,%xmm15 56 pxor %xmm1,%xmm2 57 psllq $1,%xmm1 58 pxor %xmm15,%xmm0 59 psllq $1,%xmm15 60 pxor %xmm9,%xmm1 61 pxor %xmm10,%xmm15 62 movdqa 32(%r11),%xmm7 63 movdqa %xmm4,%xmm9 64 psrlq $2,%xmm4 65 movdqa %xmm3,%xmm10 66 psrlq $2,%xmm3 67 pxor %xmm6,%xmm4 68 pxor %xmm5,%xmm3 69 pand %xmm8,%xmm4 70 pand %xmm8,%xmm3 71 pxor %xmm4,%xmm6 72 psllq $2,%xmm4 73 pxor %xmm3,%xmm5 74 psllq $2,%xmm3 75 pxor %xmm9,%xmm4 76 pxor %xmm10,%xmm3 77 movdqa %xmm0,%xmm9 78 psrlq $2,%xmm0 79 movdqa %xmm15,%xmm10 80 psrlq $2,%xmm15 81 pxor %xmm2,%xmm0 82 pxor %xmm1,%xmm15 83 pand %xmm8,%xmm0 84 pand %xmm8,%xmm15 85 pxor %xmm0,%xmm2 86 psllq $2,%xmm0 87 pxor %xmm15,%xmm1 88 psllq $2,%xmm15 89 pxor %xmm9,%xmm0 90 pxor %xmm10,%xmm15 91 movdqa %xmm2,%xmm9 92 psrlq $4,%xmm2 93 movdqa %xmm1,%xmm10 94 psrlq $4,%xmm1 95 pxor %xmm6,%xmm2 96 pxor %xmm5,%xmm1 97 pand %xmm7,%xmm2 98 pand %xmm7,%xmm1 99 pxor %xmm2,%xmm6 100 psllq $4,%xmm2 101 pxor %xmm1,%xmm5 102 psllq $4,%xmm1 103 pxor %xmm9,%xmm2 104 pxor %xmm10,%xmm1 105 movdqa %xmm0,%xmm9 106 psrlq $4,%xmm0 107 movdqa %xmm15,%xmm10 108 psrlq $4,%xmm15 109 pxor %xmm4,%xmm0 110 pxor %xmm3,%xmm15 111 pand %xmm7,%xmm0 112 pand %xmm7,%xmm15 113 pxor %xmm0,%xmm4 114 psllq $4,%xmm0 115 pxor %xmm15,%xmm3 116 psllq $4,%xmm15 117 pxor %xmm9,%xmm0 118 pxor %xmm10,%xmm15 119 decl %r10d 120 jmp L$enc_sbox 121.p2align 4 122L$enc_loop: 123 pxor 0(%rax),%xmm15 124 pxor 16(%rax),%xmm0 125 pxor 32(%rax),%xmm1 126 pxor 48(%rax),%xmm2 127.byte 102,68,15,56,0,255 128.byte 102,15,56,0,199 129 pxor 64(%rax),%xmm3 130 pxor 80(%rax),%xmm4 131.byte 102,15,56,0,207 132.byte 102,15,56,0,215 133 pxor 96(%rax),%xmm5 134 pxor 112(%rax),%xmm6 135.byte 102,15,56,0,223 136.byte 102,15,56,0,231 137.byte 102,15,56,0,239 138.byte 102,15,56,0,247 139 leaq 128(%rax),%rax 140L$enc_sbox: 141 pxor %xmm5,%xmm4 142 pxor %xmm0,%xmm1 143 pxor %xmm15,%xmm2 144 pxor %xmm1,%xmm5 145 pxor %xmm15,%xmm4 146 147 pxor %xmm2,%xmm5 148 pxor %xmm6,%xmm2 149 pxor %xmm4,%xmm6 150 pxor %xmm3,%xmm2 151 pxor %xmm4,%xmm3 152 pxor %xmm0,%xmm2 153 154 pxor %xmm6,%xmm1 155 pxor %xmm4,%xmm0 156 movdqa %xmm6,%xmm10 157 movdqa %xmm0,%xmm9 158 movdqa %xmm4,%xmm8 159 movdqa %xmm1,%xmm12 160 movdqa %xmm5,%xmm11 161 162 pxor %xmm3,%xmm10 163 pxor %xmm1,%xmm9 164 pxor %xmm2,%xmm8 165 movdqa %xmm10,%xmm13 166 pxor %xmm3,%xmm12 167 movdqa %xmm9,%xmm7 168 pxor %xmm15,%xmm11 169 movdqa %xmm10,%xmm14 170 171 por %xmm8,%xmm9 172 por %xmm11,%xmm10 173 pxor %xmm7,%xmm14 174 pand %xmm11,%xmm13 175 pxor %xmm8,%xmm11 176 pand %xmm8,%xmm7 177 pand %xmm11,%xmm14 178 movdqa %xmm2,%xmm11 179 pxor %xmm15,%xmm11 180 pand %xmm11,%xmm12 181 pxor %xmm12,%xmm10 182 pxor %xmm12,%xmm9 183 movdqa %xmm6,%xmm12 184 movdqa %xmm4,%xmm11 185 pxor %xmm0,%xmm12 186 pxor %xmm5,%xmm11 187 movdqa %xmm12,%xmm8 188 pand %xmm11,%xmm12 189 por %xmm11,%xmm8 190 pxor %xmm12,%xmm7 191 pxor %xmm14,%xmm10 192 pxor %xmm13,%xmm9 193 pxor %xmm14,%xmm8 194 movdqa %xmm1,%xmm11 195 pxor %xmm13,%xmm7 196 movdqa %xmm3,%xmm12 197 pxor %xmm13,%xmm8 198 movdqa %xmm0,%xmm13 199 pand %xmm2,%xmm11 200 movdqa %xmm6,%xmm14 201 pand %xmm15,%xmm12 202 pand %xmm4,%xmm13 203 por %xmm5,%xmm14 204 pxor %xmm11,%xmm10 205 pxor %xmm12,%xmm9 206 pxor %xmm13,%xmm8 207 pxor %xmm14,%xmm7 208 209 210 211 212 213 movdqa %xmm10,%xmm11 214 pand %xmm8,%xmm10 215 pxor %xmm9,%xmm11 216 217 movdqa %xmm7,%xmm13 218 movdqa %xmm11,%xmm14 219 pxor %xmm10,%xmm13 220 pand %xmm13,%xmm14 221 222 movdqa %xmm8,%xmm12 223 pxor %xmm9,%xmm14 224 pxor %xmm7,%xmm12 225 226 pxor %xmm9,%xmm10 227 228 pand %xmm10,%xmm12 229 230 movdqa %xmm13,%xmm9 231 pxor %xmm7,%xmm12 232 233 pxor %xmm12,%xmm9 234 pxor %xmm12,%xmm8 235 236 pand %xmm7,%xmm9 237 238 pxor %xmm9,%xmm13 239 pxor %xmm9,%xmm8 240 241 pand %xmm14,%xmm13 242 243 pxor %xmm11,%xmm13 244 movdqa %xmm5,%xmm11 245 movdqa %xmm4,%xmm7 246 movdqa %xmm14,%xmm9 247 pxor %xmm13,%xmm9 248 pand %xmm5,%xmm9 249 pxor %xmm4,%xmm5 250 pand %xmm14,%xmm4 251 pand %xmm13,%xmm5 252 pxor %xmm4,%xmm5 253 pxor %xmm9,%xmm4 254 pxor %xmm15,%xmm11 255 pxor %xmm2,%xmm7 256 pxor %xmm12,%xmm14 257 pxor %xmm8,%xmm13 258 movdqa %xmm14,%xmm10 259 movdqa %xmm12,%xmm9 260 pxor %xmm13,%xmm10 261 pxor %xmm8,%xmm9 262 pand %xmm11,%xmm10 263 pand %xmm15,%xmm9 264 pxor %xmm7,%xmm11 265 pxor %xmm2,%xmm15 266 pand %xmm14,%xmm7 267 pand %xmm12,%xmm2 268 pand %xmm13,%xmm11 269 pand %xmm8,%xmm15 270 pxor %xmm11,%xmm7 271 pxor %xmm2,%xmm15 272 pxor %xmm10,%xmm11 273 pxor %xmm9,%xmm2 274 pxor %xmm11,%xmm5 275 pxor %xmm11,%xmm15 276 pxor %xmm7,%xmm4 277 pxor %xmm7,%xmm2 278 279 movdqa %xmm6,%xmm11 280 movdqa %xmm0,%xmm7 281 pxor %xmm3,%xmm11 282 pxor %xmm1,%xmm7 283 movdqa %xmm14,%xmm10 284 movdqa %xmm12,%xmm9 285 pxor %xmm13,%xmm10 286 pxor %xmm8,%xmm9 287 pand %xmm11,%xmm10 288 pand %xmm3,%xmm9 289 pxor %xmm7,%xmm11 290 pxor %xmm1,%xmm3 291 pand %xmm14,%xmm7 292 pand %xmm12,%xmm1 293 pand %xmm13,%xmm11 294 pand %xmm8,%xmm3 295 pxor %xmm11,%xmm7 296 pxor %xmm1,%xmm3 297 pxor %xmm10,%xmm11 298 pxor %xmm9,%xmm1 299 pxor %xmm12,%xmm14 300 pxor %xmm8,%xmm13 301 movdqa %xmm14,%xmm10 302 pxor %xmm13,%xmm10 303 pand %xmm6,%xmm10 304 pxor %xmm0,%xmm6 305 pand %xmm14,%xmm0 306 pand %xmm13,%xmm6 307 pxor %xmm0,%xmm6 308 pxor %xmm10,%xmm0 309 pxor %xmm11,%xmm6 310 pxor %xmm11,%xmm3 311 pxor %xmm7,%xmm0 312 pxor %xmm7,%xmm1 313 pxor %xmm15,%xmm6 314 pxor %xmm5,%xmm0 315 pxor %xmm6,%xmm3 316 pxor %xmm15,%xmm5 317 pxor %xmm0,%xmm15 318 319 pxor %xmm4,%xmm0 320 pxor %xmm1,%xmm4 321 pxor %xmm2,%xmm1 322 pxor %xmm4,%xmm2 323 pxor %xmm4,%xmm3 324 325 pxor %xmm2,%xmm5 326 decl %r10d 327 jl L$enc_done 328 pshufd $0x93,%xmm15,%xmm7 329 pshufd $0x93,%xmm0,%xmm8 330 pxor %xmm7,%xmm15 331 pshufd $0x93,%xmm3,%xmm9 332 pxor %xmm8,%xmm0 333 pshufd $0x93,%xmm5,%xmm10 334 pxor %xmm9,%xmm3 335 pshufd $0x93,%xmm2,%xmm11 336 pxor %xmm10,%xmm5 337 pshufd $0x93,%xmm6,%xmm12 338 pxor %xmm11,%xmm2 339 pshufd $0x93,%xmm1,%xmm13 340 pxor %xmm12,%xmm6 341 pshufd $0x93,%xmm4,%xmm14 342 pxor %xmm13,%xmm1 343 pxor %xmm14,%xmm4 344 345 pxor %xmm15,%xmm8 346 pxor %xmm4,%xmm7 347 pxor %xmm4,%xmm8 348 pshufd $0x4E,%xmm15,%xmm15 349 pxor %xmm0,%xmm9 350 pshufd $0x4E,%xmm0,%xmm0 351 pxor %xmm2,%xmm12 352 pxor %xmm7,%xmm15 353 pxor %xmm6,%xmm13 354 pxor %xmm8,%xmm0 355 pxor %xmm5,%xmm11 356 pshufd $0x4E,%xmm2,%xmm7 357 pxor %xmm1,%xmm14 358 pshufd $0x4E,%xmm6,%xmm8 359 pxor %xmm3,%xmm10 360 pshufd $0x4E,%xmm5,%xmm2 361 pxor %xmm4,%xmm10 362 pshufd $0x4E,%xmm4,%xmm6 363 pxor %xmm4,%xmm11 364 pshufd $0x4E,%xmm1,%xmm5 365 pxor %xmm11,%xmm7 366 pshufd $0x4E,%xmm3,%xmm1 367 pxor %xmm12,%xmm8 368 pxor %xmm10,%xmm2 369 pxor %xmm14,%xmm6 370 pxor %xmm13,%xmm5 371 movdqa %xmm7,%xmm3 372 pxor %xmm9,%xmm1 373 movdqa %xmm8,%xmm4 374 movdqa 48(%r11),%xmm7 375 jnz L$enc_loop 376 movdqa 64(%r11),%xmm7 377 jmp L$enc_loop 378.p2align 4 379L$enc_done: 380 movdqa 0(%r11),%xmm7 381 movdqa 16(%r11),%xmm8 382 movdqa %xmm1,%xmm9 383 psrlq $1,%xmm1 384 movdqa %xmm2,%xmm10 385 psrlq $1,%xmm2 386 pxor %xmm4,%xmm1 387 pxor %xmm6,%xmm2 388 pand %xmm7,%xmm1 389 pand %xmm7,%xmm2 390 pxor %xmm1,%xmm4 391 psllq $1,%xmm1 392 pxor %xmm2,%xmm6 393 psllq $1,%xmm2 394 pxor %xmm9,%xmm1 395 pxor %xmm10,%xmm2 396 movdqa %xmm3,%xmm9 397 psrlq $1,%xmm3 398 movdqa %xmm15,%xmm10 399 psrlq $1,%xmm15 400 pxor %xmm5,%xmm3 401 pxor %xmm0,%xmm15 402 pand %xmm7,%xmm3 403 pand %xmm7,%xmm15 404 pxor %xmm3,%xmm5 405 psllq $1,%xmm3 406 pxor %xmm15,%xmm0 407 psllq $1,%xmm15 408 pxor %xmm9,%xmm3 409 pxor %xmm10,%xmm15 410 movdqa 32(%r11),%xmm7 411 movdqa %xmm6,%xmm9 412 psrlq $2,%xmm6 413 movdqa %xmm2,%xmm10 414 psrlq $2,%xmm2 415 pxor %xmm4,%xmm6 416 pxor %xmm1,%xmm2 417 pand %xmm8,%xmm6 418 pand %xmm8,%xmm2 419 pxor %xmm6,%xmm4 420 psllq $2,%xmm6 421 pxor %xmm2,%xmm1 422 psllq $2,%xmm2 423 pxor %xmm9,%xmm6 424 pxor %xmm10,%xmm2 425 movdqa %xmm0,%xmm9 426 psrlq $2,%xmm0 427 movdqa %xmm15,%xmm10 428 psrlq $2,%xmm15 429 pxor %xmm5,%xmm0 430 pxor %xmm3,%xmm15 431 pand %xmm8,%xmm0 432 pand %xmm8,%xmm15 433 pxor %xmm0,%xmm5 434 psllq $2,%xmm0 435 pxor %xmm15,%xmm3 436 psllq $2,%xmm15 437 pxor %xmm9,%xmm0 438 pxor %xmm10,%xmm15 439 movdqa %xmm5,%xmm9 440 psrlq $4,%xmm5 441 movdqa %xmm3,%xmm10 442 psrlq $4,%xmm3 443 pxor %xmm4,%xmm5 444 pxor %xmm1,%xmm3 445 pand %xmm7,%xmm5 446 pand %xmm7,%xmm3 447 pxor %xmm5,%xmm4 448 psllq $4,%xmm5 449 pxor %xmm3,%xmm1 450 psllq $4,%xmm3 451 pxor %xmm9,%xmm5 452 pxor %xmm10,%xmm3 453 movdqa %xmm0,%xmm9 454 psrlq $4,%xmm0 455 movdqa %xmm15,%xmm10 456 psrlq $4,%xmm15 457 pxor %xmm6,%xmm0 458 pxor %xmm2,%xmm15 459 pand %xmm7,%xmm0 460 pand %xmm7,%xmm15 461 pxor %xmm0,%xmm6 462 psllq $4,%xmm0 463 pxor %xmm15,%xmm2 464 psllq $4,%xmm15 465 pxor %xmm9,%xmm0 466 pxor %xmm10,%xmm15 467 movdqa (%rax),%xmm7 468 pxor %xmm7,%xmm3 469 pxor %xmm7,%xmm5 470 pxor %xmm7,%xmm2 471 pxor %xmm7,%xmm6 472 pxor %xmm7,%xmm1 473 pxor %xmm7,%xmm4 474 pxor %xmm7,%xmm15 475 pxor %xmm7,%xmm0 476 .byte 0xf3,0xc3 477 478 479 480.p2align 6 481_bsaes_decrypt8: 482 leaq L$BS0(%rip),%r11 483 484 movdqa (%rax),%xmm8 485 leaq 16(%rax),%rax 486 movdqa -48(%r11),%xmm7 487 pxor %xmm8,%xmm15 488 pxor %xmm8,%xmm0 489 pxor %xmm8,%xmm1 490 pxor %xmm8,%xmm2 491.byte 102,68,15,56,0,255 492.byte 102,15,56,0,199 493 pxor %xmm8,%xmm3 494 pxor %xmm8,%xmm4 495.byte 102,15,56,0,207 496.byte 102,15,56,0,215 497 pxor %xmm8,%xmm5 498 pxor %xmm8,%xmm6 499.byte 102,15,56,0,223 500.byte 102,15,56,0,231 501.byte 102,15,56,0,239 502.byte 102,15,56,0,247 503 movdqa 0(%r11),%xmm7 504 movdqa 16(%r11),%xmm8 505 movdqa %xmm5,%xmm9 506 psrlq $1,%xmm5 507 movdqa %xmm3,%xmm10 508 psrlq $1,%xmm3 509 pxor %xmm6,%xmm5 510 pxor %xmm4,%xmm3 511 pand %xmm7,%xmm5 512 pand %xmm7,%xmm3 513 pxor %xmm5,%xmm6 514 psllq $1,%xmm5 515 pxor %xmm3,%xmm4 516 psllq $1,%xmm3 517 pxor %xmm9,%xmm5 518 pxor %xmm10,%xmm3 519 movdqa %xmm1,%xmm9 520 psrlq $1,%xmm1 521 movdqa %xmm15,%xmm10 522 psrlq $1,%xmm15 523 pxor %xmm2,%xmm1 524 pxor %xmm0,%xmm15 525 pand %xmm7,%xmm1 526 pand %xmm7,%xmm15 527 pxor %xmm1,%xmm2 528 psllq $1,%xmm1 529 pxor %xmm15,%xmm0 530 psllq $1,%xmm15 531 pxor %xmm9,%xmm1 532 pxor %xmm10,%xmm15 533 movdqa 32(%r11),%xmm7 534 movdqa %xmm4,%xmm9 535 psrlq $2,%xmm4 536 movdqa %xmm3,%xmm10 537 psrlq $2,%xmm3 538 pxor %xmm6,%xmm4 539 pxor %xmm5,%xmm3 540 pand %xmm8,%xmm4 541 pand %xmm8,%xmm3 542 pxor %xmm4,%xmm6 543 psllq $2,%xmm4 544 pxor %xmm3,%xmm5 545 psllq $2,%xmm3 546 pxor %xmm9,%xmm4 547 pxor %xmm10,%xmm3 548 movdqa %xmm0,%xmm9 549 psrlq $2,%xmm0 550 movdqa %xmm15,%xmm10 551 psrlq $2,%xmm15 552 pxor %xmm2,%xmm0 553 pxor %xmm1,%xmm15 554 pand %xmm8,%xmm0 555 pand %xmm8,%xmm15 556 pxor %xmm0,%xmm2 557 psllq $2,%xmm0 558 pxor %xmm15,%xmm1 559 psllq $2,%xmm15 560 pxor %xmm9,%xmm0 561 pxor %xmm10,%xmm15 562 movdqa %xmm2,%xmm9 563 psrlq $4,%xmm2 564 movdqa %xmm1,%xmm10 565 psrlq $4,%xmm1 566 pxor %xmm6,%xmm2 567 pxor %xmm5,%xmm1 568 pand %xmm7,%xmm2 569 pand %xmm7,%xmm1 570 pxor %xmm2,%xmm6 571 psllq $4,%xmm2 572 pxor %xmm1,%xmm5 573 psllq $4,%xmm1 574 pxor %xmm9,%xmm2 575 pxor %xmm10,%xmm1 576 movdqa %xmm0,%xmm9 577 psrlq $4,%xmm0 578 movdqa %xmm15,%xmm10 579 psrlq $4,%xmm15 580 pxor %xmm4,%xmm0 581 pxor %xmm3,%xmm15 582 pand %xmm7,%xmm0 583 pand %xmm7,%xmm15 584 pxor %xmm0,%xmm4 585 psllq $4,%xmm0 586 pxor %xmm15,%xmm3 587 psllq $4,%xmm15 588 pxor %xmm9,%xmm0 589 pxor %xmm10,%xmm15 590 decl %r10d 591 jmp L$dec_sbox 592.p2align 4 593L$dec_loop: 594 pxor 0(%rax),%xmm15 595 pxor 16(%rax),%xmm0 596 pxor 32(%rax),%xmm1 597 pxor 48(%rax),%xmm2 598.byte 102,68,15,56,0,255 599.byte 102,15,56,0,199 600 pxor 64(%rax),%xmm3 601 pxor 80(%rax),%xmm4 602.byte 102,15,56,0,207 603.byte 102,15,56,0,215 604 pxor 96(%rax),%xmm5 605 pxor 112(%rax),%xmm6 606.byte 102,15,56,0,223 607.byte 102,15,56,0,231 608.byte 102,15,56,0,239 609.byte 102,15,56,0,247 610 leaq 128(%rax),%rax 611L$dec_sbox: 612 pxor %xmm3,%xmm2 613 614 pxor %xmm6,%xmm3 615 pxor %xmm6,%xmm1 616 pxor %xmm3,%xmm5 617 pxor %xmm5,%xmm6 618 pxor %xmm6,%xmm0 619 620 pxor %xmm0,%xmm15 621 pxor %xmm4,%xmm1 622 pxor %xmm15,%xmm2 623 pxor %xmm15,%xmm4 624 pxor %xmm2,%xmm0 625 movdqa %xmm2,%xmm10 626 movdqa %xmm6,%xmm9 627 movdqa %xmm0,%xmm8 628 movdqa %xmm3,%xmm12 629 movdqa %xmm4,%xmm11 630 631 pxor %xmm15,%xmm10 632 pxor %xmm3,%xmm9 633 pxor %xmm5,%xmm8 634 movdqa %xmm10,%xmm13 635 pxor %xmm15,%xmm12 636 movdqa %xmm9,%xmm7 637 pxor %xmm1,%xmm11 638 movdqa %xmm10,%xmm14 639 640 por %xmm8,%xmm9 641 por %xmm11,%xmm10 642 pxor %xmm7,%xmm14 643 pand %xmm11,%xmm13 644 pxor %xmm8,%xmm11 645 pand %xmm8,%xmm7 646 pand %xmm11,%xmm14 647 movdqa %xmm5,%xmm11 648 pxor %xmm1,%xmm11 649 pand %xmm11,%xmm12 650 pxor %xmm12,%xmm10 651 pxor %xmm12,%xmm9 652 movdqa %xmm2,%xmm12 653 movdqa %xmm0,%xmm11 654 pxor %xmm6,%xmm12 655 pxor %xmm4,%xmm11 656 movdqa %xmm12,%xmm8 657 pand %xmm11,%xmm12 658 por %xmm11,%xmm8 659 pxor %xmm12,%xmm7 660 pxor %xmm14,%xmm10 661 pxor %xmm13,%xmm9 662 pxor %xmm14,%xmm8 663 movdqa %xmm3,%xmm11 664 pxor %xmm13,%xmm7 665 movdqa %xmm15,%xmm12 666 pxor %xmm13,%xmm8 667 movdqa %xmm6,%xmm13 668 pand %xmm5,%xmm11 669 movdqa %xmm2,%xmm14 670 pand %xmm1,%xmm12 671 pand %xmm0,%xmm13 672 por %xmm4,%xmm14 673 pxor %xmm11,%xmm10 674 pxor %xmm12,%xmm9 675 pxor %xmm13,%xmm8 676 pxor %xmm14,%xmm7 677 678 679 680 681 682 movdqa %xmm10,%xmm11 683 pand %xmm8,%xmm10 684 pxor %xmm9,%xmm11 685 686 movdqa %xmm7,%xmm13 687 movdqa %xmm11,%xmm14 688 pxor %xmm10,%xmm13 689 pand %xmm13,%xmm14 690 691 movdqa %xmm8,%xmm12 692 pxor %xmm9,%xmm14 693 pxor %xmm7,%xmm12 694 695 pxor %xmm9,%xmm10 696 697 pand %xmm10,%xmm12 698 699 movdqa %xmm13,%xmm9 700 pxor %xmm7,%xmm12 701 702 pxor %xmm12,%xmm9 703 pxor %xmm12,%xmm8 704 705 pand %xmm7,%xmm9 706 707 pxor %xmm9,%xmm13 708 pxor %xmm9,%xmm8 709 710 pand %xmm14,%xmm13 711 712 pxor %xmm11,%xmm13 713 movdqa %xmm4,%xmm11 714 movdqa %xmm0,%xmm7 715 movdqa %xmm14,%xmm9 716 pxor %xmm13,%xmm9 717 pand %xmm4,%xmm9 718 pxor %xmm0,%xmm4 719 pand %xmm14,%xmm0 720 pand %xmm13,%xmm4 721 pxor %xmm0,%xmm4 722 pxor %xmm9,%xmm0 723 pxor %xmm1,%xmm11 724 pxor %xmm5,%xmm7 725 pxor %xmm12,%xmm14 726 pxor %xmm8,%xmm13 727 movdqa %xmm14,%xmm10 728 movdqa %xmm12,%xmm9 729 pxor %xmm13,%xmm10 730 pxor %xmm8,%xmm9 731 pand %xmm11,%xmm10 732 pand %xmm1,%xmm9 733 pxor %xmm7,%xmm11 734 pxor %xmm5,%xmm1 735 pand %xmm14,%xmm7 736 pand %xmm12,%xmm5 737 pand %xmm13,%xmm11 738 pand %xmm8,%xmm1 739 pxor %xmm11,%xmm7 740 pxor %xmm5,%xmm1 741 pxor %xmm10,%xmm11 742 pxor %xmm9,%xmm5 743 pxor %xmm11,%xmm4 744 pxor %xmm11,%xmm1 745 pxor %xmm7,%xmm0 746 pxor %xmm7,%xmm5 747 748 movdqa %xmm2,%xmm11 749 movdqa %xmm6,%xmm7 750 pxor %xmm15,%xmm11 751 pxor %xmm3,%xmm7 752 movdqa %xmm14,%xmm10 753 movdqa %xmm12,%xmm9 754 pxor %xmm13,%xmm10 755 pxor %xmm8,%xmm9 756 pand %xmm11,%xmm10 757 pand %xmm15,%xmm9 758 pxor %xmm7,%xmm11 759 pxor %xmm3,%xmm15 760 pand %xmm14,%xmm7 761 pand %xmm12,%xmm3 762 pand %xmm13,%xmm11 763 pand %xmm8,%xmm15 764 pxor %xmm11,%xmm7 765 pxor %xmm3,%xmm15 766 pxor %xmm10,%xmm11 767 pxor %xmm9,%xmm3 768 pxor %xmm12,%xmm14 769 pxor %xmm8,%xmm13 770 movdqa %xmm14,%xmm10 771 pxor %xmm13,%xmm10 772 pand %xmm2,%xmm10 773 pxor %xmm6,%xmm2 774 pand %xmm14,%xmm6 775 pand %xmm13,%xmm2 776 pxor %xmm6,%xmm2 777 pxor %xmm10,%xmm6 778 pxor %xmm11,%xmm2 779 pxor %xmm11,%xmm15 780 pxor %xmm7,%xmm6 781 pxor %xmm7,%xmm3 782 pxor %xmm6,%xmm0 783 pxor %xmm4,%xmm5 784 785 pxor %xmm0,%xmm3 786 pxor %xmm6,%xmm1 787 pxor %xmm6,%xmm4 788 pxor %xmm1,%xmm3 789 pxor %xmm15,%xmm6 790 pxor %xmm4,%xmm3 791 pxor %xmm5,%xmm2 792 pxor %xmm0,%xmm5 793 pxor %xmm3,%xmm2 794 795 pxor %xmm15,%xmm3 796 pxor %xmm2,%xmm6 797 decl %r10d 798 jl L$dec_done 799 800 pshufd $0x4E,%xmm15,%xmm7 801 pshufd $0x4E,%xmm2,%xmm13 802 pxor %xmm15,%xmm7 803 pshufd $0x4E,%xmm4,%xmm14 804 pxor %xmm2,%xmm13 805 pshufd $0x4E,%xmm0,%xmm8 806 pxor %xmm4,%xmm14 807 pshufd $0x4E,%xmm5,%xmm9 808 pxor %xmm0,%xmm8 809 pshufd $0x4E,%xmm3,%xmm10 810 pxor %xmm5,%xmm9 811 pxor %xmm13,%xmm15 812 pxor %xmm13,%xmm0 813 pshufd $0x4E,%xmm1,%xmm11 814 pxor %xmm3,%xmm10 815 pxor %xmm7,%xmm5 816 pxor %xmm8,%xmm3 817 pshufd $0x4E,%xmm6,%xmm12 818 pxor %xmm1,%xmm11 819 pxor %xmm14,%xmm0 820 pxor %xmm9,%xmm1 821 pxor %xmm6,%xmm12 822 823 pxor %xmm14,%xmm5 824 pxor %xmm13,%xmm3 825 pxor %xmm13,%xmm1 826 pxor %xmm10,%xmm6 827 pxor %xmm11,%xmm2 828 pxor %xmm14,%xmm1 829 pxor %xmm14,%xmm6 830 pxor %xmm12,%xmm4 831 pshufd $0x93,%xmm15,%xmm7 832 pshufd $0x93,%xmm0,%xmm8 833 pxor %xmm7,%xmm15 834 pshufd $0x93,%xmm5,%xmm9 835 pxor %xmm8,%xmm0 836 pshufd $0x93,%xmm3,%xmm10 837 pxor %xmm9,%xmm5 838 pshufd $0x93,%xmm1,%xmm11 839 pxor %xmm10,%xmm3 840 pshufd $0x93,%xmm6,%xmm12 841 pxor %xmm11,%xmm1 842 pshufd $0x93,%xmm2,%xmm13 843 pxor %xmm12,%xmm6 844 pshufd $0x93,%xmm4,%xmm14 845 pxor %xmm13,%xmm2 846 pxor %xmm14,%xmm4 847 848 pxor %xmm15,%xmm8 849 pxor %xmm4,%xmm7 850 pxor %xmm4,%xmm8 851 pshufd $0x4E,%xmm15,%xmm15 852 pxor %xmm0,%xmm9 853 pshufd $0x4E,%xmm0,%xmm0 854 pxor %xmm1,%xmm12 855 pxor %xmm7,%xmm15 856 pxor %xmm6,%xmm13 857 pxor %xmm8,%xmm0 858 pxor %xmm3,%xmm11 859 pshufd $0x4E,%xmm1,%xmm7 860 pxor %xmm2,%xmm14 861 pshufd $0x4E,%xmm6,%xmm8 862 pxor %xmm5,%xmm10 863 pshufd $0x4E,%xmm3,%xmm1 864 pxor %xmm4,%xmm10 865 pshufd $0x4E,%xmm4,%xmm6 866 pxor %xmm4,%xmm11 867 pshufd $0x4E,%xmm2,%xmm3 868 pxor %xmm11,%xmm7 869 pshufd $0x4E,%xmm5,%xmm2 870 pxor %xmm12,%xmm8 871 pxor %xmm1,%xmm10 872 pxor %xmm14,%xmm6 873 pxor %xmm3,%xmm13 874 movdqa %xmm7,%xmm3 875 pxor %xmm9,%xmm2 876 movdqa %xmm13,%xmm5 877 movdqa %xmm8,%xmm4 878 movdqa %xmm2,%xmm1 879 movdqa %xmm10,%xmm2 880 movdqa -16(%r11),%xmm7 881 jnz L$dec_loop 882 movdqa -32(%r11),%xmm7 883 jmp L$dec_loop 884.p2align 4 885L$dec_done: 886 movdqa 0(%r11),%xmm7 887 movdqa 16(%r11),%xmm8 888 movdqa %xmm2,%xmm9 889 psrlq $1,%xmm2 890 movdqa %xmm1,%xmm10 891 psrlq $1,%xmm1 892 pxor %xmm4,%xmm2 893 pxor %xmm6,%xmm1 894 pand %xmm7,%xmm2 895 pand %xmm7,%xmm1 896 pxor %xmm2,%xmm4 897 psllq $1,%xmm2 898 pxor %xmm1,%xmm6 899 psllq $1,%xmm1 900 pxor %xmm9,%xmm2 901 pxor %xmm10,%xmm1 902 movdqa %xmm5,%xmm9 903 psrlq $1,%xmm5 904 movdqa %xmm15,%xmm10 905 psrlq $1,%xmm15 906 pxor %xmm3,%xmm5 907 pxor %xmm0,%xmm15 908 pand %xmm7,%xmm5 909 pand %xmm7,%xmm15 910 pxor %xmm5,%xmm3 911 psllq $1,%xmm5 912 pxor %xmm15,%xmm0 913 psllq $1,%xmm15 914 pxor %xmm9,%xmm5 915 pxor %xmm10,%xmm15 916 movdqa 32(%r11),%xmm7 917 movdqa %xmm6,%xmm9 918 psrlq $2,%xmm6 919 movdqa %xmm1,%xmm10 920 psrlq $2,%xmm1 921 pxor %xmm4,%xmm6 922 pxor %xmm2,%xmm1 923 pand %xmm8,%xmm6 924 pand %xmm8,%xmm1 925 pxor %xmm6,%xmm4 926 psllq $2,%xmm6 927 pxor %xmm1,%xmm2 928 psllq $2,%xmm1 929 pxor %xmm9,%xmm6 930 pxor %xmm10,%xmm1 931 movdqa %xmm0,%xmm9 932 psrlq $2,%xmm0 933 movdqa %xmm15,%xmm10 934 psrlq $2,%xmm15 935 pxor %xmm3,%xmm0 936 pxor %xmm5,%xmm15 937 pand %xmm8,%xmm0 938 pand %xmm8,%xmm15 939 pxor %xmm0,%xmm3 940 psllq $2,%xmm0 941 pxor %xmm15,%xmm5 942 psllq $2,%xmm15 943 pxor %xmm9,%xmm0 944 pxor %xmm10,%xmm15 945 movdqa %xmm3,%xmm9 946 psrlq $4,%xmm3 947 movdqa %xmm5,%xmm10 948 psrlq $4,%xmm5 949 pxor %xmm4,%xmm3 950 pxor %xmm2,%xmm5 951 pand %xmm7,%xmm3 952 pand %xmm7,%xmm5 953 pxor %xmm3,%xmm4 954 psllq $4,%xmm3 955 pxor %xmm5,%xmm2 956 psllq $4,%xmm5 957 pxor %xmm9,%xmm3 958 pxor %xmm10,%xmm5 959 movdqa %xmm0,%xmm9 960 psrlq $4,%xmm0 961 movdqa %xmm15,%xmm10 962 psrlq $4,%xmm15 963 pxor %xmm6,%xmm0 964 pxor %xmm1,%xmm15 965 pand %xmm7,%xmm0 966 pand %xmm7,%xmm15 967 pxor %xmm0,%xmm6 968 psllq $4,%xmm0 969 pxor %xmm15,%xmm1 970 psllq $4,%xmm15 971 pxor %xmm9,%xmm0 972 pxor %xmm10,%xmm15 973 movdqa (%rax),%xmm7 974 pxor %xmm7,%xmm5 975 pxor %xmm7,%xmm3 976 pxor %xmm7,%xmm1 977 pxor %xmm7,%xmm6 978 pxor %xmm7,%xmm2 979 pxor %xmm7,%xmm4 980 pxor %xmm7,%xmm15 981 pxor %xmm7,%xmm0 982 .byte 0xf3,0xc3 983 984 985.p2align 4 986_bsaes_key_convert: 987 leaq L$masks(%rip),%r11 988 movdqu (%rcx),%xmm7 989 leaq 16(%rcx),%rcx 990 movdqa 0(%r11),%xmm0 991 movdqa 16(%r11),%xmm1 992 movdqa 32(%r11),%xmm2 993 movdqa 48(%r11),%xmm3 994 movdqa 64(%r11),%xmm4 995 pcmpeqd %xmm5,%xmm5 996 997 movdqu (%rcx),%xmm6 998 movdqa %xmm7,(%rax) 999 leaq 16(%rax),%rax 1000 decl %r10d 1001 jmp L$key_loop 1002.p2align 4 1003L$key_loop: 1004.byte 102,15,56,0,244 1005 1006 movdqa %xmm0,%xmm8 1007 movdqa %xmm1,%xmm9 1008 1009 pand %xmm6,%xmm8 1010 pand %xmm6,%xmm9 1011 movdqa %xmm2,%xmm10 1012 pcmpeqb %xmm0,%xmm8 1013 psllq $4,%xmm0 1014 movdqa %xmm3,%xmm11 1015 pcmpeqb %xmm1,%xmm9 1016 psllq $4,%xmm1 1017 1018 pand %xmm6,%xmm10 1019 pand %xmm6,%xmm11 1020 movdqa %xmm0,%xmm12 1021 pcmpeqb %xmm2,%xmm10 1022 psllq $4,%xmm2 1023 movdqa %xmm1,%xmm13 1024 pcmpeqb %xmm3,%xmm11 1025 psllq $4,%xmm3 1026 1027 movdqa %xmm2,%xmm14 1028 movdqa %xmm3,%xmm15 1029 pxor %xmm5,%xmm8 1030 pxor %xmm5,%xmm9 1031 1032 pand %xmm6,%xmm12 1033 pand %xmm6,%xmm13 1034 movdqa %xmm8,0(%rax) 1035 pcmpeqb %xmm0,%xmm12 1036 psrlq $4,%xmm0 1037 movdqa %xmm9,16(%rax) 1038 pcmpeqb %xmm1,%xmm13 1039 psrlq $4,%xmm1 1040 leaq 16(%rcx),%rcx 1041 1042 pand %xmm6,%xmm14 1043 pand %xmm6,%xmm15 1044 movdqa %xmm10,32(%rax) 1045 pcmpeqb %xmm2,%xmm14 1046 psrlq $4,%xmm2 1047 movdqa %xmm11,48(%rax) 1048 pcmpeqb %xmm3,%xmm15 1049 psrlq $4,%xmm3 1050 movdqu (%rcx),%xmm6 1051 1052 pxor %xmm5,%xmm13 1053 pxor %xmm5,%xmm14 1054 movdqa %xmm12,64(%rax) 1055 movdqa %xmm13,80(%rax) 1056 movdqa %xmm14,96(%rax) 1057 movdqa %xmm15,112(%rax) 1058 leaq 128(%rax),%rax 1059 decl %r10d 1060 jnz L$key_loop 1061 1062 movdqa 80(%r11),%xmm7 1063 1064 .byte 0xf3,0xc3 1065 1066 1067.globl _bsaes_cbc_encrypt 1068.private_extern _bsaes_cbc_encrypt 1069 1070.p2align 4 1071_bsaes_cbc_encrypt: 1072 cmpl $0,%r9d 1073 jne _asm_AES_cbc_encrypt 1074 cmpq $128,%rdx 1075 jb _asm_AES_cbc_encrypt 1076 1077 movq %rsp,%rax 1078L$cbc_dec_prologue: 1079 pushq %rbp 1080 pushq %rbx 1081 pushq %r12 1082 pushq %r13 1083 pushq %r14 1084 pushq %r15 1085 leaq -72(%rsp),%rsp 1086 movq %rsp,%rbp 1087 movl 240(%rcx),%eax 1088 movq %rdi,%r12 1089 movq %rsi,%r13 1090 movq %rdx,%r14 1091 movq %rcx,%r15 1092 movq %r8,%rbx 1093 shrq $4,%r14 1094 1095 movl %eax,%edx 1096 shlq $7,%rax 1097 subq $96,%rax 1098 subq %rax,%rsp 1099 1100 movq %rsp,%rax 1101 movq %r15,%rcx 1102 movl %edx,%r10d 1103 call _bsaes_key_convert 1104 pxor (%rsp),%xmm7 1105 movdqa %xmm6,(%rax) 1106 movdqa %xmm7,(%rsp) 1107 1108 movdqu (%rbx),%xmm14 1109 subq $8,%r14 1110L$cbc_dec_loop: 1111 movdqu 0(%r12),%xmm15 1112 movdqu 16(%r12),%xmm0 1113 movdqu 32(%r12),%xmm1 1114 movdqu 48(%r12),%xmm2 1115 movdqu 64(%r12),%xmm3 1116 movdqu 80(%r12),%xmm4 1117 movq %rsp,%rax 1118 movdqu 96(%r12),%xmm5 1119 movl %edx,%r10d 1120 movdqu 112(%r12),%xmm6 1121 movdqa %xmm14,32(%rbp) 1122 1123 call _bsaes_decrypt8 1124 1125 pxor 32(%rbp),%xmm15 1126 movdqu 0(%r12),%xmm7 1127 movdqu 16(%r12),%xmm8 1128 pxor %xmm7,%xmm0 1129 movdqu 32(%r12),%xmm9 1130 pxor %xmm8,%xmm5 1131 movdqu 48(%r12),%xmm10 1132 pxor %xmm9,%xmm3 1133 movdqu 64(%r12),%xmm11 1134 pxor %xmm10,%xmm1 1135 movdqu 80(%r12),%xmm12 1136 pxor %xmm11,%xmm6 1137 movdqu 96(%r12),%xmm13 1138 pxor %xmm12,%xmm2 1139 movdqu 112(%r12),%xmm14 1140 pxor %xmm13,%xmm4 1141 movdqu %xmm15,0(%r13) 1142 leaq 128(%r12),%r12 1143 movdqu %xmm0,16(%r13) 1144 movdqu %xmm5,32(%r13) 1145 movdqu %xmm3,48(%r13) 1146 movdqu %xmm1,64(%r13) 1147 movdqu %xmm6,80(%r13) 1148 movdqu %xmm2,96(%r13) 1149 movdqu %xmm4,112(%r13) 1150 leaq 128(%r13),%r13 1151 subq $8,%r14 1152 jnc L$cbc_dec_loop 1153 1154 addq $8,%r14 1155 jz L$cbc_dec_done 1156 1157 movdqu 0(%r12),%xmm15 1158 movq %rsp,%rax 1159 movl %edx,%r10d 1160 cmpq $2,%r14 1161 jb L$cbc_dec_one 1162 movdqu 16(%r12),%xmm0 1163 je L$cbc_dec_two 1164 movdqu 32(%r12),%xmm1 1165 cmpq $4,%r14 1166 jb L$cbc_dec_three 1167 movdqu 48(%r12),%xmm2 1168 je L$cbc_dec_four 1169 movdqu 64(%r12),%xmm3 1170 cmpq $6,%r14 1171 jb L$cbc_dec_five 1172 movdqu 80(%r12),%xmm4 1173 je L$cbc_dec_six 1174 movdqu 96(%r12),%xmm5 1175 movdqa %xmm14,32(%rbp) 1176 call _bsaes_decrypt8 1177 pxor 32(%rbp),%xmm15 1178 movdqu 0(%r12),%xmm7 1179 movdqu 16(%r12),%xmm8 1180 pxor %xmm7,%xmm0 1181 movdqu 32(%r12),%xmm9 1182 pxor %xmm8,%xmm5 1183 movdqu 48(%r12),%xmm10 1184 pxor %xmm9,%xmm3 1185 movdqu 64(%r12),%xmm11 1186 pxor %xmm10,%xmm1 1187 movdqu 80(%r12),%xmm12 1188 pxor %xmm11,%xmm6 1189 movdqu 96(%r12),%xmm14 1190 pxor %xmm12,%xmm2 1191 movdqu %xmm15,0(%r13) 1192 movdqu %xmm0,16(%r13) 1193 movdqu %xmm5,32(%r13) 1194 movdqu %xmm3,48(%r13) 1195 movdqu %xmm1,64(%r13) 1196 movdqu %xmm6,80(%r13) 1197 movdqu %xmm2,96(%r13) 1198 jmp L$cbc_dec_done 1199.p2align 4 1200L$cbc_dec_six: 1201 movdqa %xmm14,32(%rbp) 1202 call _bsaes_decrypt8 1203 pxor 32(%rbp),%xmm15 1204 movdqu 0(%r12),%xmm7 1205 movdqu 16(%r12),%xmm8 1206 pxor %xmm7,%xmm0 1207 movdqu 32(%r12),%xmm9 1208 pxor %xmm8,%xmm5 1209 movdqu 48(%r12),%xmm10 1210 pxor %xmm9,%xmm3 1211 movdqu 64(%r12),%xmm11 1212 pxor %xmm10,%xmm1 1213 movdqu 80(%r12),%xmm14 1214 pxor %xmm11,%xmm6 1215 movdqu %xmm15,0(%r13) 1216 movdqu %xmm0,16(%r13) 1217 movdqu %xmm5,32(%r13) 1218 movdqu %xmm3,48(%r13) 1219 movdqu %xmm1,64(%r13) 1220 movdqu %xmm6,80(%r13) 1221 jmp L$cbc_dec_done 1222.p2align 4 1223L$cbc_dec_five: 1224 movdqa %xmm14,32(%rbp) 1225 call _bsaes_decrypt8 1226 pxor 32(%rbp),%xmm15 1227 movdqu 0(%r12),%xmm7 1228 movdqu 16(%r12),%xmm8 1229 pxor %xmm7,%xmm0 1230 movdqu 32(%r12),%xmm9 1231 pxor %xmm8,%xmm5 1232 movdqu 48(%r12),%xmm10 1233 pxor %xmm9,%xmm3 1234 movdqu 64(%r12),%xmm14 1235 pxor %xmm10,%xmm1 1236 movdqu %xmm15,0(%r13) 1237 movdqu %xmm0,16(%r13) 1238 movdqu %xmm5,32(%r13) 1239 movdqu %xmm3,48(%r13) 1240 movdqu %xmm1,64(%r13) 1241 jmp L$cbc_dec_done 1242.p2align 4 1243L$cbc_dec_four: 1244 movdqa %xmm14,32(%rbp) 1245 call _bsaes_decrypt8 1246 pxor 32(%rbp),%xmm15 1247 movdqu 0(%r12),%xmm7 1248 movdqu 16(%r12),%xmm8 1249 pxor %xmm7,%xmm0 1250 movdqu 32(%r12),%xmm9 1251 pxor %xmm8,%xmm5 1252 movdqu 48(%r12),%xmm14 1253 pxor %xmm9,%xmm3 1254 movdqu %xmm15,0(%r13) 1255 movdqu %xmm0,16(%r13) 1256 movdqu %xmm5,32(%r13) 1257 movdqu %xmm3,48(%r13) 1258 jmp L$cbc_dec_done 1259.p2align 4 1260L$cbc_dec_three: 1261 movdqa %xmm14,32(%rbp) 1262 call _bsaes_decrypt8 1263 pxor 32(%rbp),%xmm15 1264 movdqu 0(%r12),%xmm7 1265 movdqu 16(%r12),%xmm8 1266 pxor %xmm7,%xmm0 1267 movdqu 32(%r12),%xmm14 1268 pxor %xmm8,%xmm5 1269 movdqu %xmm15,0(%r13) 1270 movdqu %xmm0,16(%r13) 1271 movdqu %xmm5,32(%r13) 1272 jmp L$cbc_dec_done 1273.p2align 4 1274L$cbc_dec_two: 1275 movdqa %xmm14,32(%rbp) 1276 call _bsaes_decrypt8 1277 pxor 32(%rbp),%xmm15 1278 movdqu 0(%r12),%xmm7 1279 movdqu 16(%r12),%xmm14 1280 pxor %xmm7,%xmm0 1281 movdqu %xmm15,0(%r13) 1282 movdqu %xmm0,16(%r13) 1283 jmp L$cbc_dec_done 1284.p2align 4 1285L$cbc_dec_one: 1286 leaq (%r12),%rdi 1287 leaq 32(%rbp),%rsi 1288 leaq (%r15),%rdx 1289 call _asm_AES_decrypt 1290 pxor 32(%rbp),%xmm14 1291 movdqu %xmm14,(%r13) 1292 movdqa %xmm15,%xmm14 1293 1294L$cbc_dec_done: 1295 movdqu %xmm14,(%rbx) 1296 leaq (%rsp),%rax 1297 pxor %xmm0,%xmm0 1298L$cbc_dec_bzero: 1299 movdqa %xmm0,0(%rax) 1300 movdqa %xmm0,16(%rax) 1301 leaq 32(%rax),%rax 1302 cmpq %rax,%rbp 1303 ja L$cbc_dec_bzero 1304 1305 leaq 120(%rbp),%rax 1306 movq -48(%rax),%r15 1307 movq -40(%rax),%r14 1308 movq -32(%rax),%r13 1309 movq -24(%rax),%r12 1310 movq -16(%rax),%rbx 1311 movq -8(%rax),%rbp 1312 leaq (%rax),%rsp 1313L$cbc_dec_epilogue: 1314 .byte 0xf3,0xc3 1315 1316 1317.globl _bsaes_ctr32_encrypt_blocks 1318.private_extern _bsaes_ctr32_encrypt_blocks 1319 1320.p2align 4 1321_bsaes_ctr32_encrypt_blocks: 1322 movq %rsp,%rax 1323L$ctr_enc_prologue: 1324 pushq %rbp 1325 pushq %rbx 1326 pushq %r12 1327 pushq %r13 1328 pushq %r14 1329 pushq %r15 1330 leaq -72(%rsp),%rsp 1331 movq %rsp,%rbp 1332 movdqu (%r8),%xmm0 1333 movl 240(%rcx),%eax 1334 movq %rdi,%r12 1335 movq %rsi,%r13 1336 movq %rdx,%r14 1337 movq %rcx,%r15 1338 movdqa %xmm0,32(%rbp) 1339 cmpq $8,%rdx 1340 jb L$ctr_enc_short 1341 1342 movl %eax,%ebx 1343 shlq $7,%rax 1344 subq $96,%rax 1345 subq %rax,%rsp 1346 1347 movq %rsp,%rax 1348 movq %r15,%rcx 1349 movl %ebx,%r10d 1350 call _bsaes_key_convert 1351 pxor %xmm6,%xmm7 1352 movdqa %xmm7,(%rax) 1353 1354 movdqa (%rsp),%xmm8 1355 leaq L$ADD1(%rip),%r11 1356 movdqa 32(%rbp),%xmm15 1357 movdqa -32(%r11),%xmm7 1358.byte 102,68,15,56,0,199 1359.byte 102,68,15,56,0,255 1360 movdqa %xmm8,(%rsp) 1361 jmp L$ctr_enc_loop 1362.p2align 4 1363L$ctr_enc_loop: 1364 movdqa %xmm15,32(%rbp) 1365 movdqa %xmm15,%xmm0 1366 movdqa %xmm15,%xmm1 1367 paddd 0(%r11),%xmm0 1368 movdqa %xmm15,%xmm2 1369 paddd 16(%r11),%xmm1 1370 movdqa %xmm15,%xmm3 1371 paddd 32(%r11),%xmm2 1372 movdqa %xmm15,%xmm4 1373 paddd 48(%r11),%xmm3 1374 movdqa %xmm15,%xmm5 1375 paddd 64(%r11),%xmm4 1376 movdqa %xmm15,%xmm6 1377 paddd 80(%r11),%xmm5 1378 paddd 96(%r11),%xmm6 1379 1380 1381 1382 movdqa (%rsp),%xmm8 1383 leaq 16(%rsp),%rax 1384 movdqa -16(%r11),%xmm7 1385 pxor %xmm8,%xmm15 1386 pxor %xmm8,%xmm0 1387 pxor %xmm8,%xmm1 1388 pxor %xmm8,%xmm2 1389.byte 102,68,15,56,0,255 1390.byte 102,15,56,0,199 1391 pxor %xmm8,%xmm3 1392 pxor %xmm8,%xmm4 1393.byte 102,15,56,0,207 1394.byte 102,15,56,0,215 1395 pxor %xmm8,%xmm5 1396 pxor %xmm8,%xmm6 1397.byte 102,15,56,0,223 1398.byte 102,15,56,0,231 1399.byte 102,15,56,0,239 1400.byte 102,15,56,0,247 1401 leaq L$BS0(%rip),%r11 1402 movl %ebx,%r10d 1403 1404 call _bsaes_encrypt8_bitslice 1405 1406 subq $8,%r14 1407 jc L$ctr_enc_loop_done 1408 1409 movdqu 0(%r12),%xmm7 1410 movdqu 16(%r12),%xmm8 1411 movdqu 32(%r12),%xmm9 1412 movdqu 48(%r12),%xmm10 1413 movdqu 64(%r12),%xmm11 1414 movdqu 80(%r12),%xmm12 1415 movdqu 96(%r12),%xmm13 1416 movdqu 112(%r12),%xmm14 1417 leaq 128(%r12),%r12 1418 pxor %xmm15,%xmm7 1419 movdqa 32(%rbp),%xmm15 1420 pxor %xmm8,%xmm0 1421 movdqu %xmm7,0(%r13) 1422 pxor %xmm9,%xmm3 1423 movdqu %xmm0,16(%r13) 1424 pxor %xmm10,%xmm5 1425 movdqu %xmm3,32(%r13) 1426 pxor %xmm11,%xmm2 1427 movdqu %xmm5,48(%r13) 1428 pxor %xmm12,%xmm6 1429 movdqu %xmm2,64(%r13) 1430 pxor %xmm13,%xmm1 1431 movdqu %xmm6,80(%r13) 1432 pxor %xmm14,%xmm4 1433 movdqu %xmm1,96(%r13) 1434 leaq L$ADD1(%rip),%r11 1435 movdqu %xmm4,112(%r13) 1436 leaq 128(%r13),%r13 1437 paddd 112(%r11),%xmm15 1438 jnz L$ctr_enc_loop 1439 1440 jmp L$ctr_enc_done 1441.p2align 4 1442L$ctr_enc_loop_done: 1443 addq $8,%r14 1444 movdqu 0(%r12),%xmm7 1445 pxor %xmm7,%xmm15 1446 movdqu %xmm15,0(%r13) 1447 cmpq $2,%r14 1448 jb L$ctr_enc_done 1449 movdqu 16(%r12),%xmm8 1450 pxor %xmm8,%xmm0 1451 movdqu %xmm0,16(%r13) 1452 je L$ctr_enc_done 1453 movdqu 32(%r12),%xmm9 1454 pxor %xmm9,%xmm3 1455 movdqu %xmm3,32(%r13) 1456 cmpq $4,%r14 1457 jb L$ctr_enc_done 1458 movdqu 48(%r12),%xmm10 1459 pxor %xmm10,%xmm5 1460 movdqu %xmm5,48(%r13) 1461 je L$ctr_enc_done 1462 movdqu 64(%r12),%xmm11 1463 pxor %xmm11,%xmm2 1464 movdqu %xmm2,64(%r13) 1465 cmpq $6,%r14 1466 jb L$ctr_enc_done 1467 movdqu 80(%r12),%xmm12 1468 pxor %xmm12,%xmm6 1469 movdqu %xmm6,80(%r13) 1470 je L$ctr_enc_done 1471 movdqu 96(%r12),%xmm13 1472 pxor %xmm13,%xmm1 1473 movdqu %xmm1,96(%r13) 1474 jmp L$ctr_enc_done 1475 1476.p2align 4 1477L$ctr_enc_short: 1478 leaq 32(%rbp),%rdi 1479 leaq 48(%rbp),%rsi 1480 leaq (%r15),%rdx 1481 call _asm_AES_encrypt 1482 movdqu (%r12),%xmm0 1483 leaq 16(%r12),%r12 1484 movl 44(%rbp),%eax 1485 bswapl %eax 1486 pxor 48(%rbp),%xmm0 1487 incl %eax 1488 movdqu %xmm0,(%r13) 1489 bswapl %eax 1490 leaq 16(%r13),%r13 1491 movl %eax,44(%rsp) 1492 decq %r14 1493 jnz L$ctr_enc_short 1494 1495L$ctr_enc_done: 1496 leaq (%rsp),%rax 1497 pxor %xmm0,%xmm0 1498L$ctr_enc_bzero: 1499 movdqa %xmm0,0(%rax) 1500 movdqa %xmm0,16(%rax) 1501 leaq 32(%rax),%rax 1502 cmpq %rax,%rbp 1503 ja L$ctr_enc_bzero 1504 1505 leaq 120(%rbp),%rax 1506 movq -48(%rax),%r15 1507 movq -40(%rax),%r14 1508 movq -32(%rax),%r13 1509 movq -24(%rax),%r12 1510 movq -16(%rax),%rbx 1511 movq -8(%rax),%rbp 1512 leaq (%rax),%rsp 1513L$ctr_enc_epilogue: 1514 .byte 0xf3,0xc3 1515 1516.globl _bsaes_xts_encrypt 1517.private_extern _bsaes_xts_encrypt 1518 1519.p2align 4 1520_bsaes_xts_encrypt: 1521 movq %rsp,%rax 1522L$xts_enc_prologue: 1523 pushq %rbp 1524 pushq %rbx 1525 pushq %r12 1526 pushq %r13 1527 pushq %r14 1528 pushq %r15 1529 leaq -72(%rsp),%rsp 1530 movq %rsp,%rbp 1531 movq %rdi,%r12 1532 movq %rsi,%r13 1533 movq %rdx,%r14 1534 movq %rcx,%r15 1535 1536 leaq (%r9),%rdi 1537 leaq 32(%rbp),%rsi 1538 leaq (%r8),%rdx 1539 call _asm_AES_encrypt 1540 1541 movl 240(%r15),%eax 1542 movq %r14,%rbx 1543 1544 movl %eax,%edx 1545 shlq $7,%rax 1546 subq $96,%rax 1547 subq %rax,%rsp 1548 1549 movq %rsp,%rax 1550 movq %r15,%rcx 1551 movl %edx,%r10d 1552 call _bsaes_key_convert 1553 pxor %xmm6,%xmm7 1554 movdqa %xmm7,(%rax) 1555 1556 andq $-16,%r14 1557 subq $0x80,%rsp 1558 movdqa 32(%rbp),%xmm6 1559 1560 pxor %xmm14,%xmm14 1561 movdqa L$xts_magic(%rip),%xmm12 1562 pcmpgtd %xmm6,%xmm14 1563 1564 subq $0x80,%r14 1565 jc L$xts_enc_short 1566 jmp L$xts_enc_loop 1567 1568.p2align 4 1569L$xts_enc_loop: 1570 pshufd $0x13,%xmm14,%xmm13 1571 pxor %xmm14,%xmm14 1572 movdqa %xmm6,%xmm15 1573 movdqa %xmm6,0(%rsp) 1574 paddq %xmm6,%xmm6 1575 pand %xmm12,%xmm13 1576 pcmpgtd %xmm6,%xmm14 1577 pxor %xmm13,%xmm6 1578 pshufd $0x13,%xmm14,%xmm13 1579 pxor %xmm14,%xmm14 1580 movdqa %xmm6,%xmm0 1581 movdqa %xmm6,16(%rsp) 1582 paddq %xmm6,%xmm6 1583 pand %xmm12,%xmm13 1584 pcmpgtd %xmm6,%xmm14 1585 pxor %xmm13,%xmm6 1586 movdqu 0(%r12),%xmm7 1587 pshufd $0x13,%xmm14,%xmm13 1588 pxor %xmm14,%xmm14 1589 movdqa %xmm6,%xmm1 1590 movdqa %xmm6,32(%rsp) 1591 paddq %xmm6,%xmm6 1592 pand %xmm12,%xmm13 1593 pcmpgtd %xmm6,%xmm14 1594 pxor %xmm13,%xmm6 1595 movdqu 16(%r12),%xmm8 1596 pxor %xmm7,%xmm15 1597 pshufd $0x13,%xmm14,%xmm13 1598 pxor %xmm14,%xmm14 1599 movdqa %xmm6,%xmm2 1600 movdqa %xmm6,48(%rsp) 1601 paddq %xmm6,%xmm6 1602 pand %xmm12,%xmm13 1603 pcmpgtd %xmm6,%xmm14 1604 pxor %xmm13,%xmm6 1605 movdqu 32(%r12),%xmm9 1606 pxor %xmm8,%xmm0 1607 pshufd $0x13,%xmm14,%xmm13 1608 pxor %xmm14,%xmm14 1609 movdqa %xmm6,%xmm3 1610 movdqa %xmm6,64(%rsp) 1611 paddq %xmm6,%xmm6 1612 pand %xmm12,%xmm13 1613 pcmpgtd %xmm6,%xmm14 1614 pxor %xmm13,%xmm6 1615 movdqu 48(%r12),%xmm10 1616 pxor %xmm9,%xmm1 1617 pshufd $0x13,%xmm14,%xmm13 1618 pxor %xmm14,%xmm14 1619 movdqa %xmm6,%xmm4 1620 movdqa %xmm6,80(%rsp) 1621 paddq %xmm6,%xmm6 1622 pand %xmm12,%xmm13 1623 pcmpgtd %xmm6,%xmm14 1624 pxor %xmm13,%xmm6 1625 movdqu 64(%r12),%xmm11 1626 pxor %xmm10,%xmm2 1627 pshufd $0x13,%xmm14,%xmm13 1628 pxor %xmm14,%xmm14 1629 movdqa %xmm6,%xmm5 1630 movdqa %xmm6,96(%rsp) 1631 paddq %xmm6,%xmm6 1632 pand %xmm12,%xmm13 1633 pcmpgtd %xmm6,%xmm14 1634 pxor %xmm13,%xmm6 1635 movdqu 80(%r12),%xmm12 1636 pxor %xmm11,%xmm3 1637 movdqu 96(%r12),%xmm13 1638 pxor %xmm12,%xmm4 1639 movdqu 112(%r12),%xmm14 1640 leaq 128(%r12),%r12 1641 movdqa %xmm6,112(%rsp) 1642 pxor %xmm13,%xmm5 1643 leaq 128(%rsp),%rax 1644 pxor %xmm14,%xmm6 1645 movl %edx,%r10d 1646 1647 call _bsaes_encrypt8 1648 1649 pxor 0(%rsp),%xmm15 1650 pxor 16(%rsp),%xmm0 1651 movdqu %xmm15,0(%r13) 1652 pxor 32(%rsp),%xmm3 1653 movdqu %xmm0,16(%r13) 1654 pxor 48(%rsp),%xmm5 1655 movdqu %xmm3,32(%r13) 1656 pxor 64(%rsp),%xmm2 1657 movdqu %xmm5,48(%r13) 1658 pxor 80(%rsp),%xmm6 1659 movdqu %xmm2,64(%r13) 1660 pxor 96(%rsp),%xmm1 1661 movdqu %xmm6,80(%r13) 1662 pxor 112(%rsp),%xmm4 1663 movdqu %xmm1,96(%r13) 1664 movdqu %xmm4,112(%r13) 1665 leaq 128(%r13),%r13 1666 1667 movdqa 112(%rsp),%xmm6 1668 pxor %xmm14,%xmm14 1669 movdqa L$xts_magic(%rip),%xmm12 1670 pcmpgtd %xmm6,%xmm14 1671 pshufd $0x13,%xmm14,%xmm13 1672 pxor %xmm14,%xmm14 1673 paddq %xmm6,%xmm6 1674 pand %xmm12,%xmm13 1675 pcmpgtd %xmm6,%xmm14 1676 pxor %xmm13,%xmm6 1677 1678 subq $0x80,%r14 1679 jnc L$xts_enc_loop 1680 1681L$xts_enc_short: 1682 addq $0x80,%r14 1683 jz L$xts_enc_done 1684 pshufd $0x13,%xmm14,%xmm13 1685 pxor %xmm14,%xmm14 1686 movdqa %xmm6,%xmm15 1687 movdqa %xmm6,0(%rsp) 1688 paddq %xmm6,%xmm6 1689 pand %xmm12,%xmm13 1690 pcmpgtd %xmm6,%xmm14 1691 pxor %xmm13,%xmm6 1692 pshufd $0x13,%xmm14,%xmm13 1693 pxor %xmm14,%xmm14 1694 movdqa %xmm6,%xmm0 1695 movdqa %xmm6,16(%rsp) 1696 paddq %xmm6,%xmm6 1697 pand %xmm12,%xmm13 1698 pcmpgtd %xmm6,%xmm14 1699 pxor %xmm13,%xmm6 1700 movdqu 0(%r12),%xmm7 1701 cmpq $16,%r14 1702 je L$xts_enc_1 1703 pshufd $0x13,%xmm14,%xmm13 1704 pxor %xmm14,%xmm14 1705 movdqa %xmm6,%xmm1 1706 movdqa %xmm6,32(%rsp) 1707 paddq %xmm6,%xmm6 1708 pand %xmm12,%xmm13 1709 pcmpgtd %xmm6,%xmm14 1710 pxor %xmm13,%xmm6 1711 movdqu 16(%r12),%xmm8 1712 cmpq $32,%r14 1713 je L$xts_enc_2 1714 pxor %xmm7,%xmm15 1715 pshufd $0x13,%xmm14,%xmm13 1716 pxor %xmm14,%xmm14 1717 movdqa %xmm6,%xmm2 1718 movdqa %xmm6,48(%rsp) 1719 paddq %xmm6,%xmm6 1720 pand %xmm12,%xmm13 1721 pcmpgtd %xmm6,%xmm14 1722 pxor %xmm13,%xmm6 1723 movdqu 32(%r12),%xmm9 1724 cmpq $48,%r14 1725 je L$xts_enc_3 1726 pxor %xmm8,%xmm0 1727 pshufd $0x13,%xmm14,%xmm13 1728 pxor %xmm14,%xmm14 1729 movdqa %xmm6,%xmm3 1730 movdqa %xmm6,64(%rsp) 1731 paddq %xmm6,%xmm6 1732 pand %xmm12,%xmm13 1733 pcmpgtd %xmm6,%xmm14 1734 pxor %xmm13,%xmm6 1735 movdqu 48(%r12),%xmm10 1736 cmpq $64,%r14 1737 je L$xts_enc_4 1738 pxor %xmm9,%xmm1 1739 pshufd $0x13,%xmm14,%xmm13 1740 pxor %xmm14,%xmm14 1741 movdqa %xmm6,%xmm4 1742 movdqa %xmm6,80(%rsp) 1743 paddq %xmm6,%xmm6 1744 pand %xmm12,%xmm13 1745 pcmpgtd %xmm6,%xmm14 1746 pxor %xmm13,%xmm6 1747 movdqu 64(%r12),%xmm11 1748 cmpq $80,%r14 1749 je L$xts_enc_5 1750 pxor %xmm10,%xmm2 1751 pshufd $0x13,%xmm14,%xmm13 1752 pxor %xmm14,%xmm14 1753 movdqa %xmm6,%xmm5 1754 movdqa %xmm6,96(%rsp) 1755 paddq %xmm6,%xmm6 1756 pand %xmm12,%xmm13 1757 pcmpgtd %xmm6,%xmm14 1758 pxor %xmm13,%xmm6 1759 movdqu 80(%r12),%xmm12 1760 cmpq $96,%r14 1761 je L$xts_enc_6 1762 pxor %xmm11,%xmm3 1763 movdqu 96(%r12),%xmm13 1764 pxor %xmm12,%xmm4 1765 movdqa %xmm6,112(%rsp) 1766 leaq 112(%r12),%r12 1767 pxor %xmm13,%xmm5 1768 leaq 128(%rsp),%rax 1769 movl %edx,%r10d 1770 1771 call _bsaes_encrypt8 1772 1773 pxor 0(%rsp),%xmm15 1774 pxor 16(%rsp),%xmm0 1775 movdqu %xmm15,0(%r13) 1776 pxor 32(%rsp),%xmm3 1777 movdqu %xmm0,16(%r13) 1778 pxor 48(%rsp),%xmm5 1779 movdqu %xmm3,32(%r13) 1780 pxor 64(%rsp),%xmm2 1781 movdqu %xmm5,48(%r13) 1782 pxor 80(%rsp),%xmm6 1783 movdqu %xmm2,64(%r13) 1784 pxor 96(%rsp),%xmm1 1785 movdqu %xmm6,80(%r13) 1786 movdqu %xmm1,96(%r13) 1787 leaq 112(%r13),%r13 1788 1789 movdqa 112(%rsp),%xmm6 1790 jmp L$xts_enc_done 1791.p2align 4 1792L$xts_enc_6: 1793 pxor %xmm11,%xmm3 1794 leaq 96(%r12),%r12 1795 pxor %xmm12,%xmm4 1796 leaq 128(%rsp),%rax 1797 movl %edx,%r10d 1798 1799 call _bsaes_encrypt8 1800 1801 pxor 0(%rsp),%xmm15 1802 pxor 16(%rsp),%xmm0 1803 movdqu %xmm15,0(%r13) 1804 pxor 32(%rsp),%xmm3 1805 movdqu %xmm0,16(%r13) 1806 pxor 48(%rsp),%xmm5 1807 movdqu %xmm3,32(%r13) 1808 pxor 64(%rsp),%xmm2 1809 movdqu %xmm5,48(%r13) 1810 pxor 80(%rsp),%xmm6 1811 movdqu %xmm2,64(%r13) 1812 movdqu %xmm6,80(%r13) 1813 leaq 96(%r13),%r13 1814 1815 movdqa 96(%rsp),%xmm6 1816 jmp L$xts_enc_done 1817.p2align 4 1818L$xts_enc_5: 1819 pxor %xmm10,%xmm2 1820 leaq 80(%r12),%r12 1821 pxor %xmm11,%xmm3 1822 leaq 128(%rsp),%rax 1823 movl %edx,%r10d 1824 1825 call _bsaes_encrypt8 1826 1827 pxor 0(%rsp),%xmm15 1828 pxor 16(%rsp),%xmm0 1829 movdqu %xmm15,0(%r13) 1830 pxor 32(%rsp),%xmm3 1831 movdqu %xmm0,16(%r13) 1832 pxor 48(%rsp),%xmm5 1833 movdqu %xmm3,32(%r13) 1834 pxor 64(%rsp),%xmm2 1835 movdqu %xmm5,48(%r13) 1836 movdqu %xmm2,64(%r13) 1837 leaq 80(%r13),%r13 1838 1839 movdqa 80(%rsp),%xmm6 1840 jmp L$xts_enc_done 1841.p2align 4 1842L$xts_enc_4: 1843 pxor %xmm9,%xmm1 1844 leaq 64(%r12),%r12 1845 pxor %xmm10,%xmm2 1846 leaq 128(%rsp),%rax 1847 movl %edx,%r10d 1848 1849 call _bsaes_encrypt8 1850 1851 pxor 0(%rsp),%xmm15 1852 pxor 16(%rsp),%xmm0 1853 movdqu %xmm15,0(%r13) 1854 pxor 32(%rsp),%xmm3 1855 movdqu %xmm0,16(%r13) 1856 pxor 48(%rsp),%xmm5 1857 movdqu %xmm3,32(%r13) 1858 movdqu %xmm5,48(%r13) 1859 leaq 64(%r13),%r13 1860 1861 movdqa 64(%rsp),%xmm6 1862 jmp L$xts_enc_done 1863.p2align 4 1864L$xts_enc_3: 1865 pxor %xmm8,%xmm0 1866 leaq 48(%r12),%r12 1867 pxor %xmm9,%xmm1 1868 leaq 128(%rsp),%rax 1869 movl %edx,%r10d 1870 1871 call _bsaes_encrypt8 1872 1873 pxor 0(%rsp),%xmm15 1874 pxor 16(%rsp),%xmm0 1875 movdqu %xmm15,0(%r13) 1876 pxor 32(%rsp),%xmm3 1877 movdqu %xmm0,16(%r13) 1878 movdqu %xmm3,32(%r13) 1879 leaq 48(%r13),%r13 1880 1881 movdqa 48(%rsp),%xmm6 1882 jmp L$xts_enc_done 1883.p2align 4 1884L$xts_enc_2: 1885 pxor %xmm7,%xmm15 1886 leaq 32(%r12),%r12 1887 pxor %xmm8,%xmm0 1888 leaq 128(%rsp),%rax 1889 movl %edx,%r10d 1890 1891 call _bsaes_encrypt8 1892 1893 pxor 0(%rsp),%xmm15 1894 pxor 16(%rsp),%xmm0 1895 movdqu %xmm15,0(%r13) 1896 movdqu %xmm0,16(%r13) 1897 leaq 32(%r13),%r13 1898 1899 movdqa 32(%rsp),%xmm6 1900 jmp L$xts_enc_done 1901.p2align 4 1902L$xts_enc_1: 1903 pxor %xmm15,%xmm7 1904 leaq 16(%r12),%r12 1905 movdqa %xmm7,32(%rbp) 1906 leaq 32(%rbp),%rdi 1907 leaq 32(%rbp),%rsi 1908 leaq (%r15),%rdx 1909 call _asm_AES_encrypt 1910 pxor 32(%rbp),%xmm15 1911 1912 1913 1914 1915 1916 movdqu %xmm15,0(%r13) 1917 leaq 16(%r13),%r13 1918 1919 movdqa 16(%rsp),%xmm6 1920 1921L$xts_enc_done: 1922 andl $15,%ebx 1923 jz L$xts_enc_ret 1924 movq %r13,%rdx 1925 1926L$xts_enc_steal: 1927 movzbl (%r12),%eax 1928 movzbl -16(%rdx),%ecx 1929 leaq 1(%r12),%r12 1930 movb %al,-16(%rdx) 1931 movb %cl,0(%rdx) 1932 leaq 1(%rdx),%rdx 1933 subl $1,%ebx 1934 jnz L$xts_enc_steal 1935 1936 movdqu -16(%r13),%xmm15 1937 leaq 32(%rbp),%rdi 1938 pxor %xmm6,%xmm15 1939 leaq 32(%rbp),%rsi 1940 movdqa %xmm15,32(%rbp) 1941 leaq (%r15),%rdx 1942 call _asm_AES_encrypt 1943 pxor 32(%rbp),%xmm6 1944 movdqu %xmm6,-16(%r13) 1945 1946L$xts_enc_ret: 1947 leaq (%rsp),%rax 1948 pxor %xmm0,%xmm0 1949L$xts_enc_bzero: 1950 movdqa %xmm0,0(%rax) 1951 movdqa %xmm0,16(%rax) 1952 leaq 32(%rax),%rax 1953 cmpq %rax,%rbp 1954 ja L$xts_enc_bzero 1955 1956 leaq 120(%rbp),%rax 1957 movq -48(%rax),%r15 1958 movq -40(%rax),%r14 1959 movq -32(%rax),%r13 1960 movq -24(%rax),%r12 1961 movq -16(%rax),%rbx 1962 movq -8(%rax),%rbp 1963 leaq (%rax),%rsp 1964L$xts_enc_epilogue: 1965 .byte 0xf3,0xc3 1966 1967 1968.globl _bsaes_xts_decrypt 1969.private_extern _bsaes_xts_decrypt 1970 1971.p2align 4 1972_bsaes_xts_decrypt: 1973 movq %rsp,%rax 1974L$xts_dec_prologue: 1975 pushq %rbp 1976 pushq %rbx 1977 pushq %r12 1978 pushq %r13 1979 pushq %r14 1980 pushq %r15 1981 leaq -72(%rsp),%rsp 1982 movq %rsp,%rbp 1983 movq %rdi,%r12 1984 movq %rsi,%r13 1985 movq %rdx,%r14 1986 movq %rcx,%r15 1987 1988 leaq (%r9),%rdi 1989 leaq 32(%rbp),%rsi 1990 leaq (%r8),%rdx 1991 call _asm_AES_encrypt 1992 1993 movl 240(%r15),%eax 1994 movq %r14,%rbx 1995 1996 movl %eax,%edx 1997 shlq $7,%rax 1998 subq $96,%rax 1999 subq %rax,%rsp 2000 2001 movq %rsp,%rax 2002 movq %r15,%rcx 2003 movl %edx,%r10d 2004 call _bsaes_key_convert 2005 pxor (%rsp),%xmm7 2006 movdqa %xmm6,(%rax) 2007 movdqa %xmm7,(%rsp) 2008 2009 xorl %eax,%eax 2010 andq $-16,%r14 2011 testl $15,%ebx 2012 setnz %al 2013 shlq $4,%rax 2014 subq %rax,%r14 2015 2016 subq $0x80,%rsp 2017 movdqa 32(%rbp),%xmm6 2018 2019 pxor %xmm14,%xmm14 2020 movdqa L$xts_magic(%rip),%xmm12 2021 pcmpgtd %xmm6,%xmm14 2022 2023 subq $0x80,%r14 2024 jc L$xts_dec_short 2025 jmp L$xts_dec_loop 2026 2027.p2align 4 2028L$xts_dec_loop: 2029 pshufd $0x13,%xmm14,%xmm13 2030 pxor %xmm14,%xmm14 2031 movdqa %xmm6,%xmm15 2032 movdqa %xmm6,0(%rsp) 2033 paddq %xmm6,%xmm6 2034 pand %xmm12,%xmm13 2035 pcmpgtd %xmm6,%xmm14 2036 pxor %xmm13,%xmm6 2037 pshufd $0x13,%xmm14,%xmm13 2038 pxor %xmm14,%xmm14 2039 movdqa %xmm6,%xmm0 2040 movdqa %xmm6,16(%rsp) 2041 paddq %xmm6,%xmm6 2042 pand %xmm12,%xmm13 2043 pcmpgtd %xmm6,%xmm14 2044 pxor %xmm13,%xmm6 2045 movdqu 0(%r12),%xmm7 2046 pshufd $0x13,%xmm14,%xmm13 2047 pxor %xmm14,%xmm14 2048 movdqa %xmm6,%xmm1 2049 movdqa %xmm6,32(%rsp) 2050 paddq %xmm6,%xmm6 2051 pand %xmm12,%xmm13 2052 pcmpgtd %xmm6,%xmm14 2053 pxor %xmm13,%xmm6 2054 movdqu 16(%r12),%xmm8 2055 pxor %xmm7,%xmm15 2056 pshufd $0x13,%xmm14,%xmm13 2057 pxor %xmm14,%xmm14 2058 movdqa %xmm6,%xmm2 2059 movdqa %xmm6,48(%rsp) 2060 paddq %xmm6,%xmm6 2061 pand %xmm12,%xmm13 2062 pcmpgtd %xmm6,%xmm14 2063 pxor %xmm13,%xmm6 2064 movdqu 32(%r12),%xmm9 2065 pxor %xmm8,%xmm0 2066 pshufd $0x13,%xmm14,%xmm13 2067 pxor %xmm14,%xmm14 2068 movdqa %xmm6,%xmm3 2069 movdqa %xmm6,64(%rsp) 2070 paddq %xmm6,%xmm6 2071 pand %xmm12,%xmm13 2072 pcmpgtd %xmm6,%xmm14 2073 pxor %xmm13,%xmm6 2074 movdqu 48(%r12),%xmm10 2075 pxor %xmm9,%xmm1 2076 pshufd $0x13,%xmm14,%xmm13 2077 pxor %xmm14,%xmm14 2078 movdqa %xmm6,%xmm4 2079 movdqa %xmm6,80(%rsp) 2080 paddq %xmm6,%xmm6 2081 pand %xmm12,%xmm13 2082 pcmpgtd %xmm6,%xmm14 2083 pxor %xmm13,%xmm6 2084 movdqu 64(%r12),%xmm11 2085 pxor %xmm10,%xmm2 2086 pshufd $0x13,%xmm14,%xmm13 2087 pxor %xmm14,%xmm14 2088 movdqa %xmm6,%xmm5 2089 movdqa %xmm6,96(%rsp) 2090 paddq %xmm6,%xmm6 2091 pand %xmm12,%xmm13 2092 pcmpgtd %xmm6,%xmm14 2093 pxor %xmm13,%xmm6 2094 movdqu 80(%r12),%xmm12 2095 pxor %xmm11,%xmm3 2096 movdqu 96(%r12),%xmm13 2097 pxor %xmm12,%xmm4 2098 movdqu 112(%r12),%xmm14 2099 leaq 128(%r12),%r12 2100 movdqa %xmm6,112(%rsp) 2101 pxor %xmm13,%xmm5 2102 leaq 128(%rsp),%rax 2103 pxor %xmm14,%xmm6 2104 movl %edx,%r10d 2105 2106 call _bsaes_decrypt8 2107 2108 pxor 0(%rsp),%xmm15 2109 pxor 16(%rsp),%xmm0 2110 movdqu %xmm15,0(%r13) 2111 pxor 32(%rsp),%xmm5 2112 movdqu %xmm0,16(%r13) 2113 pxor 48(%rsp),%xmm3 2114 movdqu %xmm5,32(%r13) 2115 pxor 64(%rsp),%xmm1 2116 movdqu %xmm3,48(%r13) 2117 pxor 80(%rsp),%xmm6 2118 movdqu %xmm1,64(%r13) 2119 pxor 96(%rsp),%xmm2 2120 movdqu %xmm6,80(%r13) 2121 pxor 112(%rsp),%xmm4 2122 movdqu %xmm2,96(%r13) 2123 movdqu %xmm4,112(%r13) 2124 leaq 128(%r13),%r13 2125 2126 movdqa 112(%rsp),%xmm6 2127 pxor %xmm14,%xmm14 2128 movdqa L$xts_magic(%rip),%xmm12 2129 pcmpgtd %xmm6,%xmm14 2130 pshufd $0x13,%xmm14,%xmm13 2131 pxor %xmm14,%xmm14 2132 paddq %xmm6,%xmm6 2133 pand %xmm12,%xmm13 2134 pcmpgtd %xmm6,%xmm14 2135 pxor %xmm13,%xmm6 2136 2137 subq $0x80,%r14 2138 jnc L$xts_dec_loop 2139 2140L$xts_dec_short: 2141 addq $0x80,%r14 2142 jz L$xts_dec_done 2143 pshufd $0x13,%xmm14,%xmm13 2144 pxor %xmm14,%xmm14 2145 movdqa %xmm6,%xmm15 2146 movdqa %xmm6,0(%rsp) 2147 paddq %xmm6,%xmm6 2148 pand %xmm12,%xmm13 2149 pcmpgtd %xmm6,%xmm14 2150 pxor %xmm13,%xmm6 2151 pshufd $0x13,%xmm14,%xmm13 2152 pxor %xmm14,%xmm14 2153 movdqa %xmm6,%xmm0 2154 movdqa %xmm6,16(%rsp) 2155 paddq %xmm6,%xmm6 2156 pand %xmm12,%xmm13 2157 pcmpgtd %xmm6,%xmm14 2158 pxor %xmm13,%xmm6 2159 movdqu 0(%r12),%xmm7 2160 cmpq $16,%r14 2161 je L$xts_dec_1 2162 pshufd $0x13,%xmm14,%xmm13 2163 pxor %xmm14,%xmm14 2164 movdqa %xmm6,%xmm1 2165 movdqa %xmm6,32(%rsp) 2166 paddq %xmm6,%xmm6 2167 pand %xmm12,%xmm13 2168 pcmpgtd %xmm6,%xmm14 2169 pxor %xmm13,%xmm6 2170 movdqu 16(%r12),%xmm8 2171 cmpq $32,%r14 2172 je L$xts_dec_2 2173 pxor %xmm7,%xmm15 2174 pshufd $0x13,%xmm14,%xmm13 2175 pxor %xmm14,%xmm14 2176 movdqa %xmm6,%xmm2 2177 movdqa %xmm6,48(%rsp) 2178 paddq %xmm6,%xmm6 2179 pand %xmm12,%xmm13 2180 pcmpgtd %xmm6,%xmm14 2181 pxor %xmm13,%xmm6 2182 movdqu 32(%r12),%xmm9 2183 cmpq $48,%r14 2184 je L$xts_dec_3 2185 pxor %xmm8,%xmm0 2186 pshufd $0x13,%xmm14,%xmm13 2187 pxor %xmm14,%xmm14 2188 movdqa %xmm6,%xmm3 2189 movdqa %xmm6,64(%rsp) 2190 paddq %xmm6,%xmm6 2191 pand %xmm12,%xmm13 2192 pcmpgtd %xmm6,%xmm14 2193 pxor %xmm13,%xmm6 2194 movdqu 48(%r12),%xmm10 2195 cmpq $64,%r14 2196 je L$xts_dec_4 2197 pxor %xmm9,%xmm1 2198 pshufd $0x13,%xmm14,%xmm13 2199 pxor %xmm14,%xmm14 2200 movdqa %xmm6,%xmm4 2201 movdqa %xmm6,80(%rsp) 2202 paddq %xmm6,%xmm6 2203 pand %xmm12,%xmm13 2204 pcmpgtd %xmm6,%xmm14 2205 pxor %xmm13,%xmm6 2206 movdqu 64(%r12),%xmm11 2207 cmpq $80,%r14 2208 je L$xts_dec_5 2209 pxor %xmm10,%xmm2 2210 pshufd $0x13,%xmm14,%xmm13 2211 pxor %xmm14,%xmm14 2212 movdqa %xmm6,%xmm5 2213 movdqa %xmm6,96(%rsp) 2214 paddq %xmm6,%xmm6 2215 pand %xmm12,%xmm13 2216 pcmpgtd %xmm6,%xmm14 2217 pxor %xmm13,%xmm6 2218 movdqu 80(%r12),%xmm12 2219 cmpq $96,%r14 2220 je L$xts_dec_6 2221 pxor %xmm11,%xmm3 2222 movdqu 96(%r12),%xmm13 2223 pxor %xmm12,%xmm4 2224 movdqa %xmm6,112(%rsp) 2225 leaq 112(%r12),%r12 2226 pxor %xmm13,%xmm5 2227 leaq 128(%rsp),%rax 2228 movl %edx,%r10d 2229 2230 call _bsaes_decrypt8 2231 2232 pxor 0(%rsp),%xmm15 2233 pxor 16(%rsp),%xmm0 2234 movdqu %xmm15,0(%r13) 2235 pxor 32(%rsp),%xmm5 2236 movdqu %xmm0,16(%r13) 2237 pxor 48(%rsp),%xmm3 2238 movdqu %xmm5,32(%r13) 2239 pxor 64(%rsp),%xmm1 2240 movdqu %xmm3,48(%r13) 2241 pxor 80(%rsp),%xmm6 2242 movdqu %xmm1,64(%r13) 2243 pxor 96(%rsp),%xmm2 2244 movdqu %xmm6,80(%r13) 2245 movdqu %xmm2,96(%r13) 2246 leaq 112(%r13),%r13 2247 2248 movdqa 112(%rsp),%xmm6 2249 jmp L$xts_dec_done 2250.p2align 4 2251L$xts_dec_6: 2252 pxor %xmm11,%xmm3 2253 leaq 96(%r12),%r12 2254 pxor %xmm12,%xmm4 2255 leaq 128(%rsp),%rax 2256 movl %edx,%r10d 2257 2258 call _bsaes_decrypt8 2259 2260 pxor 0(%rsp),%xmm15 2261 pxor 16(%rsp),%xmm0 2262 movdqu %xmm15,0(%r13) 2263 pxor 32(%rsp),%xmm5 2264 movdqu %xmm0,16(%r13) 2265 pxor 48(%rsp),%xmm3 2266 movdqu %xmm5,32(%r13) 2267 pxor 64(%rsp),%xmm1 2268 movdqu %xmm3,48(%r13) 2269 pxor 80(%rsp),%xmm6 2270 movdqu %xmm1,64(%r13) 2271 movdqu %xmm6,80(%r13) 2272 leaq 96(%r13),%r13 2273 2274 movdqa 96(%rsp),%xmm6 2275 jmp L$xts_dec_done 2276.p2align 4 2277L$xts_dec_5: 2278 pxor %xmm10,%xmm2 2279 leaq 80(%r12),%r12 2280 pxor %xmm11,%xmm3 2281 leaq 128(%rsp),%rax 2282 movl %edx,%r10d 2283 2284 call _bsaes_decrypt8 2285 2286 pxor 0(%rsp),%xmm15 2287 pxor 16(%rsp),%xmm0 2288 movdqu %xmm15,0(%r13) 2289 pxor 32(%rsp),%xmm5 2290 movdqu %xmm0,16(%r13) 2291 pxor 48(%rsp),%xmm3 2292 movdqu %xmm5,32(%r13) 2293 pxor 64(%rsp),%xmm1 2294 movdqu %xmm3,48(%r13) 2295 movdqu %xmm1,64(%r13) 2296 leaq 80(%r13),%r13 2297 2298 movdqa 80(%rsp),%xmm6 2299 jmp L$xts_dec_done 2300.p2align 4 2301L$xts_dec_4: 2302 pxor %xmm9,%xmm1 2303 leaq 64(%r12),%r12 2304 pxor %xmm10,%xmm2 2305 leaq 128(%rsp),%rax 2306 movl %edx,%r10d 2307 2308 call _bsaes_decrypt8 2309 2310 pxor 0(%rsp),%xmm15 2311 pxor 16(%rsp),%xmm0 2312 movdqu %xmm15,0(%r13) 2313 pxor 32(%rsp),%xmm5 2314 movdqu %xmm0,16(%r13) 2315 pxor 48(%rsp),%xmm3 2316 movdqu %xmm5,32(%r13) 2317 movdqu %xmm3,48(%r13) 2318 leaq 64(%r13),%r13 2319 2320 movdqa 64(%rsp),%xmm6 2321 jmp L$xts_dec_done 2322.p2align 4 2323L$xts_dec_3: 2324 pxor %xmm8,%xmm0 2325 leaq 48(%r12),%r12 2326 pxor %xmm9,%xmm1 2327 leaq 128(%rsp),%rax 2328 movl %edx,%r10d 2329 2330 call _bsaes_decrypt8 2331 2332 pxor 0(%rsp),%xmm15 2333 pxor 16(%rsp),%xmm0 2334 movdqu %xmm15,0(%r13) 2335 pxor 32(%rsp),%xmm5 2336 movdqu %xmm0,16(%r13) 2337 movdqu %xmm5,32(%r13) 2338 leaq 48(%r13),%r13 2339 2340 movdqa 48(%rsp),%xmm6 2341 jmp L$xts_dec_done 2342.p2align 4 2343L$xts_dec_2: 2344 pxor %xmm7,%xmm15 2345 leaq 32(%r12),%r12 2346 pxor %xmm8,%xmm0 2347 leaq 128(%rsp),%rax 2348 movl %edx,%r10d 2349 2350 call _bsaes_decrypt8 2351 2352 pxor 0(%rsp),%xmm15 2353 pxor 16(%rsp),%xmm0 2354 movdqu %xmm15,0(%r13) 2355 movdqu %xmm0,16(%r13) 2356 leaq 32(%r13),%r13 2357 2358 movdqa 32(%rsp),%xmm6 2359 jmp L$xts_dec_done 2360.p2align 4 2361L$xts_dec_1: 2362 pxor %xmm15,%xmm7 2363 leaq 16(%r12),%r12 2364 movdqa %xmm7,32(%rbp) 2365 leaq 32(%rbp),%rdi 2366 leaq 32(%rbp),%rsi 2367 leaq (%r15),%rdx 2368 call _asm_AES_decrypt 2369 pxor 32(%rbp),%xmm15 2370 2371 2372 2373 2374 2375 movdqu %xmm15,0(%r13) 2376 leaq 16(%r13),%r13 2377 2378 movdqa 16(%rsp),%xmm6 2379 2380L$xts_dec_done: 2381 andl $15,%ebx 2382 jz L$xts_dec_ret 2383 2384 pxor %xmm14,%xmm14 2385 movdqa L$xts_magic(%rip),%xmm12 2386 pcmpgtd %xmm6,%xmm14 2387 pshufd $0x13,%xmm14,%xmm13 2388 movdqa %xmm6,%xmm5 2389 paddq %xmm6,%xmm6 2390 pand %xmm12,%xmm13 2391 movdqu (%r12),%xmm15 2392 pxor %xmm13,%xmm6 2393 2394 leaq 32(%rbp),%rdi 2395 pxor %xmm6,%xmm15 2396 leaq 32(%rbp),%rsi 2397 movdqa %xmm15,32(%rbp) 2398 leaq (%r15),%rdx 2399 call _asm_AES_decrypt 2400 pxor 32(%rbp),%xmm6 2401 movq %r13,%rdx 2402 movdqu %xmm6,(%r13) 2403 2404L$xts_dec_steal: 2405 movzbl 16(%r12),%eax 2406 movzbl (%rdx),%ecx 2407 leaq 1(%r12),%r12 2408 movb %al,(%rdx) 2409 movb %cl,16(%rdx) 2410 leaq 1(%rdx),%rdx 2411 subl $1,%ebx 2412 jnz L$xts_dec_steal 2413 2414 movdqu (%r13),%xmm15 2415 leaq 32(%rbp),%rdi 2416 pxor %xmm5,%xmm15 2417 leaq 32(%rbp),%rsi 2418 movdqa %xmm15,32(%rbp) 2419 leaq (%r15),%rdx 2420 call _asm_AES_decrypt 2421 pxor 32(%rbp),%xmm5 2422 movdqu %xmm5,(%r13) 2423 2424L$xts_dec_ret: 2425 leaq (%rsp),%rax 2426 pxor %xmm0,%xmm0 2427L$xts_dec_bzero: 2428 movdqa %xmm0,0(%rax) 2429 movdqa %xmm0,16(%rax) 2430 leaq 32(%rax),%rax 2431 cmpq %rax,%rbp 2432 ja L$xts_dec_bzero 2433 2434 leaq 120(%rbp),%rax 2435 movq -48(%rax),%r15 2436 movq -40(%rax),%r14 2437 movq -32(%rax),%r13 2438 movq -24(%rax),%r12 2439 movq -16(%rax),%rbx 2440 movq -8(%rax),%rbp 2441 leaq (%rax),%rsp 2442L$xts_dec_epilogue: 2443 .byte 0xf3,0xc3 2444 2445 2446.p2align 6 2447_bsaes_const: 2448L$M0ISR: 2449.quad 0x0a0e0206070b0f03, 0x0004080c0d010509 2450L$ISRM0: 2451.quad 0x01040b0e0205080f, 0x0306090c00070a0d 2452L$ISR: 2453.quad 0x0504070602010003, 0x0f0e0d0c080b0a09 2454L$BS0: 2455.quad 0x5555555555555555, 0x5555555555555555 2456L$BS1: 2457.quad 0x3333333333333333, 0x3333333333333333 2458L$BS2: 2459.quad 0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f 2460L$SR: 2461.quad 0x0504070600030201, 0x0f0e0d0c0a09080b 2462L$SRM0: 2463.quad 0x0304090e00050a0f, 0x01060b0c0207080d 2464L$M0SR: 2465.quad 0x0a0e02060f03070b, 0x0004080c05090d01 2466L$SWPUP: 2467.quad 0x0706050403020100, 0x0c0d0e0f0b0a0908 2468L$SWPUPM0SR: 2469.quad 0x0a0d02060c03070b, 0x0004080f05090e01 2470L$ADD1: 2471.quad 0x0000000000000000, 0x0000000100000000 2472L$ADD2: 2473.quad 0x0000000000000000, 0x0000000200000000 2474L$ADD3: 2475.quad 0x0000000000000000, 0x0000000300000000 2476L$ADD4: 2477.quad 0x0000000000000000, 0x0000000400000000 2478L$ADD5: 2479.quad 0x0000000000000000, 0x0000000500000000 2480L$ADD6: 2481.quad 0x0000000000000000, 0x0000000600000000 2482L$ADD7: 2483.quad 0x0000000000000000, 0x0000000700000000 2484L$ADD8: 2485.quad 0x0000000000000000, 0x0000000800000000 2486L$xts_magic: 2487.long 0x87,0,1,0 2488L$masks: 2489.quad 0x0101010101010101, 0x0101010101010101 2490.quad 0x0202020202020202, 0x0202020202020202 2491.quad 0x0404040404040404, 0x0404040404040404 2492.quad 0x0808080808080808, 0x0808080808080808 2493L$M0: 2494.quad 0x02060a0e03070b0f, 0x0004080c0105090d 2495L$63: 2496.quad 0x6363636363636363, 0x6363636363636363 2497.byte 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44,32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44,32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32,65,110,100,121,32,80,111,108,121,97,107,111,118,0 2498.p2align 6 2499 2500#endif 2501