cubefs

Форк
0
97 строк · 2.2 Кб
1
//go:build (!amd64 || noasm || appengine || gccgo) && (!arm64 || noasm || appengine || gccgo) && (!ppc64le || noasm || appengine || gccgo)
2
// +build !amd64 noasm appengine gccgo
3
// +build !arm64 noasm appengine gccgo
4
// +build !ppc64le noasm appengine gccgo
5

6
// Copyright 2015, Klaus Post, see LICENSE for details.
7

8
package reedsolomon
9

10
func galMulSlice(c byte, in, out []byte, o *options) {
11
	out = out[:len(in)]
12
	if c == 1 {
13
		copy(out, in)
14
		return
15
	}
16
	mt := mulTable[c][:256]
17
	for n, input := range in {
18
		out[n] = mt[input]
19
	}
20
}
21

22
func galMulSliceXor(c byte, in, out []byte, o *options) {
23
	out = out[:len(in)]
24
	if c == 1 {
25
		sliceXor(in, out, o)
26
		return
27
	}
28
	mt := mulTable[c][:256]
29
	for n, input := range in {
30
		out[n] ^= mt[input]
31
	}
32
}
33

34
// simple slice xor
35
func sliceXor(in, out []byte, o *options) {
36
	sliceXorGo(in, out, o)
37
}
38

39
func init() {
40
	defaultOptions.useAVX512 = false
41
}
42

43
// 4-way butterfly
44
func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) {
45
	ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o)
46
}
47

48
// 4-way butterfly
49
func ifftDIT48(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe8, o *options) {
50
	ifftDIT4Ref8(work, dist, log_m01, log_m23, log_m02, o)
51
}
52

53
// 4-way butterfly
54
func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) {
55
	fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o)
56
}
57

58
// 4-way butterfly
59
func fftDIT48(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe8, o *options) {
60
	fftDIT4Ref8(work, dist, log_m01, log_m23, log_m02, o)
61
}
62

63
// 2-way butterfly forward
64
func fftDIT2(x, y []byte, log_m ffe, o *options) {
65
	// Reference version:
66
	refMulAdd(x, y, log_m)
67
	sliceXorGo(x, y, o)
68
}
69

70
// 2-way butterfly forward
71
func fftDIT28(x, y []byte, log_m ffe8, o *options) {
72
	// Reference version:
73
	refMulAdd8(x, y, log_m)
74
	sliceXorGo(x, y, o)
75
}
76

77
// 2-way butterfly inverse
78
func ifftDIT2(x, y []byte, log_m ffe, o *options) {
79
	// Reference version:
80
	sliceXorGo(x, y, o)
81
	refMulAdd(x, y, log_m)
82
}
83

84
// 2-way butterfly inverse
85
func ifftDIT28(x, y []byte, log_m ffe8, o *options) {
86
	// Reference version:
87
	sliceXorGo(x, y, o)
88
	refMulAdd8(x, y, log_m)
89
}
90

91
func mulgf16(x, y []byte, log_m ffe, o *options) {
92
	refMul(x, y, log_m)
93
}
94

95
func mulgf8(x, y []byte, log_m ffe8, o *options) {
96
	refMul8(x, y, log_m)
97
}
98

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

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

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

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