1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__x86_64__) 2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.text 3a4fb56a4374ac52a0b1c23e3654d4426c2e4adb3Adam Langley.extern OPENSSL_ia32cap_P 4a4fb56a4374ac52a0b1c23e3654d4426c2e4adb3Adam Langley.hidden OPENSSL_ia32cap_P 5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl asm_RC4 7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden asm_RC4 8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type asm_RC4,@function 9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 10d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyasm_RC4: 11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley orq %rsi,%rsi 12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lentry 13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley .byte 0xf3,0xc3 14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lentry: 15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pushq %rbx 16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pushq %r12 17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pushq %r13 18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lprologue: 19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rsi,%r11 20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rdx,%r12 21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rcx,%r13 22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r10,%r10 23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %rcx,%rcx 24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 8(%rdi),%rdi 26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb -8(%rdi),%r10b 27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb -4(%rdi),%cl 28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpl $-1,256(%rdi) 29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley je .LRC4_CHAR 30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl OPENSSL_ia32cap_P(%rip),%r8d 31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %rbx,%rbx 32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley incb %r10b 33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq %r10,%rbx 34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq %r12,%r13 35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r10,4),%eax 36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-16,%r11 37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jz .Lloop1 38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley btl $30,%r8d 39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jc .Lintel 40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley andq $7,%rbx 41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jz .Loop8 43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq %rbx,%r11 44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop8_warmup: 45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,(%rdi,%r10,4) 49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley incb %r10b 51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rax,4),%edx 52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r10,4),%eax 53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%r12),%dl 54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%r12,%r13,1) 55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r12),%r12 56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley decq %rbx 57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Loop8_warmup 58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Loop8 61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop8: 63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 0(%rdi,%rsi,4),%ebx 67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,0(%rdi,%r10,4) 69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 4(%rdi,%rsi,4),%eax 75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,4(%rdi,%r10,4) 77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 8(%rdi,%rsi,4),%ebx 83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,8(%rdi,%r10,4) 85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 12(%rdi,%rsi,4),%eax 91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,12(%rdi,%r10,4) 93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 16(%rdi,%rsi,4),%ebx 99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,16(%rdi,%r10,4) 101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 20(%rdi,%rsi,4),%eax 107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,20(%rdi,%r10,4) 109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 24(%rdi,%rsi,4),%ebx 115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,24(%rdi,%r10,4) 117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $8,%sil 120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl -4(%rdi,%rsi,4),%eax 124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,28(%rdi,%r10,4) 126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%rdx,4),%r8b 128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $8,%r10b 129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorq $8,%r8 130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq $8,%r11 131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq (%r12),%r8 133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %r8,(%r12,%r13,1) 134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 8(%r12),%r12 135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-8,%r11 137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Loop8 138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq $0,%r11 139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lloop1 140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit 141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lintel: 144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-32,%r11 145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jz .Lloop1 146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley andq $15,%rbx 147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jz .Loop16_is_hot 148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq %rbx,%r11 149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop16_warmup: 150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,(%rdi,%r10,4) 154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley incb %r10b 156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rax,4),%edx 157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r10,4),%eax 158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%r12),%dl 159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%r12,%r13,1) 160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r12),%r12 161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley decq %rbx 162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Loop16_warmup 163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rcx,%rbx 165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %rcx,%rcx 166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,%cl 167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop16_is_hot: 169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq (%rdi,%r10,4),%rsi 170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm0,%xmm0 173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 4(%rsi),%ebx 176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,0(%rsi) 178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $0,(%rdi,%rax,4),%xmm0 180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Loop16_enter 181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop16: 183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm0,%xmm2 186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley psllq $8,%xmm1 187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm0,%xmm0 188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 4(%rsi),%ebx 191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,0(%rsi) 193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm1,%xmm2 194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $0,(%rdi,%rax,4),%xmm0 196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movdqu %xmm2,(%r12,%r13,1) 197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 16(%r12),%r12 198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop16_enter: 199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm1,%xmm1 201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 8(%rsi),%eax 204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,4(%rsi) 206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $0,(%rdi,%rbx,4),%xmm1 208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 12(%rsi),%ebx 212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,8(%rsi) 214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $1,(%rdi,%rax,4),%xmm0 216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 16(%rsi),%eax 220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,12(%rsi) 222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $1,(%rdi,%rbx,4),%xmm1 224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 20(%rsi),%ebx 228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,16(%rsi) 230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $2,(%rdi,%rax,4),%xmm0 232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 24(%rsi),%eax 236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,20(%rsi) 238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $2,(%rdi,%rbx,4),%xmm1 240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 28(%rsi),%ebx 244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,24(%rsi) 246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $3,(%rdi,%rax,4),%xmm0 248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 32(%rsi),%eax 252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,28(%rsi) 254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $3,(%rdi,%rbx,4),%xmm1 256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 36(%rsi),%ebx 260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,32(%rsi) 262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $4,(%rdi,%rax,4),%xmm0 264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 40(%rsi),%eax 268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,36(%rsi) 270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $4,(%rdi,%rbx,4),%xmm1 272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 44(%rsi),%ebx 276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,40(%rsi) 278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $5,(%rdi,%rax,4),%xmm0 280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 48(%rsi),%eax 284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,44(%rsi) 286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $5,(%rdi,%rbx,4),%xmm1 288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 52(%rsi),%ebx 292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,48(%rsi) 294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $6,(%rdi,%rax,4),%xmm0 296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 56(%rsi),%eax 300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,52(%rsi) 302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $6,(%rdi,%rbx,4),%xmm1 304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 60(%rsi),%ebx 308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %al,%eax 309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,56(%rsi) 310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $7,(%rdi,%rax,4),%xmm0 312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $16,%r10b 313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movdqu (%r12),%xmm2 314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ebx,(%rdi,%rcx,4) 316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%bl 317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %bl,%ebx 318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,60(%rsi) 319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq (%rdi,%r10,4),%rsi 320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pinsrw $7,(%rdi,%rbx,4),%xmm1 321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rsi),%eax 322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rcx,%rbx 323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %rcx,%rcx 324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq $16,%r11 325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,%cl 326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-16,%r11 327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Loop16 328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley psllq $8,%xmm1 330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm0,%xmm2 331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley pxor %xmm1,%xmm2 332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movdqu %xmm2,(%r12,%r13,1) 333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 16(%r12),%r12 334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq $0,%r11 336d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lloop1 337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit 338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lloop1: 341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rcx,4),%edx 343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rcx,4) 344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %edx,(%rdi,%r10,4) 345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %dl,%al 346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley incb %r10b 347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%rax,4),%edx 348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r10,4),%eax 349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%r12),%dl 350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%r12,%r13,1) 351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r12),%r12 352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley decq %r11 353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Lloop1 354d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit 355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.LRC4_CHAR: 358d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%r10b 359d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-8,%r11 361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jz .Lcloop1 362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lcloop8 363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcloop8: 365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%r12),%r8d 366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl 4(%r12),%r9d 367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 369d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %sil,%esi 371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rsi,1),%ebx 372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rcx,1) 373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %rsi,%rcx 374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%r10,1) 375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov0 376d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rax,%rbx 377d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov0: 378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r8b 380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r8d 381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 382d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%rsi),%r10 383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %r10b,%r10d 385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,(%rdi,%rcx,1) 387d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %r10,%rcx 388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%rsi,1) 389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov1 390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rbx,%rax 391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov1: 392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 393d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r8b 394d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r8d 395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %sil,%esi 399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rsi,1),%ebx 400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rcx,1) 401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %rsi,%rcx 402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%r10,1) 403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov2 404d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rax,%rbx 405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov2: 406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 407d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r8b 408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r8d 409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%rsi),%r10 411d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %r10b,%r10d 413d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,(%rdi,%rcx,1) 415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %r10,%rcx 416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%rsi,1) 417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov3 418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rbx,%rax 419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov3: 420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r8b 422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r8d 423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 426d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %sil,%esi 427d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rsi,1),%ebx 428d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rcx,1) 429d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %rsi,%rcx 430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%r10,1) 431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov4 432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rax,%rbx 433d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov4: 434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r9b 436d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r9d 437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%rsi),%r10 439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %r10b,%r10d 441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,(%rdi,%rcx,1) 443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %r10,%rcx 444d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%rsi,1) 445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov5 446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rbx,%rax 447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov5: 448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r9b 450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r9d 451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 452d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r10),%rsi 453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 454d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %sil,%esi 455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rsi,1),%ebx 456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rcx,1) 457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %rsi,%rcx 458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%r10,1) 459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov6 460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rax,%rbx 461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov6: 462d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 463d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r9b 464d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r9d 465d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%cl 466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%rsi),%r10 467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %r10b,%r10d 469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 470d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %bl,(%rdi,%rcx,1) 471d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq %r10,%rcx 472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%rsi,1) 473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcmov7 474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rbx,%rax 475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcmov7: 476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %bl,%dl 477d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%rdi,%rdx,1),%r9b 478d9e397b599b13d642138480a28c14db7a136bf0Adam Langley rorl $8,%r9d 479d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq -8(%r11),%r11 480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %r8d,(%r13) 481d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 8(%r12),%r12 482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %r9d,4(%r13) 483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 8(%r13),%r13 484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 485d9e397b599b13d642138480a28c14db7a136bf0Adam Langley testq $-8,%r11 486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Lcloop8 487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmpq $0,%r11 488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jne .Lcloop1 489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit 490d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcloop1: 492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%cl 493d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %cl,%ecx 494d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rcx,1),%edx 495d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rcx,1) 496d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%rdi,%r10,1) 497d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %al,%dl 498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%r10b 499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %dl,%edx 500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl %r10b,%r10d 501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%rdx,1),%edx 502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movzbl (%rdi,%r10,1),%eax 503d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorb (%r12),%dl 504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r12),%r12 505d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %dl,(%r13) 506d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 1(%r13),%r13 507d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subq $1,%r11 508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Lcloop1 509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit 510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lexit: 513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley subb $1,%r10b 514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %r10d,-8(%rdi) 515d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %ecx,-4(%rdi) 516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 517d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq (%rsp),%r13 518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq 8(%rsp),%r12 519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq 16(%rsp),%rbx 520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addq $24,%rsp 521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lepilogue: 522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley .byte 0xf3,0xc3 523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size asm_RC4,.-asm_RC4 524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl asm_RC4_set_key 525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden asm_RC4_set_key 526d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type asm_RC4_set_key,@function 527d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 528d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyasm_RC4_set_key: 529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq 8(%rdi),%rdi 530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley leaq (%rdx,%rsi,1),%rdx 531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley negq %rsi 532d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rsi,%rcx 533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorl %eax,%eax 534d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r9,%r9 535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r10,%r10 536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r11,%r11 537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl OPENSSL_ia32cap_P(%rip),%r8d 539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley btl $20,%r8d 540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jc .Lc1stloop 541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lw1stloop 542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 544d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lw1stloop: 545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,(%rdi,%rax,4) 546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%al 547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnc .Lw1stloop 548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r9,%r9 550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r8,%r8 551d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lw2ndloop: 553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r9,4),%r10d 554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb (%rdx,%rsi,1),%r8b 555d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %r10b,%r8b 556d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addq $1,%rsi 557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl (%rdi,%r8,4),%r11d 558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cmovzq %rcx,%rsi 559d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %r10d,(%rdi,%r8,4) 560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %r11d,(%rdi,%r9,4) 561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%r9b 562d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnc .Lw2ndloop 563d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jmp .Lexit_key 564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lc1stloop: 567d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %al,(%rdi,%rax,1) 568d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%al 569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnc .Lc1stloop 570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r9,%r9 572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorq %r8,%r8 573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lc2ndloop: 575d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%r9,1),%r10b 576d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb (%rdx,%rsi,1),%r8b 577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb %r10b,%r8b 578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addq $1,%rsi 579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb (%rdi,%r8,1),%r11b 580d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnz .Lcnowrap 581d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movq %rcx,%rsi 582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lcnowrap: 583d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %r10b,(%rdi,%r8,1) 584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movb %r11b,(%rdi,%r9,1) 585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley addb $1,%r9b 586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley jnc .Lc2ndloop 587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl $-1,256(%rdi) 588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 589d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align 16 590d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lexit_key: 591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley xorl %eax,%eax 592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,-8(%rdi) 593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley movl %eax,-4(%rdi) 594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley .byte 0xf3,0xc3 595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size asm_RC4_set_key,.-asm_RC4_set_key 596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 597