• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2
3
4.globl	RC4
5.type	RC4,@function
6.align	16
7RC4:	orq	%rsi,%rsi
8	jne	.Lentry
9	.byte	0xf3,0xc3
10.Lentry:
11	pushq	%rbx
12	pushq	%r12
13	pushq	%r13
14.Lprologue:
15	movq	%rsi,%r11
16	movq	%rdx,%r12
17	movq	%rcx,%r13
18	xorq	%r10,%r10
19	xorq	%rcx,%rcx
20
21	leaq	8(%rdi),%rdi
22	movb	-8(%rdi),%r10b
23	movb	-4(%rdi),%cl
24	cmpl	$-1,256(%rdi)
25	je	.LRC4_CHAR
26	movl	OPENSSL_ia32cap_P(%rip),%r8d
27	xorq	%rbx,%rbx
28	incb	%r10b
29	subq	%r10,%rbx
30	subq	%r12,%r13
31	movl	(%rdi,%r10,4),%eax
32	testq	$-16,%r11
33	jz	.Lloop1
34	btl	$30,%r8d
35	jc	.Lintel
36	andq	$7,%rbx
37	leaq	1(%r10),%rsi
38	jz	.Loop8
39	subq	%rbx,%r11
40.Loop8_warmup:
41	addb	%al,%cl
42	movl	(%rdi,%rcx,4),%edx
43	movl	%eax,(%rdi,%rcx,4)
44	movl	%edx,(%rdi,%r10,4)
45	addb	%dl,%al
46	incb	%r10b
47	movl	(%rdi,%rax,4),%edx
48	movl	(%rdi,%r10,4),%eax
49	xorb	(%r12),%dl
50	movb	%dl,(%r13,%r12,1)
51	leaq	1(%r12),%r12
52	decq	%rbx
53	jnz	.Loop8_warmup
54
55	leaq	1(%r10),%rsi
56	jmp	.Loop8
57.align	16
58.Loop8:
59	addb	%al,%cl
60	movl	(%rdi,%rcx,4),%edx
61	movl	%eax,(%rdi,%rcx,4)
62	movl	0(%rdi,%rsi,4),%ebx
63	rorq	$8,%r8
64	movl	%edx,0(%rdi,%r10,4)
65	addb	%al,%dl
66	movb	(%rdi,%rdx,4),%r8b
67	addb	%bl,%cl
68	movl	(%rdi,%rcx,4),%edx
69	movl	%ebx,(%rdi,%rcx,4)
70	movl	4(%rdi,%rsi,4),%eax
71	rorq	$8,%r8
72	movl	%edx,4(%rdi,%r10,4)
73	addb	%bl,%dl
74	movb	(%rdi,%rdx,4),%r8b
75	addb	%al,%cl
76	movl	(%rdi,%rcx,4),%edx
77	movl	%eax,(%rdi,%rcx,4)
78	movl	8(%rdi,%rsi,4),%ebx
79	rorq	$8,%r8
80	movl	%edx,8(%rdi,%r10,4)
81	addb	%al,%dl
82	movb	(%rdi,%rdx,4),%r8b
83	addb	%bl,%cl
84	movl	(%rdi,%rcx,4),%edx
85	movl	%ebx,(%rdi,%rcx,4)
86	movl	12(%rdi,%rsi,4),%eax
87	rorq	$8,%r8
88	movl	%edx,12(%rdi,%r10,4)
89	addb	%bl,%dl
90	movb	(%rdi,%rdx,4),%r8b
91	addb	%al,%cl
92	movl	(%rdi,%rcx,4),%edx
93	movl	%eax,(%rdi,%rcx,4)
94	movl	16(%rdi,%rsi,4),%ebx
95	rorq	$8,%r8
96	movl	%edx,16(%rdi,%r10,4)
97	addb	%al,%dl
98	movb	(%rdi,%rdx,4),%r8b
99	addb	%bl,%cl
100	movl	(%rdi,%rcx,4),%edx
101	movl	%ebx,(%rdi,%rcx,4)
102	movl	20(%rdi,%rsi,4),%eax
103	rorq	$8,%r8
104	movl	%edx,20(%rdi,%r10,4)
105	addb	%bl,%dl
106	movb	(%rdi,%rdx,4),%r8b
107	addb	%al,%cl
108	movl	(%rdi,%rcx,4),%edx
109	movl	%eax,(%rdi,%rcx,4)
110	movl	24(%rdi,%rsi,4),%ebx
111	rorq	$8,%r8
112	movl	%edx,24(%rdi,%r10,4)
113	addb	%al,%dl
114	movb	(%rdi,%rdx,4),%r8b
115	addb	$8,%sil
116	addb	%bl,%cl
117	movl	(%rdi,%rcx,4),%edx
118	movl	%ebx,(%rdi,%rcx,4)
119	movl	-4(%rdi,%rsi,4),%eax
120	rorq	$8,%r8
121	movl	%edx,28(%rdi,%r10,4)
122	addb	%bl,%dl
123	movb	(%rdi,%rdx,4),%r8b
124	addb	$8,%r10b
125	rorq	$8,%r8
126	subq	$8,%r11
127
128	xorq	(%r12),%r8
129	movq	%r8,(%r13,%r12,1)
130	leaq	8(%r12),%r12
131
132	testq	$-8,%r11
133	jnz	.Loop8
134	cmpq	$0,%r11
135	jne	.Lloop1
136	jmp	.Lexit
137
138.align	16
139.Lintel:
140	testq	$-32,%r11
141	jz	.Lloop1
142	andq	$15,%rbx
143	jz	.Loop16_is_hot
144	subq	%rbx,%r11
145.Loop16_warmup:
146	addb	%al,%cl
147	movl	(%rdi,%rcx,4),%edx
148	movl	%eax,(%rdi,%rcx,4)
149	movl	%edx,(%rdi,%r10,4)
150	addb	%dl,%al
151	incb	%r10b
152	movl	(%rdi,%rax,4),%edx
153	movl	(%rdi,%r10,4),%eax
154	xorb	(%r12),%dl
155	movb	%dl,(%r13,%r12,1)
156	leaq	1(%r12),%r12
157	decq	%rbx
158	jnz	.Loop16_warmup
159
160	movq	%rcx,%rbx
161	xorq	%rcx,%rcx
162	movb	%bl,%cl
163
164.Loop16_is_hot:
165	leaq	(%rdi,%r10,4),%rsi
166	addb	%al,%cl
167	movl	(%rdi,%rcx,4),%edx
168	pxor	%xmm0,%xmm0
169	movl	%eax,(%rdi,%rcx,4)
170	addb	%dl,%al
171	movl	4(%rsi),%ebx
172	movzbl	%al,%eax
173	movl	%edx,0(%rsi)
174	addb	%bl,%cl
175	pinsrw	$0,(%rdi,%rax,4),%xmm0
176	jmp	.Loop16_enter
177.align	16
178.Loop16:
179	addb	%al,%cl
180	movl	(%rdi,%rcx,4),%edx
181	pxor	%xmm0,%xmm2
182	psllq	$8,%xmm1
183	pxor	%xmm0,%xmm0
184	movl	%eax,(%rdi,%rcx,4)
185	addb	%dl,%al
186	movl	4(%rsi),%ebx
187	movzbl	%al,%eax
188	movl	%edx,0(%rsi)
189	pxor	%xmm1,%xmm2
190	addb	%bl,%cl
191	pinsrw	$0,(%rdi,%rax,4),%xmm0
192	movdqu	%xmm2,(%r13,%r12,1)
193	leaq	16(%r12),%r12
194.Loop16_enter:
195	movl	(%rdi,%rcx,4),%edx
196	pxor	%xmm1,%xmm1
197	movl	%ebx,(%rdi,%rcx,4)
198	addb	%dl,%bl
199	movl	8(%rsi),%eax
200	movzbl	%bl,%ebx
201	movl	%edx,4(%rsi)
202	addb	%al,%cl
203	pinsrw	$0,(%rdi,%rbx,4),%xmm1
204	movl	(%rdi,%rcx,4),%edx
205	movl	%eax,(%rdi,%rcx,4)
206	addb	%dl,%al
207	movl	12(%rsi),%ebx
208	movzbl	%al,%eax
209	movl	%edx,8(%rsi)
210	addb	%bl,%cl
211	pinsrw	$1,(%rdi,%rax,4),%xmm0
212	movl	(%rdi,%rcx,4),%edx
213	movl	%ebx,(%rdi,%rcx,4)
214	addb	%dl,%bl
215	movl	16(%rsi),%eax
216	movzbl	%bl,%ebx
217	movl	%edx,12(%rsi)
218	addb	%al,%cl
219	pinsrw	$1,(%rdi,%rbx,4),%xmm1
220	movl	(%rdi,%rcx,4),%edx
221	movl	%eax,(%rdi,%rcx,4)
222	addb	%dl,%al
223	movl	20(%rsi),%ebx
224	movzbl	%al,%eax
225	movl	%edx,16(%rsi)
226	addb	%bl,%cl
227	pinsrw	$2,(%rdi,%rax,4),%xmm0
228	movl	(%rdi,%rcx,4),%edx
229	movl	%ebx,(%rdi,%rcx,4)
230	addb	%dl,%bl
231	movl	24(%rsi),%eax
232	movzbl	%bl,%ebx
233	movl	%edx,20(%rsi)
234	addb	%al,%cl
235	pinsrw	$2,(%rdi,%rbx,4),%xmm1
236	movl	(%rdi,%rcx,4),%edx
237	movl	%eax,(%rdi,%rcx,4)
238	addb	%dl,%al
239	movl	28(%rsi),%ebx
240	movzbl	%al,%eax
241	movl	%edx,24(%rsi)
242	addb	%bl,%cl
243	pinsrw	$3,(%rdi,%rax,4),%xmm0
244	movl	(%rdi,%rcx,4),%edx
245	movl	%ebx,(%rdi,%rcx,4)
246	addb	%dl,%bl
247	movl	32(%rsi),%eax
248	movzbl	%bl,%ebx
249	movl	%edx,28(%rsi)
250	addb	%al,%cl
251	pinsrw	$3,(%rdi,%rbx,4),%xmm1
252	movl	(%rdi,%rcx,4),%edx
253	movl	%eax,(%rdi,%rcx,4)
254	addb	%dl,%al
255	movl	36(%rsi),%ebx
256	movzbl	%al,%eax
257	movl	%edx,32(%rsi)
258	addb	%bl,%cl
259	pinsrw	$4,(%rdi,%rax,4),%xmm0
260	movl	(%rdi,%rcx,4),%edx
261	movl	%ebx,(%rdi,%rcx,4)
262	addb	%dl,%bl
263	movl	40(%rsi),%eax
264	movzbl	%bl,%ebx
265	movl	%edx,36(%rsi)
266	addb	%al,%cl
267	pinsrw	$4,(%rdi,%rbx,4),%xmm1
268	movl	(%rdi,%rcx,4),%edx
269	movl	%eax,(%rdi,%rcx,4)
270	addb	%dl,%al
271	movl	44(%rsi),%ebx
272	movzbl	%al,%eax
273	movl	%edx,40(%rsi)
274	addb	%bl,%cl
275	pinsrw	$5,(%rdi,%rax,4),%xmm0
276	movl	(%rdi,%rcx,4),%edx
277	movl	%ebx,(%rdi,%rcx,4)
278	addb	%dl,%bl
279	movl	48(%rsi),%eax
280	movzbl	%bl,%ebx
281	movl	%edx,44(%rsi)
282	addb	%al,%cl
283	pinsrw	$5,(%rdi,%rbx,4),%xmm1
284	movl	(%rdi,%rcx,4),%edx
285	movl	%eax,(%rdi,%rcx,4)
286	addb	%dl,%al
287	movl	52(%rsi),%ebx
288	movzbl	%al,%eax
289	movl	%edx,48(%rsi)
290	addb	%bl,%cl
291	pinsrw	$6,(%rdi,%rax,4),%xmm0
292	movl	(%rdi,%rcx,4),%edx
293	movl	%ebx,(%rdi,%rcx,4)
294	addb	%dl,%bl
295	movl	56(%rsi),%eax
296	movzbl	%bl,%ebx
297	movl	%edx,52(%rsi)
298	addb	%al,%cl
299	pinsrw	$6,(%rdi,%rbx,4),%xmm1
300	movl	(%rdi,%rcx,4),%edx
301	movl	%eax,(%rdi,%rcx,4)
302	addb	%dl,%al
303	movl	60(%rsi),%ebx
304	movzbl	%al,%eax
305	movl	%edx,56(%rsi)
306	addb	%bl,%cl
307	pinsrw	$7,(%rdi,%rax,4),%xmm0
308	addb	$16,%r10b
309	movdqu	(%r12),%xmm2
310	movl	(%rdi,%rcx,4),%edx
311	movl	%ebx,(%rdi,%rcx,4)
312	addb	%dl,%bl
313	movzbl	%bl,%ebx
314	movl	%edx,60(%rsi)
315	leaq	(%rdi,%r10,4),%rsi
316	pinsrw	$7,(%rdi,%rbx,4),%xmm1
317	movl	(%rsi),%eax
318	movq	%rcx,%rbx
319	xorq	%rcx,%rcx
320	subq	$16,%r11
321	movb	%bl,%cl
322	testq	$-16,%r11
323	jnz	.Loop16
324
325	psllq	$8,%xmm1
326	pxor	%xmm0,%xmm2
327	pxor	%xmm1,%xmm2
328	movdqu	%xmm2,(%r13,%r12,1)
329	leaq	16(%r12),%r12
330
331	cmpq	$0,%r11
332	jne	.Lloop1
333	jmp	.Lexit
334
335.align	16
336.Lloop1:
337	addb	%al,%cl
338	movl	(%rdi,%rcx,4),%edx
339	movl	%eax,(%rdi,%rcx,4)
340	movl	%edx,(%rdi,%r10,4)
341	addb	%dl,%al
342	incb	%r10b
343	movl	(%rdi,%rax,4),%edx
344	movl	(%rdi,%r10,4),%eax
345	xorb	(%r12),%dl
346	movb	%dl,(%r13,%r12,1)
347	leaq	1(%r12),%r12
348	decq	%r11
349	jnz	.Lloop1
350	jmp	.Lexit
351
352.align	16
353.LRC4_CHAR:
354	addb	$1,%r10b
355	movzbl	(%rdi,%r10,1),%eax
356	testq	$-8,%r11
357	jz	.Lcloop1
358	jmp	.Lcloop8
359.align	16
360.Lcloop8:
361	movl	(%r12),%r8d
362	movl	4(%r12),%r9d
363	addb	%al,%cl
364	leaq	1(%r10),%rsi
365	movzbl	(%rdi,%rcx,1),%edx
366	movzbl	%sil,%esi
367	movzbl	(%rdi,%rsi,1),%ebx
368	movb	%al,(%rdi,%rcx,1)
369	cmpq	%rsi,%rcx
370	movb	%dl,(%rdi,%r10,1)
371	jne	.Lcmov0
372	movq	%rax,%rbx
373.Lcmov0:
374	addb	%al,%dl
375	xorb	(%rdi,%rdx,1),%r8b
376	rorl	$8,%r8d
377	addb	%bl,%cl
378	leaq	1(%rsi),%r10
379	movzbl	(%rdi,%rcx,1),%edx
380	movzbl	%r10b,%r10d
381	movzbl	(%rdi,%r10,1),%eax
382	movb	%bl,(%rdi,%rcx,1)
383	cmpq	%r10,%rcx
384	movb	%dl,(%rdi,%rsi,1)
385	jne	.Lcmov1
386	movq	%rbx,%rax
387.Lcmov1:
388	addb	%bl,%dl
389	xorb	(%rdi,%rdx,1),%r8b
390	rorl	$8,%r8d
391	addb	%al,%cl
392	leaq	1(%r10),%rsi
393	movzbl	(%rdi,%rcx,1),%edx
394	movzbl	%sil,%esi
395	movzbl	(%rdi,%rsi,1),%ebx
396	movb	%al,(%rdi,%rcx,1)
397	cmpq	%rsi,%rcx
398	movb	%dl,(%rdi,%r10,1)
399	jne	.Lcmov2
400	movq	%rax,%rbx
401.Lcmov2:
402	addb	%al,%dl
403	xorb	(%rdi,%rdx,1),%r8b
404	rorl	$8,%r8d
405	addb	%bl,%cl
406	leaq	1(%rsi),%r10
407	movzbl	(%rdi,%rcx,1),%edx
408	movzbl	%r10b,%r10d
409	movzbl	(%rdi,%r10,1),%eax
410	movb	%bl,(%rdi,%rcx,1)
411	cmpq	%r10,%rcx
412	movb	%dl,(%rdi,%rsi,1)
413	jne	.Lcmov3
414	movq	%rbx,%rax
415.Lcmov3:
416	addb	%bl,%dl
417	xorb	(%rdi,%rdx,1),%r8b
418	rorl	$8,%r8d
419	addb	%al,%cl
420	leaq	1(%r10),%rsi
421	movzbl	(%rdi,%rcx,1),%edx
422	movzbl	%sil,%esi
423	movzbl	(%rdi,%rsi,1),%ebx
424	movb	%al,(%rdi,%rcx,1)
425	cmpq	%rsi,%rcx
426	movb	%dl,(%rdi,%r10,1)
427	jne	.Lcmov4
428	movq	%rax,%rbx
429.Lcmov4:
430	addb	%al,%dl
431	xorb	(%rdi,%rdx,1),%r9b
432	rorl	$8,%r9d
433	addb	%bl,%cl
434	leaq	1(%rsi),%r10
435	movzbl	(%rdi,%rcx,1),%edx
436	movzbl	%r10b,%r10d
437	movzbl	(%rdi,%r10,1),%eax
438	movb	%bl,(%rdi,%rcx,1)
439	cmpq	%r10,%rcx
440	movb	%dl,(%rdi,%rsi,1)
441	jne	.Lcmov5
442	movq	%rbx,%rax
443.Lcmov5:
444	addb	%bl,%dl
445	xorb	(%rdi,%rdx,1),%r9b
446	rorl	$8,%r9d
447	addb	%al,%cl
448	leaq	1(%r10),%rsi
449	movzbl	(%rdi,%rcx,1),%edx
450	movzbl	%sil,%esi
451	movzbl	(%rdi,%rsi,1),%ebx
452	movb	%al,(%rdi,%rcx,1)
453	cmpq	%rsi,%rcx
454	movb	%dl,(%rdi,%r10,1)
455	jne	.Lcmov6
456	movq	%rax,%rbx
457.Lcmov6:
458	addb	%al,%dl
459	xorb	(%rdi,%rdx,1),%r9b
460	rorl	$8,%r9d
461	addb	%bl,%cl
462	leaq	1(%rsi),%r10
463	movzbl	(%rdi,%rcx,1),%edx
464	movzbl	%r10b,%r10d
465	movzbl	(%rdi,%r10,1),%eax
466	movb	%bl,(%rdi,%rcx,1)
467	cmpq	%r10,%rcx
468	movb	%dl,(%rdi,%rsi,1)
469	jne	.Lcmov7
470	movq	%rbx,%rax
471.Lcmov7:
472	addb	%bl,%dl
473	xorb	(%rdi,%rdx,1),%r9b
474	rorl	$8,%r9d
475	leaq	-8(%r11),%r11
476	movl	%r8d,(%r13)
477	leaq	8(%r12),%r12
478	movl	%r9d,4(%r13)
479	leaq	8(%r13),%r13
480
481	testq	$-8,%r11
482	jnz	.Lcloop8
483	cmpq	$0,%r11
484	jne	.Lcloop1
485	jmp	.Lexit
486.align	16
487.Lcloop1:
488	addb	%al,%cl
489	movzbl	%cl,%ecx
490	movzbl	(%rdi,%rcx,1),%edx
491	movb	%al,(%rdi,%rcx,1)
492	movb	%dl,(%rdi,%r10,1)
493	addb	%al,%dl
494	addb	$1,%r10b
495	movzbl	%dl,%edx
496	movzbl	%r10b,%r10d
497	movzbl	(%rdi,%rdx,1),%edx
498	movzbl	(%rdi,%r10,1),%eax
499	xorb	(%r12),%dl
500	leaq	1(%r12),%r12
501	movb	%dl,(%r13)
502	leaq	1(%r13),%r13
503	subq	$1,%r11
504	jnz	.Lcloop1
505	jmp	.Lexit
506
507.align	16
508.Lexit:
509	subb	$1,%r10b
510	movl	%r10d,-8(%rdi)
511	movl	%ecx,-4(%rdi)
512
513	movq	(%rsp),%r13
514	movq	8(%rsp),%r12
515	movq	16(%rsp),%rbx
516	addq	$24,%rsp
517.Lepilogue:
518	.byte	0xf3,0xc3
519.size	RC4,.-RC4
520.globl	private_RC4_set_key
521.type	private_RC4_set_key,@function
522.align	16
523private_RC4_set_key:
524	leaq	8(%rdi),%rdi
525	leaq	(%rdx,%rsi,1),%rdx
526	negq	%rsi
527	movq	%rsi,%rcx
528	xorl	%eax,%eax
529	xorq	%r9,%r9
530	xorq	%r10,%r10
531	xorq	%r11,%r11
532
533	movl	OPENSSL_ia32cap_P(%rip),%r8d
534	btl	$20,%r8d
535	jc	.Lc1stloop
536	jmp	.Lw1stloop
537
538.align	16
539.Lw1stloop:
540	movl	%eax,(%rdi,%rax,4)
541	addb	$1,%al
542	jnc	.Lw1stloop
543
544	xorq	%r9,%r9
545	xorq	%r8,%r8
546.align	16
547.Lw2ndloop:
548	movl	(%rdi,%r9,4),%r10d
549	addb	(%rdx,%rsi,1),%r8b
550	addb	%r10b,%r8b
551	addq	$1,%rsi
552	movl	(%rdi,%r8,4),%r11d
553	cmovzq	%rcx,%rsi
554	movl	%r10d,(%rdi,%r8,4)
555	movl	%r11d,(%rdi,%r9,4)
556	addb	$1,%r9b
557	jnc	.Lw2ndloop
558	jmp	.Lexit_key
559
560.align	16
561.Lc1stloop:
562	movb	%al,(%rdi,%rax,1)
563	addb	$1,%al
564	jnc	.Lc1stloop
565
566	xorq	%r9,%r9
567	xorq	%r8,%r8
568.align	16
569.Lc2ndloop:
570	movb	(%rdi,%r9,1),%r10b
571	addb	(%rdx,%rsi,1),%r8b
572	addb	%r10b,%r8b
573	addq	$1,%rsi
574	movb	(%rdi,%r8,1),%r11b
575	jnz	.Lcnowrap
576	movq	%rcx,%rsi
577.Lcnowrap:
578	movb	%r10b,(%rdi,%r8,1)
579	movb	%r11b,(%rdi,%r9,1)
580	addb	$1,%r9b
581	jnc	.Lc2ndloop
582	movl	$-1,256(%rdi)
583
584.align	16
585.Lexit_key:
586	xorl	%eax,%eax
587	movl	%eax,-8(%rdi)
588	movl	%eax,-4(%rdi)
589	.byte	0xf3,0xc3
590.size	private_RC4_set_key,.-private_RC4_set_key
591
592.globl	RC4_options
593.type	RC4_options,@function
594.align	16
595RC4_options:
596	leaq	.Lopts(%rip),%rax
597	movl	OPENSSL_ia32cap_P(%rip),%edx
598	btl	$20,%edx
599	jc	.L8xchar
600	btl	$30,%edx
601	jnc	.Ldone
602	addq	$25,%rax
603	.byte	0xf3,0xc3
604.L8xchar:
605	addq	$12,%rax
606.Ldone:
607	.byte	0xf3,0xc3
608.align	64
609.Lopts:
610.byte	114,99,52,40,56,120,44,105,110,116,41,0
611.byte	114,99,52,40,56,120,44,99,104,97,114,41,0
612.byte	114,99,52,40,49,54,120,44,105,110,116,41,0
613.byte	82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
614.align	64
615.size	RC4_options,.-RC4_options
616