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