1/* Do not modify. This file is auto-generated from e_padlock-x86_64.pl. */ 2.text 3.globl padlock_capability 4.type padlock_capability,@function 5.align 16 6padlock_capability: 7 movq %rbx,%r8 8 xorl %eax,%eax 9 cpuid 10 xorl %eax,%eax 11 cmpl $0x746e6543,%ebx 12 jne .Lzhaoxin 13 cmpl $0x48727561,%edx 14 jne .Lnoluck 15 cmpl $0x736c7561,%ecx 16 jne .Lnoluck 17 jmp .LzhaoxinEnd 18.Lzhaoxin: 19 cmpl $0x68532020,%ebx 20 jne .Lnoluck 21 cmpl $0x68676e61,%edx 22 jne .Lnoluck 23 cmpl $0x20206961,%ecx 24 jne .Lnoluck 25.LzhaoxinEnd: 26 movl $0xC0000000,%eax 27 cpuid 28 movl %eax,%edx 29 xorl %eax,%eax 30 cmpl $0xC0000001,%edx 31 jb .Lnoluck 32 movl $0xC0000001,%eax 33 cpuid 34 movl %edx,%eax 35 andl $0xffffffef,%eax 36 orl $0x10,%eax 37.Lnoluck: 38 movq %r8,%rbx 39 .byte 0xf3,0xc3 40.size padlock_capability,.-padlock_capability 41 42.globl padlock_key_bswap 43.type padlock_key_bswap,@function 44.align 16 45padlock_key_bswap: 46 movl 240(%rdi),%edx 47 incl %edx 48 shll $2,%edx 49.Lbswap_loop: 50 movl (%rdi),%eax 51 bswapl %eax 52 movl %eax,(%rdi) 53 leaq 4(%rdi),%rdi 54 subl $1,%edx 55 jnz .Lbswap_loop 56 .byte 0xf3,0xc3 57.size padlock_key_bswap,.-padlock_key_bswap 58 59.globl padlock_verify_context 60.type padlock_verify_context,@function 61.align 16 62padlock_verify_context: 63 movq %rdi,%rdx 64 pushf 65 leaq .Lpadlock_saved_context(%rip),%rax 66 call _padlock_verify_ctx 67 leaq 8(%rsp),%rsp 68 .byte 0xf3,0xc3 69.size padlock_verify_context,.-padlock_verify_context 70 71.type _padlock_verify_ctx,@function 72.align 16 73_padlock_verify_ctx: 74 movq 8(%rsp),%r8 75 btq $30,%r8 76 jnc .Lverified 77 cmpq (%rax),%rdx 78 je .Lverified 79 pushf 80 popf 81.Lverified: 82 movq %rdx,(%rax) 83 .byte 0xf3,0xc3 84.size _padlock_verify_ctx,.-_padlock_verify_ctx 85 86.globl padlock_reload_key 87.type padlock_reload_key,@function 88.align 16 89padlock_reload_key: 90 pushf 91 popf 92 .byte 0xf3,0xc3 93.size padlock_reload_key,.-padlock_reload_key 94 95.globl padlock_aes_block 96.type padlock_aes_block,@function 97.align 16 98padlock_aes_block: 99 movq %rbx,%r8 100 movq $1,%rcx 101 leaq 32(%rdx),%rbx 102 leaq 16(%rdx),%rdx 103.byte 0xf3,0x0f,0xa7,0xc8 104 movq %r8,%rbx 105 .byte 0xf3,0xc3 106.size padlock_aes_block,.-padlock_aes_block 107 108.globl padlock_xstore 109.type padlock_xstore,@function 110.align 16 111padlock_xstore: 112 movl %esi,%edx 113.byte 0x0f,0xa7,0xc0 114 .byte 0xf3,0xc3 115.size padlock_xstore,.-padlock_xstore 116 117.globl padlock_sha1_oneshot 118.type padlock_sha1_oneshot,@function 119.align 16 120padlock_sha1_oneshot: 121 movq %rdx,%rcx 122 movq %rdi,%rdx 123 movups (%rdi),%xmm0 124 subq $128+8,%rsp 125 movl 16(%rdi),%eax 126 movaps %xmm0,(%rsp) 127 movq %rsp,%rdi 128 movl %eax,16(%rsp) 129 xorq %rax,%rax 130.byte 0xf3,0x0f,0xa6,0xc8 131 movaps (%rsp),%xmm0 132 movl 16(%rsp),%eax 133 addq $128+8,%rsp 134 movups %xmm0,(%rdx) 135 movl %eax,16(%rdx) 136 .byte 0xf3,0xc3 137.size padlock_sha1_oneshot,.-padlock_sha1_oneshot 138 139.globl padlock_sha1_blocks 140.type padlock_sha1_blocks,@function 141.align 16 142padlock_sha1_blocks: 143 movq %rdx,%rcx 144 movq %rdi,%rdx 145 movups (%rdi),%xmm0 146 subq $128+8,%rsp 147 movl 16(%rdi),%eax 148 movaps %xmm0,(%rsp) 149 movq %rsp,%rdi 150 movl %eax,16(%rsp) 151 movq $-1,%rax 152.byte 0xf3,0x0f,0xa6,0xc8 153 movaps (%rsp),%xmm0 154 movl 16(%rsp),%eax 155 addq $128+8,%rsp 156 movups %xmm0,(%rdx) 157 movl %eax,16(%rdx) 158 .byte 0xf3,0xc3 159.size padlock_sha1_blocks,.-padlock_sha1_blocks 160 161.globl padlock_sha256_oneshot 162.type padlock_sha256_oneshot,@function 163.align 16 164padlock_sha256_oneshot: 165 movq %rdx,%rcx 166 movq %rdi,%rdx 167 movups (%rdi),%xmm0 168 subq $128+8,%rsp 169 movups 16(%rdi),%xmm1 170 movaps %xmm0,(%rsp) 171 movq %rsp,%rdi 172 movaps %xmm1,16(%rsp) 173 xorq %rax,%rax 174.byte 0xf3,0x0f,0xa6,0xd0 175 movaps (%rsp),%xmm0 176 movaps 16(%rsp),%xmm1 177 addq $128+8,%rsp 178 movups %xmm0,(%rdx) 179 movups %xmm1,16(%rdx) 180 .byte 0xf3,0xc3 181.size padlock_sha256_oneshot,.-padlock_sha256_oneshot 182 183.globl padlock_sha256_blocks 184.type padlock_sha256_blocks,@function 185.align 16 186padlock_sha256_blocks: 187 movq %rdx,%rcx 188 movq %rdi,%rdx 189 movups (%rdi),%xmm0 190 subq $128+8,%rsp 191 movups 16(%rdi),%xmm1 192 movaps %xmm0,(%rsp) 193 movq %rsp,%rdi 194 movaps %xmm1,16(%rsp) 195 movq $-1,%rax 196.byte 0xf3,0x0f,0xa6,0xd0 197 movaps (%rsp),%xmm0 198 movaps 16(%rsp),%xmm1 199 addq $128+8,%rsp 200 movups %xmm0,(%rdx) 201 movups %xmm1,16(%rdx) 202 .byte 0xf3,0xc3 203.size padlock_sha256_blocks,.-padlock_sha256_blocks 204 205.globl padlock_sha512_blocks 206.type padlock_sha512_blocks,@function 207.align 16 208padlock_sha512_blocks: 209 movq %rdx,%rcx 210 movq %rdi,%rdx 211 movups (%rdi),%xmm0 212 subq $128+8,%rsp 213 movups 16(%rdi),%xmm1 214 movups 32(%rdi),%xmm2 215 movups 48(%rdi),%xmm3 216 movaps %xmm0,(%rsp) 217 movq %rsp,%rdi 218 movaps %xmm1,16(%rsp) 219 movaps %xmm2,32(%rsp) 220 movaps %xmm3,48(%rsp) 221.byte 0xf3,0x0f,0xa6,0xe0 222 movaps (%rsp),%xmm0 223 movaps 16(%rsp),%xmm1 224 movaps 32(%rsp),%xmm2 225 movaps 48(%rsp),%xmm3 226 addq $128+8,%rsp 227 movups %xmm0,(%rdx) 228 movups %xmm1,16(%rdx) 229 movups %xmm2,32(%rdx) 230 movups %xmm3,48(%rdx) 231 .byte 0xf3,0xc3 232.size padlock_sha512_blocks,.-padlock_sha512_blocks 233.globl padlock_ecb_encrypt 234.type padlock_ecb_encrypt,@function 235.align 16 236padlock_ecb_encrypt: 237 pushq %rbp 238 pushq %rbx 239 240 xorl %eax,%eax 241 testq $15,%rdx 242 jnz .Lecb_abort 243 testq $15,%rcx 244 jnz .Lecb_abort 245 leaq .Lpadlock_saved_context(%rip),%rax 246 pushf 247 cld 248 call _padlock_verify_ctx 249 leaq 16(%rdx),%rdx 250 xorl %eax,%eax 251 xorl %ebx,%ebx 252 testl $32,(%rdx) 253 jnz .Lecb_aligned 254 testq $0x0f,%rdi 255 setz %al 256 testq $0x0f,%rsi 257 setz %bl 258 testl %ebx,%eax 259 jnz .Lecb_aligned 260 negq %rax 261 movq $512,%rbx 262 notq %rax 263 leaq (%rsp),%rbp 264 cmpq %rbx,%rcx 265 cmovcq %rcx,%rbx 266 andq %rbx,%rax 267 movq %rcx,%rbx 268 negq %rax 269 andq $512-1,%rbx 270 leaq (%rax,%rbp,1),%rsp 271 movq $512,%rax 272 cmovzq %rax,%rbx 273 cmpq %rbx,%rcx 274 ja .Lecb_loop 275 movq %rsi,%rax 276 cmpq %rsp,%rbp 277 cmoveq %rdi,%rax 278 addq %rcx,%rax 279 negq %rax 280 andq $0xfff,%rax 281 cmpq $128,%rax 282 movq $-128,%rax 283 cmovaeq %rbx,%rax 284 andq %rax,%rbx 285 jz .Lecb_unaligned_tail 286 jmp .Lecb_loop 287.align 16 288.Lecb_loop: 289 cmpq %rcx,%rbx 290 cmovaq %rcx,%rbx 291 movq %rdi,%r8 292 movq %rsi,%r9 293 movq %rcx,%r10 294 movq %rbx,%rcx 295 movq %rbx,%r11 296 testq $0x0f,%rdi 297 cmovnzq %rsp,%rdi 298 testq $0x0f,%rsi 299 jz .Lecb_inp_aligned 300 shrq $3,%rcx 301.byte 0xf3,0x48,0xa5 302 subq %rbx,%rdi 303 movq %rbx,%rcx 304 movq %rdi,%rsi 305.Lecb_inp_aligned: 306 leaq -16(%rdx),%rax 307 leaq 16(%rdx),%rbx 308 shrq $4,%rcx 309.byte 0xf3,0x0f,0xa7,200 310 movq %r8,%rdi 311 movq %r11,%rbx 312 testq $0x0f,%rdi 313 jz .Lecb_out_aligned 314 movq %rbx,%rcx 315 leaq (%rsp),%rsi 316 shrq $3,%rcx 317.byte 0xf3,0x48,0xa5 318 subq %rbx,%rdi 319.Lecb_out_aligned: 320 movq %r9,%rsi 321 movq %r10,%rcx 322 addq %rbx,%rdi 323 addq %rbx,%rsi 324 subq %rbx,%rcx 325 movq $512,%rbx 326 jz .Lecb_break 327 cmpq %rbx,%rcx 328 jae .Lecb_loop 329.Lecb_unaligned_tail: 330 xorl %eax,%eax 331 cmpq %rsp,%rbp 332 cmoveq %rcx,%rax 333 movq %rdi,%r8 334 movq %rcx,%rbx 335 subq %rax,%rsp 336 shrq $3,%rcx 337 leaq (%rsp),%rdi 338.byte 0xf3,0x48,0xa5 339 movq %rsp,%rsi 340 movq %r8,%rdi 341 movq %rbx,%rcx 342 jmp .Lecb_loop 343.align 16 344.Lecb_break: 345 cmpq %rbp,%rsp 346 je .Lecb_done 347 348 pxor %xmm0,%xmm0 349 leaq (%rsp),%rax 350.Lecb_bzero: 351 movaps %xmm0,(%rax) 352 leaq 16(%rax),%rax 353 cmpq %rax,%rbp 354 ja .Lecb_bzero 355 356.Lecb_done: 357 leaq (%rbp),%rsp 358 jmp .Lecb_exit 359 360.align 16 361.Lecb_aligned: 362 leaq (%rsi,%rcx,1),%rbp 363 negq %rbp 364 andq $0xfff,%rbp 365 xorl %eax,%eax 366 cmpq $128,%rbp 367 movq $128-1,%rbp 368 cmovaeq %rax,%rbp 369 andq %rcx,%rbp 370 subq %rbp,%rcx 371 jz .Lecb_aligned_tail 372 leaq -16(%rdx),%rax 373 leaq 16(%rdx),%rbx 374 shrq $4,%rcx 375.byte 0xf3,0x0f,0xa7,200 376 testq %rbp,%rbp 377 jz .Lecb_exit 378 379.Lecb_aligned_tail: 380 movq %rdi,%r8 381 movq %rbp,%rbx 382 movq %rbp,%rcx 383 leaq (%rsp),%rbp 384 subq %rcx,%rsp 385 shrq $3,%rcx 386 leaq (%rsp),%rdi 387.byte 0xf3,0x48,0xa5 388 leaq (%r8),%rdi 389 leaq (%rsp),%rsi 390 movq %rbx,%rcx 391 jmp .Lecb_loop 392.Lecb_exit: 393 movl $1,%eax 394 leaq 8(%rsp),%rsp 395.Lecb_abort: 396 popq %rbx 397 popq %rbp 398 .byte 0xf3,0xc3 399.size padlock_ecb_encrypt,.-padlock_ecb_encrypt 400.globl padlock_cbc_encrypt 401.type padlock_cbc_encrypt,@function 402.align 16 403padlock_cbc_encrypt: 404 pushq %rbp 405 pushq %rbx 406 407 xorl %eax,%eax 408 testq $15,%rdx 409 jnz .Lcbc_abort 410 testq $15,%rcx 411 jnz .Lcbc_abort 412 leaq .Lpadlock_saved_context(%rip),%rax 413 pushf 414 cld 415 call _padlock_verify_ctx 416 leaq 16(%rdx),%rdx 417 xorl %eax,%eax 418 xorl %ebx,%ebx 419 testl $32,(%rdx) 420 jnz .Lcbc_aligned 421 testq $0x0f,%rdi 422 setz %al 423 testq $0x0f,%rsi 424 setz %bl 425 testl %ebx,%eax 426 jnz .Lcbc_aligned 427 negq %rax 428 movq $512,%rbx 429 notq %rax 430 leaq (%rsp),%rbp 431 cmpq %rbx,%rcx 432 cmovcq %rcx,%rbx 433 andq %rbx,%rax 434 movq %rcx,%rbx 435 negq %rax 436 andq $512-1,%rbx 437 leaq (%rax,%rbp,1),%rsp 438 movq $512,%rax 439 cmovzq %rax,%rbx 440 cmpq %rbx,%rcx 441 ja .Lcbc_loop 442 movq %rsi,%rax 443 cmpq %rsp,%rbp 444 cmoveq %rdi,%rax 445 addq %rcx,%rax 446 negq %rax 447 andq $0xfff,%rax 448 cmpq $64,%rax 449 movq $-64,%rax 450 cmovaeq %rbx,%rax 451 andq %rax,%rbx 452 jz .Lcbc_unaligned_tail 453 jmp .Lcbc_loop 454.align 16 455.Lcbc_loop: 456 cmpq %rcx,%rbx 457 cmovaq %rcx,%rbx 458 movq %rdi,%r8 459 movq %rsi,%r9 460 movq %rcx,%r10 461 movq %rbx,%rcx 462 movq %rbx,%r11 463 testq $0x0f,%rdi 464 cmovnzq %rsp,%rdi 465 testq $0x0f,%rsi 466 jz .Lcbc_inp_aligned 467 shrq $3,%rcx 468.byte 0xf3,0x48,0xa5 469 subq %rbx,%rdi 470 movq %rbx,%rcx 471 movq %rdi,%rsi 472.Lcbc_inp_aligned: 473 leaq -16(%rdx),%rax 474 leaq 16(%rdx),%rbx 475 shrq $4,%rcx 476.byte 0xf3,0x0f,0xa7,208 477 movdqa (%rax),%xmm0 478 movdqa %xmm0,-16(%rdx) 479 movq %r8,%rdi 480 movq %r11,%rbx 481 testq $0x0f,%rdi 482 jz .Lcbc_out_aligned 483 movq %rbx,%rcx 484 leaq (%rsp),%rsi 485 shrq $3,%rcx 486.byte 0xf3,0x48,0xa5 487 subq %rbx,%rdi 488.Lcbc_out_aligned: 489 movq %r9,%rsi 490 movq %r10,%rcx 491 addq %rbx,%rdi 492 addq %rbx,%rsi 493 subq %rbx,%rcx 494 movq $512,%rbx 495 jz .Lcbc_break 496 cmpq %rbx,%rcx 497 jae .Lcbc_loop 498.Lcbc_unaligned_tail: 499 xorl %eax,%eax 500 cmpq %rsp,%rbp 501 cmoveq %rcx,%rax 502 movq %rdi,%r8 503 movq %rcx,%rbx 504 subq %rax,%rsp 505 shrq $3,%rcx 506 leaq (%rsp),%rdi 507.byte 0xf3,0x48,0xa5 508 movq %rsp,%rsi 509 movq %r8,%rdi 510 movq %rbx,%rcx 511 jmp .Lcbc_loop 512.align 16 513.Lcbc_break: 514 cmpq %rbp,%rsp 515 je .Lcbc_done 516 517 pxor %xmm0,%xmm0 518 leaq (%rsp),%rax 519.Lcbc_bzero: 520 movaps %xmm0,(%rax) 521 leaq 16(%rax),%rax 522 cmpq %rax,%rbp 523 ja .Lcbc_bzero 524 525.Lcbc_done: 526 leaq (%rbp),%rsp 527 jmp .Lcbc_exit 528 529.align 16 530.Lcbc_aligned: 531 leaq (%rsi,%rcx,1),%rbp 532 negq %rbp 533 andq $0xfff,%rbp 534 xorl %eax,%eax 535 cmpq $64,%rbp 536 movq $64-1,%rbp 537 cmovaeq %rax,%rbp 538 andq %rcx,%rbp 539 subq %rbp,%rcx 540 jz .Lcbc_aligned_tail 541 leaq -16(%rdx),%rax 542 leaq 16(%rdx),%rbx 543 shrq $4,%rcx 544.byte 0xf3,0x0f,0xa7,208 545 movdqa (%rax),%xmm0 546 movdqa %xmm0,-16(%rdx) 547 testq %rbp,%rbp 548 jz .Lcbc_exit 549 550.Lcbc_aligned_tail: 551 movq %rdi,%r8 552 movq %rbp,%rbx 553 movq %rbp,%rcx 554 leaq (%rsp),%rbp 555 subq %rcx,%rsp 556 shrq $3,%rcx 557 leaq (%rsp),%rdi 558.byte 0xf3,0x48,0xa5 559 leaq (%r8),%rdi 560 leaq (%rsp),%rsi 561 movq %rbx,%rcx 562 jmp .Lcbc_loop 563.Lcbc_exit: 564 movl $1,%eax 565 leaq 8(%rsp),%rsp 566.Lcbc_abort: 567 popq %rbx 568 popq %rbp 569 .byte 0xf3,0xc3 570.size padlock_cbc_encrypt,.-padlock_cbc_encrypt 571.globl padlock_cfb_encrypt 572.type padlock_cfb_encrypt,@function 573.align 16 574padlock_cfb_encrypt: 575 pushq %rbp 576 pushq %rbx 577 578 xorl %eax,%eax 579 testq $15,%rdx 580 jnz .Lcfb_abort 581 testq $15,%rcx 582 jnz .Lcfb_abort 583 leaq .Lpadlock_saved_context(%rip),%rax 584 pushf 585 cld 586 call _padlock_verify_ctx 587 leaq 16(%rdx),%rdx 588 xorl %eax,%eax 589 xorl %ebx,%ebx 590 testl $32,(%rdx) 591 jnz .Lcfb_aligned 592 testq $0x0f,%rdi 593 setz %al 594 testq $0x0f,%rsi 595 setz %bl 596 testl %ebx,%eax 597 jnz .Lcfb_aligned 598 negq %rax 599 movq $512,%rbx 600 notq %rax 601 leaq (%rsp),%rbp 602 cmpq %rbx,%rcx 603 cmovcq %rcx,%rbx 604 andq %rbx,%rax 605 movq %rcx,%rbx 606 negq %rax 607 andq $512-1,%rbx 608 leaq (%rax,%rbp,1),%rsp 609 movq $512,%rax 610 cmovzq %rax,%rbx 611 jmp .Lcfb_loop 612.align 16 613.Lcfb_loop: 614 cmpq %rcx,%rbx 615 cmovaq %rcx,%rbx 616 movq %rdi,%r8 617 movq %rsi,%r9 618 movq %rcx,%r10 619 movq %rbx,%rcx 620 movq %rbx,%r11 621 testq $0x0f,%rdi 622 cmovnzq %rsp,%rdi 623 testq $0x0f,%rsi 624 jz .Lcfb_inp_aligned 625 shrq $3,%rcx 626.byte 0xf3,0x48,0xa5 627 subq %rbx,%rdi 628 movq %rbx,%rcx 629 movq %rdi,%rsi 630.Lcfb_inp_aligned: 631 leaq -16(%rdx),%rax 632 leaq 16(%rdx),%rbx 633 shrq $4,%rcx 634.byte 0xf3,0x0f,0xa7,224 635 movdqa (%rax),%xmm0 636 movdqa %xmm0,-16(%rdx) 637 movq %r8,%rdi 638 movq %r11,%rbx 639 testq $0x0f,%rdi 640 jz .Lcfb_out_aligned 641 movq %rbx,%rcx 642 leaq (%rsp),%rsi 643 shrq $3,%rcx 644.byte 0xf3,0x48,0xa5 645 subq %rbx,%rdi 646.Lcfb_out_aligned: 647 movq %r9,%rsi 648 movq %r10,%rcx 649 addq %rbx,%rdi 650 addq %rbx,%rsi 651 subq %rbx,%rcx 652 movq $512,%rbx 653 jnz .Lcfb_loop 654 cmpq %rbp,%rsp 655 je .Lcfb_done 656 657 pxor %xmm0,%xmm0 658 leaq (%rsp),%rax 659.Lcfb_bzero: 660 movaps %xmm0,(%rax) 661 leaq 16(%rax),%rax 662 cmpq %rax,%rbp 663 ja .Lcfb_bzero 664 665.Lcfb_done: 666 leaq (%rbp),%rsp 667 jmp .Lcfb_exit 668 669.align 16 670.Lcfb_aligned: 671 leaq -16(%rdx),%rax 672 leaq 16(%rdx),%rbx 673 shrq $4,%rcx 674.byte 0xf3,0x0f,0xa7,224 675 movdqa (%rax),%xmm0 676 movdqa %xmm0,-16(%rdx) 677.Lcfb_exit: 678 movl $1,%eax 679 leaq 8(%rsp),%rsp 680.Lcfb_abort: 681 popq %rbx 682 popq %rbp 683 .byte 0xf3,0xc3 684.size padlock_cfb_encrypt,.-padlock_cfb_encrypt 685.globl padlock_ofb_encrypt 686.type padlock_ofb_encrypt,@function 687.align 16 688padlock_ofb_encrypt: 689 pushq %rbp 690 pushq %rbx 691 692 xorl %eax,%eax 693 testq $15,%rdx 694 jnz .Lofb_abort 695 testq $15,%rcx 696 jnz .Lofb_abort 697 leaq .Lpadlock_saved_context(%rip),%rax 698 pushf 699 cld 700 call _padlock_verify_ctx 701 leaq 16(%rdx),%rdx 702 xorl %eax,%eax 703 xorl %ebx,%ebx 704 testl $32,(%rdx) 705 jnz .Lofb_aligned 706 testq $0x0f,%rdi 707 setz %al 708 testq $0x0f,%rsi 709 setz %bl 710 testl %ebx,%eax 711 jnz .Lofb_aligned 712 negq %rax 713 movq $512,%rbx 714 notq %rax 715 leaq (%rsp),%rbp 716 cmpq %rbx,%rcx 717 cmovcq %rcx,%rbx 718 andq %rbx,%rax 719 movq %rcx,%rbx 720 negq %rax 721 andq $512-1,%rbx 722 leaq (%rax,%rbp,1),%rsp 723 movq $512,%rax 724 cmovzq %rax,%rbx 725 jmp .Lofb_loop 726.align 16 727.Lofb_loop: 728 cmpq %rcx,%rbx 729 cmovaq %rcx,%rbx 730 movq %rdi,%r8 731 movq %rsi,%r9 732 movq %rcx,%r10 733 movq %rbx,%rcx 734 movq %rbx,%r11 735 testq $0x0f,%rdi 736 cmovnzq %rsp,%rdi 737 testq $0x0f,%rsi 738 jz .Lofb_inp_aligned 739 shrq $3,%rcx 740.byte 0xf3,0x48,0xa5 741 subq %rbx,%rdi 742 movq %rbx,%rcx 743 movq %rdi,%rsi 744.Lofb_inp_aligned: 745 leaq -16(%rdx),%rax 746 leaq 16(%rdx),%rbx 747 shrq $4,%rcx 748.byte 0xf3,0x0f,0xa7,232 749 movdqa (%rax),%xmm0 750 movdqa %xmm0,-16(%rdx) 751 movq %r8,%rdi 752 movq %r11,%rbx 753 testq $0x0f,%rdi 754 jz .Lofb_out_aligned 755 movq %rbx,%rcx 756 leaq (%rsp),%rsi 757 shrq $3,%rcx 758.byte 0xf3,0x48,0xa5 759 subq %rbx,%rdi 760.Lofb_out_aligned: 761 movq %r9,%rsi 762 movq %r10,%rcx 763 addq %rbx,%rdi 764 addq %rbx,%rsi 765 subq %rbx,%rcx 766 movq $512,%rbx 767 jnz .Lofb_loop 768 cmpq %rbp,%rsp 769 je .Lofb_done 770 771 pxor %xmm0,%xmm0 772 leaq (%rsp),%rax 773.Lofb_bzero: 774 movaps %xmm0,(%rax) 775 leaq 16(%rax),%rax 776 cmpq %rax,%rbp 777 ja .Lofb_bzero 778 779.Lofb_done: 780 leaq (%rbp),%rsp 781 jmp .Lofb_exit 782 783.align 16 784.Lofb_aligned: 785 leaq -16(%rdx),%rax 786 leaq 16(%rdx),%rbx 787 shrq $4,%rcx 788.byte 0xf3,0x0f,0xa7,232 789 movdqa (%rax),%xmm0 790 movdqa %xmm0,-16(%rdx) 791.Lofb_exit: 792 movl $1,%eax 793 leaq 8(%rsp),%rsp 794.Lofb_abort: 795 popq %rbx 796 popq %rbp 797 .byte 0xf3,0xc3 798.size padlock_ofb_encrypt,.-padlock_ofb_encrypt 799.globl padlock_ctr32_encrypt 800.type padlock_ctr32_encrypt,@function 801.align 16 802padlock_ctr32_encrypt: 803 pushq %rbp 804 pushq %rbx 805 806 xorl %eax,%eax 807 testq $15,%rdx 808 jnz .Lctr32_abort 809 testq $15,%rcx 810 jnz .Lctr32_abort 811 leaq .Lpadlock_saved_context(%rip),%rax 812 pushf 813 cld 814 call _padlock_verify_ctx 815 leaq 16(%rdx),%rdx 816 xorl %eax,%eax 817 xorl %ebx,%ebx 818 testl $32,(%rdx) 819 jnz .Lctr32_aligned 820 testq $0x0f,%rdi 821 setz %al 822 testq $0x0f,%rsi 823 setz %bl 824 testl %ebx,%eax 825 jnz .Lctr32_aligned 826 negq %rax 827 movq $512,%rbx 828 notq %rax 829 leaq (%rsp),%rbp 830 cmpq %rbx,%rcx 831 cmovcq %rcx,%rbx 832 andq %rbx,%rax 833 movq %rcx,%rbx 834 negq %rax 835 andq $512-1,%rbx 836 leaq (%rax,%rbp,1),%rsp 837 movq $512,%rax 838 cmovzq %rax,%rbx 839.Lctr32_reenter: 840 movl -4(%rdx),%eax 841 bswapl %eax 842 negl %eax 843 andl $31,%eax 844 movq $512,%rbx 845 shll $4,%eax 846 cmovzq %rbx,%rax 847 cmpq %rax,%rcx 848 cmovaq %rax,%rbx 849 cmovbeq %rcx,%rbx 850 cmpq %rbx,%rcx 851 ja .Lctr32_loop 852 movq %rsi,%rax 853 cmpq %rsp,%rbp 854 cmoveq %rdi,%rax 855 addq %rcx,%rax 856 negq %rax 857 andq $0xfff,%rax 858 cmpq $32,%rax 859 movq $-32,%rax 860 cmovaeq %rbx,%rax 861 andq %rax,%rbx 862 jz .Lctr32_unaligned_tail 863 jmp .Lctr32_loop 864.align 16 865.Lctr32_loop: 866 cmpq %rcx,%rbx 867 cmovaq %rcx,%rbx 868 movq %rdi,%r8 869 movq %rsi,%r9 870 movq %rcx,%r10 871 movq %rbx,%rcx 872 movq %rbx,%r11 873 testq $0x0f,%rdi 874 cmovnzq %rsp,%rdi 875 testq $0x0f,%rsi 876 jz .Lctr32_inp_aligned 877 shrq $3,%rcx 878.byte 0xf3,0x48,0xa5 879 subq %rbx,%rdi 880 movq %rbx,%rcx 881 movq %rdi,%rsi 882.Lctr32_inp_aligned: 883 leaq -16(%rdx),%rax 884 leaq 16(%rdx),%rbx 885 shrq $4,%rcx 886.byte 0xf3,0x0f,0xa7,216 887 movl -4(%rdx),%eax 888 testl $0xffff0000,%eax 889 jnz .Lctr32_no_carry 890 bswapl %eax 891 addl $0x10000,%eax 892 bswapl %eax 893 movl %eax,-4(%rdx) 894.Lctr32_no_carry: 895 movq %r8,%rdi 896 movq %r11,%rbx 897 testq $0x0f,%rdi 898 jz .Lctr32_out_aligned 899 movq %rbx,%rcx 900 leaq (%rsp),%rsi 901 shrq $3,%rcx 902.byte 0xf3,0x48,0xa5 903 subq %rbx,%rdi 904.Lctr32_out_aligned: 905 movq %r9,%rsi 906 movq %r10,%rcx 907 addq %rbx,%rdi 908 addq %rbx,%rsi 909 subq %rbx,%rcx 910 movq $512,%rbx 911 jz .Lctr32_break 912 cmpq %rbx,%rcx 913 jae .Lctr32_loop 914 movq %rcx,%rbx 915 movq %rsi,%rax 916 cmpq %rsp,%rbp 917 cmoveq %rdi,%rax 918 addq %rcx,%rax 919 negq %rax 920 andq $0xfff,%rax 921 cmpq $32,%rax 922 movq $-32,%rax 923 cmovaeq %rbx,%rax 924 andq %rax,%rbx 925 jnz .Lctr32_loop 926.Lctr32_unaligned_tail: 927 xorl %eax,%eax 928 cmpq %rsp,%rbp 929 cmoveq %rcx,%rax 930 movq %rdi,%r8 931 movq %rcx,%rbx 932 subq %rax,%rsp 933 shrq $3,%rcx 934 leaq (%rsp),%rdi 935.byte 0xf3,0x48,0xa5 936 movq %rsp,%rsi 937 movq %r8,%rdi 938 movq %rbx,%rcx 939 jmp .Lctr32_loop 940.align 16 941.Lctr32_break: 942 cmpq %rbp,%rsp 943 je .Lctr32_done 944 945 pxor %xmm0,%xmm0 946 leaq (%rsp),%rax 947.Lctr32_bzero: 948 movaps %xmm0,(%rax) 949 leaq 16(%rax),%rax 950 cmpq %rax,%rbp 951 ja .Lctr32_bzero 952 953.Lctr32_done: 954 leaq (%rbp),%rsp 955 jmp .Lctr32_exit 956 957.align 16 958.Lctr32_aligned: 959 movl -4(%rdx),%eax 960 bswapl %eax 961 negl %eax 962 andl $0xffff,%eax 963 movq $1048576,%rbx 964 shll $4,%eax 965 cmovzq %rbx,%rax 966 cmpq %rax,%rcx 967 cmovaq %rax,%rbx 968 cmovbeq %rcx,%rbx 969 jbe .Lctr32_aligned_skip 970 971.Lctr32_aligned_loop: 972 movq %rcx,%r10 973 movq %rbx,%rcx 974 movq %rbx,%r11 975 976 leaq -16(%rdx),%rax 977 leaq 16(%rdx),%rbx 978 shrq $4,%rcx 979.byte 0xf3,0x0f,0xa7,216 980 981 movl -4(%rdx),%eax 982 bswapl %eax 983 addl $0x10000,%eax 984 bswapl %eax 985 movl %eax,-4(%rdx) 986 987 movq %r10,%rcx 988 subq %r11,%rcx 989 movq $1048576,%rbx 990 jz .Lctr32_exit 991 cmpq %rbx,%rcx 992 jae .Lctr32_aligned_loop 993 994.Lctr32_aligned_skip: 995 leaq (%rsi,%rcx,1),%rbp 996 negq %rbp 997 andq $0xfff,%rbp 998 xorl %eax,%eax 999 cmpq $32,%rbp 1000 movq $32-1,%rbp 1001 cmovaeq %rax,%rbp 1002 andq %rcx,%rbp 1003 subq %rbp,%rcx 1004 jz .Lctr32_aligned_tail 1005 leaq -16(%rdx),%rax 1006 leaq 16(%rdx),%rbx 1007 shrq $4,%rcx 1008.byte 0xf3,0x0f,0xa7,216 1009 testq %rbp,%rbp 1010 jz .Lctr32_exit 1011 1012.Lctr32_aligned_tail: 1013 movq %rdi,%r8 1014 movq %rbp,%rbx 1015 movq %rbp,%rcx 1016 leaq (%rsp),%rbp 1017 subq %rcx,%rsp 1018 shrq $3,%rcx 1019 leaq (%rsp),%rdi 1020.byte 0xf3,0x48,0xa5 1021 leaq (%r8),%rdi 1022 leaq (%rsp),%rsi 1023 movq %rbx,%rcx 1024 jmp .Lctr32_loop 1025.Lctr32_exit: 1026 movl $1,%eax 1027 leaq 8(%rsp),%rsp 1028.Lctr32_abort: 1029 popq %rbx 1030 popq %rbp 1031 .byte 0xf3,0xc3 1032.size padlock_ctr32_encrypt,.-padlock_ctr32_encrypt 1033.byte 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95,54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 1034.align 16 1035.data 1036.align 8 1037.Lpadlock_saved_context: 1038.quad 0 1039 .section ".note.gnu.property", "a" 1040 .p2align 3 1041 .long 1f - 0f 1042 .long 4f - 1f 1043 .long 5 10440: 1045 # "GNU" encoded with .byte, since .asciz isn't supported 1046 # on Solaris. 1047 .byte 0x47 1048 .byte 0x4e 1049 .byte 0x55 1050 .byte 0 10511: 1052 .p2align 3 1053 .long 0xc0000002 1054 .long 3f - 2f 10552: 1056 .long 3 10573: 1058 .p2align 3 10594: 1060