Merge branch 'vendor/OPENSSL'
[dragonfly.git] / secure / lib / libcrypto / asm / rc4-586.s
1 .file   "rc4-586.s"
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         leal    -4(%esi,%edx,1),%edx
33         movl    %edx,28(%esp)
34         movl    %ebp,32(%esp)
35 .align  16
36 .L003loop4:
37         addb    %cl,%bl
38         movl    (%edi,%ebx,4),%edx
39         movl    %ecx,(%edi,%ebx,4)
40         movl    %edx,(%edi,%eax,4)
41         addl    %ecx,%edx
42         incb    %al
43         andl    $255,%edx
44         movl    (%edi,%eax,4),%ecx
45         movl    (%edi,%edx,4),%ebp
46         addb    %cl,%bl
47         movl    (%edi,%ebx,4),%edx
48         movl    %ecx,(%edi,%ebx,4)
49         movl    %edx,(%edi,%eax,4)
50         addl    %ecx,%edx
51         incb    %al
52         andl    $255,%edx
53         rorl    $8,%ebp
54         movl    (%edi,%eax,4),%ecx
55         orl     (%edi,%edx,4),%ebp
56         addb    %cl,%bl
57         movl    (%edi,%ebx,4),%edx
58         movl    %ecx,(%edi,%ebx,4)
59         movl    %edx,(%edi,%eax,4)
60         addl    %ecx,%edx
61         incb    %al
62         andl    $255,%edx
63         rorl    $8,%ebp
64         movl    (%edi,%eax,4),%ecx
65         orl     (%edi,%edx,4),%ebp
66         addb    %cl,%bl
67         movl    (%edi,%ebx,4),%edx
68         movl    %ecx,(%edi,%ebx,4)
69         movl    %edx,(%edi,%eax,4)
70         addl    %ecx,%edx
71         incb    %al
72         andl    $255,%edx
73         rorl    $8,%ebp
74         movl    32(%esp),%ecx
75         orl     (%edi,%edx,4),%ebp
76         rorl    $8,%ebp
77         xorl    (%esi),%ebp
78         cmpl    28(%esp),%esi
79         movl    %ebp,(%ecx,%esi,1)
80         leal    4(%esi),%esi
81         movl    (%edi,%eax,4),%ecx
82         jb      .L003loop4
83         cmpl    24(%esp),%esi
84         je      .L004done
85         movl    32(%esp),%ebp
86 .align  16
87 .L002loop1:
88         addb    %cl,%bl
89         movl    (%edi,%ebx,4),%edx
90         movl    %ecx,(%edi,%ebx,4)
91         movl    %edx,(%edi,%eax,4)
92         addl    %ecx,%edx
93         incb    %al
94         andl    $255,%edx
95         movl    (%edi,%edx,4),%edx
96         xorb    (%esi),%dl
97         leal    1(%esi),%esi
98         movl    (%edi,%eax,4),%ecx
99         cmpl    24(%esp),%esi
100         movb    %dl,-1(%ebp,%esi,1)
101         jb      .L002loop1
102         jmp     .L004done
103 .align  16
104 .L001RC4_CHAR:
105         movzbl  (%edi,%eax,1),%ecx
106 .L005cloop1:
107         addb    %cl,%bl
108         movzbl  (%edi,%ebx,1),%edx
109         movb    %cl,(%edi,%ebx,1)
110         movb    %dl,(%edi,%eax,1)
111         addb    %cl,%dl
112         movzbl  (%edi,%edx,1),%edx
113         addb    $1,%al
114         xorb    (%esi),%dl
115         leal    1(%esi),%esi
116         movzbl  (%edi,%eax,1),%ecx
117         cmpl    24(%esp),%esi
118         movb    %dl,-1(%ebp,%esi,1)
119         jb      .L005cloop1
120 .L004done:
121         decb    %al
122         movb    %bl,-4(%edi)
123         movb    %al,-8(%edi)
124 .L000abort:
125         popl    %edi
126         popl    %esi
127         popl    %ebx
128         popl    %ebp
129         ret
130 .size   RC4,.-.L_RC4_begin
131 .globl  RC4_set_key
132 .type   RC4_set_key,@function
133 .align  16
134 RC4_set_key:
135 .L_RC4_set_key_begin:
136         pushl   %ebp
137         pushl   %ebx
138         pushl   %esi
139         pushl   %edi
140         movl    20(%esp),%edi
141         movl    24(%esp),%ebp
142         movl    28(%esp),%esi
143         leal    OPENSSL_ia32cap_P,%edx
144         leal    8(%edi),%edi
145         leal    (%esi,%ebp,1),%esi
146         negl    %ebp
147         xorl    %eax,%eax
148         movl    %ebp,-4(%edi)
149         btl     $20,(%edx)
150         jc      .L006c1stloop
151 .align  16
152 .L007w1stloop:
153         movl    %eax,(%edi,%eax,4)
154         addb    $1,%al
155         jnc     .L007w1stloop
156         xorl    %ecx,%ecx
157         xorl    %edx,%edx
158 .align  16
159 .L008w2ndloop:
160         movl    (%edi,%ecx,4),%eax
161         addb    (%esi,%ebp,1),%dl
162         addb    %al,%dl
163         addl    $1,%ebp
164         movl    (%edi,%edx,4),%ebx
165         jnz     .L009wnowrap
166         movl    -4(%edi),%ebp
167 .L009wnowrap:
168         movl    %eax,(%edi,%edx,4)
169         movl    %ebx,(%edi,%ecx,4)
170         addb    $1,%cl
171         jnc     .L008w2ndloop
172         jmp     .L010exit
173 .align  16
174 .L006c1stloop:
175         movb    %al,(%edi,%eax,1)
176         addb    $1,%al
177         jnc     .L006c1stloop
178         xorl    %ecx,%ecx
179         xorl    %edx,%edx
180         xorl    %ebx,%ebx
181 .align  16
182 .L011c2ndloop:
183         movb    (%edi,%ecx,1),%al
184         addb    (%esi,%ebp,1),%dl
185         addb    %al,%dl
186         addl    $1,%ebp
187         movb    (%edi,%edx,1),%bl
188         jnz     .L012cnowrap
189         movl    -4(%edi),%ebp
190 .L012cnowrap:
191         movb    %al,(%edi,%edx,1)
192         movb    %bl,(%edi,%ecx,1)
193         addb    $1,%cl
194         jnc     .L011c2ndloop
195         movl    $-1,256(%edi)
196 .L010exit:
197         xorl    %eax,%eax
198         movl    %eax,-8(%edi)
199         movl    %eax,-4(%edi)
200         popl    %edi
201         popl    %esi
202         popl    %ebx
203         popl    %ebp
204         ret
205 .size   RC4_set_key,.-.L_RC4_set_key_begin
206 .globl  RC4_options
207 .type   RC4_options,@function
208 .align  16
209 RC4_options:
210 .L_RC4_options_begin:
211         call    .L013pic_point
212 .L013pic_point:
213         popl    %eax
214         leal    .L014opts-.L013pic_point(%eax),%eax
215         leal    OPENSSL_ia32cap_P,%edx
216         btl     $20,(%edx)
217         jnc     .L015skip
218         addl    $12,%eax
219 .L015skip:
220         ret
221 .align  64
222 .L014opts:
223 .byte   114,99,52,40,52,120,44,105,110,116,41,0
224 .byte   114,99,52,40,49,120,44,99,104,97,114,41,0
225 .byte   82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
226 .byte   80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
227 .byte   111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
228 .align  64
229 .size   RC4_options,.-.L_RC4_options_begin
230 .comm   OPENSSL_ia32cap_P,4,4