cubefs
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
8package reedsolomon
9
10func galMulSlice(c byte, in, out []byte, o *options) {
11out = out[:len(in)]
12if c == 1 {
13copy(out, in)
14return
15}
16mt := mulTable[c][:256]
17for n, input := range in {
18out[n] = mt[input]
19}
20}
21
22func galMulSliceXor(c byte, in, out []byte, o *options) {
23out = out[:len(in)]
24if c == 1 {
25sliceXor(in, out, o)
26return
27}
28mt := mulTable[c][:256]
29for n, input := range in {
30out[n] ^= mt[input]
31}
32}
33
34// simple slice xor
35func sliceXor(in, out []byte, o *options) {
36sliceXorGo(in, out, o)
37}
38
39func init() {
40defaultOptions.useAVX512 = false
41}
42
43// 4-way butterfly
44func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) {
45ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o)
46}
47
48// 4-way butterfly
49func ifftDIT48(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe8, o *options) {
50ifftDIT4Ref8(work, dist, log_m01, log_m23, log_m02, o)
51}
52
53// 4-way butterfly
54func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) {
55fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o)
56}
57
58// 4-way butterfly
59func fftDIT48(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe8, o *options) {
60fftDIT4Ref8(work, dist, log_m01, log_m23, log_m02, o)
61}
62
63// 2-way butterfly forward
64func fftDIT2(x, y []byte, log_m ffe, o *options) {
65// Reference version:
66refMulAdd(x, y, log_m)
67sliceXorGo(x, y, o)
68}
69
70// 2-way butterfly forward
71func fftDIT28(x, y []byte, log_m ffe8, o *options) {
72// Reference version:
73refMulAdd8(x, y, log_m)
74sliceXorGo(x, y, o)
75}
76
77// 2-way butterfly inverse
78func ifftDIT2(x, y []byte, log_m ffe, o *options) {
79// Reference version:
80sliceXorGo(x, y, o)
81refMulAdd(x, y, log_m)
82}
83
84// 2-way butterfly inverse
85func ifftDIT28(x, y []byte, log_m ffe8, o *options) {
86// Reference version:
87sliceXorGo(x, y, o)
88refMulAdd8(x, y, log_m)
89}
90
91func mulgf16(x, y []byte, log_m ffe, o *options) {
92refMul(x, y, log_m)
93}
94
95func mulgf8(x, y []byte, log_m ffe8, o *options) {
96refMul8(x, y, log_m)
97}
98