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