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