-
Notifications
You must be signed in to change notification settings - Fork 4
/
gcc-x64-avx2.lst
1085 lines (1084 loc) · 38.2 KB
/
gcc-x64-avx2.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1 .file "farsh.c"
2 .section .text.unlikely,"x"
3 .LCOLDB0:
4 .text
5 .LHOTB0:
6 .p2align 4,,15
7 .globl farsh_keyed
9 .seh_proc farsh_keyed
10 farsh_keyed:
11 0000 4157 pushq %r15
12 .seh_pushreg %r15
13 0002 4156 pushq %r14
14 .seh_pushreg %r14
15 0004 4155 pushq %r13
16 .seh_pushreg %r13
17 0006 4154 pushq %r12
18 .seh_pushreg %r12
19 0008 55 pushq %rbp
20 .seh_pushreg %rbp
21 0009 57 pushq %rdi
22 .seh_pushreg %rdi
23 000a 56 pushq %rsi
24 .seh_pushreg %rsi
25 000b 53 pushq %rbx
26 .seh_pushreg %rbx
27 000c 4883EC38 subq $56, %rsp
28 .seh_stackalloc 56
29 .seh_endprologue
30 0010 4885D2 testq %rdx, %rdx
31 0013 4889CB movq %rcx, %rbx
32 0016 4989D5 movq %rdx, %r13
33 0019 4C89C6 movq %r8, %rsi
34 001c 4D89CE movq %r9, %r14
35 001f 0F84BC03 je .L13
35 0000
36 0025 4C8D5424 leaq 32(%rsp), %r10
36 20
37 002a 48BF87CA movabsq $-7046029288634856825, %rdi
37 EB85B179
37 379E
38 .p2align 4,,10
39 .L10:
40 0034 4981FD00 cmpq $1024, %r13
40 040000
41 003b 41BC0004 movl $1024, %r12d
41 0000
42 0041 4D0F46E5 cmovbe %r13, %r12
43 0045 4981FC00 cmpq $1024, %r12
43 040000
44 004c 0F845302 je .L48
44 0000
45 0052 4D89E7 movq %r12, %r15
46 0055 4C89E5 movq %r12, %rbp
47 0058 4C89D1 movq %r10, %rcx
48 005b 48C74424 movq $0, 32(%rsp)
48 20000000
48 00
49 0064 49C1EF02 shrq $2, %r15
50 0068 4983E7FE andq $-2, %r15
51 006c 4A8D14BD leaq 0(,%r15,4), %rdx
51 00000000
52 0074 4829D5 subq %rdx, %rbp
53 0077 4801DA addq %rbx, %rdx
54 007a 4989E8 movq %rbp, %r8
55 007d C5F877 vzeroupper
56 0080 E8000000 call memcpy
56 00
57 0085 4885ED testq %rbp, %rbp
58 0088 4989C2 movq %rax, %r10
59 008b 0F840102 je .L49
59 0000
60 0091 4531C0 xorl %r8d, %r8d
61 0094 31C9 xorl %ecx, %ecx
62 0096 4D85FF testq %r15, %r15
63 0099 4989C1 movq %rax, %r9
64 009c 41BB0400 movl $4, %r11d
64 0000
65 00a2 0F843201 je .L12
65 0000
66 .L11:
67 00a8 8B5304 movl 4(%rbx), %edx
68 00ab 498D6FFF leaq -1(%r15), %rbp
69 00af 8B03 movl (%rbx), %eax
70 00b1 48D1ED shrq %rbp
71 00b4 83E503 andl $3, %ebp
72 00b7 4189D3 movl %edx, %r11d
73 00ba 44035E04 addl 4(%rsi), %r11d
74 00be BA020000 movl $2, %edx
74 00
75 00c3 4189C0 movl %eax, %r8d
76 00c6 440306 addl (%rsi), %r8d
77 00c9 4C89D9 movq %r11, %rcx
78 00cc 490FAFC8 imulq %r8, %rcx
79 00d0 4983FF02 cmpq $2, %r15
80 00d4 0F86EB00 jbe .L43
80 0000
81 00da 4885ED testq %rbp, %rbp
82 00dd 7468 je .L8
83 00df 4883FD01 cmpq $1, %rbp
84 00e3 743F je .L37
85 00e5 4883FD02 cmpq $2, %rbp
86 00e9 741C je .L38
87 00eb 8B6B0C movl 12(%rbx), %ebp
88 00ee 448B5B08 movl 8(%rbx), %r11d
89 00f2 44035E08 addl 8(%rsi), %r11d
90 00f6 89EA movl %ebp, %edx
91 00f8 03560C addl 12(%rsi), %edx
92 00fb 4C0FAFDA imulq %rdx, %r11
93 00ff BA040000 movl $4, %edx
93 00
94 0104 4C01D9 addq %r11, %rcx
95 .L38:
96 0107 8B449304 movl 4(%rbx,%rdx,4), %eax
97 010b 8B2C93 movl (%rbx,%rdx,4), %ebp
98 010e 032C96 addl (%rsi,%rdx,4), %ebp
99 0111 4189C0 movl %eax, %r8d
100 0114 44034496 addl 4(%rsi,%rdx,4), %r8d
100 04
101 0119 4883C202 addq $2, %rdx
102 011d 490FAFE8 imulq %r8, %rbp
103 0121 4801E9 addq %rbp, %rcx
104 .L37:
105 0124 448B5C93 movl 4(%rbx,%rdx,4), %r11d
105 04
106 0129 8B0493 movl (%rbx,%rdx,4), %eax
107 012c 030496 addl (%rsi,%rdx,4), %eax
108 012f 4589D8 movl %r11d, %r8d
109 0132 44034496 addl 4(%rsi,%rdx,4), %r8d
109 04
110 0137 4883C202 addq $2, %rdx
111 013b 490FAFC0 imulq %r8, %rax
112 013f 4801C1 addq %rax, %rcx
113 0142 4939D7 cmpq %rdx, %r15
114 0145 767E jbe .L43
115 .L8:
116 0147 8B6C9304 movl 4(%rbx,%rdx,4), %ebp
117 014b 448B1C93 movl (%rbx,%rdx,4), %r11d
118 014f 4189E8 movl %ebp, %r8d
119 0152 44034496 addl 4(%rsi,%rdx,4), %r8d
119 04
120 0157 4489D8 movl %r11d, %eax
121 015a 030496 addl (%rsi,%rdx,4), %eax
122 015d 488D6A02 leaq 2(%rdx), %rbp
123 0161 4C8D5A04 leaq 4(%rdx), %r11
124 0165 490FAFC0 imulq %r8, %rax
125 0169 448B44AB movl 4(%rbx,%rbp,4), %r8d
125 04
126 016e 440344AE addl 4(%rsi,%rbp,4), %r8d
126 04
127 0173 4801C8 addq %rcx, %rax
128 0176 8B0CAB movl (%rbx,%rbp,4), %ecx
129 0179 030CAE addl (%rsi,%rbp,4), %ecx
130 017c 428B6C9B movl 4(%rbx,%r11,4), %ebp
130 04
131 0181 42036C9E addl 4(%rsi,%r11,4), %ebp
131 04
132 0186 4C0FAFC1 imulq %rcx, %r8
133 018a 4C01C0 addq %r8, %rax
134 018d 468B049B movl (%rbx,%r11,4), %r8d
135 0191 4603049E addl (%rsi,%r11,4), %r8d
136 0195 4C8D5A06 leaq 6(%rdx), %r11
137 0199 4883C208 addq $8, %rdx
138 019d 428B4C9B movl 4(%rbx,%r11,4), %ecx
138 04
139 01a2 42034C9E addl 4(%rsi,%r11,4), %ecx
139 04
140 01a7 4C0FAFC5 imulq %rbp, %r8
141 01ab 4A8D2C00 leaq (%rax,%r8), %rbp
142 01af 428B049B movl (%rbx,%r11,4), %eax
143 01b3 4203049E addl (%rsi,%r11,4), %eax
144 01b7 480FAFC1 imulq %rcx, %rax
145 01bb 4939D7 cmpq %rdx, %r15
146 01be 488D4C05 leaq 0(%rbp,%rax), %rcx
146 00
147 01c3 7782 ja .L8
148 .L43:
149 01c5 4C8D0495 leaq 0(,%rdx,4), %r8
149 00000000
150 01cd 4D85C9 testq %r9, %r9
151 01d0 4D8D5804 leaq 4(%r8), %r11
152 01d4 0F84E601 je .L50
152 0000
153 .L12:
154 01da 418B4104 movl 4(%r9), %eax
155 01de 458B09 movl (%r9), %r9d
156 01e1 4203041E addl (%rsi,%r11), %eax
157 01e5 46030C06 addl (%rsi,%r8), %r9d
158 01e9 490FAFC1 imulq %r9, %rax
159 01ed 4801C8 addq %rcx, %rax
160 .L45:
161 01f0 49B84FEB movabsq $-4417276706812531889, %r8
161 D4273DAE
161 B2C2
162 01fa 490FAFC0 imulq %r8, %rax
163 01fe 4889C5 movq %rax, %rbp
164 0201 48C1ED1F shrq $31, %rbp
165 0205 4801E8 addq %rbp, %rax
166 0208 480FAFC7 imulq %rdi, %rax
167 .L5:
168 020c 4C31F0 xorq %r14, %rax
169 020f 4C01E3 addq %r12, %rbx
170 0212 49BE63AE movabsq $-8796714831421723037, %r14
170 B2C277CA
170 EB85
171 021c 4989C3 movq %rax, %r11
172 021f 48C1E81B shrq $27, %rax
173 0223 4901C3 addq %rax, %r11
174 0226 4C0FAFDF imulq %rdi, %r11
175 022a 4D01DE addq %r11, %r14
176 022d 4D29E5 subq %r12, %r13
177 0230 0F85FEFD jne .L10
177 FFFF
178 0236 410FB6D4 movzbl %r12b, %edx
179 023a 48C1E202 salq $2, %rdx
180 023e C5F877 vzeroupper
181 .L2:
182 0241 48BB4FEB movabsq $-4417276706812531889, %rbx
182 D4273DAE
182 B2C2
183 024b 4D89F2 movq %r14, %r10
184 024e 8B0416 movl (%rsi,%rdx), %eax
185 0251 49BCF979 movabsq $1609587929392839161, %r12
185 379EB167
185 5616
186 025b 49C1EA21 shrq $33, %r10
187 025f 4D31F2 xorq %r14, %r10
188 0262 4C0FAFD3 imulq %rbx, %r10
189 0266 4C89D7 movq %r10, %rdi
190 0269 48C1EF1D shrq $29, %rdi
191 026d 4931FA xorq %rdi, %r10
192 0270 4D89D5 movq %r10, %r13
193 0273 4D0FAFEC imulq %r12, %r13
194 0277 4431E8 xorl %r13d, %eax
195 027a 49C1ED20 shrq $32, %r13
196 027e 4431E8 xorl %r13d, %eax
197 0281 4883C438 addq $56, %rsp
198 0285 5B popq %rbx
199 0286 5E popq %rsi
200 0287 5F popq %rdi
201 0288 5D popq %rbp
202 0289 415C popq %r12
203 028b 415D popq %r13
204 028d 415E popq %r14
205 028f 415F popq %r15
206 0291 C3 ret
207 .p2align 4,,10
208 .L49:
209 0292 4531C9 xorl %r9d, %r9d
210 0295 31C0 xorl %eax, %eax
211 0297 4D85FF testq %r15, %r15
212 029a 0F8508FE jne .L11
212 FFFF
213 02a0 E967FFFF jmp .L5
213 FF
214 .p2align 4,,10
215 .L48:
216 02a5 31D2 xorl %edx, %edx
217 02a7 C5D1EFED vpxor %xmm5, %xmm5, %xmm5
218 .L4:
219 02ab C5FE6F0C vmovdqu (%rsi,%rdx), %ymm1
219 16
220 02b0 C5F5FE1C vpaddd (%rbx,%rdx), %ymm1, %ymm3
220 13
221 02b5 C5FD70D3 vpshufd $49, %ymm3, %ymm2
221 31
222 02ba C5E5F4E2 vpmuludq %ymm2, %ymm3, %ymm4
223 02be C5D5D4C4 vpaddq %ymm4, %ymm5, %ymm0
224 02c2 C5FE6F6C vmovdqu 32(%rbx,%rdx), %ymm5
224 1320
225 02c8 C5D5FE4C vpaddd 32(%rsi,%rdx), %ymm5, %ymm1
225 1620
226 02ce C5FD70D9 vpshufd $49, %ymm1, %ymm3
226 31
227 02d3 C5F5F4D3 vpmuludq %ymm3, %ymm1, %ymm2
228 02d7 C5FDD4E2 vpaddq %ymm2, %ymm0, %ymm4
229 02db C5FE6F44 vmovdqu 64(%rbx,%rdx), %ymm0
229 1340
230 02e1 C5FDFE6C vpaddd 64(%rsi,%rdx), %ymm0, %ymm5
230 1640
231 02e7 C5FD70CD vpshufd $49, %ymm5, %ymm1
231 31
232 02ec C5D5F4D9 vpmuludq %ymm1, %ymm5, %ymm3
233 02f0 C5DDD4D3 vpaddq %ymm3, %ymm4, %ymm2
234 02f4 C5FE6F64 vmovdqu 96(%rbx,%rdx), %ymm4
234 1360
235 02fa C5DDFE44 vpaddd 96(%rsi,%rdx), %ymm4, %ymm0
235 1660
236 0300 C5FE6F9C vmovdqu 128(%rbx,%rdx), %ymm3
236 13800000
236 00
237 0309 C5E5FEA4 vpaddd 128(%rsi,%rdx), %ymm3, %ymm4
237 16800000
237 00
238 0312 C5FD70E8 vpshufd $49, %ymm0, %ymm5
238 31
239 0317 C5FDF4CD vpmuludq %ymm5, %ymm0, %ymm1
240 031b C5FD70C4 vpshufd $49, %ymm4, %ymm0
240 31
241 0320 C5DDF4E8 vpmuludq %ymm0, %ymm4, %ymm5
242 0324 C5EDD4D1 vpaddq %ymm1, %ymm2, %ymm2
243 0328 C5EDD4CD vpaddq %ymm5, %ymm2, %ymm1
244 032c C5FE6F94 vmovdqu 160(%rbx,%rdx), %ymm2
244 13A00000
244 00
245 0335 C5EDFE9C vpaddd 160(%rsi,%rdx), %ymm2, %ymm3
245 16A00000
245 00
246 033e C5FD70E3 vpshufd $49, %ymm3, %ymm4
246 31
247 0343 C5E5F4C4 vpmuludq %ymm4, %ymm3, %ymm0
248 0347 C5F5D4E8 vpaddq %ymm0, %ymm1, %ymm5
249 034b C5FE6F8C vmovdqu 192(%rbx,%rdx), %ymm1
249 13C00000
249 00
250 0354 C5F5FE94 vpaddd 192(%rsi,%rdx), %ymm1, %ymm2
250 16C00000
250 00
251 035d C5FE6F84 vmovdqu 224(%rbx,%rdx), %ymm0
251 13E00000
251 00
252 0366 C5FDFE8C vpaddd 224(%rsi,%rdx), %ymm0, %ymm1
252 16E00000
252 00
253 036f 4881C200 addq $256, %rdx
253 010000
254 0376 C5FD70DA vpshufd $49, %ymm2, %ymm3
254 31
255 037b C5EDF4E3 vpmuludq %ymm3, %ymm2, %ymm4
256 037f 4881FA00 cmpq $1024, %rdx
256 040000
257 0386 C5FD70D1 vpshufd $49, %ymm1, %ymm2
257 31
258 038b C5F5F4DA vpmuludq %ymm2, %ymm1, %ymm3
259 038f C5D5D4EC vpaddq %ymm4, %ymm5, %ymm5
260 0393 C5D5D4EB vpaddq %ymm3, %ymm5, %ymm5
261 0397 0F850EFF jne .L4
261 FFFF
262 039d C5FD70E5 vpshufd $14, %ymm5, %ymm4
262 0E
263 03a2 C5D5D4C4 vpaddq %ymm4, %ymm5, %ymm0
264 03a6 C4E37D39 vextracti128 $0x1, %ymm0, %xmm1
264 C101
265 03ac C5F9D4D1 vpaddq %xmm1, %xmm0, %xmm2
266 03b0 C4E1F97E vmovq %xmm2, %rax
266 D0
267 03b5 E936FEFF jmp .L45
267 FF
268 03ba 660F1F44 .p2align 4,,10
268 0000
269 .L50:
270 03c0 48B84FEB movabsq $-4417276706812531889, %rax
270 D4273DAE
270 B2C2
271 03ca 480FAFC1 imulq %rcx, %rax
272 03ce 4989C7 movq %rax, %r15
273 03d1 49C1EF1F shrq $31, %r15
274 03d5 4C01F8 addq %r15, %rax
275 03d8 480FAFC7 imulq %rdi, %rax
276 03dc E92BFEFF jmp .L5
276 FF
277 .L13:
278 03e1 31D2 xorl %edx, %edx
279 03e3 E959FEFF jmp .L2
279 FF
280 .seh_endproc
281 .section .text.unlikely,"x"
282 .LCOLDE0:
283 .text
284 .LHOTE0:
285 .section .text.unlikely,"x"
286 .LCOLDB1:
287 .text
288 .LHOTB1:
289 03e8 0F1F8400 .p2align 4,,15
289 00000000
290 .globl farsh_keyed_n
292 .seh_proc farsh_keyed_n
293 farsh_keyed_n:
294 03f0 4157 pushq %r15
295 .seh_pushreg %r15
296 03f2 4156 pushq %r14
297 .seh_pushreg %r14
298 03f4 4155 pushq %r13
299 .seh_pushreg %r13
300 03f6 4154 pushq %r12
301 .seh_pushreg %r12
302 03f8 55 pushq %rbp
303 .seh_pushreg %rbp
304 03f9 57 pushq %rdi
305 .seh_pushreg %rdi
306 03fa 56 pushq %rsi
307 .seh_pushreg %rsi
308 03fb 53 pushq %rbx
309 .seh_pushreg %rbx
310 03fc 4883EC28 subq $40, %rsp
311 .seh_stackalloc 40
312 .seh_endprologue
313 0400 4C8BA424 movq 144(%rsp), %r12
313 90000000
314 0408 4585C9 testl %r9d, %r9d
315 040b 0F8E1C01 jle .L72
315 0000
316 0411 4183E901 subl $1, %r9d
317 0415 4D89C7 movq %r8, %r15
318 0418 4889D5 movq %rdx, %rbp
319 041b 498D5F10 leaq 16(%r15), %rbx
320 041f 4983C101 addq $1, %r9
321 0423 4889CF movq %rcx, %rdi
322 0426 49C1E104 salq $4, %r9
323 042a 4D8D51F0 leaq -16(%r9), %r10
324 042e 4F8D3408 leaq (%r8,%r9), %r14
325 0432 49C1EA04 shrq $4, %r10
326 0436 4D89E1 movq %r12, %r9
327 0439 4183E203 andl $3, %r10d
328 043d 4D89D5 movq %r10, %r13
329 0440 E8BBFBFF call farsh_keyed
329 FF
330 0445 488B9424 movq 152(%rsp), %rdx
330 98000000
331 044d 4C39F3 cmpq %r14, %rbx
332 0450 8902 movl %eax, (%rdx)
333 0452 488D7204 leaq 4(%rdx), %rsi
334 0456 0F84D100 je .L72
334 0000
335 045c 4D85ED testq %r13, %r13
336 045f 746C je .L53
337 0461 4983FD01 cmpq $1, %r13
338 0465 7445 je .L67
339 0467 4983FD02 cmpq $2, %r13
340 046b 7423 je .L68
341 046d 4989D8 movq %rbx, %r8
342 0470 4889F9 movq %rdi, %rcx
343 0473 4D89E1 movq %r12, %r9
344 0476 498D5F20 leaq 32(%r15), %rbx
345 047a 4889EA movq %rbp, %rdx
346 047d E87EFBFF call farsh_keyed
346 FF
347 0482 488B8C24 movq 152(%rsp), %rcx
347 98000000
348 048a 8906 movl %eax, (%rsi)
349 048c 488D7108 leaq 8(%rcx), %rsi
350 .L68:
351 0490 4989D8 movq %rbx, %r8
352 0493 4D89E1 movq %r12, %r9
353 0496 4889EA movq %rbp, %rdx
354 0499 4889F9 movq %rdi, %rcx
355 049c 4883C310 addq $16, %rbx
356 04a0 4883C604 addq $4, %rsi
357 04a4 E857FBFF call farsh_keyed
357 FF
358 04a9 8946FC movl %eax, -4(%rsi)
359 .L67:
360 04ac 4989D8 movq %rbx, %r8
361 04af 4D89E1 movq %r12, %r9
362 04b2 4889EA movq %rbp, %rdx
363 04b5 4889F9 movq %rdi, %rcx
364 04b8 4883C310 addq $16, %rbx
365 04bc 4883C604 addq $4, %rsi
366 04c0 E83BFBFF call farsh_keyed
366 FF
367 04c5 8946FC movl %eax, -4(%rsi)
368 04c8 4C39F3 cmpq %r14, %rbx
369 04cb 7460 je .L72
370 .L53:
371 04cd 4989D8 movq %rbx, %r8
372 04d0 4D89E1 movq %r12, %r9
373 04d3 4889EA movq %rbp, %rdx
374 04d6 4889F9 movq %rdi, %rcx
375 04d9 4883C610 addq $16, %rsi
376 04dd E81EFBFF call farsh_keyed
376 FF
377 04e2 4C8D4310 leaq 16(%rbx), %r8
378 04e6 4D89E1 movq %r12, %r9
379 04e9 4889EA movq %rbp, %rdx
380 04ec 8946F0 movl %eax, -16(%rsi)
381 04ef 4889F9 movq %rdi, %rcx
382 04f2 E809FBFF call farsh_keyed
382 FF
383 04f7 4C8D4320 leaq 32(%rbx), %r8
384 04fb 4D89E1 movq %r12, %r9
385 04fe 4889EA movq %rbp, %rdx
386 0501 8946F4 movl %eax, -12(%rsi)
387 0504 4889F9 movq %rdi, %rcx
388 0507 E8F4FAFF call farsh_keyed
388 FF
389 050c 4C8D4330 leaq 48(%rbx), %r8
390 0510 4D89E1 movq %r12, %r9
391 0513 4889EA movq %rbp, %rdx
392 0516 8946F8 movl %eax, -8(%rsi)
393 0519 4889F9 movq %rdi, %rcx
394 051c 4883C340 addq $64, %rbx
395 0520 E8DBFAFF call farsh_keyed
395 FF
396 0525 8946FC movl %eax, -4(%rsi)
397 0528 4C39F3 cmpq %r14, %rbx
398 052b 75A0 jne .L53
399 .L72:
400 052d 4883C428 addq $40, %rsp
401 0531 5B popq %rbx
402 0532 5E popq %rsi
403 0533 5F popq %rdi
404 0534 5D popq %rbp
405 0535 415C popq %r12
406 0537 415D popq %r13
407 0539 415E popq %r14
408 053b 415F popq %r15
409 053d C3 ret
410 .seh_endproc
411 .section .text.unlikely,"x"
412 .LCOLDE1:
413 .text
414 .LHOTE1:
415 .section .text.unlikely,"x"
416 .LCOLDB2:
417 .text
418 .LHOTB2:
419 053e 6690 .p2align 4,,15
420 .globl farsh_n
422 .seh_proc farsh_n
423 farsh_n:
424 0540 4157 pushq %r15
425 .seh_pushreg %r15
426 0542 4156 pushq %r14
427 .seh_pushreg %r14
428 0544 4155 pushq %r13
429 .seh_pushreg %r13
430 0546 4154 pushq %r12
431 .seh_pushreg %r12
432 0548 55 pushq %rbp
433 .seh_pushreg %rbp
434 0549 57 pushq %rdi
435 .seh_pushreg %rdi
436 054a 56 pushq %rsi
437 .seh_pushreg %rsi
438 054b 53 pushq %rbx
439 .seh_pushreg %rbx
440 054c 4883EC28 subq $40, %rsp
441 .seh_stackalloc 40
442 .seh_endprologue
443 0550 4C8BA424 movq 144(%rsp), %r12
443 90000000
444 0558 438D0408 leal (%r8,%r9), %eax
445 055c 4889CF movq %rcx, %rdi
446 055f 4889D5 movq %rdx, %rbp
447 0562 83F820 cmpl $32, %eax
448 0565 0F874801 ja .L96
448 0000
449 056b 41C1E004 sall $4, %r8d
450 056f 4585C9 testl %r9d, %r9d
451 0572 4D63C0 movslq %r8d, %r8
452 0575 0F8E2701 jle .L95
452 0000
453 057b 488D1500 leaq FARSH_KEYS(%rip), %rdx
453 000000
454 0582 4183E901 subl $1, %r9d
455 0586 4D8D3C10 leaq (%r8,%rdx), %r15
456 058a 49C1E104 salq $4, %r9
457 058e 4F8D6C08 leaq 16(%r8,%r9), %r13
457 10
458 0593 4D89E1 movq %r12, %r9
459 0596 4D89F8 movq %r15, %r8
460 0599 498D5F10 leaq 16(%r15), %rbx
461 059d 4901D5 addq %rdx, %r13
462 05a0 4889EA movq %rbp, %rdx
463 05a3 E858FAFF call farsh_keyed
463 FF
464 05a8 4D89EE movq %r13, %r14
465 05ab 488B8C24 movq 152(%rsp), %rcx
465 98000000
466 05b3 4D29FE subq %r15, %r14
467 05b6 4983EE10 subq $16, %r14
468 05ba 49C1EE04 shrq $4, %r14
469 05be 8901 movl %eax, (%rcx)
470 05c0 488D7104 leaq 4(%rcx), %rsi
471 05c4 4183E603 andl $3, %r14d
472 05c8 4C39EB cmpq %r13, %rbx
473 05cb 0F84D100 je .L95
473 0000
474 05d1 4D85F6 testq %r14, %r14
475 05d4 746C je .L76
476 05d6 4983FE01 cmpq $1, %r14
477 05da 7445 je .L90
478 05dc 4983FE02 cmpq $2, %r14
479 05e0 7423 je .L91
480 05e2 4D89E1 movq %r12, %r9
481 05e5 4989D8 movq %rbx, %r8
482 05e8 4889EA movq %rbp, %rdx
483 05eb 498D5F20 leaq 32(%r15), %rbx
484 05ef 4889F9 movq %rdi, %rcx
485 05f2 E809FAFF call farsh_keyed
485 FF
486 05f7 4C8B8C24 movq 152(%rsp), %r9
486 98000000
487 05ff 8906 movl %eax, (%rsi)
488 0601 498D7108 leaq 8(%r9), %rsi
489 .L91:
490 0605 4989D8 movq %rbx, %r8
491 0608 4D89E1 movq %r12, %r9
492 060b 4889EA movq %rbp, %rdx
493 060e 4889F9 movq %rdi, %rcx
494 0611 4883C310 addq $16, %rbx
495 0615 4883C604 addq $4, %rsi
496 0619 E8E2F9FF call farsh_keyed
496 FF
497 061e 8946FC movl %eax, -4(%rsi)
498 .L90:
499 0621 4989D8 movq %rbx, %r8
500 0624 4D89E1 movq %r12, %r9
501 0627 4889EA movq %rbp, %rdx
502 062a 4889F9 movq %rdi, %rcx
503 062d 4883C310 addq $16, %rbx
504 0631 4883C604 addq $4, %rsi
505 0635 E8C6F9FF call farsh_keyed
505 FF
506 063a 8946FC movl %eax, -4(%rsi)
507 063d 4C39EB cmpq %r13, %rbx
508 0640 7460 je .L95
509 .L76:
510 0642 4989D8 movq %rbx, %r8
511 0645 4D89E1 movq %r12, %r9
512 0648 4889EA movq %rbp, %rdx
513 064b 4889F9 movq %rdi, %rcx
514 064e 4883C610 addq $16, %rsi
515 0652 E8A9F9FF call farsh_keyed
515 FF
516 0657 4C8D4310 leaq 16(%rbx), %r8
517 065b 4D89E1 movq %r12, %r9
518 065e 4889EA movq %rbp, %rdx
519 0661 8946F0 movl %eax, -16(%rsi)
520 0664 4889F9 movq %rdi, %rcx
521 0667 E894F9FF call farsh_keyed
521 FF
522 066c 4C8D4320 leaq 32(%rbx), %r8
523 0670 4D89E1 movq %r12, %r9
524 0673 4889EA movq %rbp, %rdx
525 0676 8946F4 movl %eax, -12(%rsi)
526 0679 4889F9 movq %rdi, %rcx
527 067c E87FF9FF call farsh_keyed
527 FF
528 0681 4C8D4330 leaq 48(%rbx), %r8
529 0685 4D89E1 movq %r12, %r9
530 0688 4889EA movq %rbp, %rdx
531 068b 8946F8 movl %eax, -8(%rsi)
532 068e 4889F9 movq %rdi, %rcx
533 0691 4883C340 addq $64, %rbx
534 0695 E866F9FF call farsh_keyed
534 FF
535 069a 8946FC movl %eax, -4(%rsi)
536 069d 4C39EB cmpq %r13, %rbx
537 06a0 75A0 jne .L76
538 .L95:
539 06a2 4883C428 addq $40, %rsp
540 06a6 5B popq %rbx
541 06a7 5E popq %rsi
542 06a8 5F popq %rdi
543 06a9 5D popq %rbp
544 06aa 415C popq %r12
545 06ac 415D popq %r13
546 06ae 415E popq %r14
547 06b0 415F popq %r15
548 06b2 C3 ret
549 .L96:
550 06b3 E8000000 call abort
550 00
551 06b8 90 nop
552 .seh_endproc
553 .section .text.unlikely,"x"
554 .LCOLDE2:
555 .text
556 .LHOTE2:
557 .section .text.unlikely,"x"
558 .LCOLDB3:
559 .text
560 .LHOTB3:
561 06b9 0F1F8000 .p2align 4,,15
561 000000
562 .globl farsh
564 .seh_proc farsh
565 farsh:
566 .seh_endprologue
567 06c0 4D89C1 movq %r8, %r9
568 06c3 4C8D0500 leaq FARSH_KEYS(%rip), %r8
568 000000
569 06ca E931F9FF jmp farsh_keyed
569 FF
570 .seh_endproc
571 .section .text.unlikely,"x"
572 .LCOLDE3:
573 .text
574 .LHOTE3:
575 06cf 90 .section .rdata,"dr"
576 .align 64
577 FARSH_KEYS:
578 0000 396CFEB8 .long -1191285703
579 0004 BE4BA423 .long 597969854
580 0008 2C81017C .long 2080473388
581 000c 1CAD21F7 .long -148787940
582 0010 E96DD4DE .long -556503575
583 0014 DB979083 .long -2087675941
584 0018 A4A44072 .long 1916839076
585 001c 1F67B3B7 .long -1212979425
586 0020 4EE679CB .long -881203634
587 0024 78E5C0CC .long -859773576
588 0028 7DD05A82 .long -2107977603
589 002c 2172FFCC .long -855674335
590 0030 744608B8 .long -1207417228
591 0034 8E2443F7 .long -146594674
592 0038 E69035E0 .long -533360410
593 003c 4C263A81 .long -2126895540
594 0040 BB52283C .long 1009275579
595 0044 CB00C391 .long -1849491253
596 0048 8B65D088 .long -1999608437
597 004c A32E531B .long 458436259
598 0050 97486471 .long 1902397591
599 0054 4EF90DA2 .long -1576142514
600 0058 46EF1938 .long 941223750
601 005c D8ACDEA9 .long -1445024552
602 0060 3F76FAA8 .long -1459980737
603 0064 3F349CE3 .long -476302273
604 0068 C7BBDCF9 .long -102974521
605 006c 1D4F0BC7 .long -955560163
606 0070 4BE0518A .long -1974345653
607 0074 3159B4CD .long -843818703
608 0078 C97E9FC8 .long -929071415
609 007c 647378D9 .long -646417564
610 0080 52076A4F .long 1332348754
611 0084 9C079BA7 .long -1483012196
612 0088 9994C48F .long -1882942311
613 008c A9B7C98E .long -1899382871
614 0090 4922C933 .long 868819529
615 0094 4F40B64E .long 1320566863
616 0098 4EFB2AFB .long -81069234
617 009c 554281A4 .long -1535032747
618 00a0 981B0E2F .long 789453720
619 00a4 243BE9AC .long -1394001116
620 00a8 CD508818 .long 411586765
621 00ac A7745C6C .long 1817998503
622 00b0 0444FA66 .long 1727677444
623 00b4 83ACC5EA .long -356143997
624 00b8 C3EBD334 .long 886303683
625 00bc FFA081C5 .long -981360385
626 00c0 EB6313FA .long -99392533
627 00c4 51DD0D17 .long 386784593
628 00c8 49DAF0B7 .long -1208952247
629 00cc 265516D3 .long -753511130
630 00d0 9E68D429 .long 701786270
631 00d4 58BE162B .long 722910808
632 00d8 FCA1477D .long 2101846524
633 00dc D1B8F88F .long -1879525167
634 00e0 CE31D07A .long 2060464590
635 00e4 8F3ACB45 .long 1170946703
636 00e8 28041695 .long -1793719256
637 00ec CAFBD7AF .long -1344799798
638 00f0 7E404BBB .long -1152696194
639 00f4 A4745299 .long -1722649436
640 00f8 932D9AEB .long -342217325
641 00fc 0889E73B .long 1005029640
642 0100 6C5F47ED .long -314089620
643 0104 F2D89C91 .long -1851991822
644 0108 5A1E86D3 .long -746185126
645 010c 0C39316E .long 1848719628
646 0110 493A6AFE .long -26592695
647 0114 1409ADDC .long -592639724
648 0118 EB8B5006 .long 105941995
649 011c F39983A8 .long -1467770381
650 0120 2F1158B0 .long -1336405713
651 0124 79FAB0E8 .long -391054727
652 0128 06DAB429 .long 699718150
653 012c FB53C2ED .long -306031621
654 0130 AD6DE9C3 .long -1008112211
655 0134 832B376E .long 1849109379
656 0138 53B1784F .long 1333309779
657 013c 866EFAFF .long -364922
658 0140 ECEEBE21 .long 566161132
659 0144 02EACA01 .long 30075394
660 0148 0DE56712 .long 308798733
661 014c 2F09E611 .long 300288303
662 0150 98D219E8 .long -400960872
663 0154 DD802F83 .long -2094038819
664 0158 77244E0C .long 206447735
665 015c EB8678BC .long -1132951829
666 0160 37665001 .long 22046263
667 0164 6896A88B .long -1951885720
668 0168 A0E7116D .long 1829889952
669 016c 15FD12FC .long -65864427
670 0170 194CA586 .long -2035987431
671 0174 DDE33C59 .long 1497162717
672 0178 E53FB1D2 .long -760135707
673 017c 532B778E .long -1904792749
674 0180 CC604AAE .long -1370857268
675 0184 1B3B7A64 .long 1685732123
676 0188 E0867754 .long 1417119456
677 018c 8E37C43E .long 1053046670
678 0190 89CF7A8D .long -1921331319
679 0194 47F936CA .long -902366905
680 0198 EFD5890E .long 243914223
681 019c 3C6ADAAA .long -1428526532
682 01a0 09A1A46D .long 1839505673
683 01a4 1CE1C69A .long -1698242276
684 01a8 EF916668 .long 1751552495
685 01ac 2BBD57A3 .long -1554531029
686 01b0 9A1B6FD1 .long -781247590
687 01b4 0303C738 .long 952566531
688 01b8 B322467D .long 2101748403
689 01bc 8FFA6829 .long 694745743
690 01c0 B9BCA58C .long -1935295303
691 01c4 0510D6FC .long -53080059
692 01c8 965E8B22 .long 579559062
693 01cc 19CC9D2C .long 748538905
694 01d0 3C24CF57 .long 1473193020
695 01d4 C1F9533C .long 1012136385
696 01d8 2C95C70C .long 214406444
697 01dc F0E46D68 .long 1752032496
698 01e0 B547A793 .long -1817753675
699 01e4 10A5874E .long 1317512464
700 01e8 AE915E97 .long -1755410002
701 01ec 8EB9104C .long 1276164494
702 01f0 8C067F8A .long -1971386740
703 01f4 AB196B34 .long 879434155
704 01f8 25A63C35 .long 893167141
705 01fc E0500AF2 .long -234204960
706 0200 F62199CE .long -828825098
707 0204 14E066DF .long -546906092
708 0208 4BEF110A .long 168947531
709 020c DF4DC88B .long -1949807137
710 0210 225DD284 .long -2066588382
711 0214 6D9323C8 .long -937192595
712 0218 C31E7494 .long -1804329277
713 021c 608A2788 .long -2010674592
714 0220 319364B8 .long -1201368271
715 0224 107A707A .long 2054191632
716 0228 D6CA9272 .long 1922222806
717 022c C244C6A7 .long -1480178494
718 0230 FA6B15BD .long -1122669574
719 0234 78956C64 .long 1684837752
720 0238 D5DFF4B7 .long -1208688683
721 023c A777829F .long -1618839641
722 0240 4E921370 .long 1880330830
723 0244 C34C67AD .long -1385739069
724 0248 059DAE2C .long 749640965
725 024c 229A2A91 .long -1859479006
726 0250 FA537CF6 .long -159624198
727 0254 A9227E8D .long -1921113431
728 0258 2B37AE59 .long 1504589611
729 025c F3990185 .long -2063492621
730 0260 2C10A263 .long 1671565356
731 0264 6112FFD6 .long -687926687
732 0268 E18E7356 .long 1450413793
733 026c 5B1495AA .long -1433070501
734 0270 3228D1FD .long -36624334
735 0274 EB4D685B .long 1533562347
736 0278 94DE8407 .long 126148244
737 027c 0E3962AA .long -1436403442
738 0280 19CF7CBB .long -1149448423
739 0284 72D5EF0F .long 267375986
740 0288 CA415B56 .long 1448821194
741 028c 02D20622 .long 570872322
742 0290 7984602D .long 761300089
743 0294 3DCD0F4C .long 1276103997
744 0298 E33B6DD3 .long -747815965
745 029c 659A5A15 .long 358259301
746 02a0 32E7F910 .long 284813106
747 02a4 1E0F9BAC .long -1399124194
748 02a8 3BA0721F .long 527605819
749 02ac AE4094EA .long -359382866
750 02b0 4F4B675B .long 1533496143
751 02b4 D127A831 .long 833103825
752 02b8 4F95CAEC .long -322267825
753 02bc 1ED62C3D .long 1026348574
754 02c0 A43D8D76 .long 1988967844
755 02c4 C15A7493 .long -1821091135
756 02c8 CB585D1D .long 492656843
757 02cc B6F3864B .long 1267135414
758 02d0 3A92BA2A .long 716870202
759 02d4 4C81650E .long 241533260
760 02d8 D963E08A .long -1965005863
761 02dc B06969CD .long -848729680
762 02e0 85156436 .long 912528773
763 02e4 9DF52A74 .long 1948972445
764 02e8 16133A61 .long 1631195926
765 02ec 71A48E33 .long 864986225
766 02f0 F31A8647 .long 1199971059
767 02f4 C39D4730 .long 809999811
768 02f8 81A47012 .long 309372033
769 02fc 69107708 .long 142020713
770 0300 D2F0C4E3 .long -473632558
771 0304 4C872902 .long 36276044
772 0308 C13B8A5A .long 1519008705
773 030c 33970DE3 .long -485648589
774 0310 A2E55BD0 .long -799283806
775 0314 BA31AFE2 .long -491834950
776 0318 F9492022 .long 572541433
777 031c 6A3B929F .long -1617806486
778 0320 EC643F03 .long 54486252
779 0324 2BB628E5 .long -450316757
780 0328 BDEF0182 .long -2113802307
781 032c 77D80721 .long 554162295
782 0330 F12E31D8 .long -667865359
783 0334 999F67A5 .long -1519935591
784 0338 1BB53017 .long 389068059
785 033c D2162675 .long 1965430482
786 0340 09593005 .long 87054601
787 0344 0B44CA0D .long 231359499
788 0348 D9CD9320 .long 546557401
789 034c 50AB0964 .long 1678355280
790 0350 CC8E5CBA .long -1168339252
791 0354 EA08478D .long -1924724502
792 0358 17099F42 .long 1117718807
793 035c B0FA62B7 .long -1218250064
794 0360 75EA6151 .long 1365371509
795 0364 EBA0EB45 .long 1173070059
796 0368 414BF3B6 .long -1225569471
797 036c 23710452 .long 1376022819
798 0370 231518E4 .long -468183773
799 0374 0AE9748D .long -1921718006
800 0378 1C40FA54 .long 1425686556
801 037c C70CDADD .long -572912441
802 0380 2A18DF63 .long 1675565098
803 0384 F63E40C6 .long -968868106
804 0388 E8C68E34 .long 881772264
805 038c F557FFB9 .long -1174448139
806 0390 BDB852F6 .long -162350915
807 0394 F3B0860F .long 260485363
808 0398 8A083AFB .long -80082806
809 039c 3315C74D .long 1304892723
810 03a0 D217367B .long 2067142610
811 03a4 EB874EA3 .long -1555134485
812 03a8 DD9B2ABA .long -1171612707
813 03ac 061338E3 .long -482864378
814 03b0 BBD6BA14 .long 347788987
815 03b4 C2C76DC9 .long -915552318
816 03b8 B6543B33 .long 859526326
817 03bc FA7CE49B .long -1679524614
818 03c0 9992CF1D .long 500142745
819 03c4 995FEAE7 .long -404070503
820 03c8 CDEA8FB3 .long -1282413875
821 03cc F7E2CFC3 .long -1009786121
822 03d0 22E8875B .long 1535633442
823 03d4 56ABC539 .long 969255766
824 03d8 8FA1F418 .long 418685327
825 03dc 9C4D482D .long 759713180
826 03e0 19D56341 .long 1097061657
827 03e4 989E7679 .long 2037816984
828 03e8 F0678AF5 .long -175478800
829 03ec 020C5940 .long 1079577602
830 03f0 C0719631 .long 831943104
831 03f4 3A136B26 .long 644551482
832 03f8 87B281AF .long -1350454649
833 03fc 37F7316A .long 1781659447
834 0400 9701BCE3 .long -474218089
835 0404 13990755 .long 1426561299
836 0408 96C6729F .long -1619868010
837 040c C8003E36 .long 910033096
838 0410 47391553 .long 1393899847
839 0414 7F12FDEB .long -335736193
840 0418 1905F600 .long 16123161
841 041c 2AB6A646 .long 1185330730
842 0420 8033B893 .long -1816644736
843 0424 2493E23F .long 1071813412
844 0428 9170C6DF .long -540643183
845 042c 6D38620F .long 258095213
846 0430 795E37DC .long -600351111
847 0434 3E3FEA8F .long -1880473794
848 0438 D06384DF .long -544971824
849 043c 7BFA0237 .long 922942075
850 0440 5E435439 .long 961823582
851 0444 48A6CA87 .long -2016762296
852 0448 EE8B15A9 .long -1458205714
853 044c 250CF308 .long 150146085
854 0450 3629B866 .long 1723345206
855 0454 EB3FFCE7 .long -402898965
856 0458 50543C18 .long 406606928
857 045c 4543EFD7 .long -672185531
858 0460 63798C79 .long 2039249251
859 0464 57F52CC0 .long -1070795433
860 0468 D1538509 .long 159732689
861 046c AA1243FA .long -96267606
862 0470 83F89EE2 .long -492898173
863 0474 8D12AF7C .long 2091848333
864 0478 7DA0B374 .long 1957929085
865 047c 5BDFEFC8 .long -923803813
866 0480 8237B28D .long -1917700222
867 0484 4A9F402C .long 742432586
868 0488 DA69E4DA .long -622564902
869 048c 3F1B3E4D .long 1295915839
870 0490 589A7B2E .long 779852376
871 0494 53373EC8 .long -935446701
872 0498 A696FDCE .long -822241626
873 049c 68B0DD44 .long 1155379304
874 04a0 41D1AE5F .long 1605292353
875 04a4 F1D0E7DE .long -555233039
876 04a8 B4DB23C2 .long -1037837388
877 04ac 04E1FB7B .long 2080104708
878 04b0 1D6E4D11 .long 290287133
879 04b4 D59C0352 .long 1375968469
880 04b8 9C0A7C30 .long 813435548
881 04bc 129C28A6 .long -1507288046
882 04c0 3E8BEE20 .long 552504126
883 04c4 0B4B7203 .long 57821963
884 04c8 4AAE68BA .long -1167544758