Home | History | Annotate | Line # | Download | only in i386
rc4-586.S revision 1.3.16.1
      1 #include <machine/asm.h>
      2 .text
      3 .globl	RC4
      4 .type	RC4,@function
      5 .align	16
      6 RC4:
      7 .L_RC4_begin:
      8 	pushl	%ebp
      9 	pushl	%ebx
     10 	pushl	%esi
     11 	pushl	%edi
     12 	movl	20(%esp),%edi
     13 	movl	24(%esp),%edx
     14 	movl	28(%esp),%esi
     15 	movl	32(%esp),%ebp
     16 	xorl	%eax,%eax
     17 	xorl	%ebx,%ebx
     18 	cmpl	$0,%edx
     19 	je	.L000abort
     20 	movb	(%edi),%al
     21 	movb	4(%edi),%bl
     22 	addl	$8,%edi
     23 	leal	(%esi,%edx,1),%ecx
     24 	subl	%esi,%ebp
     25 	movl	%ecx,24(%esp)
     26 	incb	%al
     27 	cmpl	$-1,256(%edi)
     28 	je	.L001RC4_CHAR
     29 	movl	(%edi,%eax,4),%ecx
     30 	andl	$-4,%edx
     31 	jz	.L002loop1
     32 	movl	%ebp,32(%esp)
     33 	testl	$-8,%edx
     34 	jz	.L003go4loop4
     35 	call	.L004PIC_me_up
     36 .L004PIC_me_up:
     37 	popl	%ebp
     38 	leal	OPENSSL_ia32cap_P-.L004PIC_me_up(%ebp),%ebp
     39 	btl	$26,(%ebp)
     40 	jnc	.L003go4loop4
     41 	movl	32(%esp),%ebp
     42 	andl	$-8,%edx
     43 	leal	-8(%esi,%edx,1),%edx
     44 	movl	%edx,-4(%edi)
     45 	addb	%cl,%bl
     46 	movl	(%edi,%ebx,4),%edx
     47 	movl	%ecx,(%edi,%ebx,4)
     48 	movl	%edx,(%edi,%eax,4)
     49 	incl	%eax
     50 	addl	%ecx,%edx
     51 	movzbl	%al,%eax
     52 	movzbl	%dl,%edx
     53 	movq	(%esi),%mm0
     54 	movl	(%edi,%eax,4),%ecx
     55 	movd	(%edi,%edx,4),%mm2
     56 	jmp	.L005loop_mmx_enter
     57 .align	16
     58 .L006loop_mmx:
     59 	addb	%cl,%bl
     60 	psllq	$56,%mm1
     61 	movl	(%edi,%ebx,4),%edx
     62 	movl	%ecx,(%edi,%ebx,4)
     63 	movl	%edx,(%edi,%eax,4)
     64 	incl	%eax
     65 	addl	%ecx,%edx
     66 	movzbl	%al,%eax
     67 	movzbl	%dl,%edx
     68 	pxor	%mm1,%mm2
     69 	movq	(%esi),%mm0
     70 	movq	%mm2,-8(%ebp,%esi,1)
     71 	movl	(%edi,%eax,4),%ecx
     72 	movd	(%edi,%edx,4),%mm2
     73 .L005loop_mmx_enter:
     74 	addb	%cl,%bl
     75 	movl	(%edi,%ebx,4),%edx
     76 	movl	%ecx,(%edi,%ebx,4)
     77 	movl	%edx,(%edi,%eax,4)
     78 	incl	%eax
     79 	addl	%ecx,%edx
     80 	movzbl	%al,%eax
     81 	movzbl	%dl,%edx
     82 	pxor	%mm0,%mm2
     83 	movl	(%edi,%eax,4),%ecx
     84 	movd	(%edi,%edx,4),%mm1
     85 	addb	%cl,%bl
     86 	psllq	$8,%mm1
     87 	movl	(%edi,%ebx,4),%edx
     88 	movl	%ecx,(%edi,%ebx,4)
     89 	movl	%edx,(%edi,%eax,4)
     90 	incl	%eax
     91 	addl	%ecx,%edx
     92 	movzbl	%al,%eax
     93 	movzbl	%dl,%edx
     94 	pxor	%mm1,%mm2
     95 	movl	(%edi,%eax,4),%ecx
     96 	movd	(%edi,%edx,4),%mm1
     97 	addb	%cl,%bl
     98 	psllq	$16,%mm1
     99 	movl	(%edi,%ebx,4),%edx
    100 	movl	%ecx,(%edi,%ebx,4)
    101 	movl	%edx,(%edi,%eax,4)
    102 	incl	%eax
    103 	addl	%ecx,%edx
    104 	movzbl	%al,%eax
    105 	movzbl	%dl,%edx
    106 	pxor	%mm1,%mm2
    107 	movl	(%edi,%eax,4),%ecx
    108 	movd	(%edi,%edx,4),%mm1
    109 	addb	%cl,%bl
    110 	psllq	$24,%mm1
    111 	movl	(%edi,%ebx,4),%edx
    112 	movl	%ecx,(%edi,%ebx,4)
    113 	movl	%edx,(%edi,%eax,4)
    114 	incl	%eax
    115 	addl	%ecx,%edx
    116 	movzbl	%al,%eax
    117 	movzbl	%dl,%edx
    118 	pxor	%mm1,%mm2
    119 	movl	(%edi,%eax,4),%ecx
    120 	movd	(%edi,%edx,4),%mm1
    121 	addb	%cl,%bl
    122 	psllq	$32,%mm1
    123 	movl	(%edi,%ebx,4),%edx
    124 	movl	%ecx,(%edi,%ebx,4)
    125 	movl	%edx,(%edi,%eax,4)
    126 	incl	%eax
    127 	addl	%ecx,%edx
    128 	movzbl	%al,%eax
    129 	movzbl	%dl,%edx
    130 	pxor	%mm1,%mm2
    131 	movl	(%edi,%eax,4),%ecx
    132 	movd	(%edi,%edx,4),%mm1
    133 	addb	%cl,%bl
    134 	psllq	$40,%mm1
    135 	movl	(%edi,%ebx,4),%edx
    136 	movl	%ecx,(%edi,%ebx,4)
    137 	movl	%edx,(%edi,%eax,4)
    138 	incl	%eax
    139 	addl	%ecx,%edx
    140 	movzbl	%al,%eax
    141 	movzbl	%dl,%edx
    142 	pxor	%mm1,%mm2
    143 	movl	(%edi,%eax,4),%ecx
    144 	movd	(%edi,%edx,4),%mm1
    145 	addb	%cl,%bl
    146 	psllq	$48,%mm1
    147 	movl	(%edi,%ebx,4),%edx
    148 	movl	%ecx,(%edi,%ebx,4)
    149 	movl	%edx,(%edi,%eax,4)
    150 	incl	%eax
    151 	addl	%ecx,%edx
    152 	movzbl	%al,%eax
    153 	movzbl	%dl,%edx
    154 	pxor	%mm1,%mm2
    155 	movl	(%edi,%eax,4),%ecx
    156 	movd	(%edi,%edx,4),%mm1
    157 	movl	%ebx,%edx
    158 	xorl	%ebx,%ebx
    159 	movb	%dl,%bl
    160 	cmpl	-4(%edi),%esi
    161 	leal	8(%esi),%esi
    162 	jb	.L006loop_mmx
    163 	psllq	$56,%mm1
    164 	pxor	%mm1,%mm2
    165 	movq	%mm2,-8(%ebp,%esi,1)
    166 	emms
    167 	cmpl	24(%esp),%esi
    168 	je	.L007done
    169 	jmp	.L002loop1
    170 .align	16
    171 .L003go4loop4:
    172 	leal	-4(%esi,%edx,1),%edx
    173 	movl	%edx,28(%esp)
    174 .L008loop4:
    175 	addb	%cl,%bl
    176 	movl	(%edi,%ebx,4),%edx
    177 	movl	%ecx,(%edi,%ebx,4)
    178 	movl	%edx,(%edi,%eax,4)
    179 	addl	%ecx,%edx
    180 	incb	%al
    181 	andl	$255,%edx
    182 	movl	(%edi,%eax,4),%ecx
    183 	movl	(%edi,%edx,4),%ebp
    184 	addb	%cl,%bl
    185 	movl	(%edi,%ebx,4),%edx
    186 	movl	%ecx,(%edi,%ebx,4)
    187 	movl	%edx,(%edi,%eax,4)
    188 	addl	%ecx,%edx
    189 	incb	%al
    190 	andl	$255,%edx
    191 	rorl	$8,%ebp
    192 	movl	(%edi,%eax,4),%ecx
    193 	orl	(%edi,%edx,4),%ebp
    194 	addb	%cl,%bl
    195 	movl	(%edi,%ebx,4),%edx
    196 	movl	%ecx,(%edi,%ebx,4)
    197 	movl	%edx,(%edi,%eax,4)
    198 	addl	%ecx,%edx
    199 	incb	%al
    200 	andl	$255,%edx
    201 	rorl	$8,%ebp
    202 	movl	(%edi,%eax,4),%ecx
    203 	orl	(%edi,%edx,4),%ebp
    204 	addb	%cl,%bl
    205 	movl	(%edi,%ebx,4),%edx
    206 	movl	%ecx,(%edi,%ebx,4)
    207 	movl	%edx,(%edi,%eax,4)
    208 	addl	%ecx,%edx
    209 	incb	%al
    210 	andl	$255,%edx
    211 	rorl	$8,%ebp
    212 	movl	32(%esp),%ecx
    213 	orl	(%edi,%edx,4),%ebp
    214 	rorl	$8,%ebp
    215 	xorl	(%esi),%ebp
    216 	cmpl	28(%esp),%esi
    217 	movl	%ebp,(%ecx,%esi,1)
    218 	leal	4(%esi),%esi
    219 	movl	(%edi,%eax,4),%ecx
    220 	jb	.L008loop4
    221 	cmpl	24(%esp),%esi
    222 	je	.L007done
    223 	movl	32(%esp),%ebp
    224 .align	16
    225 .L002loop1:
    226 	addb	%cl,%bl
    227 	movl	(%edi,%ebx,4),%edx
    228 	movl	%ecx,(%edi,%ebx,4)
    229 	movl	%edx,(%edi,%eax,4)
    230 	addl	%ecx,%edx
    231 	incb	%al
    232 	andl	$255,%edx
    233 	movl	(%edi,%edx,4),%edx
    234 	xorb	(%esi),%dl
    235 	leal	1(%esi),%esi
    236 	movl	(%edi,%eax,4),%ecx
    237 	cmpl	24(%esp),%esi
    238 	movb	%dl,-1(%ebp,%esi,1)
    239 	jb	.L002loop1
    240 	jmp	.L007done
    241 .align	16
    242 .L001RC4_CHAR:
    243 	movzbl	(%edi,%eax,1),%ecx
    244 .L009cloop1:
    245 	addb	%cl,%bl
    246 	movzbl	(%edi,%ebx,1),%edx
    247 	movb	%cl,(%edi,%ebx,1)
    248 	movb	%dl,(%edi,%eax,1)
    249 	addb	%cl,%dl
    250 	movzbl	(%edi,%edx,1),%edx
    251 	addb	$1,%al
    252 	xorb	(%esi),%dl
    253 	leal	1(%esi),%esi
    254 	movzbl	(%edi,%eax,1),%ecx
    255 	cmpl	24(%esp),%esi
    256 	movb	%dl,-1(%ebp,%esi,1)
    257 	jb	.L009cloop1
    258 .L007done:
    259 	decb	%al
    260 	movl	%ebx,-4(%edi)
    261 	movb	%al,-8(%edi)
    262 .L000abort:
    263 	popl	%edi
    264 	popl	%esi
    265 	popl	%ebx
    266 	popl	%ebp
    267 	ret
    268 .size	RC4,.-.L_RC4_begin
    269 .globl	private_RC4_set_key
    270 .type	private_RC4_set_key,@function
    271 .align	16
    272 private_RC4_set_key:
    273 .L_private_RC4_set_key_begin:
    274 	pushl	%ebp
    275 	pushl	%ebx
    276 	pushl	%esi
    277 	pushl	%edi
    278 	movl	20(%esp),%edi
    279 	movl	24(%esp),%ebp
    280 	movl	28(%esp),%esi
    281 	call	.L010PIC_me_up
    282 .L010PIC_me_up:
    283 	popl	%edx
    284 	leal	OPENSSL_ia32cap_P-.L010PIC_me_up(%edx),%edx
    285 	leal	8(%edi),%edi
    286 	leal	(%esi,%ebp,1),%esi
    287 	negl	%ebp
    288 	xorl	%eax,%eax
    289 	movl	%ebp,-4(%edi)
    290 	btl	$20,(%edx)
    291 	jc	.L011c1stloop
    292 .align	16
    293 .L012w1stloop:
    294 	movl	%eax,(%edi,%eax,4)
    295 	addb	$1,%al
    296 	jnc	.L012w1stloop
    297 	xorl	%ecx,%ecx
    298 	xorl	%edx,%edx
    299 .align	16
    300 .L013w2ndloop:
    301 	movl	(%edi,%ecx,4),%eax
    302 	addb	(%esi,%ebp,1),%dl
    303 	addb	%al,%dl
    304 	addl	$1,%ebp
    305 	movl	(%edi,%edx,4),%ebx
    306 	jnz	.L014wnowrap
    307 	movl	-4(%edi),%ebp
    308 .L014wnowrap:
    309 	movl	%eax,(%edi,%edx,4)
    310 	movl	%ebx,(%edi,%ecx,4)
    311 	addb	$1,%cl
    312 	jnc	.L013w2ndloop
    313 	jmp	.L015exit
    314 .align	16
    315 .L011c1stloop:
    316 	movb	%al,(%edi,%eax,1)
    317 	addb	$1,%al
    318 	jnc	.L011c1stloop
    319 	xorl	%ecx,%ecx
    320 	xorl	%edx,%edx
    321 	xorl	%ebx,%ebx
    322 .align	16
    323 .L016c2ndloop:
    324 	movb	(%edi,%ecx,1),%al
    325 	addb	(%esi,%ebp,1),%dl
    326 	addb	%al,%dl
    327 	addl	$1,%ebp
    328 	movb	(%edi,%edx,1),%bl
    329 	jnz	.L017cnowrap
    330 	movl	-4(%edi),%ebp
    331 .L017cnowrap:
    332 	movb	%al,(%edi,%edx,1)
    333 	movb	%bl,(%edi,%ecx,1)
    334 	addb	$1,%cl
    335 	jnc	.L016c2ndloop
    336 	movl	$-1,256(%edi)
    337 .L015exit:
    338 	xorl	%eax,%eax
    339 	movl	%eax,-8(%edi)
    340 	movl	%eax,-4(%edi)
    341 	popl	%edi
    342 	popl	%esi
    343 	popl	%ebx
    344 	popl	%ebp
    345 	ret
    346 .size	private_RC4_set_key,.-.L_private_RC4_set_key_begin
    347 .globl	RC4_options
    348 .type	RC4_options,@function
    349 .align	16
    350 RC4_options:
    351 .L_RC4_options_begin:
    352 	call	.L018pic_point
    353 .L018pic_point:
    354 	popl	%eax
    355 	leal	.L019opts-.L018pic_point(%eax),%eax
    356 	call	.L020PIC_me_up
    357 .L020PIC_me_up:
    358 	popl	%edx
    359 	leal	OPENSSL_ia32cap_P-.L020PIC_me_up(%edx),%edx
    360 	movl	(%edx),%edx
    361 	btl	$20,%edx
    362 	jc	.L0211xchar
    363 	btl	$26,%edx
    364 	jnc	.L022ret
    365 	addl	$25,%eax
    366 	ret
    367 .L0211xchar:
    368 	addl	$12,%eax
    369 .L022ret:
    370 	ret
    371 .align	64
    372 .L019opts:
    373 .byte	114,99,52,40,52,120,44,105,110,116,41,0
    374 .byte	114,99,52,40,49,120,44,99,104,97,114,41,0
    375 .byte	114,99,52,40,56,120,44,109,109,120,41,0
    376 .byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
    377 .byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
    378 .byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
    379 .align	64
    380 .size	RC4_options,.-.L_RC4_options_begin
    381 .comm	OPENSSL_ia32cap_P,16,4
    382