#if defined(__i386__) .file "rc4-586.S" .text .globl _asm_RC4 .private_extern _asm_RC4 .align 4 _asm_RC4: L_asm_RC4_begin: pushl %ebp pushl %ebx pushl %esi pushl %edi movl 20(%esp),%edi movl 24(%esp),%edx movl 28(%esp),%esi movl 32(%esp),%ebp xorl %eax,%eax xorl %ebx,%ebx cmpl $0,%edx je L000abort movb (%edi),%al movb 4(%edi),%bl addl $8,%edi leal (%esi,%edx,1),%ecx subl %esi,%ebp movl %ecx,24(%esp) incb %al cmpl $-1,256(%edi) je L001RC4_CHAR movl (%edi,%eax,4),%ecx andl $-4,%edx jz L002loop1 movl %ebp,32(%esp) testl $-8,%edx jz L003go4loop4 call L004PIC_me_up L004PIC_me_up: popl %ebp movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L004PIC_me_up(%ebp),%ebp btl $26,(%ebp) jnc L003go4loop4 movl 32(%esp),%ebp andl $-8,%edx leal -8(%esi,%edx,1),%edx movl %edx,-4(%edi) addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx movq (%esi),%mm0 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm2 jmp L005loop_mmx_enter .align 4,0x90 L006loop_mmx: addb %cl,%bl psllq $56,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movq (%esi),%mm0 movq %mm2,-8(%ebp,%esi,1) movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm2 L005loop_mmx_enter: addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm0,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $8,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $16,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $24,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $32,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $40,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 addb %cl,%bl psllq $48,%mm1 movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) incl %eax addl %ecx,%edx movzbl %al,%eax movzbl %dl,%edx pxor %mm1,%mm2 movl (%edi,%eax,4),%ecx movd (%edi,%edx,4),%mm1 movl %ebx,%edx xorl %ebx,%ebx movb %dl,%bl cmpl -4(%edi),%esi leal 8(%esi),%esi jb L006loop_mmx psllq $56,%mm1 pxor %mm1,%mm2 movq %mm2,-8(%ebp,%esi,1) emms cmpl 24(%esp),%esi je L007done jmp L002loop1 .align 4,0x90 L003go4loop4: leal -4(%esi,%edx,1),%edx movl %edx,28(%esp) L008loop4: addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) addl %ecx,%edx incb %al andl $255,%edx movl (%edi,%eax,4),%ecx movl (%edi,%edx,4),%ebp addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) addl %ecx,%edx incb %al andl $255,%edx rorl $8,%ebp movl (%edi,%eax,4),%ecx orl (%edi,%edx,4),%ebp addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) addl %ecx,%edx incb %al andl $255,%edx rorl $8,%ebp movl (%edi,%eax,4),%ecx orl (%edi,%edx,4),%ebp addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) addl %ecx,%edx incb %al andl $255,%edx rorl $8,%ebp movl 32(%esp),%ecx orl (%edi,%edx,4),%ebp rorl $8,%ebp xorl (%esi),%ebp cmpl 28(%esp),%esi movl %ebp,(%ecx,%esi,1) leal 4(%esi),%esi movl (%edi,%eax,4),%ecx jb L008loop4 cmpl 24(%esp),%esi je L007done movl 32(%esp),%ebp .align 4,0x90 L002loop1: addb %cl,%bl movl (%edi,%ebx,4),%edx movl %ecx,(%edi,%ebx,4) movl %edx,(%edi,%eax,4) addl %ecx,%edx incb %al andl $255,%edx movl (%edi,%edx,4),%edx xorb (%esi),%dl leal 1(%esi),%esi movl (%edi,%eax,4),%ecx cmpl 24(%esp),%esi movb %dl,-1(%ebp,%esi,1) jb L002loop1 jmp L007done .align 4,0x90 L001RC4_CHAR: movzbl (%edi,%eax,1),%ecx L009cloop1: addb %cl,%bl movzbl (%edi,%ebx,1),%edx movb %cl,(%edi,%ebx,1) movb %dl,(%edi,%eax,1) addb %cl,%dl movzbl (%edi,%edx,1),%edx addb $1,%al xorb (%esi),%dl leal 1(%esi),%esi movzbl (%edi,%eax,1),%ecx cmpl 24(%esp),%esi movb %dl,-1(%ebp,%esi,1) jb L009cloop1 L007done: decb %al movl %ebx,-4(%edi) movb %al,-8(%edi) L000abort: popl %edi popl %esi popl %ebx popl %ebp ret .globl _asm_RC4_set_key .private_extern _asm_RC4_set_key .align 4 _asm_RC4_set_key: L_asm_RC4_set_key_begin: pushl %ebp pushl %ebx pushl %esi pushl %edi movl 20(%esp),%edi movl 24(%esp),%ebp movl 28(%esp),%esi call L010PIC_me_up L010PIC_me_up: popl %edx movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010PIC_me_up(%edx),%edx leal 8(%edi),%edi leal (%esi,%ebp,1),%esi negl %ebp xorl %eax,%eax movl %ebp,-4(%edi) btl $20,(%edx) jc L011c1stloop .align 4,0x90 L012w1stloop: movl %eax,(%edi,%eax,4) addb $1,%al jnc L012w1stloop xorl %ecx,%ecx xorl %edx,%edx .align 4,0x90 L013w2ndloop: movl (%edi,%ecx,4),%eax addb (%esi,%ebp,1),%dl addb %al,%dl addl $1,%ebp movl (%edi,%edx,4),%ebx jnz L014wnowrap movl -4(%edi),%ebp L014wnowrap: movl %eax,(%edi,%edx,4) movl %ebx,(%edi,%ecx,4) addb $1,%cl jnc L013w2ndloop jmp L015exit .align 4,0x90 L011c1stloop: movb %al,(%edi,%eax,1) addb $1,%al jnc L011c1stloop xorl %ecx,%ecx xorl %edx,%edx xorl %ebx,%ebx .align 4,0x90 L016c2ndloop: movb (%edi,%ecx,1),%al addb (%esi,%ebp,1),%dl addb %al,%dl addl $1,%ebp movb (%edi,%edx,1),%bl jnz L017cnowrap movl -4(%edi),%ebp L017cnowrap: movb %al,(%edi,%edx,1) movb %bl,(%edi,%ecx,1) addb $1,%cl jnc L016c2ndloop movl $-1,256(%edi) L015exit: xorl %eax,%eax movl %eax,-8(%edi) movl %eax,-4(%edi) popl %edi popl %esi popl %ebx popl %ebp ret .globl _RC4_options .private_extern _RC4_options .align 4 _RC4_options: L_RC4_options_begin: call L018pic_point L018pic_point: popl %eax leal L019opts-L018pic_point(%eax),%eax call L020PIC_me_up L020PIC_me_up: popl %edx movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L020PIC_me_up(%edx),%edx movl (%edx),%edx btl $20,%edx jc L0211xchar btl $26,%edx jnc L022ret addl $25,%eax ret L0211xchar: addl $12,%eax L022ret: ret .align 6,0x90 L019opts: .byte 114,99,52,40,52,120,44,105,110,116,41,0 .byte 114,99,52,40,49,120,44,99,104,97,114,41,0 .byte 114,99,52,40,56,120,44,109,109,120,41,0 .byte 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89 .byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 .byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 6,0x90 .section __IMPORT,__pointers,non_lazy_symbol_pointers L_OPENSSL_ia32cap_P$non_lazy_ptr: .indirect_symbol _OPENSSL_ia32cap_P .long 0 #endif