Path: blob/main/sys/crypto/openssl/amd64/rc4-x86_64.S
39482 views
/* Do not modify. This file is auto-generated from rc4-x86_64.pl. */1.text234.globl RC45.type RC4,@function6.align 167RC4:8.cfi_startproc9.byte 243,15,30,25010orq %rsi,%rsi11jne .Lentry12.byte 0xf3,0xc313.Lentry:14pushq %rbx15.cfi_adjust_cfa_offset 816.cfi_offset %rbx,-1617pushq %r1218.cfi_adjust_cfa_offset 819.cfi_offset %r12,-2420pushq %r1321.cfi_adjust_cfa_offset 822.cfi_offset %r13,-3223.Lprologue:24movq %rsi,%r1125movq %rdx,%r1226movq %rcx,%r1327xorq %r10,%r1028xorq %rcx,%rcx2930leaq 8(%rdi),%rdi31movb -8(%rdi),%r10b32movb -4(%rdi),%cl33cmpl $-1,256(%rdi)34je .LRC4_CHAR35movl OPENSSL_ia32cap_P(%rip),%r8d36xorq %rbx,%rbx37incb %r10b38subq %r10,%rbx39subq %r12,%r1340movl (%rdi,%r10,4),%eax41testq $-16,%r1142jz .Lloop143btl $30,%r8d44jc .Lintel45andq $7,%rbx46leaq 1(%r10),%rsi47jz .Loop848subq %rbx,%r1149.Loop8_warmup:50addb %al,%cl51movl (%rdi,%rcx,4),%edx52movl %eax,(%rdi,%rcx,4)53movl %edx,(%rdi,%r10,4)54addb %dl,%al55incb %r10b56movl (%rdi,%rax,4),%edx57movl (%rdi,%r10,4),%eax58xorb (%r12),%dl59movb %dl,(%r12,%r13,1)60leaq 1(%r12),%r1261decq %rbx62jnz .Loop8_warmup6364leaq 1(%r10),%rsi65jmp .Loop866.align 1667.Loop8:68addb %al,%cl69movl (%rdi,%rcx,4),%edx70movl %eax,(%rdi,%rcx,4)71movl 0(%rdi,%rsi,4),%ebx72rorq $8,%r873movl %edx,0(%rdi,%r10,4)74addb %al,%dl75movb (%rdi,%rdx,4),%r8b76addb %bl,%cl77movl (%rdi,%rcx,4),%edx78movl %ebx,(%rdi,%rcx,4)79movl 4(%rdi,%rsi,4),%eax80rorq $8,%r881movl %edx,4(%rdi,%r10,4)82addb %bl,%dl83movb (%rdi,%rdx,4),%r8b84addb %al,%cl85movl (%rdi,%rcx,4),%edx86movl %eax,(%rdi,%rcx,4)87movl 8(%rdi,%rsi,4),%ebx88rorq $8,%r889movl %edx,8(%rdi,%r10,4)90addb %al,%dl91movb (%rdi,%rdx,4),%r8b92addb %bl,%cl93movl (%rdi,%rcx,4),%edx94movl %ebx,(%rdi,%rcx,4)95movl 12(%rdi,%rsi,4),%eax96rorq $8,%r897movl %edx,12(%rdi,%r10,4)98addb %bl,%dl99movb (%rdi,%rdx,4),%r8b100addb %al,%cl101movl (%rdi,%rcx,4),%edx102movl %eax,(%rdi,%rcx,4)103movl 16(%rdi,%rsi,4),%ebx104rorq $8,%r8105movl %edx,16(%rdi,%r10,4)106addb %al,%dl107movb (%rdi,%rdx,4),%r8b108addb %bl,%cl109movl (%rdi,%rcx,4),%edx110movl %ebx,(%rdi,%rcx,4)111movl 20(%rdi,%rsi,4),%eax112rorq $8,%r8113movl %edx,20(%rdi,%r10,4)114addb %bl,%dl115movb (%rdi,%rdx,4),%r8b116addb %al,%cl117movl (%rdi,%rcx,4),%edx118movl %eax,(%rdi,%rcx,4)119movl 24(%rdi,%rsi,4),%ebx120rorq $8,%r8121movl %edx,24(%rdi,%r10,4)122addb %al,%dl123movb (%rdi,%rdx,4),%r8b124addb $8,%sil125addb %bl,%cl126movl (%rdi,%rcx,4),%edx127movl %ebx,(%rdi,%rcx,4)128movl -4(%rdi,%rsi,4),%eax129rorq $8,%r8130movl %edx,28(%rdi,%r10,4)131addb %bl,%dl132movb (%rdi,%rdx,4),%r8b133addb $8,%r10b134rorq $8,%r8135subq $8,%r11136137xorq (%r12),%r8138movq %r8,(%r12,%r13,1)139leaq 8(%r12),%r12140141testq $-8,%r11142jnz .Loop8143cmpq $0,%r11144jne .Lloop1145jmp .Lexit146147.align 16148.Lintel:149testq $-32,%r11150jz .Lloop1151andq $15,%rbx152jz .Loop16_is_hot153subq %rbx,%r11154.Loop16_warmup:155addb %al,%cl156movl (%rdi,%rcx,4),%edx157movl %eax,(%rdi,%rcx,4)158movl %edx,(%rdi,%r10,4)159addb %dl,%al160incb %r10b161movl (%rdi,%rax,4),%edx162movl (%rdi,%r10,4),%eax163xorb (%r12),%dl164movb %dl,(%r12,%r13,1)165leaq 1(%r12),%r12166decq %rbx167jnz .Loop16_warmup168169movq %rcx,%rbx170xorq %rcx,%rcx171movb %bl,%cl172173.Loop16_is_hot:174leaq (%rdi,%r10,4),%rsi175addb %al,%cl176movl (%rdi,%rcx,4),%edx177pxor %xmm0,%xmm0178movl %eax,(%rdi,%rcx,4)179addb %dl,%al180movl 4(%rsi),%ebx181movzbl %al,%eax182movl %edx,0(%rsi)183addb %bl,%cl184pinsrw $0,(%rdi,%rax,4),%xmm0185jmp .Loop16_enter186.align 16187.Loop16:188addb %al,%cl189movl (%rdi,%rcx,4),%edx190pxor %xmm0,%xmm2191psllq $8,%xmm1192pxor %xmm0,%xmm0193movl %eax,(%rdi,%rcx,4)194addb %dl,%al195movl 4(%rsi),%ebx196movzbl %al,%eax197movl %edx,0(%rsi)198pxor %xmm1,%xmm2199addb %bl,%cl200pinsrw $0,(%rdi,%rax,4),%xmm0201movdqu %xmm2,(%r12,%r13,1)202leaq 16(%r12),%r12203.Loop16_enter:204movl (%rdi,%rcx,4),%edx205pxor %xmm1,%xmm1206movl %ebx,(%rdi,%rcx,4)207addb %dl,%bl208movl 8(%rsi),%eax209movzbl %bl,%ebx210movl %edx,4(%rsi)211addb %al,%cl212pinsrw $0,(%rdi,%rbx,4),%xmm1213movl (%rdi,%rcx,4),%edx214movl %eax,(%rdi,%rcx,4)215addb %dl,%al216movl 12(%rsi),%ebx217movzbl %al,%eax218movl %edx,8(%rsi)219addb %bl,%cl220pinsrw $1,(%rdi,%rax,4),%xmm0221movl (%rdi,%rcx,4),%edx222movl %ebx,(%rdi,%rcx,4)223addb %dl,%bl224movl 16(%rsi),%eax225movzbl %bl,%ebx226movl %edx,12(%rsi)227addb %al,%cl228pinsrw $1,(%rdi,%rbx,4),%xmm1229movl (%rdi,%rcx,4),%edx230movl %eax,(%rdi,%rcx,4)231addb %dl,%al232movl 20(%rsi),%ebx233movzbl %al,%eax234movl %edx,16(%rsi)235addb %bl,%cl236pinsrw $2,(%rdi,%rax,4),%xmm0237movl (%rdi,%rcx,4),%edx238movl %ebx,(%rdi,%rcx,4)239addb %dl,%bl240movl 24(%rsi),%eax241movzbl %bl,%ebx242movl %edx,20(%rsi)243addb %al,%cl244pinsrw $2,(%rdi,%rbx,4),%xmm1245movl (%rdi,%rcx,4),%edx246movl %eax,(%rdi,%rcx,4)247addb %dl,%al248movl 28(%rsi),%ebx249movzbl %al,%eax250movl %edx,24(%rsi)251addb %bl,%cl252pinsrw $3,(%rdi,%rax,4),%xmm0253movl (%rdi,%rcx,4),%edx254movl %ebx,(%rdi,%rcx,4)255addb %dl,%bl256movl 32(%rsi),%eax257movzbl %bl,%ebx258movl %edx,28(%rsi)259addb %al,%cl260pinsrw $3,(%rdi,%rbx,4),%xmm1261movl (%rdi,%rcx,4),%edx262movl %eax,(%rdi,%rcx,4)263addb %dl,%al264movl 36(%rsi),%ebx265movzbl %al,%eax266movl %edx,32(%rsi)267addb %bl,%cl268pinsrw $4,(%rdi,%rax,4),%xmm0269movl (%rdi,%rcx,4),%edx270movl %ebx,(%rdi,%rcx,4)271addb %dl,%bl272movl 40(%rsi),%eax273movzbl %bl,%ebx274movl %edx,36(%rsi)275addb %al,%cl276pinsrw $4,(%rdi,%rbx,4),%xmm1277movl (%rdi,%rcx,4),%edx278movl %eax,(%rdi,%rcx,4)279addb %dl,%al280movl 44(%rsi),%ebx281movzbl %al,%eax282movl %edx,40(%rsi)283addb %bl,%cl284pinsrw $5,(%rdi,%rax,4),%xmm0285movl (%rdi,%rcx,4),%edx286movl %ebx,(%rdi,%rcx,4)287addb %dl,%bl288movl 48(%rsi),%eax289movzbl %bl,%ebx290movl %edx,44(%rsi)291addb %al,%cl292pinsrw $5,(%rdi,%rbx,4),%xmm1293movl (%rdi,%rcx,4),%edx294movl %eax,(%rdi,%rcx,4)295addb %dl,%al296movl 52(%rsi),%ebx297movzbl %al,%eax298movl %edx,48(%rsi)299addb %bl,%cl300pinsrw $6,(%rdi,%rax,4),%xmm0301movl (%rdi,%rcx,4),%edx302movl %ebx,(%rdi,%rcx,4)303addb %dl,%bl304movl 56(%rsi),%eax305movzbl %bl,%ebx306movl %edx,52(%rsi)307addb %al,%cl308pinsrw $6,(%rdi,%rbx,4),%xmm1309movl (%rdi,%rcx,4),%edx310movl %eax,(%rdi,%rcx,4)311addb %dl,%al312movl 60(%rsi),%ebx313movzbl %al,%eax314movl %edx,56(%rsi)315addb %bl,%cl316pinsrw $7,(%rdi,%rax,4),%xmm0317addb $16,%r10b318movdqu (%r12),%xmm2319movl (%rdi,%rcx,4),%edx320movl %ebx,(%rdi,%rcx,4)321addb %dl,%bl322movzbl %bl,%ebx323movl %edx,60(%rsi)324leaq (%rdi,%r10,4),%rsi325pinsrw $7,(%rdi,%rbx,4),%xmm1326movl (%rsi),%eax327movq %rcx,%rbx328xorq %rcx,%rcx329subq $16,%r11330movb %bl,%cl331testq $-16,%r11332jnz .Loop16333334psllq $8,%xmm1335pxor %xmm0,%xmm2336pxor %xmm1,%xmm2337movdqu %xmm2,(%r12,%r13,1)338leaq 16(%r12),%r12339340cmpq $0,%r11341jne .Lloop1342jmp .Lexit343344.align 16345.Lloop1:346addb %al,%cl347movl (%rdi,%rcx,4),%edx348movl %eax,(%rdi,%rcx,4)349movl %edx,(%rdi,%r10,4)350addb %dl,%al351incb %r10b352movl (%rdi,%rax,4),%edx353movl (%rdi,%r10,4),%eax354xorb (%r12),%dl355movb %dl,(%r12,%r13,1)356leaq 1(%r12),%r12357decq %r11358jnz .Lloop1359jmp .Lexit360361.align 16362.LRC4_CHAR:363addb $1,%r10b364movzbl (%rdi,%r10,1),%eax365testq $-8,%r11366jz .Lcloop1367jmp .Lcloop8368.align 16369.Lcloop8:370movl (%r12),%r8d371movl 4(%r12),%r9d372addb %al,%cl373leaq 1(%r10),%rsi374movzbl (%rdi,%rcx,1),%edx375movzbl %sil,%esi376movzbl (%rdi,%rsi,1),%ebx377movb %al,(%rdi,%rcx,1)378cmpq %rsi,%rcx379movb %dl,(%rdi,%r10,1)380jne .Lcmov0381movq %rax,%rbx382.Lcmov0:383addb %al,%dl384xorb (%rdi,%rdx,1),%r8b385rorl $8,%r8d386addb %bl,%cl387leaq 1(%rsi),%r10388movzbl (%rdi,%rcx,1),%edx389movzbl %r10b,%r10d390movzbl (%rdi,%r10,1),%eax391movb %bl,(%rdi,%rcx,1)392cmpq %r10,%rcx393movb %dl,(%rdi,%rsi,1)394jne .Lcmov1395movq %rbx,%rax396.Lcmov1:397addb %bl,%dl398xorb (%rdi,%rdx,1),%r8b399rorl $8,%r8d400addb %al,%cl401leaq 1(%r10),%rsi402movzbl (%rdi,%rcx,1),%edx403movzbl %sil,%esi404movzbl (%rdi,%rsi,1),%ebx405movb %al,(%rdi,%rcx,1)406cmpq %rsi,%rcx407movb %dl,(%rdi,%r10,1)408jne .Lcmov2409movq %rax,%rbx410.Lcmov2:411addb %al,%dl412xorb (%rdi,%rdx,1),%r8b413rorl $8,%r8d414addb %bl,%cl415leaq 1(%rsi),%r10416movzbl (%rdi,%rcx,1),%edx417movzbl %r10b,%r10d418movzbl (%rdi,%r10,1),%eax419movb %bl,(%rdi,%rcx,1)420cmpq %r10,%rcx421movb %dl,(%rdi,%rsi,1)422jne .Lcmov3423movq %rbx,%rax424.Lcmov3:425addb %bl,%dl426xorb (%rdi,%rdx,1),%r8b427rorl $8,%r8d428addb %al,%cl429leaq 1(%r10),%rsi430movzbl (%rdi,%rcx,1),%edx431movzbl %sil,%esi432movzbl (%rdi,%rsi,1),%ebx433movb %al,(%rdi,%rcx,1)434cmpq %rsi,%rcx435movb %dl,(%rdi,%r10,1)436jne .Lcmov4437movq %rax,%rbx438.Lcmov4:439addb %al,%dl440xorb (%rdi,%rdx,1),%r9b441rorl $8,%r9d442addb %bl,%cl443leaq 1(%rsi),%r10444movzbl (%rdi,%rcx,1),%edx445movzbl %r10b,%r10d446movzbl (%rdi,%r10,1),%eax447movb %bl,(%rdi,%rcx,1)448cmpq %r10,%rcx449movb %dl,(%rdi,%rsi,1)450jne .Lcmov5451movq %rbx,%rax452.Lcmov5:453addb %bl,%dl454xorb (%rdi,%rdx,1),%r9b455rorl $8,%r9d456addb %al,%cl457leaq 1(%r10),%rsi458movzbl (%rdi,%rcx,1),%edx459movzbl %sil,%esi460movzbl (%rdi,%rsi,1),%ebx461movb %al,(%rdi,%rcx,1)462cmpq %rsi,%rcx463movb %dl,(%rdi,%r10,1)464jne .Lcmov6465movq %rax,%rbx466.Lcmov6:467addb %al,%dl468xorb (%rdi,%rdx,1),%r9b469rorl $8,%r9d470addb %bl,%cl471leaq 1(%rsi),%r10472movzbl (%rdi,%rcx,1),%edx473movzbl %r10b,%r10d474movzbl (%rdi,%r10,1),%eax475movb %bl,(%rdi,%rcx,1)476cmpq %r10,%rcx477movb %dl,(%rdi,%rsi,1)478jne .Lcmov7479movq %rbx,%rax480.Lcmov7:481addb %bl,%dl482xorb (%rdi,%rdx,1),%r9b483rorl $8,%r9d484leaq -8(%r11),%r11485movl %r8d,(%r13)486leaq 8(%r12),%r12487movl %r9d,4(%r13)488leaq 8(%r13),%r13489490testq $-8,%r11491jnz .Lcloop8492cmpq $0,%r11493jne .Lcloop1494jmp .Lexit495.align 16496.Lcloop1:497addb %al,%cl498movzbl %cl,%ecx499movzbl (%rdi,%rcx,1),%edx500movb %al,(%rdi,%rcx,1)501movb %dl,(%rdi,%r10,1)502addb %al,%dl503addb $1,%r10b504movzbl %dl,%edx505movzbl %r10b,%r10d506movzbl (%rdi,%rdx,1),%edx507movzbl (%rdi,%r10,1),%eax508xorb (%r12),%dl509leaq 1(%r12),%r12510movb %dl,(%r13)511leaq 1(%r13),%r13512subq $1,%r11513jnz .Lcloop1514jmp .Lexit515516.align 16517.Lexit:518subb $1,%r10b519movl %r10d,-8(%rdi)520movl %ecx,-4(%rdi)521522movq (%rsp),%r13523.cfi_restore %r13524movq 8(%rsp),%r12525.cfi_restore %r12526movq 16(%rsp),%rbx527.cfi_restore %rbx528addq $24,%rsp529.cfi_adjust_cfa_offset -24530.Lepilogue:531.byte 0xf3,0xc3532.cfi_endproc533.size RC4,.-RC4534.globl RC4_set_key535.type RC4_set_key,@function536.align 16537RC4_set_key:538.cfi_startproc539.byte 243,15,30,250540leaq 8(%rdi),%rdi541leaq (%rdx,%rsi,1),%rdx542negq %rsi543movq %rsi,%rcx544xorl %eax,%eax545xorq %r9,%r9546xorq %r10,%r10547xorq %r11,%r11548549movl OPENSSL_ia32cap_P(%rip),%r8d550btl $20,%r8d551jc .Lc1stloop552jmp .Lw1stloop553554.align 16555.Lw1stloop:556movl %eax,(%rdi,%rax,4)557addb $1,%al558jnc .Lw1stloop559560xorq %r9,%r9561xorq %r8,%r8562.align 16563.Lw2ndloop:564movl (%rdi,%r9,4),%r10d565addb (%rdx,%rsi,1),%r8b566addb %r10b,%r8b567addq $1,%rsi568movl (%rdi,%r8,4),%r11d569cmovzq %rcx,%rsi570movl %r10d,(%rdi,%r8,4)571movl %r11d,(%rdi,%r9,4)572addb $1,%r9b573jnc .Lw2ndloop574jmp .Lexit_key575576.align 16577.Lc1stloop:578movb %al,(%rdi,%rax,1)579addb $1,%al580jnc .Lc1stloop581582xorq %r9,%r9583xorq %r8,%r8584.align 16585.Lc2ndloop:586movb (%rdi,%r9,1),%r10b587addb (%rdx,%rsi,1),%r8b588addb %r10b,%r8b589addq $1,%rsi590movb (%rdi,%r8,1),%r11b591jnz .Lcnowrap592movq %rcx,%rsi593.Lcnowrap:594movb %r10b,(%rdi,%r8,1)595movb %r11b,(%rdi,%r9,1)596addb $1,%r9b597jnc .Lc2ndloop598movl $-1,256(%rdi)599600.align 16601.Lexit_key:602xorl %eax,%eax603movl %eax,-8(%rdi)604movl %eax,-4(%rdi)605.byte 0xf3,0xc3606.cfi_endproc607.size RC4_set_key,.-RC4_set_key608609.globl RC4_options610.type RC4_options,@function611.align 16612RC4_options:613.cfi_startproc614.byte 243,15,30,250615leaq .Lopts(%rip),%rax616movl OPENSSL_ia32cap_P(%rip),%edx617btl $20,%edx618jc .L8xchar619btl $30,%edx620jnc .Ldone621addq $25,%rax622.byte 0xf3,0xc3623.L8xchar:624addq $12,%rax625.Ldone:626.byte 0xf3,0xc3627.cfi_endproc628.align 64629.Lopts:630.byte 114,99,52,40,56,120,44,105,110,116,41,0631.byte 114,99,52,40,56,120,44,99,104,97,114,41,0632.byte 114,99,52,40,49,54,120,44,105,110,116,41,0633.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,0634.align 64635.size RC4_options,.-RC4_options636.section ".note.gnu.property", "a"637.p2align 3638.long 1f - 0f639.long 4f - 1f640.long 56410:642# "GNU" encoded with .byte, since .asciz isn't supported643# on Solaris.644.byte 0x47645.byte 0x4e646.byte 0x55647.byte 06481:649.p2align 3650.long 0xc0000002651.long 3f - 2f6522:653.long 36543:655.p2align 36564:657658659