...
1
2
3
4 package common
5
6 import (
7 "golang.org/x/sys/cpu"
8 )
9
10
11
12
13
14
15 func (p *Poly) NTT() {
16 if cpu.X86.HasAVX2 {
17 nttAVX2(
18 (*[N]uint32)(p),
19 )
20 } else {
21 p.nttGeneric()
22 }
23 }
24
25
26
27
28
29
30 func (p *Poly) InvNTT() {
31 if cpu.X86.HasAVX2 {
32 invNttAVX2(
33 (*[N]uint32)(p),
34 )
35 } else {
36 p.invNttGeneric()
37 }
38 }
39
40
41
42
43
44
45 func (p *Poly) MulHat(a, b *Poly) {
46 if cpu.X86.HasAVX2 {
47 mulHatAVX2(
48 (*[N]uint32)(p),
49 (*[N]uint32)(a),
50 (*[N]uint32)(b),
51 )
52 } else {
53 p.mulHatGeneric(a, b)
54 }
55 }
56
57
58 func (p *Poly) Add(a, b *Poly) {
59 if cpu.X86.HasAVX2 {
60 addAVX2(
61 (*[N]uint32)(p),
62 (*[N]uint32)(a),
63 (*[N]uint32)(b),
64 )
65 } else {
66 p.addGeneric(a, b)
67 }
68 }
69
70
71
72
73
74 func (p *Poly) Sub(a, b *Poly) {
75 if cpu.X86.HasAVX2 {
76 subAVX2(
77 (*[N]uint32)(p),
78 (*[N]uint32)(a),
79 (*[N]uint32)(b),
80 )
81 } else {
82 p.subGeneric(a, b)
83 }
84 }
85
86
87
88 func (p *Poly) PackLe16(buf []byte) {
89 if cpu.X86.HasAVX2 {
90 if len(buf) < PolyLe16Size {
91 panic("buf too small")
92 }
93 packLe16AVX2(
94 (*[N]uint32)(p),
95 &buf[0],
96 )
97 } else {
98 p.packLe16Generic(buf)
99 }
100 }
101
102
103 func (p *Poly) ReduceLe2Q() {
104 if cpu.X86.HasAVX2 {
105 reduceLe2QAVX2((*[N]uint32)(p))
106 } else {
107 p.reduceLe2QGeneric()
108 }
109 }
110
111
112 func (p *Poly) Normalize() {
113 if cpu.X86.HasAVX2 {
114 p.ReduceLe2Q()
115 p.NormalizeAssumingLe2Q()
116 } else {
117 p.normalizeGeneric()
118 }
119 }
120
121
122
123 func (p *Poly) NormalizeAssumingLe2Q() {
124 if cpu.X86.HasAVX2 {
125 le2qModQAVX2((*[N]uint32)(p))
126 } else {
127 p.normalizeAssumingLe2QGeneric()
128 }
129 }
130
131
132
133
134
135 func (p *Poly) Exceeds(bound uint32) bool {
136 if cpu.X86.HasAVX2 {
137 return exceedsAVX2((*[N]uint32)(p), bound) == 1
138 }
139 return p.exceedsGeneric(bound)
140 }
141
142
143
144
145 func (p *Poly) MulBy2toD(q *Poly) {
146 if cpu.X86.HasAVX2 {
147 mulBy2toDAVX2(
148 (*[N]uint32)(p),
149 (*[N]uint32)(q),
150 )
151 } else {
152 p.mulBy2toDGeneric(q)
153 }
154 }
155
View as plain text