cubefs

Форк
0
/
galois_gen_switch_amd64.go 
1370 строк · 29.3 Кб
1
// Code generated by command: go generate gen.go. DO NOT EDIT.
2

3
//go:build !appengine && !noasm && gc && !nogen
4
// +build !appengine,!noasm,gc,!nogen
5

6
package reedsolomon
7

8
import (
9
	"fmt"
10
)
11

12
const (
13
	avx2CodeGen    = true
14
	maxAvx2Inputs  = 10
15
	maxAvx2Outputs = 10
16
	minAvx2Size    = 64
17
	avxSizeMask    = maxInt - (minAvx2Size - 1)
18
)
19

20
func galMulSlicesAvx2(matrix []byte, in, out [][]byte, start, stop int) int {
21
	n := (stop - start) & avxSizeMask
22

23
	switch len(in) {
24
	case 1:
25
		switch len(out) {
26
		case 1:
27
			mulAvxTwo_1x1_64(matrix, in, out, start, n)
28
			return n
29
		case 2:
30
			mulAvxTwo_1x2_64(matrix, in, out, start, n)
31
			return n
32
		case 3:
33
			mulAvxTwo_1x3_64(matrix, in, out, start, n)
34
			return n
35
		case 4:
36
			mulAvxTwo_1x4(matrix, in, out, start, n)
37
			return n
38
		case 5:
39
			mulAvxTwo_1x5(matrix, in, out, start, n)
40
			return n
41
		case 6:
42
			mulAvxTwo_1x6(matrix, in, out, start, n)
43
			return n
44
		case 7:
45
			mulAvxTwo_1x7(matrix, in, out, start, n)
46
			return n
47
		case 8:
48
			mulAvxTwo_1x8(matrix, in, out, start, n)
49
			return n
50
		case 9:
51
			mulAvxTwo_1x9(matrix, in, out, start, n)
52
			return n
53
		case 10:
54
			mulAvxTwo_1x10(matrix, in, out, start, n)
55
			return n
56
		}
57
	case 2:
58
		switch len(out) {
59
		case 1:
60
			mulAvxTwo_2x1_64(matrix, in, out, start, n)
61
			return n
62
		case 2:
63
			mulAvxTwo_2x2_64(matrix, in, out, start, n)
64
			return n
65
		case 3:
66
			mulAvxTwo_2x3_64(matrix, in, out, start, n)
67
			return n
68
		case 4:
69
			mulAvxTwo_2x4(matrix, in, out, start, n)
70
			return n
71
		case 5:
72
			mulAvxTwo_2x5(matrix, in, out, start, n)
73
			return n
74
		case 6:
75
			mulAvxTwo_2x6(matrix, in, out, start, n)
76
			return n
77
		case 7:
78
			mulAvxTwo_2x7(matrix, in, out, start, n)
79
			return n
80
		case 8:
81
			mulAvxTwo_2x8(matrix, in, out, start, n)
82
			return n
83
		case 9:
84
			mulAvxTwo_2x9(matrix, in, out, start, n)
85
			return n
86
		case 10:
87
			mulAvxTwo_2x10(matrix, in, out, start, n)
88
			return n
89
		}
90
	case 3:
91
		switch len(out) {
92
		case 1:
93
			mulAvxTwo_3x1_64(matrix, in, out, start, n)
94
			return n
95
		case 2:
96
			mulAvxTwo_3x2_64(matrix, in, out, start, n)
97
			return n
98
		case 3:
99
			mulAvxTwo_3x3_64(matrix, in, out, start, n)
100
			return n
101
		case 4:
102
			mulAvxTwo_3x4(matrix, in, out, start, n)
103
			return n
104
		case 5:
105
			mulAvxTwo_3x5(matrix, in, out, start, n)
106
			return n
107
		case 6:
108
			mulAvxTwo_3x6(matrix, in, out, start, n)
109
			return n
110
		case 7:
111
			mulAvxTwo_3x7(matrix, in, out, start, n)
112
			return n
113
		case 8:
114
			mulAvxTwo_3x8(matrix, in, out, start, n)
115
			return n
116
		case 9:
117
			mulAvxTwo_3x9(matrix, in, out, start, n)
118
			return n
119
		case 10:
120
			mulAvxTwo_3x10(matrix, in, out, start, n)
121
			return n
122
		}
123
	case 4:
124
		switch len(out) {
125
		case 1:
126
			mulAvxTwo_4x1_64(matrix, in, out, start, n)
127
			return n
128
		case 2:
129
			mulAvxTwo_4x2_64(matrix, in, out, start, n)
130
			return n
131
		case 3:
132
			mulAvxTwo_4x3_64(matrix, in, out, start, n)
133
			return n
134
		case 4:
135
			mulAvxTwo_4x4(matrix, in, out, start, n)
136
			return n
137
		case 5:
138
			mulAvxTwo_4x5(matrix, in, out, start, n)
139
			return n
140
		case 6:
141
			mulAvxTwo_4x6(matrix, in, out, start, n)
142
			return n
143
		case 7:
144
			mulAvxTwo_4x7(matrix, in, out, start, n)
145
			return n
146
		case 8:
147
			mulAvxTwo_4x8(matrix, in, out, start, n)
148
			return n
149
		case 9:
150
			mulAvxTwo_4x9(matrix, in, out, start, n)
151
			return n
152
		case 10:
153
			mulAvxTwo_4x10(matrix, in, out, start, n)
154
			return n
155
		}
156
	case 5:
157
		switch len(out) {
158
		case 1:
159
			mulAvxTwo_5x1_64(matrix, in, out, start, n)
160
			return n
161
		case 2:
162
			mulAvxTwo_5x2_64(matrix, in, out, start, n)
163
			return n
164
		case 3:
165
			mulAvxTwo_5x3_64(matrix, in, out, start, n)
166
			return n
167
		case 4:
168
			mulAvxTwo_5x4(matrix, in, out, start, n)
169
			return n
170
		case 5:
171
			mulAvxTwo_5x5(matrix, in, out, start, n)
172
			return n
173
		case 6:
174
			mulAvxTwo_5x6(matrix, in, out, start, n)
175
			return n
176
		case 7:
177
			mulAvxTwo_5x7(matrix, in, out, start, n)
178
			return n
179
		case 8:
180
			mulAvxTwo_5x8(matrix, in, out, start, n)
181
			return n
182
		case 9:
183
			mulAvxTwo_5x9(matrix, in, out, start, n)
184
			return n
185
		case 10:
186
			mulAvxTwo_5x10(matrix, in, out, start, n)
187
			return n
188
		}
189
	case 6:
190
		switch len(out) {
191
		case 1:
192
			mulAvxTwo_6x1_64(matrix, in, out, start, n)
193
			return n
194
		case 2:
195
			mulAvxTwo_6x2_64(matrix, in, out, start, n)
196
			return n
197
		case 3:
198
			mulAvxTwo_6x3_64(matrix, in, out, start, n)
199
			return n
200
		case 4:
201
			mulAvxTwo_6x4(matrix, in, out, start, n)
202
			return n
203
		case 5:
204
			mulAvxTwo_6x5(matrix, in, out, start, n)
205
			return n
206
		case 6:
207
			mulAvxTwo_6x6(matrix, in, out, start, n)
208
			return n
209
		case 7:
210
			mulAvxTwo_6x7(matrix, in, out, start, n)
211
			return n
212
		case 8:
213
			mulAvxTwo_6x8(matrix, in, out, start, n)
214
			return n
215
		case 9:
216
			mulAvxTwo_6x9(matrix, in, out, start, n)
217
			return n
218
		case 10:
219
			mulAvxTwo_6x10(matrix, in, out, start, n)
220
			return n
221
		}
222
	case 7:
223
		switch len(out) {
224
		case 1:
225
			mulAvxTwo_7x1_64(matrix, in, out, start, n)
226
			return n
227
		case 2:
228
			mulAvxTwo_7x2_64(matrix, in, out, start, n)
229
			return n
230
		case 3:
231
			mulAvxTwo_7x3_64(matrix, in, out, start, n)
232
			return n
233
		case 4:
234
			mulAvxTwo_7x4(matrix, in, out, start, n)
235
			return n
236
		case 5:
237
			mulAvxTwo_7x5(matrix, in, out, start, n)
238
			return n
239
		case 6:
240
			mulAvxTwo_7x6(matrix, in, out, start, n)
241
			return n
242
		case 7:
243
			mulAvxTwo_7x7(matrix, in, out, start, n)
244
			return n
245
		case 8:
246
			mulAvxTwo_7x8(matrix, in, out, start, n)
247
			return n
248
		case 9:
249
			mulAvxTwo_7x9(matrix, in, out, start, n)
250
			return n
251
		case 10:
252
			mulAvxTwo_7x10(matrix, in, out, start, n)
253
			return n
254
		}
255
	case 8:
256
		switch len(out) {
257
		case 1:
258
			mulAvxTwo_8x1_64(matrix, in, out, start, n)
259
			return n
260
		case 2:
261
			mulAvxTwo_8x2_64(matrix, in, out, start, n)
262
			return n
263
		case 3:
264
			mulAvxTwo_8x3_64(matrix, in, out, start, n)
265
			return n
266
		case 4:
267
			mulAvxTwo_8x4(matrix, in, out, start, n)
268
			return n
269
		case 5:
270
			mulAvxTwo_8x5(matrix, in, out, start, n)
271
			return n
272
		case 6:
273
			mulAvxTwo_8x6(matrix, in, out, start, n)
274
			return n
275
		case 7:
276
			mulAvxTwo_8x7(matrix, in, out, start, n)
277
			return n
278
		case 8:
279
			mulAvxTwo_8x8(matrix, in, out, start, n)
280
			return n
281
		case 9:
282
			mulAvxTwo_8x9(matrix, in, out, start, n)
283
			return n
284
		case 10:
285
			mulAvxTwo_8x10(matrix, in, out, start, n)
286
			return n
287
		}
288
	case 9:
289
		switch len(out) {
290
		case 1:
291
			mulAvxTwo_9x1_64(matrix, in, out, start, n)
292
			return n
293
		case 2:
294
			mulAvxTwo_9x2_64(matrix, in, out, start, n)
295
			return n
296
		case 3:
297
			mulAvxTwo_9x3_64(matrix, in, out, start, n)
298
			return n
299
		case 4:
300
			mulAvxTwo_9x4(matrix, in, out, start, n)
301
			return n
302
		case 5:
303
			mulAvxTwo_9x5(matrix, in, out, start, n)
304
			return n
305
		case 6:
306
			mulAvxTwo_9x6(matrix, in, out, start, n)
307
			return n
308
		case 7:
309
			mulAvxTwo_9x7(matrix, in, out, start, n)
310
			return n
311
		case 8:
312
			mulAvxTwo_9x8(matrix, in, out, start, n)
313
			return n
314
		case 9:
315
			mulAvxTwo_9x9(matrix, in, out, start, n)
316
			return n
317
		case 10:
318
			mulAvxTwo_9x10(matrix, in, out, start, n)
319
			return n
320
		}
321
	case 10:
322
		switch len(out) {
323
		case 1:
324
			mulAvxTwo_10x1_64(matrix, in, out, start, n)
325
			return n
326
		case 2:
327
			mulAvxTwo_10x2_64(matrix, in, out, start, n)
328
			return n
329
		case 3:
330
			mulAvxTwo_10x3_64(matrix, in, out, start, n)
331
			return n
332
		case 4:
333
			mulAvxTwo_10x4(matrix, in, out, start, n)
334
			return n
335
		case 5:
336
			mulAvxTwo_10x5(matrix, in, out, start, n)
337
			return n
338
		case 6:
339
			mulAvxTwo_10x6(matrix, in, out, start, n)
340
			return n
341
		case 7:
342
			mulAvxTwo_10x7(matrix, in, out, start, n)
343
			return n
344
		case 8:
345
			mulAvxTwo_10x8(matrix, in, out, start, n)
346
			return n
347
		case 9:
348
			mulAvxTwo_10x9(matrix, in, out, start, n)
349
			return n
350
		case 10:
351
			mulAvxTwo_10x10(matrix, in, out, start, n)
352
			return n
353
		}
354
	}
355
	panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out)))
356
}
357

358
func galMulSlicesAvx2Xor(matrix []byte, in, out [][]byte, start, stop int) int {
359
	n := (stop - start) & avxSizeMask
360

361
	switch len(in) {
362
	case 1:
363
		switch len(out) {
364
		case 1:
365
			mulAvxTwo_1x1_64Xor(matrix, in, out, start, n)
366
			return n
367
		case 2:
368
			mulAvxTwo_1x2_64Xor(matrix, in, out, start, n)
369
			return n
370
		case 3:
371
			mulAvxTwo_1x3_64Xor(matrix, in, out, start, n)
372
			return n
373
		case 4:
374
			mulAvxTwo_1x4Xor(matrix, in, out, start, n)
375
			return n
376
		case 5:
377
			mulAvxTwo_1x5Xor(matrix, in, out, start, n)
378
			return n
379
		case 6:
380
			mulAvxTwo_1x6Xor(matrix, in, out, start, n)
381
			return n
382
		case 7:
383
			mulAvxTwo_1x7Xor(matrix, in, out, start, n)
384
			return n
385
		case 8:
386
			mulAvxTwo_1x8Xor(matrix, in, out, start, n)
387
			return n
388
		case 9:
389
			mulAvxTwo_1x9Xor(matrix, in, out, start, n)
390
			return n
391
		case 10:
392
			mulAvxTwo_1x10Xor(matrix, in, out, start, n)
393
			return n
394
		}
395
	case 2:
396
		switch len(out) {
397
		case 1:
398
			mulAvxTwo_2x1_64Xor(matrix, in, out, start, n)
399
			return n
400
		case 2:
401
			mulAvxTwo_2x2_64Xor(matrix, in, out, start, n)
402
			return n
403
		case 3:
404
			mulAvxTwo_2x3_64Xor(matrix, in, out, start, n)
405
			return n
406
		case 4:
407
			mulAvxTwo_2x4Xor(matrix, in, out, start, n)
408
			return n
409
		case 5:
410
			mulAvxTwo_2x5Xor(matrix, in, out, start, n)
411
			return n
412
		case 6:
413
			mulAvxTwo_2x6Xor(matrix, in, out, start, n)
414
			return n
415
		case 7:
416
			mulAvxTwo_2x7Xor(matrix, in, out, start, n)
417
			return n
418
		case 8:
419
			mulAvxTwo_2x8Xor(matrix, in, out, start, n)
420
			return n
421
		case 9:
422
			mulAvxTwo_2x9Xor(matrix, in, out, start, n)
423
			return n
424
		case 10:
425
			mulAvxTwo_2x10Xor(matrix, in, out, start, n)
426
			return n
427
		}
428
	case 3:
429
		switch len(out) {
430
		case 1:
431
			mulAvxTwo_3x1_64Xor(matrix, in, out, start, n)
432
			return n
433
		case 2:
434
			mulAvxTwo_3x2_64Xor(matrix, in, out, start, n)
435
			return n
436
		case 3:
437
			mulAvxTwo_3x3_64Xor(matrix, in, out, start, n)
438
			return n
439
		case 4:
440
			mulAvxTwo_3x4Xor(matrix, in, out, start, n)
441
			return n
442
		case 5:
443
			mulAvxTwo_3x5Xor(matrix, in, out, start, n)
444
			return n
445
		case 6:
446
			mulAvxTwo_3x6Xor(matrix, in, out, start, n)
447
			return n
448
		case 7:
449
			mulAvxTwo_3x7Xor(matrix, in, out, start, n)
450
			return n
451
		case 8:
452
			mulAvxTwo_3x8Xor(matrix, in, out, start, n)
453
			return n
454
		case 9:
455
			mulAvxTwo_3x9Xor(matrix, in, out, start, n)
456
			return n
457
		case 10:
458
			mulAvxTwo_3x10Xor(matrix, in, out, start, n)
459
			return n
460
		}
461
	case 4:
462
		switch len(out) {
463
		case 1:
464
			mulAvxTwo_4x1_64Xor(matrix, in, out, start, n)
465
			return n
466
		case 2:
467
			mulAvxTwo_4x2_64Xor(matrix, in, out, start, n)
468
			return n
469
		case 3:
470
			mulAvxTwo_4x3_64Xor(matrix, in, out, start, n)
471
			return n
472
		case 4:
473
			mulAvxTwo_4x4Xor(matrix, in, out, start, n)
474
			return n
475
		case 5:
476
			mulAvxTwo_4x5Xor(matrix, in, out, start, n)
477
			return n
478
		case 6:
479
			mulAvxTwo_4x6Xor(matrix, in, out, start, n)
480
			return n
481
		case 7:
482
			mulAvxTwo_4x7Xor(matrix, in, out, start, n)
483
			return n
484
		case 8:
485
			mulAvxTwo_4x8Xor(matrix, in, out, start, n)
486
			return n
487
		case 9:
488
			mulAvxTwo_4x9Xor(matrix, in, out, start, n)
489
			return n
490
		case 10:
491
			mulAvxTwo_4x10Xor(matrix, in, out, start, n)
492
			return n
493
		}
494
	case 5:
495
		switch len(out) {
496
		case 1:
497
			mulAvxTwo_5x1_64Xor(matrix, in, out, start, n)
498
			return n
499
		case 2:
500
			mulAvxTwo_5x2_64Xor(matrix, in, out, start, n)
501
			return n
502
		case 3:
503
			mulAvxTwo_5x3_64Xor(matrix, in, out, start, n)
504
			return n
505
		case 4:
506
			mulAvxTwo_5x4Xor(matrix, in, out, start, n)
507
			return n
508
		case 5:
509
			mulAvxTwo_5x5Xor(matrix, in, out, start, n)
510
			return n
511
		case 6:
512
			mulAvxTwo_5x6Xor(matrix, in, out, start, n)
513
			return n
514
		case 7:
515
			mulAvxTwo_5x7Xor(matrix, in, out, start, n)
516
			return n
517
		case 8:
518
			mulAvxTwo_5x8Xor(matrix, in, out, start, n)
519
			return n
520
		case 9:
521
			mulAvxTwo_5x9Xor(matrix, in, out, start, n)
522
			return n
523
		case 10:
524
			mulAvxTwo_5x10Xor(matrix, in, out, start, n)
525
			return n
526
		}
527
	case 6:
528
		switch len(out) {
529
		case 1:
530
			mulAvxTwo_6x1_64Xor(matrix, in, out, start, n)
531
			return n
532
		case 2:
533
			mulAvxTwo_6x2_64Xor(matrix, in, out, start, n)
534
			return n
535
		case 3:
536
			mulAvxTwo_6x3_64Xor(matrix, in, out, start, n)
537
			return n
538
		case 4:
539
			mulAvxTwo_6x4Xor(matrix, in, out, start, n)
540
			return n
541
		case 5:
542
			mulAvxTwo_6x5Xor(matrix, in, out, start, n)
543
			return n
544
		case 6:
545
			mulAvxTwo_6x6Xor(matrix, in, out, start, n)
546
			return n
547
		case 7:
548
			mulAvxTwo_6x7Xor(matrix, in, out, start, n)
549
			return n
550
		case 8:
551
			mulAvxTwo_6x8Xor(matrix, in, out, start, n)
552
			return n
553
		case 9:
554
			mulAvxTwo_6x9Xor(matrix, in, out, start, n)
555
			return n
556
		case 10:
557
			mulAvxTwo_6x10Xor(matrix, in, out, start, n)
558
			return n
559
		}
560
	case 7:
561
		switch len(out) {
562
		case 1:
563
			mulAvxTwo_7x1_64Xor(matrix, in, out, start, n)
564
			return n
565
		case 2:
566
			mulAvxTwo_7x2_64Xor(matrix, in, out, start, n)
567
			return n
568
		case 3:
569
			mulAvxTwo_7x3_64Xor(matrix, in, out, start, n)
570
			return n
571
		case 4:
572
			mulAvxTwo_7x4Xor(matrix, in, out, start, n)
573
			return n
574
		case 5:
575
			mulAvxTwo_7x5Xor(matrix, in, out, start, n)
576
			return n
577
		case 6:
578
			mulAvxTwo_7x6Xor(matrix, in, out, start, n)
579
			return n
580
		case 7:
581
			mulAvxTwo_7x7Xor(matrix, in, out, start, n)
582
			return n
583
		case 8:
584
			mulAvxTwo_7x8Xor(matrix, in, out, start, n)
585
			return n
586
		case 9:
587
			mulAvxTwo_7x9Xor(matrix, in, out, start, n)
588
			return n
589
		case 10:
590
			mulAvxTwo_7x10Xor(matrix, in, out, start, n)
591
			return n
592
		}
593
	case 8:
594
		switch len(out) {
595
		case 1:
596
			mulAvxTwo_8x1_64Xor(matrix, in, out, start, n)
597
			return n
598
		case 2:
599
			mulAvxTwo_8x2_64Xor(matrix, in, out, start, n)
600
			return n
601
		case 3:
602
			mulAvxTwo_8x3_64Xor(matrix, in, out, start, n)
603
			return n
604
		case 4:
605
			mulAvxTwo_8x4Xor(matrix, in, out, start, n)
606
			return n
607
		case 5:
608
			mulAvxTwo_8x5Xor(matrix, in, out, start, n)
609
			return n
610
		case 6:
611
			mulAvxTwo_8x6Xor(matrix, in, out, start, n)
612
			return n
613
		case 7:
614
			mulAvxTwo_8x7Xor(matrix, in, out, start, n)
615
			return n
616
		case 8:
617
			mulAvxTwo_8x8Xor(matrix, in, out, start, n)
618
			return n
619
		case 9:
620
			mulAvxTwo_8x9Xor(matrix, in, out, start, n)
621
			return n
622
		case 10:
623
			mulAvxTwo_8x10Xor(matrix, in, out, start, n)
624
			return n
625
		}
626
	case 9:
627
		switch len(out) {
628
		case 1:
629
			mulAvxTwo_9x1_64Xor(matrix, in, out, start, n)
630
			return n
631
		case 2:
632
			mulAvxTwo_9x2_64Xor(matrix, in, out, start, n)
633
			return n
634
		case 3:
635
			mulAvxTwo_9x3_64Xor(matrix, in, out, start, n)
636
			return n
637
		case 4:
638
			mulAvxTwo_9x4Xor(matrix, in, out, start, n)
639
			return n
640
		case 5:
641
			mulAvxTwo_9x5Xor(matrix, in, out, start, n)
642
			return n
643
		case 6:
644
			mulAvxTwo_9x6Xor(matrix, in, out, start, n)
645
			return n
646
		case 7:
647
			mulAvxTwo_9x7Xor(matrix, in, out, start, n)
648
			return n
649
		case 8:
650
			mulAvxTwo_9x8Xor(matrix, in, out, start, n)
651
			return n
652
		case 9:
653
			mulAvxTwo_9x9Xor(matrix, in, out, start, n)
654
			return n
655
		case 10:
656
			mulAvxTwo_9x10Xor(matrix, in, out, start, n)
657
			return n
658
		}
659
	case 10:
660
		switch len(out) {
661
		case 1:
662
			mulAvxTwo_10x1_64Xor(matrix, in, out, start, n)
663
			return n
664
		case 2:
665
			mulAvxTwo_10x2_64Xor(matrix, in, out, start, n)
666
			return n
667
		case 3:
668
			mulAvxTwo_10x3_64Xor(matrix, in, out, start, n)
669
			return n
670
		case 4:
671
			mulAvxTwo_10x4Xor(matrix, in, out, start, n)
672
			return n
673
		case 5:
674
			mulAvxTwo_10x5Xor(matrix, in, out, start, n)
675
			return n
676
		case 6:
677
			mulAvxTwo_10x6Xor(matrix, in, out, start, n)
678
			return n
679
		case 7:
680
			mulAvxTwo_10x7Xor(matrix, in, out, start, n)
681
			return n
682
		case 8:
683
			mulAvxTwo_10x8Xor(matrix, in, out, start, n)
684
			return n
685
		case 9:
686
			mulAvxTwo_10x9Xor(matrix, in, out, start, n)
687
			return n
688
		case 10:
689
			mulAvxTwo_10x10Xor(matrix, in, out, start, n)
690
			return n
691
		}
692
	}
693
	panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out)))
694
}
695

696
func galMulSlicesGFNI(matrix []uint64, in, out [][]byte, start, stop int) int {
697
	n := (stop - start) & avxSizeMask
698

699
	switch len(in) {
700
	case 1:
701
		switch len(out) {
702
		case 1:
703
			mulGFNI_1x1_64(matrix, in, out, start, n)
704
			return n
705
		case 2:
706
			mulGFNI_1x2_64(matrix, in, out, start, n)
707
			return n
708
		case 3:
709
			mulGFNI_1x3_64(matrix, in, out, start, n)
710
			return n
711
		case 4:
712
			mulGFNI_1x4_64(matrix, in, out, start, n)
713
			return n
714
		case 5:
715
			mulGFNI_1x5_64(matrix, in, out, start, n)
716
			return n
717
		case 6:
718
			mulGFNI_1x6_64(matrix, in, out, start, n)
719
			return n
720
		case 7:
721
			mulGFNI_1x7_64(matrix, in, out, start, n)
722
			return n
723
		case 8:
724
			mulGFNI_1x8_64(matrix, in, out, start, n)
725
			return n
726
		case 9:
727
			mulGFNI_1x9_64(matrix, in, out, start, n)
728
			return n
729
		case 10:
730
			mulGFNI_1x10_64(matrix, in, out, start, n)
731
			return n
732
		}
733
	case 2:
734
		switch len(out) {
735
		case 1:
736
			mulGFNI_2x1_64(matrix, in, out, start, n)
737
			return n
738
		case 2:
739
			mulGFNI_2x2_64(matrix, in, out, start, n)
740
			return n
741
		case 3:
742
			mulGFNI_2x3_64(matrix, in, out, start, n)
743
			return n
744
		case 4:
745
			mulGFNI_2x4_64(matrix, in, out, start, n)
746
			return n
747
		case 5:
748
			mulGFNI_2x5_64(matrix, in, out, start, n)
749
			return n
750
		case 6:
751
			mulGFNI_2x6_64(matrix, in, out, start, n)
752
			return n
753
		case 7:
754
			mulGFNI_2x7_64(matrix, in, out, start, n)
755
			return n
756
		case 8:
757
			mulGFNI_2x8_64(matrix, in, out, start, n)
758
			return n
759
		case 9:
760
			mulGFNI_2x9_64(matrix, in, out, start, n)
761
			return n
762
		case 10:
763
			mulGFNI_2x10_64(matrix, in, out, start, n)
764
			return n
765
		}
766
	case 3:
767
		switch len(out) {
768
		case 1:
769
			mulGFNI_3x1_64(matrix, in, out, start, n)
770
			return n
771
		case 2:
772
			mulGFNI_3x2_64(matrix, in, out, start, n)
773
			return n
774
		case 3:
775
			mulGFNI_3x3_64(matrix, in, out, start, n)
776
			return n
777
		case 4:
778
			mulGFNI_3x4_64(matrix, in, out, start, n)
779
			return n
780
		case 5:
781
			mulGFNI_3x5_64(matrix, in, out, start, n)
782
			return n
783
		case 6:
784
			mulGFNI_3x6_64(matrix, in, out, start, n)
785
			return n
786
		case 7:
787
			mulGFNI_3x7_64(matrix, in, out, start, n)
788
			return n
789
		case 8:
790
			mulGFNI_3x8_64(matrix, in, out, start, n)
791
			return n
792
		case 9:
793
			mulGFNI_3x9_64(matrix, in, out, start, n)
794
			return n
795
		case 10:
796
			mulGFNI_3x10_64(matrix, in, out, start, n)
797
			return n
798
		}
799
	case 4:
800
		switch len(out) {
801
		case 1:
802
			mulGFNI_4x1_64(matrix, in, out, start, n)
803
			return n
804
		case 2:
805
			mulGFNI_4x2_64(matrix, in, out, start, n)
806
			return n
807
		case 3:
808
			mulGFNI_4x3_64(matrix, in, out, start, n)
809
			return n
810
		case 4:
811
			mulGFNI_4x4_64(matrix, in, out, start, n)
812
			return n
813
		case 5:
814
			mulGFNI_4x5_64(matrix, in, out, start, n)
815
			return n
816
		case 6:
817
			mulGFNI_4x6_64(matrix, in, out, start, n)
818
			return n
819
		case 7:
820
			mulGFNI_4x7_64(matrix, in, out, start, n)
821
			return n
822
		case 8:
823
			mulGFNI_4x8_64(matrix, in, out, start, n)
824
			return n
825
		case 9:
826
			mulGFNI_4x9_64(matrix, in, out, start, n)
827
			return n
828
		case 10:
829
			mulGFNI_4x10_64(matrix, in, out, start, n)
830
			return n
831
		}
832
	case 5:
833
		switch len(out) {
834
		case 1:
835
			mulGFNI_5x1_64(matrix, in, out, start, n)
836
			return n
837
		case 2:
838
			mulGFNI_5x2_64(matrix, in, out, start, n)
839
			return n
840
		case 3:
841
			mulGFNI_5x3_64(matrix, in, out, start, n)
842
			return n
843
		case 4:
844
			mulGFNI_5x4_64(matrix, in, out, start, n)
845
			return n
846
		case 5:
847
			mulGFNI_5x5_64(matrix, in, out, start, n)
848
			return n
849
		case 6:
850
			mulGFNI_5x6_64(matrix, in, out, start, n)
851
			return n
852
		case 7:
853
			mulGFNI_5x7_64(matrix, in, out, start, n)
854
			return n
855
		case 8:
856
			mulGFNI_5x8_64(matrix, in, out, start, n)
857
			return n
858
		case 9:
859
			mulGFNI_5x9_64(matrix, in, out, start, n)
860
			return n
861
		case 10:
862
			mulGFNI_5x10_64(matrix, in, out, start, n)
863
			return n
864
		}
865
	case 6:
866
		switch len(out) {
867
		case 1:
868
			mulGFNI_6x1_64(matrix, in, out, start, n)
869
			return n
870
		case 2:
871
			mulGFNI_6x2_64(matrix, in, out, start, n)
872
			return n
873
		case 3:
874
			mulGFNI_6x3_64(matrix, in, out, start, n)
875
			return n
876
		case 4:
877
			mulGFNI_6x4_64(matrix, in, out, start, n)
878
			return n
879
		case 5:
880
			mulGFNI_6x5_64(matrix, in, out, start, n)
881
			return n
882
		case 6:
883
			mulGFNI_6x6_64(matrix, in, out, start, n)
884
			return n
885
		case 7:
886
			mulGFNI_6x7_64(matrix, in, out, start, n)
887
			return n
888
		case 8:
889
			mulGFNI_6x8_64(matrix, in, out, start, n)
890
			return n
891
		case 9:
892
			mulGFNI_6x9_64(matrix, in, out, start, n)
893
			return n
894
		case 10:
895
			mulGFNI_6x10_64(matrix, in, out, start, n)
896
			return n
897
		}
898
	case 7:
899
		switch len(out) {
900
		case 1:
901
			mulGFNI_7x1_64(matrix, in, out, start, n)
902
			return n
903
		case 2:
904
			mulGFNI_7x2_64(matrix, in, out, start, n)
905
			return n
906
		case 3:
907
			mulGFNI_7x3_64(matrix, in, out, start, n)
908
			return n
909
		case 4:
910
			mulGFNI_7x4_64(matrix, in, out, start, n)
911
			return n
912
		case 5:
913
			mulGFNI_7x5_64(matrix, in, out, start, n)
914
			return n
915
		case 6:
916
			mulGFNI_7x6_64(matrix, in, out, start, n)
917
			return n
918
		case 7:
919
			mulGFNI_7x7_64(matrix, in, out, start, n)
920
			return n
921
		case 8:
922
			mulGFNI_7x8_64(matrix, in, out, start, n)
923
			return n
924
		case 9:
925
			mulGFNI_7x9_64(matrix, in, out, start, n)
926
			return n
927
		case 10:
928
			mulGFNI_7x10_64(matrix, in, out, start, n)
929
			return n
930
		}
931
	case 8:
932
		switch len(out) {
933
		case 1:
934
			mulGFNI_8x1_64(matrix, in, out, start, n)
935
			return n
936
		case 2:
937
			mulGFNI_8x2_64(matrix, in, out, start, n)
938
			return n
939
		case 3:
940
			mulGFNI_8x3_64(matrix, in, out, start, n)
941
			return n
942
		case 4:
943
			mulGFNI_8x4_64(matrix, in, out, start, n)
944
			return n
945
		case 5:
946
			mulGFNI_8x5_64(matrix, in, out, start, n)
947
			return n
948
		case 6:
949
			mulGFNI_8x6_64(matrix, in, out, start, n)
950
			return n
951
		case 7:
952
			mulGFNI_8x7_64(matrix, in, out, start, n)
953
			return n
954
		case 8:
955
			mulGFNI_8x8_64(matrix, in, out, start, n)
956
			return n
957
		case 9:
958
			mulGFNI_8x9_64(matrix, in, out, start, n)
959
			return n
960
		case 10:
961
			mulGFNI_8x10_64(matrix, in, out, start, n)
962
			return n
963
		}
964
	case 9:
965
		switch len(out) {
966
		case 1:
967
			mulGFNI_9x1_64(matrix, in, out, start, n)
968
			return n
969
		case 2:
970
			mulGFNI_9x2_64(matrix, in, out, start, n)
971
			return n
972
		case 3:
973
			mulGFNI_9x3_64(matrix, in, out, start, n)
974
			return n
975
		case 4:
976
			mulGFNI_9x4_64(matrix, in, out, start, n)
977
			return n
978
		case 5:
979
			mulGFNI_9x5_64(matrix, in, out, start, n)
980
			return n
981
		case 6:
982
			mulGFNI_9x6_64(matrix, in, out, start, n)
983
			return n
984
		case 7:
985
			mulGFNI_9x7_64(matrix, in, out, start, n)
986
			return n
987
		case 8:
988
			mulGFNI_9x8_64(matrix, in, out, start, n)
989
			return n
990
		case 9:
991
			mulGFNI_9x9_64(matrix, in, out, start, n)
992
			return n
993
		case 10:
994
			mulGFNI_9x10_64(matrix, in, out, start, n)
995
			return n
996
		}
997
	case 10:
998
		switch len(out) {
999
		case 1:
1000
			mulGFNI_10x1_64(matrix, in, out, start, n)
1001
			return n
1002
		case 2:
1003
			mulGFNI_10x2_64(matrix, in, out, start, n)
1004
			return n
1005
		case 3:
1006
			mulGFNI_10x3_64(matrix, in, out, start, n)
1007
			return n
1008
		case 4:
1009
			mulGFNI_10x4_64(matrix, in, out, start, n)
1010
			return n
1011
		case 5:
1012
			mulGFNI_10x5_64(matrix, in, out, start, n)
1013
			return n
1014
		case 6:
1015
			mulGFNI_10x6_64(matrix, in, out, start, n)
1016
			return n
1017
		case 7:
1018
			mulGFNI_10x7_64(matrix, in, out, start, n)
1019
			return n
1020
		case 8:
1021
			mulGFNI_10x8_64(matrix, in, out, start, n)
1022
			return n
1023
		case 9:
1024
			mulGFNI_10x9_64(matrix, in, out, start, n)
1025
			return n
1026
		case 10:
1027
			mulGFNI_10x10_64(matrix, in, out, start, n)
1028
			return n
1029
		}
1030
	}
1031
	panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out)))
1032
}
1033

1034
func galMulSlicesGFNIXor(matrix []uint64, in, out [][]byte, start, stop int) int {
1035
	n := (stop - start) & avxSizeMask
1036

1037
	switch len(in) {
1038
	case 1:
1039
		switch len(out) {
1040
		case 1:
1041
			mulGFNI_1x1_64Xor(matrix, in, out, start, n)
1042
			return n
1043
		case 2:
1044
			mulGFNI_1x2_64Xor(matrix, in, out, start, n)
1045
			return n
1046
		case 3:
1047
			mulGFNI_1x3_64Xor(matrix, in, out, start, n)
1048
			return n
1049
		case 4:
1050
			mulGFNI_1x4_64Xor(matrix, in, out, start, n)
1051
			return n
1052
		case 5:
1053
			mulGFNI_1x5_64Xor(matrix, in, out, start, n)
1054
			return n
1055
		case 6:
1056
			mulGFNI_1x6_64Xor(matrix, in, out, start, n)
1057
			return n
1058
		case 7:
1059
			mulGFNI_1x7_64Xor(matrix, in, out, start, n)
1060
			return n
1061
		case 8:
1062
			mulGFNI_1x8_64Xor(matrix, in, out, start, n)
1063
			return n
1064
		case 9:
1065
			mulGFNI_1x9_64Xor(matrix, in, out, start, n)
1066
			return n
1067
		case 10:
1068
			mulGFNI_1x10_64Xor(matrix, in, out, start, n)
1069
			return n
1070
		}
1071
	case 2:
1072
		switch len(out) {
1073
		case 1:
1074
			mulGFNI_2x1_64Xor(matrix, in, out, start, n)
1075
			return n
1076
		case 2:
1077
			mulGFNI_2x2_64Xor(matrix, in, out, start, n)
1078
			return n
1079
		case 3:
1080
			mulGFNI_2x3_64Xor(matrix, in, out, start, n)
1081
			return n
1082
		case 4:
1083
			mulGFNI_2x4_64Xor(matrix, in, out, start, n)
1084
			return n
1085
		case 5:
1086
			mulGFNI_2x5_64Xor(matrix, in, out, start, n)
1087
			return n
1088
		case 6:
1089
			mulGFNI_2x6_64Xor(matrix, in, out, start, n)
1090
			return n
1091
		case 7:
1092
			mulGFNI_2x7_64Xor(matrix, in, out, start, n)
1093
			return n
1094
		case 8:
1095
			mulGFNI_2x8_64Xor(matrix, in, out, start, n)
1096
			return n
1097
		case 9:
1098
			mulGFNI_2x9_64Xor(matrix, in, out, start, n)
1099
			return n
1100
		case 10:
1101
			mulGFNI_2x10_64Xor(matrix, in, out, start, n)
1102
			return n
1103
		}
1104
	case 3:
1105
		switch len(out) {
1106
		case 1:
1107
			mulGFNI_3x1_64Xor(matrix, in, out, start, n)
1108
			return n
1109
		case 2:
1110
			mulGFNI_3x2_64Xor(matrix, in, out, start, n)
1111
			return n
1112
		case 3:
1113
			mulGFNI_3x3_64Xor(matrix, in, out, start, n)
1114
			return n
1115
		case 4:
1116
			mulGFNI_3x4_64Xor(matrix, in, out, start, n)
1117
			return n
1118
		case 5:
1119
			mulGFNI_3x5_64Xor(matrix, in, out, start, n)
1120
			return n
1121
		case 6:
1122
			mulGFNI_3x6_64Xor(matrix, in, out, start, n)
1123
			return n
1124
		case 7:
1125
			mulGFNI_3x7_64Xor(matrix, in, out, start, n)
1126
			return n
1127
		case 8:
1128
			mulGFNI_3x8_64Xor(matrix, in, out, start, n)
1129
			return n
1130
		case 9:
1131
			mulGFNI_3x9_64Xor(matrix, in, out, start, n)
1132
			return n
1133
		case 10:
1134
			mulGFNI_3x10_64Xor(matrix, in, out, start, n)
1135
			return n
1136
		}
1137
	case 4:
1138
		switch len(out) {
1139
		case 1:
1140
			mulGFNI_4x1_64Xor(matrix, in, out, start, n)
1141
			return n
1142
		case 2:
1143
			mulGFNI_4x2_64Xor(matrix, in, out, start, n)
1144
			return n
1145
		case 3:
1146
			mulGFNI_4x3_64Xor(matrix, in, out, start, n)
1147
			return n
1148
		case 4:
1149
			mulGFNI_4x4_64Xor(matrix, in, out, start, n)
1150
			return n
1151
		case 5:
1152
			mulGFNI_4x5_64Xor(matrix, in, out, start, n)
1153
			return n
1154
		case 6:
1155
			mulGFNI_4x6_64Xor(matrix, in, out, start, n)
1156
			return n
1157
		case 7:
1158
			mulGFNI_4x7_64Xor(matrix, in, out, start, n)
1159
			return n
1160
		case 8:
1161
			mulGFNI_4x8_64Xor(matrix, in, out, start, n)
1162
			return n
1163
		case 9:
1164
			mulGFNI_4x9_64Xor(matrix, in, out, start, n)
1165
			return n
1166
		case 10:
1167
			mulGFNI_4x10_64Xor(matrix, in, out, start, n)
1168
			return n
1169
		}
1170
	case 5:
1171
		switch len(out) {
1172
		case 1:
1173
			mulGFNI_5x1_64Xor(matrix, in, out, start, n)
1174
			return n
1175
		case 2:
1176
			mulGFNI_5x2_64Xor(matrix, in, out, start, n)
1177
			return n
1178
		case 3:
1179
			mulGFNI_5x3_64Xor(matrix, in, out, start, n)
1180
			return n
1181
		case 4:
1182
			mulGFNI_5x4_64Xor(matrix, in, out, start, n)
1183
			return n
1184
		case 5:
1185
			mulGFNI_5x5_64Xor(matrix, in, out, start, n)
1186
			return n
1187
		case 6:
1188
			mulGFNI_5x6_64Xor(matrix, in, out, start, n)
1189
			return n
1190
		case 7:
1191
			mulGFNI_5x7_64Xor(matrix, in, out, start, n)
1192
			return n
1193
		case 8:
1194
			mulGFNI_5x8_64Xor(matrix, in, out, start, n)
1195
			return n
1196
		case 9:
1197
			mulGFNI_5x9_64Xor(matrix, in, out, start, n)
1198
			return n
1199
		case 10:
1200
			mulGFNI_5x10_64Xor(matrix, in, out, start, n)
1201
			return n
1202
		}
1203
	case 6:
1204
		switch len(out) {
1205
		case 1:
1206
			mulGFNI_6x1_64Xor(matrix, in, out, start, n)
1207
			return n
1208
		case 2:
1209
			mulGFNI_6x2_64Xor(matrix, in, out, start, n)
1210
			return n
1211
		case 3:
1212
			mulGFNI_6x3_64Xor(matrix, in, out, start, n)
1213
			return n
1214
		case 4:
1215
			mulGFNI_6x4_64Xor(matrix, in, out, start, n)
1216
			return n
1217
		case 5:
1218
			mulGFNI_6x5_64Xor(matrix, in, out, start, n)
1219
			return n
1220
		case 6:
1221
			mulGFNI_6x6_64Xor(matrix, in, out, start, n)
1222
			return n
1223
		case 7:
1224
			mulGFNI_6x7_64Xor(matrix, in, out, start, n)
1225
			return n
1226
		case 8:
1227
			mulGFNI_6x8_64Xor(matrix, in, out, start, n)
1228
			return n
1229
		case 9:
1230
			mulGFNI_6x9_64Xor(matrix, in, out, start, n)
1231
			return n
1232
		case 10:
1233
			mulGFNI_6x10_64Xor(matrix, in, out, start, n)
1234
			return n
1235
		}
1236
	case 7:
1237
		switch len(out) {
1238
		case 1:
1239
			mulGFNI_7x1_64Xor(matrix, in, out, start, n)
1240
			return n
1241
		case 2:
1242
			mulGFNI_7x2_64Xor(matrix, in, out, start, n)
1243
			return n
1244
		case 3:
1245
			mulGFNI_7x3_64Xor(matrix, in, out, start, n)
1246
			return n
1247
		case 4:
1248
			mulGFNI_7x4_64Xor(matrix, in, out, start, n)
1249
			return n
1250
		case 5:
1251
			mulGFNI_7x5_64Xor(matrix, in, out, start, n)
1252
			return n
1253
		case 6:
1254
			mulGFNI_7x6_64Xor(matrix, in, out, start, n)
1255
			return n
1256
		case 7:
1257
			mulGFNI_7x7_64Xor(matrix, in, out, start, n)
1258
			return n
1259
		case 8:
1260
			mulGFNI_7x8_64Xor(matrix, in, out, start, n)
1261
			return n
1262
		case 9:
1263
			mulGFNI_7x9_64Xor(matrix, in, out, start, n)
1264
			return n
1265
		case 10:
1266
			mulGFNI_7x10_64Xor(matrix, in, out, start, n)
1267
			return n
1268
		}
1269
	case 8:
1270
		switch len(out) {
1271
		case 1:
1272
			mulGFNI_8x1_64Xor(matrix, in, out, start, n)
1273
			return n
1274
		case 2:
1275
			mulGFNI_8x2_64Xor(matrix, in, out, start, n)
1276
			return n
1277
		case 3:
1278
			mulGFNI_8x3_64Xor(matrix, in, out, start, n)
1279
			return n
1280
		case 4:
1281
			mulGFNI_8x4_64Xor(matrix, in, out, start, n)
1282
			return n
1283
		case 5:
1284
			mulGFNI_8x5_64Xor(matrix, in, out, start, n)
1285
			return n
1286
		case 6:
1287
			mulGFNI_8x6_64Xor(matrix, in, out, start, n)
1288
			return n
1289
		case 7:
1290
			mulGFNI_8x7_64Xor(matrix, in, out, start, n)
1291
			return n
1292
		case 8:
1293
			mulGFNI_8x8_64Xor(matrix, in, out, start, n)
1294
			return n
1295
		case 9:
1296
			mulGFNI_8x9_64Xor(matrix, in, out, start, n)
1297
			return n
1298
		case 10:
1299
			mulGFNI_8x10_64Xor(matrix, in, out, start, n)
1300
			return n
1301
		}
1302
	case 9:
1303
		switch len(out) {
1304
		case 1:
1305
			mulGFNI_9x1_64Xor(matrix, in, out, start, n)
1306
			return n
1307
		case 2:
1308
			mulGFNI_9x2_64Xor(matrix, in, out, start, n)
1309
			return n
1310
		case 3:
1311
			mulGFNI_9x3_64Xor(matrix, in, out, start, n)
1312
			return n
1313
		case 4:
1314
			mulGFNI_9x4_64Xor(matrix, in, out, start, n)
1315
			return n
1316
		case 5:
1317
			mulGFNI_9x5_64Xor(matrix, in, out, start, n)
1318
			return n
1319
		case 6:
1320
			mulGFNI_9x6_64Xor(matrix, in, out, start, n)
1321
			return n
1322
		case 7:
1323
			mulGFNI_9x7_64Xor(matrix, in, out, start, n)
1324
			return n
1325
		case 8:
1326
			mulGFNI_9x8_64Xor(matrix, in, out, start, n)
1327
			return n
1328
		case 9:
1329
			mulGFNI_9x9_64Xor(matrix, in, out, start, n)
1330
			return n
1331
		case 10:
1332
			mulGFNI_9x10_64Xor(matrix, in, out, start, n)
1333
			return n
1334
		}
1335
	case 10:
1336
		switch len(out) {
1337
		case 1:
1338
			mulGFNI_10x1_64Xor(matrix, in, out, start, n)
1339
			return n
1340
		case 2:
1341
			mulGFNI_10x2_64Xor(matrix, in, out, start, n)
1342
			return n
1343
		case 3:
1344
			mulGFNI_10x3_64Xor(matrix, in, out, start, n)
1345
			return n
1346
		case 4:
1347
			mulGFNI_10x4_64Xor(matrix, in, out, start, n)
1348
			return n
1349
		case 5:
1350
			mulGFNI_10x5_64Xor(matrix, in, out, start, n)
1351
			return n
1352
		case 6:
1353
			mulGFNI_10x6_64Xor(matrix, in, out, start, n)
1354
			return n
1355
		case 7:
1356
			mulGFNI_10x7_64Xor(matrix, in, out, start, n)
1357
			return n
1358
		case 8:
1359
			mulGFNI_10x8_64Xor(matrix, in, out, start, n)
1360
			return n
1361
		case 9:
1362
			mulGFNI_10x9_64Xor(matrix, in, out, start, n)
1363
			return n
1364
		case 10:
1365
			mulGFNI_10x10_64Xor(matrix, in, out, start, n)
1366
			return n
1367
		}
1368
	}
1369
	panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out)))
1370
}
1371

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.