1299966Sjkim# $FreeBSD$ 2299966Sjkim# Do not modify. This file is auto-generated from rc4-x86_64.pl. 3238405Sjkim.text 4238405Sjkim 5238405Sjkim 6238405Sjkim.globl RC4 7238405Sjkim.type RC4,@function 8238405Sjkim.align 16 9238405SjkimRC4: orq %rsi,%rsi 10238405Sjkim jne .Lentry 11238405Sjkim .byte 0xf3,0xc3 12238405Sjkim.Lentry: 13238405Sjkim pushq %rbx 14238405Sjkim pushq %r12 15238405Sjkim pushq %r13 16238405Sjkim.Lprologue: 17238405Sjkim movq %rsi,%r11 18238405Sjkim movq %rdx,%r12 19238405Sjkim movq %rcx,%r13 20238405Sjkim xorq %r10,%r10 21238405Sjkim xorq %rcx,%rcx 22238405Sjkim 23238405Sjkim leaq 8(%rdi),%rdi 24238405Sjkim movb -8(%rdi),%r10b 25238405Sjkim movb -4(%rdi),%cl 26238405Sjkim cmpl $-1,256(%rdi) 27238405Sjkim je .LRC4_CHAR 28238405Sjkim movl OPENSSL_ia32cap_P(%rip),%r8d 29238405Sjkim xorq %rbx,%rbx 30238405Sjkim incb %r10b 31238405Sjkim subq %r10,%rbx 32238405Sjkim subq %r12,%r13 33238405Sjkim movl (%rdi,%r10,4),%eax 34238405Sjkim testq $-16,%r11 35238405Sjkim jz .Lloop1 36238405Sjkim btl $30,%r8d 37238405Sjkim jc .Lintel 38238405Sjkim andq $7,%rbx 39238405Sjkim leaq 1(%r10),%rsi 40238405Sjkim jz .Loop8 41238405Sjkim subq %rbx,%r11 42238405Sjkim.Loop8_warmup: 43238405Sjkim addb %al,%cl 44238405Sjkim movl (%rdi,%rcx,4),%edx 45238405Sjkim movl %eax,(%rdi,%rcx,4) 46238405Sjkim movl %edx,(%rdi,%r10,4) 47238405Sjkim addb %dl,%al 48238405Sjkim incb %r10b 49238405Sjkim movl (%rdi,%rax,4),%edx 50238405Sjkim movl (%rdi,%r10,4),%eax 51238405Sjkim xorb (%r12),%dl 52238405Sjkim movb %dl,(%r13,%r12,1) 53238405Sjkim leaq 1(%r12),%r12 54238405Sjkim decq %rbx 55238405Sjkim jnz .Loop8_warmup 56238405Sjkim 57238405Sjkim leaq 1(%r10),%rsi 58238405Sjkim jmp .Loop8 59238405Sjkim.align 16 60238405Sjkim.Loop8: 61238405Sjkim addb %al,%cl 62238405Sjkim movl (%rdi,%rcx,4),%edx 63238405Sjkim movl %eax,(%rdi,%rcx,4) 64238405Sjkim movl 0(%rdi,%rsi,4),%ebx 65238405Sjkim rorq $8,%r8 66238405Sjkim movl %edx,0(%rdi,%r10,4) 67238405Sjkim addb %al,%dl 68238405Sjkim movb (%rdi,%rdx,4),%r8b 69238405Sjkim addb %bl,%cl 70238405Sjkim movl (%rdi,%rcx,4),%edx 71238405Sjkim movl %ebx,(%rdi,%rcx,4) 72238405Sjkim movl 4(%rdi,%rsi,4),%eax 73238405Sjkim rorq $8,%r8 74238405Sjkim movl %edx,4(%rdi,%r10,4) 75238405Sjkim addb %bl,%dl 76238405Sjkim movb (%rdi,%rdx,4),%r8b 77238405Sjkim addb %al,%cl 78238405Sjkim movl (%rdi,%rcx,4),%edx 79238405Sjkim movl %eax,(%rdi,%rcx,4) 80238405Sjkim movl 8(%rdi,%rsi,4),%ebx 81238405Sjkim rorq $8,%r8 82238405Sjkim movl %edx,8(%rdi,%r10,4) 83238405Sjkim addb %al,%dl 84238405Sjkim movb (%rdi,%rdx,4),%r8b 85238405Sjkim addb %bl,%cl 86238405Sjkim movl (%rdi,%rcx,4),%edx 87238405Sjkim movl %ebx,(%rdi,%rcx,4) 88238405Sjkim movl 12(%rdi,%rsi,4),%eax 89238405Sjkim rorq $8,%r8 90238405Sjkim movl %edx,12(%rdi,%r10,4) 91238405Sjkim addb %bl,%dl 92238405Sjkim movb (%rdi,%rdx,4),%r8b 93238405Sjkim addb %al,%cl 94238405Sjkim movl (%rdi,%rcx,4),%edx 95238405Sjkim movl %eax,(%rdi,%rcx,4) 96238405Sjkim movl 16(%rdi,%rsi,4),%ebx 97238405Sjkim rorq $8,%r8 98238405Sjkim movl %edx,16(%rdi,%r10,4) 99238405Sjkim addb %al,%dl 100238405Sjkim movb (%rdi,%rdx,4),%r8b 101238405Sjkim addb %bl,%cl 102238405Sjkim movl (%rdi,%rcx,4),%edx 103238405Sjkim movl %ebx,(%rdi,%rcx,4) 104238405Sjkim movl 20(%rdi,%rsi,4),%eax 105238405Sjkim rorq $8,%r8 106238405Sjkim movl %edx,20(%rdi,%r10,4) 107238405Sjkim addb %bl,%dl 108238405Sjkim movb (%rdi,%rdx,4),%r8b 109238405Sjkim addb %al,%cl 110238405Sjkim movl (%rdi,%rcx,4),%edx 111238405Sjkim movl %eax,(%rdi,%rcx,4) 112238405Sjkim movl 24(%rdi,%rsi,4),%ebx 113238405Sjkim rorq $8,%r8 114238405Sjkim movl %edx,24(%rdi,%r10,4) 115238405Sjkim addb %al,%dl 116238405Sjkim movb (%rdi,%rdx,4),%r8b 117238405Sjkim addb $8,%sil 118238405Sjkim addb %bl,%cl 119238405Sjkim movl (%rdi,%rcx,4),%edx 120238405Sjkim movl %ebx,(%rdi,%rcx,4) 121238405Sjkim movl -4(%rdi,%rsi,4),%eax 122238405Sjkim rorq $8,%r8 123238405Sjkim movl %edx,28(%rdi,%r10,4) 124238405Sjkim addb %bl,%dl 125238405Sjkim movb (%rdi,%rdx,4),%r8b 126238405Sjkim addb $8,%r10b 127238405Sjkim rorq $8,%r8 128238405Sjkim subq $8,%r11 129238405Sjkim 130238405Sjkim xorq (%r12),%r8 131238405Sjkim movq %r8,(%r13,%r12,1) 132238405Sjkim leaq 8(%r12),%r12 133238405Sjkim 134238405Sjkim testq $-8,%r11 135238405Sjkim jnz .Loop8 136238405Sjkim cmpq $0,%r11 137238405Sjkim jne .Lloop1 138238405Sjkim jmp .Lexit 139238405Sjkim 140238405Sjkim.align 16 141238405Sjkim.Lintel: 142238405Sjkim testq $-32,%r11 143238405Sjkim jz .Lloop1 144238405Sjkim andq $15,%rbx 145238405Sjkim jz .Loop16_is_hot 146238405Sjkim subq %rbx,%r11 147238405Sjkim.Loop16_warmup: 148238405Sjkim addb %al,%cl 149238405Sjkim movl (%rdi,%rcx,4),%edx 150238405Sjkim movl %eax,(%rdi,%rcx,4) 151238405Sjkim movl %edx,(%rdi,%r10,4) 152238405Sjkim addb %dl,%al 153238405Sjkim incb %r10b 154238405Sjkim movl (%rdi,%rax,4),%edx 155238405Sjkim movl (%rdi,%r10,4),%eax 156238405Sjkim xorb (%r12),%dl 157238405Sjkim movb %dl,(%r13,%r12,1) 158238405Sjkim leaq 1(%r12),%r12 159238405Sjkim decq %rbx 160238405Sjkim jnz .Loop16_warmup 161238405Sjkim 162238405Sjkim movq %rcx,%rbx 163238405Sjkim xorq %rcx,%rcx 164238405Sjkim movb %bl,%cl 165238405Sjkim 166238405Sjkim.Loop16_is_hot: 167238405Sjkim leaq (%rdi,%r10,4),%rsi 168238405Sjkim addb %al,%cl 169238405Sjkim movl (%rdi,%rcx,4),%edx 170238405Sjkim pxor %xmm0,%xmm0 171238405Sjkim movl %eax,(%rdi,%rcx,4) 172238405Sjkim addb %dl,%al 173238405Sjkim movl 4(%rsi),%ebx 174238405Sjkim movzbl %al,%eax 175238405Sjkim movl %edx,0(%rsi) 176238405Sjkim addb %bl,%cl 177238405Sjkim pinsrw $0,(%rdi,%rax,4),%xmm0 178238405Sjkim jmp .Loop16_enter 179238405Sjkim.align 16 180238405Sjkim.Loop16: 181238405Sjkim addb %al,%cl 182238405Sjkim movl (%rdi,%rcx,4),%edx 183238405Sjkim pxor %xmm0,%xmm2 184238405Sjkim psllq $8,%xmm1 185238405Sjkim pxor %xmm0,%xmm0 186238405Sjkim movl %eax,(%rdi,%rcx,4) 187238405Sjkim addb %dl,%al 188238405Sjkim movl 4(%rsi),%ebx 189238405Sjkim movzbl %al,%eax 190238405Sjkim movl %edx,0(%rsi) 191238405Sjkim pxor %xmm1,%xmm2 192238405Sjkim addb %bl,%cl 193238405Sjkim pinsrw $0,(%rdi,%rax,4),%xmm0 194238405Sjkim movdqu %xmm2,(%r13,%r12,1) 195238405Sjkim leaq 16(%r12),%r12 196238405Sjkim.Loop16_enter: 197238405Sjkim movl (%rdi,%rcx,4),%edx 198238405Sjkim pxor %xmm1,%xmm1 199238405Sjkim movl %ebx,(%rdi,%rcx,4) 200238405Sjkim addb %dl,%bl 201238405Sjkim movl 8(%rsi),%eax 202238405Sjkim movzbl %bl,%ebx 203238405Sjkim movl %edx,4(%rsi) 204238405Sjkim addb %al,%cl 205238405Sjkim pinsrw $0,(%rdi,%rbx,4),%xmm1 206238405Sjkim movl (%rdi,%rcx,4),%edx 207238405Sjkim movl %eax,(%rdi,%rcx,4) 208238405Sjkim addb %dl,%al 209238405Sjkim movl 12(%rsi),%ebx 210238405Sjkim movzbl %al,%eax 211238405Sjkim movl %edx,8(%rsi) 212238405Sjkim addb %bl,%cl 213238405Sjkim pinsrw $1,(%rdi,%rax,4),%xmm0 214238405Sjkim movl (%rdi,%rcx,4),%edx 215238405Sjkim movl %ebx,(%rdi,%rcx,4) 216238405Sjkim addb %dl,%bl 217238405Sjkim movl 16(%rsi),%eax 218238405Sjkim movzbl %bl,%ebx 219238405Sjkim movl %edx,12(%rsi) 220238405Sjkim addb %al,%cl 221238405Sjkim pinsrw $1,(%rdi,%rbx,4),%xmm1 222238405Sjkim movl (%rdi,%rcx,4),%edx 223238405Sjkim movl %eax,(%rdi,%rcx,4) 224238405Sjkim addb %dl,%al 225238405Sjkim movl 20(%rsi),%ebx 226238405Sjkim movzbl %al,%eax 227238405Sjkim movl %edx,16(%rsi) 228238405Sjkim addb %bl,%cl 229238405Sjkim pinsrw $2,(%rdi,%rax,4),%xmm0 230238405Sjkim movl (%rdi,%rcx,4),%edx 231238405Sjkim movl %ebx,(%rdi,%rcx,4) 232238405Sjkim addb %dl,%bl 233238405Sjkim movl 24(%rsi),%eax 234238405Sjkim movzbl %bl,%ebx 235238405Sjkim movl %edx,20(%rsi) 236238405Sjkim addb %al,%cl 237238405Sjkim pinsrw $2,(%rdi,%rbx,4),%xmm1 238238405Sjkim movl (%rdi,%rcx,4),%edx 239238405Sjkim movl %eax,(%rdi,%rcx,4) 240238405Sjkim addb %dl,%al 241238405Sjkim movl 28(%rsi),%ebx 242238405Sjkim movzbl %al,%eax 243238405Sjkim movl %edx,24(%rsi) 244238405Sjkim addb %bl,%cl 245238405Sjkim pinsrw $3,(%rdi,%rax,4),%xmm0 246238405Sjkim movl (%rdi,%rcx,4),%edx 247238405Sjkim movl %ebx,(%rdi,%rcx,4) 248238405Sjkim addb %dl,%bl 249238405Sjkim movl 32(%rsi),%eax 250238405Sjkim movzbl %bl,%ebx 251238405Sjkim movl %edx,28(%rsi) 252238405Sjkim addb %al,%cl 253238405Sjkim pinsrw $3,(%rdi,%rbx,4),%xmm1 254238405Sjkim movl (%rdi,%rcx,4),%edx 255238405Sjkim movl %eax,(%rdi,%rcx,4) 256238405Sjkim addb %dl,%al 257238405Sjkim movl 36(%rsi),%ebx 258238405Sjkim movzbl %al,%eax 259238405Sjkim movl %edx,32(%rsi) 260238405Sjkim addb %bl,%cl 261238405Sjkim pinsrw $4,(%rdi,%rax,4),%xmm0 262238405Sjkim movl (%rdi,%rcx,4),%edx 263238405Sjkim movl %ebx,(%rdi,%rcx,4) 264238405Sjkim addb %dl,%bl 265238405Sjkim movl 40(%rsi),%eax 266238405Sjkim movzbl %bl,%ebx 267238405Sjkim movl %edx,36(%rsi) 268238405Sjkim addb %al,%cl 269238405Sjkim pinsrw $4,(%rdi,%rbx,4),%xmm1 270238405Sjkim movl (%rdi,%rcx,4),%edx 271238405Sjkim movl %eax,(%rdi,%rcx,4) 272238405Sjkim addb %dl,%al 273238405Sjkim movl 44(%rsi),%ebx 274238405Sjkim movzbl %al,%eax 275238405Sjkim movl %edx,40(%rsi) 276238405Sjkim addb %bl,%cl 277238405Sjkim pinsrw $5,(%rdi,%rax,4),%xmm0 278238405Sjkim movl (%rdi,%rcx,4),%edx 279238405Sjkim movl %ebx,(%rdi,%rcx,4) 280238405Sjkim addb %dl,%bl 281238405Sjkim movl 48(%rsi),%eax 282238405Sjkim movzbl %bl,%ebx 283238405Sjkim movl %edx,44(%rsi) 284238405Sjkim addb %al,%cl 285238405Sjkim pinsrw $5,(%rdi,%rbx,4),%xmm1 286238405Sjkim movl (%rdi,%rcx,4),%edx 287238405Sjkim movl %eax,(%rdi,%rcx,4) 288238405Sjkim addb %dl,%al 289238405Sjkim movl 52(%rsi),%ebx 290238405Sjkim movzbl %al,%eax 291238405Sjkim movl %edx,48(%rsi) 292238405Sjkim addb %bl,%cl 293238405Sjkim pinsrw $6,(%rdi,%rax,4),%xmm0 294238405Sjkim movl (%rdi,%rcx,4),%edx 295238405Sjkim movl %ebx,(%rdi,%rcx,4) 296238405Sjkim addb %dl,%bl 297238405Sjkim movl 56(%rsi),%eax 298238405Sjkim movzbl %bl,%ebx 299238405Sjkim movl %edx,52(%rsi) 300238405Sjkim addb %al,%cl 301238405Sjkim pinsrw $6,(%rdi,%rbx,4),%xmm1 302238405Sjkim movl (%rdi,%rcx,4),%edx 303238405Sjkim movl %eax,(%rdi,%rcx,4) 304238405Sjkim addb %dl,%al 305238405Sjkim movl 60(%rsi),%ebx 306238405Sjkim movzbl %al,%eax 307238405Sjkim movl %edx,56(%rsi) 308238405Sjkim addb %bl,%cl 309238405Sjkim pinsrw $7,(%rdi,%rax,4),%xmm0 310238405Sjkim addb $16,%r10b 311238405Sjkim movdqu (%r12),%xmm2 312238405Sjkim movl (%rdi,%rcx,4),%edx 313238405Sjkim movl %ebx,(%rdi,%rcx,4) 314238405Sjkim addb %dl,%bl 315238405Sjkim movzbl %bl,%ebx 316238405Sjkim movl %edx,60(%rsi) 317238405Sjkim leaq (%rdi,%r10,4),%rsi 318238405Sjkim pinsrw $7,(%rdi,%rbx,4),%xmm1 319238405Sjkim movl (%rsi),%eax 320238405Sjkim movq %rcx,%rbx 321238405Sjkim xorq %rcx,%rcx 322238405Sjkim subq $16,%r11 323238405Sjkim movb %bl,%cl 324238405Sjkim testq $-16,%r11 325238405Sjkim jnz .Loop16 326238405Sjkim 327238405Sjkim psllq $8,%xmm1 328238405Sjkim pxor %xmm0,%xmm2 329238405Sjkim pxor %xmm1,%xmm2 330238405Sjkim movdqu %xmm2,(%r13,%r12,1) 331238405Sjkim leaq 16(%r12),%r12 332238405Sjkim 333238405Sjkim cmpq $0,%r11 334238405Sjkim jne .Lloop1 335238405Sjkim jmp .Lexit 336238405Sjkim 337238405Sjkim.align 16 338238405Sjkim.Lloop1: 339238405Sjkim addb %al,%cl 340238405Sjkim movl (%rdi,%rcx,4),%edx 341238405Sjkim movl %eax,(%rdi,%rcx,4) 342238405Sjkim movl %edx,(%rdi,%r10,4) 343238405Sjkim addb %dl,%al 344238405Sjkim incb %r10b 345238405Sjkim movl (%rdi,%rax,4),%edx 346238405Sjkim movl (%rdi,%r10,4),%eax 347238405Sjkim xorb (%r12),%dl 348238405Sjkim movb %dl,(%r13,%r12,1) 349238405Sjkim leaq 1(%r12),%r12 350238405Sjkim decq %r11 351238405Sjkim jnz .Lloop1 352238405Sjkim jmp .Lexit 353238405Sjkim 354238405Sjkim.align 16 355238405Sjkim.LRC4_CHAR: 356238405Sjkim addb $1,%r10b 357238405Sjkim movzbl (%rdi,%r10,1),%eax 358238405Sjkim testq $-8,%r11 359238405Sjkim jz .Lcloop1 360238405Sjkim jmp .Lcloop8 361238405Sjkim.align 16 362238405Sjkim.Lcloop8: 363238405Sjkim movl (%r12),%r8d 364238405Sjkim movl 4(%r12),%r9d 365238405Sjkim addb %al,%cl 366238405Sjkim leaq 1(%r10),%rsi 367238405Sjkim movzbl (%rdi,%rcx,1),%edx 368238405Sjkim movzbl %sil,%esi 369238405Sjkim movzbl (%rdi,%rsi,1),%ebx 370238405Sjkim movb %al,(%rdi,%rcx,1) 371238405Sjkim cmpq %rsi,%rcx 372238405Sjkim movb %dl,(%rdi,%r10,1) 373238405Sjkim jne .Lcmov0 374238405Sjkim movq %rax,%rbx 375238405Sjkim.Lcmov0: 376238405Sjkim addb %al,%dl 377238405Sjkim xorb (%rdi,%rdx,1),%r8b 378238405Sjkim rorl $8,%r8d 379238405Sjkim addb %bl,%cl 380238405Sjkim leaq 1(%rsi),%r10 381238405Sjkim movzbl (%rdi,%rcx,1),%edx 382238405Sjkim movzbl %r10b,%r10d 383238405Sjkim movzbl (%rdi,%r10,1),%eax 384238405Sjkim movb %bl,(%rdi,%rcx,1) 385238405Sjkim cmpq %r10,%rcx 386238405Sjkim movb %dl,(%rdi,%rsi,1) 387238405Sjkim jne .Lcmov1 388238405Sjkim movq %rbx,%rax 389238405Sjkim.Lcmov1: 390238405Sjkim addb %bl,%dl 391238405Sjkim xorb (%rdi,%rdx,1),%r8b 392238405Sjkim rorl $8,%r8d 393238405Sjkim addb %al,%cl 394238405Sjkim leaq 1(%r10),%rsi 395238405Sjkim movzbl (%rdi,%rcx,1),%edx 396238405Sjkim movzbl %sil,%esi 397238405Sjkim movzbl (%rdi,%rsi,1),%ebx 398238405Sjkim movb %al,(%rdi,%rcx,1) 399238405Sjkim cmpq %rsi,%rcx 400238405Sjkim movb %dl,(%rdi,%r10,1) 401238405Sjkim jne .Lcmov2 402238405Sjkim movq %rax,%rbx 403238405Sjkim.Lcmov2: 404238405Sjkim addb %al,%dl 405238405Sjkim xorb (%rdi,%rdx,1),%r8b 406238405Sjkim rorl $8,%r8d 407238405Sjkim addb %bl,%cl 408238405Sjkim leaq 1(%rsi),%r10 409238405Sjkim movzbl (%rdi,%rcx,1),%edx 410238405Sjkim movzbl %r10b,%r10d 411238405Sjkim movzbl (%rdi,%r10,1),%eax 412238405Sjkim movb %bl,(%rdi,%rcx,1) 413238405Sjkim cmpq %r10,%rcx 414238405Sjkim movb %dl,(%rdi,%rsi,1) 415238405Sjkim jne .Lcmov3 416238405Sjkim movq %rbx,%rax 417238405Sjkim.Lcmov3: 418238405Sjkim addb %bl,%dl 419238405Sjkim xorb (%rdi,%rdx,1),%r8b 420238405Sjkim rorl $8,%r8d 421238405Sjkim addb %al,%cl 422238405Sjkim leaq 1(%r10),%rsi 423238405Sjkim movzbl (%rdi,%rcx,1),%edx 424238405Sjkim movzbl %sil,%esi 425238405Sjkim movzbl (%rdi,%rsi,1),%ebx 426238405Sjkim movb %al,(%rdi,%rcx,1) 427238405Sjkim cmpq %rsi,%rcx 428238405Sjkim movb %dl,(%rdi,%r10,1) 429238405Sjkim jne .Lcmov4 430238405Sjkim movq %rax,%rbx 431238405Sjkim.Lcmov4: 432238405Sjkim addb %al,%dl 433238405Sjkim xorb (%rdi,%rdx,1),%r9b 434238405Sjkim rorl $8,%r9d 435238405Sjkim addb %bl,%cl 436238405Sjkim leaq 1(%rsi),%r10 437238405Sjkim movzbl (%rdi,%rcx,1),%edx 438238405Sjkim movzbl %r10b,%r10d 439238405Sjkim movzbl (%rdi,%r10,1),%eax 440238405Sjkim movb %bl,(%rdi,%rcx,1) 441238405Sjkim cmpq %r10,%rcx 442238405Sjkim movb %dl,(%rdi,%rsi,1) 443238405Sjkim jne .Lcmov5 444238405Sjkim movq %rbx,%rax 445238405Sjkim.Lcmov5: 446238405Sjkim addb %bl,%dl 447238405Sjkim xorb (%rdi,%rdx,1),%r9b 448238405Sjkim rorl $8,%r9d 449238405Sjkim addb %al,%cl 450238405Sjkim leaq 1(%r10),%rsi 451238405Sjkim movzbl (%rdi,%rcx,1),%edx 452238405Sjkim movzbl %sil,%esi 453238405Sjkim movzbl (%rdi,%rsi,1),%ebx 454238405Sjkim movb %al,(%rdi,%rcx,1) 455238405Sjkim cmpq %rsi,%rcx 456238405Sjkim movb %dl,(%rdi,%r10,1) 457238405Sjkim jne .Lcmov6 458238405Sjkim movq %rax,%rbx 459238405Sjkim.Lcmov6: 460238405Sjkim addb %al,%dl 461238405Sjkim xorb (%rdi,%rdx,1),%r9b 462238405Sjkim rorl $8,%r9d 463238405Sjkim addb %bl,%cl 464238405Sjkim leaq 1(%rsi),%r10 465238405Sjkim movzbl (%rdi,%rcx,1),%edx 466238405Sjkim movzbl %r10b,%r10d 467238405Sjkim movzbl (%rdi,%r10,1),%eax 468238405Sjkim movb %bl,(%rdi,%rcx,1) 469238405Sjkim cmpq %r10,%rcx 470238405Sjkim movb %dl,(%rdi,%rsi,1) 471238405Sjkim jne .Lcmov7 472238405Sjkim movq %rbx,%rax 473238405Sjkim.Lcmov7: 474238405Sjkim addb %bl,%dl 475238405Sjkim xorb (%rdi,%rdx,1),%r9b 476238405Sjkim rorl $8,%r9d 477238405Sjkim leaq -8(%r11),%r11 478238405Sjkim movl %r8d,(%r13) 479238405Sjkim leaq 8(%r12),%r12 480238405Sjkim movl %r9d,4(%r13) 481238405Sjkim leaq 8(%r13),%r13 482238405Sjkim 483238405Sjkim testq $-8,%r11 484238405Sjkim jnz .Lcloop8 485238405Sjkim cmpq $0,%r11 486238405Sjkim jne .Lcloop1 487238405Sjkim jmp .Lexit 488238405Sjkim.align 16 489238405Sjkim.Lcloop1: 490238405Sjkim addb %al,%cl 491238405Sjkim movzbl %cl,%ecx 492238405Sjkim movzbl (%rdi,%rcx,1),%edx 493238405Sjkim movb %al,(%rdi,%rcx,1) 494238405Sjkim movb %dl,(%rdi,%r10,1) 495238405Sjkim addb %al,%dl 496238405Sjkim addb $1,%r10b 497238405Sjkim movzbl %dl,%edx 498238405Sjkim movzbl %r10b,%r10d 499238405Sjkim movzbl (%rdi,%rdx,1),%edx 500238405Sjkim movzbl (%rdi,%r10,1),%eax 501238405Sjkim xorb (%r12),%dl 502238405Sjkim leaq 1(%r12),%r12 503238405Sjkim movb %dl,(%r13) 504238405Sjkim leaq 1(%r13),%r13 505238405Sjkim subq $1,%r11 506238405Sjkim jnz .Lcloop1 507238405Sjkim jmp .Lexit 508238405Sjkim 509238405Sjkim.align 16 510238405Sjkim.Lexit: 511238405Sjkim subb $1,%r10b 512238405Sjkim movl %r10d,-8(%rdi) 513238405Sjkim movl %ecx,-4(%rdi) 514238405Sjkim 515238405Sjkim movq (%rsp),%r13 516238405Sjkim movq 8(%rsp),%r12 517238405Sjkim movq 16(%rsp),%rbx 518238405Sjkim addq $24,%rsp 519238405Sjkim.Lepilogue: 520238405Sjkim .byte 0xf3,0xc3 521238405Sjkim.size RC4,.-RC4 522238405Sjkim.globl private_RC4_set_key 523238405Sjkim.type private_RC4_set_key,@function 524238405Sjkim.align 16 525238405Sjkimprivate_RC4_set_key: 526238405Sjkim leaq 8(%rdi),%rdi 527238405Sjkim leaq (%rdx,%rsi,1),%rdx 528238405Sjkim negq %rsi 529238405Sjkim movq %rsi,%rcx 530238405Sjkim xorl %eax,%eax 531238405Sjkim xorq %r9,%r9 532238405Sjkim xorq %r10,%r10 533238405Sjkim xorq %r11,%r11 534238405Sjkim 535238405Sjkim movl OPENSSL_ia32cap_P(%rip),%r8d 536238405Sjkim btl $20,%r8d 537238405Sjkim jc .Lc1stloop 538238405Sjkim jmp .Lw1stloop 539238405Sjkim 540238405Sjkim.align 16 541238405Sjkim.Lw1stloop: 542238405Sjkim movl %eax,(%rdi,%rax,4) 543238405Sjkim addb $1,%al 544238405Sjkim jnc .Lw1stloop 545238405Sjkim 546238405Sjkim xorq %r9,%r9 547238405Sjkim xorq %r8,%r8 548238405Sjkim.align 16 549238405Sjkim.Lw2ndloop: 550238405Sjkim movl (%rdi,%r9,4),%r10d 551238405Sjkim addb (%rdx,%rsi,1),%r8b 552238405Sjkim addb %r10b,%r8b 553238405Sjkim addq $1,%rsi 554238405Sjkim movl (%rdi,%r8,4),%r11d 555238405Sjkim cmovzq %rcx,%rsi 556238405Sjkim movl %r10d,(%rdi,%r8,4) 557238405Sjkim movl %r11d,(%rdi,%r9,4) 558238405Sjkim addb $1,%r9b 559238405Sjkim jnc .Lw2ndloop 560238405Sjkim jmp .Lexit_key 561238405Sjkim 562238405Sjkim.align 16 563238405Sjkim.Lc1stloop: 564238405Sjkim movb %al,(%rdi,%rax,1) 565238405Sjkim addb $1,%al 566238405Sjkim jnc .Lc1stloop 567238405Sjkim 568238405Sjkim xorq %r9,%r9 569238405Sjkim xorq %r8,%r8 570238405Sjkim.align 16 571238405Sjkim.Lc2ndloop: 572238405Sjkim movb (%rdi,%r9,1),%r10b 573238405Sjkim addb (%rdx,%rsi,1),%r8b 574238405Sjkim addb %r10b,%r8b 575238405Sjkim addq $1,%rsi 576238405Sjkim movb (%rdi,%r8,1),%r11b 577238405Sjkim jnz .Lcnowrap 578238405Sjkim movq %rcx,%rsi 579238405Sjkim.Lcnowrap: 580238405Sjkim movb %r10b,(%rdi,%r8,1) 581238405Sjkim movb %r11b,(%rdi,%r9,1) 582238405Sjkim addb $1,%r9b 583238405Sjkim jnc .Lc2ndloop 584238405Sjkim movl $-1,256(%rdi) 585238405Sjkim 586238405Sjkim.align 16 587238405Sjkim.Lexit_key: 588238405Sjkim xorl %eax,%eax 589238405Sjkim movl %eax,-8(%rdi) 590238405Sjkim movl %eax,-4(%rdi) 591238405Sjkim .byte 0xf3,0xc3 592238405Sjkim.size private_RC4_set_key,.-private_RC4_set_key 593238405Sjkim 594238405Sjkim.globl RC4_options 595238405Sjkim.type RC4_options,@function 596238405Sjkim.align 16 597238405SjkimRC4_options: 598238405Sjkim leaq .Lopts(%rip),%rax 599238405Sjkim movl OPENSSL_ia32cap_P(%rip),%edx 600238405Sjkim btl $20,%edx 601238405Sjkim jc .L8xchar 602238405Sjkim btl $30,%edx 603238405Sjkim jnc .Ldone 604238405Sjkim addq $25,%rax 605238405Sjkim .byte 0xf3,0xc3 606238405Sjkim.L8xchar: 607238405Sjkim addq $12,%rax 608238405Sjkim.Ldone: 609238405Sjkim .byte 0xf3,0xc3 610238405Sjkim.align 64 611238405Sjkim.Lopts: 612238405Sjkim.byte 114,99,52,40,56,120,44,105,110,116,41,0 613238405Sjkim.byte 114,99,52,40,56,120,44,99,104,97,114,41,0 614238405Sjkim.byte 114,99,52,40,49,54,120,44,105,110,116,41,0 615238405Sjkim.byte 82,67,52,32,102,111,114,32,120,56,54,95,54,52,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 616238405Sjkim.align 64 617238405Sjkim.size RC4_options,.-RC4_options 618