OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / crypto / salsa20 / salsa / salsa2020_amd64.s
1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // +build amd64,!appengine,!gccgo
6
7 // This code was translated into a form compatible with 6a from the public
8 // domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html
9
10 // func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte)
11 // This needs up to 64 bytes at 360(SP); hence the non-obvious frame size.
12 TEXT ·salsa2020XORKeyStream(SB),0,$456-40 // frame = 424 + 32 byte alignment
13         MOVQ out+0(FP),DI
14         MOVQ in+8(FP),SI
15         MOVQ n+16(FP),DX
16         MOVQ nonce+24(FP),CX
17         MOVQ key+32(FP),R8
18
19         MOVQ SP,R12
20         MOVQ SP,R9
21         ADDQ $31, R9
22         ANDQ $~31, R9
23         MOVQ R9, SP
24
25         MOVQ DX,R9
26         MOVQ CX,DX
27         MOVQ R8,R10
28         CMPQ R9,$0
29         JBE DONE
30         START:
31         MOVL 20(R10),CX
32         MOVL 0(R10),R8
33         MOVL 0(DX),AX
34         MOVL 16(R10),R11
35         MOVL CX,0(SP)
36         MOVL R8, 4 (SP)
37         MOVL AX, 8 (SP)
38         MOVL R11, 12 (SP)
39         MOVL 8(DX),CX
40         MOVL 24(R10),R8
41         MOVL 4(R10),AX
42         MOVL 4(DX),R11
43         MOVL CX,16(SP)
44         MOVL R8, 20 (SP)
45         MOVL AX, 24 (SP)
46         MOVL R11, 28 (SP)
47         MOVL 12(DX),CX
48         MOVL 12(R10),DX
49         MOVL 28(R10),R8
50         MOVL 8(R10),AX
51         MOVL DX,32(SP)
52         MOVL CX, 36 (SP)
53         MOVL R8, 40 (SP)
54         MOVL AX, 44 (SP)
55         MOVQ $1634760805,DX
56         MOVQ $857760878,CX
57         MOVQ $2036477234,R8
58         MOVQ $1797285236,AX
59         MOVL DX,48(SP)
60         MOVL CX, 52 (SP)
61         MOVL R8, 56 (SP)
62         MOVL AX, 60 (SP)
63         CMPQ R9,$256
64         JB BYTESBETWEEN1AND255
65         MOVOA 48(SP),X0
66         PSHUFL $0X55,X0,X1
67         PSHUFL $0XAA,X0,X2
68         PSHUFL $0XFF,X0,X3
69         PSHUFL $0X00,X0,X0
70         MOVOA X1,64(SP)
71         MOVOA X2,80(SP)
72         MOVOA X3,96(SP)
73         MOVOA X0,112(SP)
74         MOVOA 0(SP),X0
75         PSHUFL $0XAA,X0,X1
76         PSHUFL $0XFF,X0,X2
77         PSHUFL $0X00,X0,X3
78         PSHUFL $0X55,X0,X0
79         MOVOA X1,128(SP)
80         MOVOA X2,144(SP)
81         MOVOA X3,160(SP)
82         MOVOA X0,176(SP)
83         MOVOA 16(SP),X0
84         PSHUFL $0XFF,X0,X1
85         PSHUFL $0X55,X0,X2
86         PSHUFL $0XAA,X0,X0
87         MOVOA X1,192(SP)
88         MOVOA X2,208(SP)
89         MOVOA X0,224(SP)
90         MOVOA 32(SP),X0
91         PSHUFL $0X00,X0,X1
92         PSHUFL $0XAA,X0,X2
93         PSHUFL $0XFF,X0,X0
94         MOVOA X1,240(SP)
95         MOVOA X2,256(SP)
96         MOVOA X0,272(SP)
97         BYTESATLEAST256:
98         MOVL 16(SP),DX
99         MOVL  36 (SP),CX
100         MOVL DX,288(SP)
101         MOVL CX,304(SP)
102         ADDQ $1,DX
103         SHLQ $32,CX
104         ADDQ CX,DX
105         MOVQ DX,CX
106         SHRQ $32,CX
107         MOVL DX, 292 (SP)
108         MOVL CX, 308 (SP)
109         ADDQ $1,DX
110         SHLQ $32,CX
111         ADDQ CX,DX
112         MOVQ DX,CX
113         SHRQ $32,CX
114         MOVL DX, 296 (SP)
115         MOVL CX, 312 (SP)
116         ADDQ $1,DX
117         SHLQ $32,CX
118         ADDQ CX,DX
119         MOVQ DX,CX
120         SHRQ $32,CX
121         MOVL DX, 300 (SP)
122         MOVL CX, 316 (SP)
123         ADDQ $1,DX
124         SHLQ $32,CX
125         ADDQ CX,DX
126         MOVQ DX,CX
127         SHRQ $32,CX
128         MOVL DX,16(SP)
129         MOVL CX, 36 (SP)
130         MOVQ R9,352(SP)
131         MOVQ $20,DX
132         MOVOA 64(SP),X0
133         MOVOA 80(SP),X1
134         MOVOA 96(SP),X2
135         MOVOA 256(SP),X3
136         MOVOA 272(SP),X4
137         MOVOA 128(SP),X5
138         MOVOA 144(SP),X6
139         MOVOA 176(SP),X7
140         MOVOA 192(SP),X8
141         MOVOA 208(SP),X9
142         MOVOA 224(SP),X10
143         MOVOA 304(SP),X11
144         MOVOA 112(SP),X12
145         MOVOA 160(SP),X13
146         MOVOA 240(SP),X14
147         MOVOA 288(SP),X15
148         MAINLOOP1:
149         MOVOA X1,320(SP)
150         MOVOA X2,336(SP)
151         MOVOA X13,X1
152         PADDL X12,X1
153         MOVOA X1,X2
154         PSLLL $7,X1
155         PXOR X1,X14
156         PSRLL $25,X2
157         PXOR X2,X14
158         MOVOA X7,X1
159         PADDL X0,X1
160         MOVOA X1,X2
161         PSLLL $7,X1
162         PXOR X1,X11
163         PSRLL $25,X2
164         PXOR X2,X11
165         MOVOA X12,X1
166         PADDL X14,X1
167         MOVOA X1,X2
168         PSLLL $9,X1
169         PXOR X1,X15
170         PSRLL $23,X2
171         PXOR X2,X15
172         MOVOA X0,X1
173         PADDL X11,X1
174         MOVOA X1,X2
175         PSLLL $9,X1
176         PXOR X1,X9
177         PSRLL $23,X2
178         PXOR X2,X9
179         MOVOA X14,X1
180         PADDL X15,X1
181         MOVOA X1,X2
182         PSLLL $13,X1
183         PXOR X1,X13
184         PSRLL $19,X2
185         PXOR X2,X13
186         MOVOA X11,X1
187         PADDL X9,X1
188         MOVOA X1,X2
189         PSLLL $13,X1
190         PXOR X1,X7
191         PSRLL $19,X2
192         PXOR X2,X7
193         MOVOA X15,X1
194         PADDL X13,X1
195         MOVOA X1,X2
196         PSLLL $18,X1
197         PXOR X1,X12
198         PSRLL $14,X2
199         PXOR X2,X12
200         MOVOA 320(SP),X1
201         MOVOA X12,320(SP)
202         MOVOA X9,X2
203         PADDL X7,X2
204         MOVOA X2,X12
205         PSLLL $18,X2
206         PXOR X2,X0
207         PSRLL $14,X12
208         PXOR X12,X0
209         MOVOA X5,X2
210         PADDL X1,X2
211         MOVOA X2,X12
212         PSLLL $7,X2
213         PXOR X2,X3
214         PSRLL $25,X12
215         PXOR X12,X3
216         MOVOA 336(SP),X2
217         MOVOA X0,336(SP)
218         MOVOA X6,X0
219         PADDL X2,X0
220         MOVOA X0,X12
221         PSLLL $7,X0
222         PXOR X0,X4
223         PSRLL $25,X12
224         PXOR X12,X4
225         MOVOA X1,X0
226         PADDL X3,X0
227         MOVOA X0,X12
228         PSLLL $9,X0
229         PXOR X0,X10
230         PSRLL $23,X12
231         PXOR X12,X10
232         MOVOA X2,X0
233         PADDL X4,X0
234         MOVOA X0,X12
235         PSLLL $9,X0
236         PXOR X0,X8
237         PSRLL $23,X12
238         PXOR X12,X8
239         MOVOA X3,X0
240         PADDL X10,X0
241         MOVOA X0,X12
242         PSLLL $13,X0
243         PXOR X0,X5
244         PSRLL $19,X12
245         PXOR X12,X5
246         MOVOA X4,X0
247         PADDL X8,X0
248         MOVOA X0,X12
249         PSLLL $13,X0
250         PXOR X0,X6
251         PSRLL $19,X12
252         PXOR X12,X6
253         MOVOA X10,X0
254         PADDL X5,X0
255         MOVOA X0,X12
256         PSLLL $18,X0
257         PXOR X0,X1
258         PSRLL $14,X12
259         PXOR X12,X1
260         MOVOA 320(SP),X0
261         MOVOA X1,320(SP)
262         MOVOA X4,X1
263         PADDL X0,X1
264         MOVOA X1,X12
265         PSLLL $7,X1
266         PXOR X1,X7
267         PSRLL $25,X12
268         PXOR X12,X7
269         MOVOA X8,X1
270         PADDL X6,X1
271         MOVOA X1,X12
272         PSLLL $18,X1
273         PXOR X1,X2
274         PSRLL $14,X12
275         PXOR X12,X2
276         MOVOA 336(SP),X12
277         MOVOA X2,336(SP)
278         MOVOA X14,X1
279         PADDL X12,X1
280         MOVOA X1,X2
281         PSLLL $7,X1
282         PXOR X1,X5
283         PSRLL $25,X2
284         PXOR X2,X5
285         MOVOA X0,X1
286         PADDL X7,X1
287         MOVOA X1,X2
288         PSLLL $9,X1
289         PXOR X1,X10
290         PSRLL $23,X2
291         PXOR X2,X10
292         MOVOA X12,X1
293         PADDL X5,X1
294         MOVOA X1,X2
295         PSLLL $9,X1
296         PXOR X1,X8
297         PSRLL $23,X2
298         PXOR X2,X8
299         MOVOA X7,X1
300         PADDL X10,X1
301         MOVOA X1,X2
302         PSLLL $13,X1
303         PXOR X1,X4
304         PSRLL $19,X2
305         PXOR X2,X4
306         MOVOA X5,X1
307         PADDL X8,X1
308         MOVOA X1,X2
309         PSLLL $13,X1
310         PXOR X1,X14
311         PSRLL $19,X2
312         PXOR X2,X14
313         MOVOA X10,X1
314         PADDL X4,X1
315         MOVOA X1,X2
316         PSLLL $18,X1
317         PXOR X1,X0
318         PSRLL $14,X2
319         PXOR X2,X0
320         MOVOA 320(SP),X1
321         MOVOA X0,320(SP)
322         MOVOA X8,X0
323         PADDL X14,X0
324         MOVOA X0,X2
325         PSLLL $18,X0
326         PXOR X0,X12
327         PSRLL $14,X2
328         PXOR X2,X12
329         MOVOA X11,X0
330         PADDL X1,X0
331         MOVOA X0,X2
332         PSLLL $7,X0
333         PXOR X0,X6
334         PSRLL $25,X2
335         PXOR X2,X6
336         MOVOA 336(SP),X2
337         MOVOA X12,336(SP)
338         MOVOA X3,X0
339         PADDL X2,X0
340         MOVOA X0,X12
341         PSLLL $7,X0
342         PXOR X0,X13
343         PSRLL $25,X12
344         PXOR X12,X13
345         MOVOA X1,X0
346         PADDL X6,X0
347         MOVOA X0,X12
348         PSLLL $9,X0
349         PXOR X0,X15
350         PSRLL $23,X12
351         PXOR X12,X15
352         MOVOA X2,X0
353         PADDL X13,X0
354         MOVOA X0,X12
355         PSLLL $9,X0
356         PXOR X0,X9
357         PSRLL $23,X12
358         PXOR X12,X9
359         MOVOA X6,X0
360         PADDL X15,X0
361         MOVOA X0,X12
362         PSLLL $13,X0
363         PXOR X0,X11
364         PSRLL $19,X12
365         PXOR X12,X11
366         MOVOA X13,X0
367         PADDL X9,X0
368         MOVOA X0,X12
369         PSLLL $13,X0
370         PXOR X0,X3
371         PSRLL $19,X12
372         PXOR X12,X3
373         MOVOA X15,X0
374         PADDL X11,X0
375         MOVOA X0,X12
376         PSLLL $18,X0
377         PXOR X0,X1
378         PSRLL $14,X12
379         PXOR X12,X1
380         MOVOA X9,X0
381         PADDL X3,X0
382         MOVOA X0,X12
383         PSLLL $18,X0
384         PXOR X0,X2
385         PSRLL $14,X12
386         PXOR X12,X2
387         MOVOA 320(SP),X12
388         MOVOA 336(SP),X0
389         SUBQ $2,DX
390         JA MAINLOOP1
391         PADDL 112(SP),X12
392         PADDL 176(SP),X7
393         PADDL 224(SP),X10
394         PADDL 272(SP),X4
395         MOVD X12,DX
396         MOVD X7,CX
397         MOVD X10,R8
398         MOVD X4,R9
399         PSHUFL $0X39,X12,X12
400         PSHUFL $0X39,X7,X7
401         PSHUFL $0X39,X10,X10
402         PSHUFL $0X39,X4,X4
403         XORL 0(SI),DX
404         XORL 4(SI),CX
405         XORL 8(SI),R8
406         XORL 12(SI),R9
407         MOVL DX,0(DI)
408         MOVL CX,4(DI)
409         MOVL R8,8(DI)
410         MOVL R9,12(DI)
411         MOVD X12,DX
412         MOVD X7,CX
413         MOVD X10,R8
414         MOVD X4,R9
415         PSHUFL $0X39,X12,X12
416         PSHUFL $0X39,X7,X7
417         PSHUFL $0X39,X10,X10
418         PSHUFL $0X39,X4,X4
419         XORL 64(SI),DX
420         XORL 68(SI),CX
421         XORL 72(SI),R8
422         XORL 76(SI),R9
423         MOVL DX,64(DI)
424         MOVL CX,68(DI)
425         MOVL R8,72(DI)
426         MOVL R9,76(DI)
427         MOVD X12,DX
428         MOVD X7,CX
429         MOVD X10,R8
430         MOVD X4,R9
431         PSHUFL $0X39,X12,X12
432         PSHUFL $0X39,X7,X7
433         PSHUFL $0X39,X10,X10
434         PSHUFL $0X39,X4,X4
435         XORL 128(SI),DX
436         XORL 132(SI),CX
437         XORL 136(SI),R8
438         XORL 140(SI),R9
439         MOVL DX,128(DI)
440         MOVL CX,132(DI)
441         MOVL R8,136(DI)
442         MOVL R9,140(DI)
443         MOVD X12,DX
444         MOVD X7,CX
445         MOVD X10,R8
446         MOVD X4,R9
447         XORL 192(SI),DX
448         XORL 196(SI),CX
449         XORL 200(SI),R8
450         XORL 204(SI),R9
451         MOVL DX,192(DI)
452         MOVL CX,196(DI)
453         MOVL R8,200(DI)
454         MOVL R9,204(DI)
455         PADDL 240(SP),X14
456         PADDL 64(SP),X0
457         PADDL 128(SP),X5
458         PADDL 192(SP),X8
459         MOVD X14,DX
460         MOVD X0,CX
461         MOVD X5,R8
462         MOVD X8,R9
463         PSHUFL $0X39,X14,X14
464         PSHUFL $0X39,X0,X0
465         PSHUFL $0X39,X5,X5
466         PSHUFL $0X39,X8,X8
467         XORL 16(SI),DX
468         XORL 20(SI),CX
469         XORL 24(SI),R8
470         XORL 28(SI),R9
471         MOVL DX,16(DI)
472         MOVL CX,20(DI)
473         MOVL R8,24(DI)
474         MOVL R9,28(DI)
475         MOVD X14,DX
476         MOVD X0,CX
477         MOVD X5,R8
478         MOVD X8,R9
479         PSHUFL $0X39,X14,X14
480         PSHUFL $0X39,X0,X0
481         PSHUFL $0X39,X5,X5
482         PSHUFL $0X39,X8,X8
483         XORL 80(SI),DX
484         XORL 84(SI),CX
485         XORL 88(SI),R8
486         XORL 92(SI),R9
487         MOVL DX,80(DI)
488         MOVL CX,84(DI)
489         MOVL R8,88(DI)
490         MOVL R9,92(DI)
491         MOVD X14,DX
492         MOVD X0,CX
493         MOVD X5,R8
494         MOVD X8,R9
495         PSHUFL $0X39,X14,X14
496         PSHUFL $0X39,X0,X0
497         PSHUFL $0X39,X5,X5
498         PSHUFL $0X39,X8,X8
499         XORL 144(SI),DX
500         XORL 148(SI),CX
501         XORL 152(SI),R8
502         XORL 156(SI),R9
503         MOVL DX,144(DI)
504         MOVL CX,148(DI)
505         MOVL R8,152(DI)
506         MOVL R9,156(DI)
507         MOVD X14,DX
508         MOVD X0,CX
509         MOVD X5,R8
510         MOVD X8,R9
511         XORL 208(SI),DX
512         XORL 212(SI),CX
513         XORL 216(SI),R8
514         XORL 220(SI),R9
515         MOVL DX,208(DI)
516         MOVL CX,212(DI)
517         MOVL R8,216(DI)
518         MOVL R9,220(DI)
519         PADDL 288(SP),X15
520         PADDL 304(SP),X11
521         PADDL 80(SP),X1
522         PADDL 144(SP),X6
523         MOVD X15,DX
524         MOVD X11,CX
525         MOVD X1,R8
526         MOVD X6,R9
527         PSHUFL $0X39,X15,X15
528         PSHUFL $0X39,X11,X11
529         PSHUFL $0X39,X1,X1
530         PSHUFL $0X39,X6,X6
531         XORL 32(SI),DX
532         XORL 36(SI),CX
533         XORL 40(SI),R8
534         XORL 44(SI),R9
535         MOVL DX,32(DI)
536         MOVL CX,36(DI)
537         MOVL R8,40(DI)
538         MOVL R9,44(DI)
539         MOVD X15,DX
540         MOVD X11,CX
541         MOVD X1,R8
542         MOVD X6,R9
543         PSHUFL $0X39,X15,X15
544         PSHUFL $0X39,X11,X11
545         PSHUFL $0X39,X1,X1
546         PSHUFL $0X39,X6,X6
547         XORL 96(SI),DX
548         XORL 100(SI),CX
549         XORL 104(SI),R8
550         XORL 108(SI),R9
551         MOVL DX,96(DI)
552         MOVL CX,100(DI)
553         MOVL R8,104(DI)
554         MOVL R9,108(DI)
555         MOVD X15,DX
556         MOVD X11,CX
557         MOVD X1,R8
558         MOVD X6,R9
559         PSHUFL $0X39,X15,X15
560         PSHUFL $0X39,X11,X11
561         PSHUFL $0X39,X1,X1
562         PSHUFL $0X39,X6,X6
563         XORL 160(SI),DX
564         XORL 164(SI),CX
565         XORL 168(SI),R8
566         XORL 172(SI),R9
567         MOVL DX,160(DI)
568         MOVL CX,164(DI)
569         MOVL R8,168(DI)
570         MOVL R9,172(DI)
571         MOVD X15,DX
572         MOVD X11,CX
573         MOVD X1,R8
574         MOVD X6,R9
575         XORL 224(SI),DX
576         XORL 228(SI),CX
577         XORL 232(SI),R8
578         XORL 236(SI),R9
579         MOVL DX,224(DI)
580         MOVL CX,228(DI)
581         MOVL R8,232(DI)
582         MOVL R9,236(DI)
583         PADDL 160(SP),X13
584         PADDL 208(SP),X9
585         PADDL 256(SP),X3
586         PADDL 96(SP),X2
587         MOVD X13,DX
588         MOVD X9,CX
589         MOVD X3,R8
590         MOVD X2,R9
591         PSHUFL $0X39,X13,X13
592         PSHUFL $0X39,X9,X9
593         PSHUFL $0X39,X3,X3
594         PSHUFL $0X39,X2,X2
595         XORL 48(SI),DX
596         XORL 52(SI),CX
597         XORL 56(SI),R8
598         XORL 60(SI),R9
599         MOVL DX,48(DI)
600         MOVL CX,52(DI)
601         MOVL R8,56(DI)
602         MOVL R9,60(DI)
603         MOVD X13,DX
604         MOVD X9,CX
605         MOVD X3,R8
606         MOVD X2,R9
607         PSHUFL $0X39,X13,X13
608         PSHUFL $0X39,X9,X9
609         PSHUFL $0X39,X3,X3
610         PSHUFL $0X39,X2,X2
611         XORL 112(SI),DX
612         XORL 116(SI),CX
613         XORL 120(SI),R8
614         XORL 124(SI),R9
615         MOVL DX,112(DI)
616         MOVL CX,116(DI)
617         MOVL R8,120(DI)
618         MOVL R9,124(DI)
619         MOVD X13,DX
620         MOVD X9,CX
621         MOVD X3,R8
622         MOVD X2,R9
623         PSHUFL $0X39,X13,X13
624         PSHUFL $0X39,X9,X9
625         PSHUFL $0X39,X3,X3
626         PSHUFL $0X39,X2,X2
627         XORL 176(SI),DX
628         XORL 180(SI),CX
629         XORL 184(SI),R8
630         XORL 188(SI),R9
631         MOVL DX,176(DI)
632         MOVL CX,180(DI)
633         MOVL R8,184(DI)
634         MOVL R9,188(DI)
635         MOVD X13,DX
636         MOVD X9,CX
637         MOVD X3,R8
638         MOVD X2,R9
639         XORL 240(SI),DX
640         XORL 244(SI),CX
641         XORL 248(SI),R8
642         XORL 252(SI),R9
643         MOVL DX,240(DI)
644         MOVL CX,244(DI)
645         MOVL R8,248(DI)
646         MOVL R9,252(DI)
647         MOVQ 352(SP),R9
648         SUBQ $256,R9
649         ADDQ $256,SI
650         ADDQ $256,DI
651         CMPQ R9,$256
652         JAE BYTESATLEAST256
653         CMPQ R9,$0
654         JBE DONE
655         BYTESBETWEEN1AND255:
656         CMPQ R9,$64
657         JAE NOCOPY
658         MOVQ DI,DX
659         LEAQ 360(SP),DI
660         MOVQ R9,CX
661         REP; MOVSB
662         LEAQ 360(SP),DI
663         LEAQ 360(SP),SI
664         NOCOPY:
665         MOVQ R9,352(SP)
666         MOVOA 48(SP),X0
667         MOVOA 0(SP),X1
668         MOVOA 16(SP),X2
669         MOVOA 32(SP),X3
670         MOVOA X1,X4
671         MOVQ $20,CX
672         MAINLOOP2:
673         PADDL X0,X4
674         MOVOA X0,X5
675         MOVOA X4,X6
676         PSLLL $7,X4
677         PSRLL $25,X6
678         PXOR X4,X3
679         PXOR X6,X3
680         PADDL X3,X5
681         MOVOA X3,X4
682         MOVOA X5,X6
683         PSLLL $9,X5
684         PSRLL $23,X6
685         PXOR X5,X2
686         PSHUFL $0X93,X3,X3
687         PXOR X6,X2
688         PADDL X2,X4
689         MOVOA X2,X5
690         MOVOA X4,X6
691         PSLLL $13,X4
692         PSRLL $19,X6
693         PXOR X4,X1
694         PSHUFL $0X4E,X2,X2
695         PXOR X6,X1
696         PADDL X1,X5
697         MOVOA X3,X4
698         MOVOA X5,X6
699         PSLLL $18,X5
700         PSRLL $14,X6
701         PXOR X5,X0
702         PSHUFL $0X39,X1,X1
703         PXOR X6,X0
704         PADDL X0,X4
705         MOVOA X0,X5
706         MOVOA X4,X6
707         PSLLL $7,X4
708         PSRLL $25,X6
709         PXOR X4,X1
710         PXOR X6,X1
711         PADDL X1,X5
712         MOVOA X1,X4
713         MOVOA X5,X6
714         PSLLL $9,X5
715         PSRLL $23,X6
716         PXOR X5,X2
717         PSHUFL $0X93,X1,X1
718         PXOR X6,X2
719         PADDL X2,X4
720         MOVOA X2,X5
721         MOVOA X4,X6
722         PSLLL $13,X4
723         PSRLL $19,X6
724         PXOR X4,X3
725         PSHUFL $0X4E,X2,X2
726         PXOR X6,X3
727         PADDL X3,X5
728         MOVOA X1,X4
729         MOVOA X5,X6
730         PSLLL $18,X5
731         PSRLL $14,X6
732         PXOR X5,X0
733         PSHUFL $0X39,X3,X3
734         PXOR X6,X0
735         PADDL X0,X4
736         MOVOA X0,X5
737         MOVOA X4,X6
738         PSLLL $7,X4
739         PSRLL $25,X6
740         PXOR X4,X3
741         PXOR X6,X3
742         PADDL X3,X5
743         MOVOA X3,X4
744         MOVOA X5,X6
745         PSLLL $9,X5
746         PSRLL $23,X6
747         PXOR X5,X2
748         PSHUFL $0X93,X3,X3
749         PXOR X6,X2
750         PADDL X2,X4
751         MOVOA X2,X5
752         MOVOA X4,X6
753         PSLLL $13,X4
754         PSRLL $19,X6
755         PXOR X4,X1
756         PSHUFL $0X4E,X2,X2
757         PXOR X6,X1
758         PADDL X1,X5
759         MOVOA X3,X4
760         MOVOA X5,X6
761         PSLLL $18,X5
762         PSRLL $14,X6
763         PXOR X5,X0
764         PSHUFL $0X39,X1,X1
765         PXOR X6,X0
766         PADDL X0,X4
767         MOVOA X0,X5
768         MOVOA X4,X6
769         PSLLL $7,X4
770         PSRLL $25,X6
771         PXOR X4,X1
772         PXOR X6,X1
773         PADDL X1,X5
774         MOVOA X1,X4
775         MOVOA X5,X6
776         PSLLL $9,X5
777         PSRLL $23,X6
778         PXOR X5,X2
779         PSHUFL $0X93,X1,X1
780         PXOR X6,X2
781         PADDL X2,X4
782         MOVOA X2,X5
783         MOVOA X4,X6
784         PSLLL $13,X4
785         PSRLL $19,X6
786         PXOR X4,X3
787         PSHUFL $0X4E,X2,X2
788         PXOR X6,X3
789         SUBQ $4,CX
790         PADDL X3,X5
791         MOVOA X1,X4
792         MOVOA X5,X6
793         PSLLL $18,X5
794         PXOR X7,X7
795         PSRLL $14,X6
796         PXOR X5,X0
797         PSHUFL $0X39,X3,X3
798         PXOR X6,X0
799         JA MAINLOOP2
800         PADDL 48(SP),X0
801         PADDL 0(SP),X1
802         PADDL 16(SP),X2
803         PADDL 32(SP),X3
804         MOVD X0,CX
805         MOVD X1,R8
806         MOVD X2,R9
807         MOVD X3,AX
808         PSHUFL $0X39,X0,X0
809         PSHUFL $0X39,X1,X1
810         PSHUFL $0X39,X2,X2
811         PSHUFL $0X39,X3,X3
812         XORL 0(SI),CX
813         XORL 48(SI),R8
814         XORL 32(SI),R9
815         XORL 16(SI),AX
816         MOVL CX,0(DI)
817         MOVL R8,48(DI)
818         MOVL R9,32(DI)
819         MOVL AX,16(DI)
820         MOVD X0,CX
821         MOVD X1,R8
822         MOVD X2,R9
823         MOVD X3,AX
824         PSHUFL $0X39,X0,X0
825         PSHUFL $0X39,X1,X1
826         PSHUFL $0X39,X2,X2
827         PSHUFL $0X39,X3,X3
828         XORL 20(SI),CX
829         XORL 4(SI),R8
830         XORL 52(SI),R9
831         XORL 36(SI),AX
832         MOVL CX,20(DI)
833         MOVL R8,4(DI)
834         MOVL R9,52(DI)
835         MOVL AX,36(DI)
836         MOVD X0,CX
837         MOVD X1,R8
838         MOVD X2,R9
839         MOVD X3,AX
840         PSHUFL $0X39,X0,X0
841         PSHUFL $0X39,X1,X1
842         PSHUFL $0X39,X2,X2
843         PSHUFL $0X39,X3,X3
844         XORL 40(SI),CX
845         XORL 24(SI),R8
846         XORL 8(SI),R9
847         XORL 56(SI),AX
848         MOVL CX,40(DI)
849         MOVL R8,24(DI)
850         MOVL R9,8(DI)
851         MOVL AX,56(DI)
852         MOVD X0,CX
853         MOVD X1,R8
854         MOVD X2,R9
855         MOVD X3,AX
856         XORL 60(SI),CX
857         XORL 44(SI),R8
858         XORL 28(SI),R9
859         XORL 12(SI),AX
860         MOVL CX,60(DI)
861         MOVL R8,44(DI)
862         MOVL R9,28(DI)
863         MOVL AX,12(DI)
864         MOVQ 352(SP),R9
865         MOVL 16(SP),CX
866         MOVL  36 (SP),R8
867         ADDQ $1,CX
868         SHLQ $32,R8
869         ADDQ R8,CX
870         MOVQ CX,R8
871         SHRQ $32,R8
872         MOVL CX,16(SP)
873         MOVL R8, 36 (SP)
874         CMPQ R9,$64
875         JA BYTESATLEAST65
876         JAE BYTESATLEAST64
877         MOVQ DI,SI
878         MOVQ DX,DI
879         MOVQ R9,CX
880         REP; MOVSB
881         BYTESATLEAST64:
882         DONE:
883         MOVQ R12,SP
884         RET
885         BYTESATLEAST65:
886         SUBQ $64,R9
887         ADDQ $64,DI
888         ADDQ $64,SI
889         JMP BYTESBETWEEN1AND255