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