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