This repository has been archived by the owner on Dec 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 47
/
arithmetic_decl.go
241 lines (169 loc) · 3.52 KB
/
arithmetic_decl.go
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
// +build amd64,!generic
package bls12381
import (
"golang.org/x/sys/cpu"
)
func init() {
if !cpu.X86.HasADX || !cpu.X86.HasBMI2 {
mul = mulNoADX
wmul = wmulNoADX
fromWide = montRedNoADX
mulFR = mulNoADXFR
wmulFR = wmulNoADXFR
wfp2Mul = wfp2MulGeneric
wfp2Square = wfp2SquareGeneric
}
}
var mul func(c, a, b *fe) = mulADX
var wmul func(c *wfe, a, b *fe) = wmulADX
var fromWide func(c *fe, w *wfe) = montRedADX
var wfp2Mul func(c *wfe2, a, b *fe2) = wfp2MulADX
var wfp2Square func(c *wfe2, b *fe2) = wfp2SquareADX
func square(c, a *fe) {
mul(c, a, a)
}
func neg(c, a *fe) {
if a.isZero() {
c.set(a)
} else {
_neg(c, a)
}
}
//go:noescape
func add(c, a, b *fe)
//go:noescape
func addAssign(a, b *fe)
//go:noescape
func ladd(c, a, b *fe)
//go:noescape
func laddAssign(a, b *fe)
//go:noescape
func double(c, a *fe)
//go:noescape
func doubleAssign(a *fe)
//go:noescape
func ldouble(c, a *fe)
//go:noescape
func ldoubleAssign(a *fe)
//go:noescape
func sub(c, a, b *fe)
//go:noescape
func subAssign(a, b *fe)
//go:noescape
func lsubAssign(a, b *fe)
//go:noescape
func _neg(c, a *fe)
//go:noescape
func mulNoADX(c, a, b *fe)
//go:noescape
func mulADX(c, a, b *fe)
//go:noescape
func wmulNoADX(c *wfe, a, b *fe)
//go:noescape
func wmulADX(c *wfe, a, b *fe)
//go:noescape
func montRedNoADX(a *fe, w *wfe)
//go:noescape
func montRedADX(a *fe, w *wfe)
//go:noescape
func lwadd(c, a, b *wfe)
//go:noescape
func lwaddAssign(a, b *wfe)
//go:noescape
func wadd(c, a, b *wfe)
//go:noescape
func lwdouble(c, a *wfe)
//go:noescape
func wdouble(c, a *wfe)
//go:noescape
func lwsub(c, a, b *wfe)
//go:noescape
func lwsubAssign(a, b *wfe)
//go:noescape
func wsub(c, a, b *wfe)
//go:noescape
func fp2Add(c, a, b *fe2)
//go:noescape
func fp2AddAssign(a, b *fe2)
//go:noescape
func fp2Ladd(c, a, b *fe2)
//go:noescape
func fp2LaddAssign(a, b *fe2)
//go:noescape
func fp2DoubleAssign(a *fe2)
//go:noescape
func fp2Double(c, a *fe2)
//go:noescape
func fp2Sub(c, a, b *fe2)
//go:noescape
func fp2SubAssign(a, b *fe2)
//go:noescape
func mulByNonResidue(c, a *fe2)
//go:noescape
func mulByNonResidueAssign(a *fe2)
//go:noescape
func wfp2Add(c, a, b *wfe2)
//go:noescape
func wfp2AddAssign(a, b *wfe2)
//go:noescape
func wfp2Ladd(c, a, b *wfe2)
//go:noescape
func wfp2LaddAssign(a, b *wfe2)
//go:noescape
func wfp2AddMixed(c, a, b *wfe2)
//go:noescape
func wfp2AddMixedAssign(a, b *wfe2)
//go:noescape
func wfp2Sub(c, a, b *wfe2)
//go:noescape
func wfp2SubAssign(a, b *wfe2)
//go:noescape
func wfp2SubMixed(c, a, b *wfe2)
//go:noescape
func wfp2SubMixedAssign(a, b *wfe2)
//go:noescape
func wfp2Double(c, a *wfe2)
//go:noescape
func wfp2DoubleAssign(a *wfe2)
//go:noescape
func wfp2MulByNonResidue(c, a *wfe2)
//go:noescape
func wfp2MulByNonResidueAssign(a *wfe2)
//go:noescape
func wfp2SquareADX(c *wfe2, a *fe2)
//go:noescape
func wfp2MulADX(c *wfe2, a, b *fe2)
var mulFR func(c, a, b *Fr) = mulADXFR
var wmulFR func(c *wideFr, a, b *Fr) = wmulADXFR
func squareFR(c, a *Fr) {
mulFR(c, a, a)
}
func negFR(c, a *Fr) {
if a.IsZero() {
c.Set(a)
} else {
_negFR(c, a)
}
}
//go:noescape
func addFR(c, a, b *Fr)
//go:noescape
func laddAssignFR(a, b *Fr)
//go:noescape
func doubleFR(c, a *Fr)
//go:noescape
func subFR(c, a, b *Fr)
//go:noescape
func lsubAssignFR(a, b *Fr)
//go:noescape
func _negFR(c, a *Fr)
//go:noescape
func mulNoADXFR(c, a, b *Fr)
//go:noescape
func mulADXFR(c, a, b *Fr)
//go:noescape
func wmulADXFR(c *wideFr, a, b *Fr)
//go:noescape
func wmulNoADXFR(c *wideFr, a, b *Fr)
//go:noescape
func waddFR(a, b *wideFr)