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