authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-15 10:08:02+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-15 10:08:02+02:00
logba450411c0e4086819d0790cc3ae4371823a323e
treec93345fc7cd8ed2ee881e84d2cb2ec3d10363b2d
parentf5f4063029f1cbedb1cde0048138c9b1a56fc114
parent23e2b25ca29604c93ef1b3cba1a6be041dcaad1f

Merge pull request 'std.crypto: update fiat-crypto generated code' (#37139) from jedisct1/zig:fiatupdate into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37139

6 files changed, 2574 insertions(+), 2606 deletions(-)

lib/std/crypto/pcurves/p256/p256_64.zig+399-425
...@@ -13,42 +13,10 @@...@@ -13,42 +13,10 @@
13//13//
14// Computed values:14// Computed values:
15// eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)15// eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)
16// bytes_eval z = z[0]16// bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248)
17// + (z[1] << 8)
18// + (z[2] << 16)
19// + (z[3] << 24)
20// + (z[4] << 32)
21// + (z[5] << 40)
22// + (z[6] << 48)
23// + (z[7] << 56)
24// + (z[8] << 64)
25// + (z[9] << 72)
26// + (z[10] << 80)
27// + (z[11] << 88)
28// + (z[12] << 96)
29// + (z[13] << 104)
30// + (z[14] << 112)
31// + (z[15] << 120)
32// + (z[16] << 128)
33// + (z[17] << 136)
34// + (z[18] << 144)
35// + (z[19] << 152)
36// + (z[20] << 160)
37// + (z[21] << 168)
38// + (z[22] << 176)
39// + (z[23] << 184)
40// + (z[24] << 192)
41// + (z[25] << 200)
42// + (z[26] << 208)
43// + (z[27] << 216)
44// + (z[28] << 224)
45// + (z[29] << 232)
46// + (z[30] << 240)
47// + (z[31] << 248)
48// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in
49// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^25618// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256
5019
51const std = @import("std");
52const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
5321
54// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -59,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;...@@ -59,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;
59// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
60pub const NonMontgomeryDomainFieldElement = [4]u64;28pub const NonMontgomeryDomainFieldElement = [4]u64;
6129
62/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
63///
64/// Postconditions:
65/// out1 = (arg1 + arg2 + arg3) mod 2^64
66/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
67///
68/// Input Bounds:
69/// arg1: [0x0 ~> 0x1]
70/// arg2: [0x0 ~> 0xffffffffffffffff]
71/// arg3: [0x0 ~> 0xffffffffffffffff]
72/// Output Bounds:
73/// out1: [0x0 ~> 0xffffffffffffffff]
74/// out2: [0x0 ~> 0x1]
75fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
76 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
77 out1.* = @truncate(x);33
78 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
79}38}
8039
81/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
82///
83/// Postconditions:
84/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
85/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
86///
87/// Input Bounds:
88/// arg1: [0x0 ~> 0x1]
89/// arg2: [0x0 ~> 0xffffffffffffffff]
90/// arg3: [0x0 ~> 0xffffffffffffffff]
91/// Output Bounds:
92/// out1: [0x0 ~> 0xffffffffffffffff]
93/// out2: [0x0 ~> 0x1]
94fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
95 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
96 out1.* = @truncate(x);43
97 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
98}48}
9949
100/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
101///
102/// Postconditions:
103/// out1 = (arg1 * arg2) mod 2^64
104/// out2 = ⌊arg1 * arg2 / 2^64⌋
105///
106/// Input Bounds:
107/// arg1: [0x0 ~> 0xffffffffffffffff]
108/// arg2: [0x0 ~> 0xffffffffffffffff]
109/// Output Bounds:
110/// out1: [0x0 ~> 0xffffffffffffffff]
111/// out2: [0x0 ~> 0xffffffffffffffff]
112fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
113 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
11453
115 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
116 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
117 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
118}57}
11958
120/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
121///60fn selectionMaskU64(arg1: u1) u64 {
122/// Postconditions:61 @setRuntimeSafety(mode == .debug);
123/// out1 = (if arg1 = 0 then arg2 else arg3)62
124///63 const value: u64 = 0 -% @as(u64, arg1);
125/// Input Bounds:64 if (@inComptime()) return value;
126/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
127/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
128/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
129/// Output Bounds:68 }
130/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
131fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
132 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
13391
134 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
135 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
136}94}
13795
138/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -147,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -147,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
147pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
148 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
149107
150 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
151 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
152 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
153 const x4 = (arg1[0]);111 const x4: u64 = arg1[0];
154 var x5: u64 = undefined;112 var x5: u64 = undefined;
155 var x6: u64 = undefined;113 var x6: u64 = undefined;
156 mulxU64(&x5, &x6, x4, (arg2[3]));114 mulxU64(&x5, &x6, x4, arg2[3]);
157 var x7: u64 = undefined;115 var x7: u64 = undefined;
158 var x8: u64 = undefined;116 var x8: u64 = undefined;
159 mulxU64(&x7, &x8, x4, (arg2[2]));117 mulxU64(&x7, &x8, x4, arg2[2]);
160 var x9: u64 = undefined;118 var x9: u64 = undefined;
161 var x10: u64 = undefined;119 var x10: u64 = undefined;
162 mulxU64(&x9, &x10, x4, (arg2[1]));120 mulxU64(&x9, &x10, x4, arg2[1]);
163 var x11: u64 = undefined;121 var x11: u64 = undefined;
164 var x12: u64 = undefined;122 var x12: u64 = undefined;
165 mulxU64(&x11, &x12, x4, (arg2[0]));123 mulxU64(&x11, &x12, x4, arg2[0]);
166 var x13: u64 = undefined;124 var x13: u64 = undefined;
167 var x14: u1 = undefined;125 var x14: u1 = undefined;
168 addcarryxU64(&x13, &x14, 0x0, x12, x9);126 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -172,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -172,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
172 var x17: u64 = undefined;130 var x17: u64 = undefined;
173 var x18: u1 = undefined;131 var x18: u1 = undefined;
174 addcarryxU64(&x17, &x18, x16, x8, x5);132 addcarryxU64(&x17, &x18, x16, x8, x5);
175 const x19 = (@as(u64, x18) + x6);133 const x19: u64 = (x18 + x6);
176 var x20: u64 = undefined;134 var x20: u64 = undefined;
177 var x21: u64 = undefined;135 var x21: u64 = undefined;
178 mulxU64(&x20, &x21, x11, 0xffffffff00000001);136 mulxU64(&x20, &x21, x11, 0xffffffff00000001);
...@@ -185,7 +143,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -185,7 +143,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
185 var x26: u64 = undefined;143 var x26: u64 = undefined;
186 var x27: u1 = undefined;144 var x27: u1 = undefined;
187 addcarryxU64(&x26, &x27, 0x0, x25, x22);145 addcarryxU64(&x26, &x27, 0x0, x25, x22);
188 const x28 = (@as(u64, x27) + x23);146 const x28: u64 = (x27 + x23);
189 var x29: u64 = undefined;147 var x29: u64 = undefined;
190 var x30: u1 = undefined;148 var x30: u1 = undefined;
191 addcarryxU64(&x29, &x30, 0x0, x11, x24);149 addcarryxU64(&x29, &x30, 0x0, x11, x24);
...@@ -203,16 +161,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -203,16 +161,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
203 addcarryxU64(&x37, &x38, x36, x19, x21);161 addcarryxU64(&x37, &x38, x36, x19, x21);
204 var x39: u64 = undefined;162 var x39: u64 = undefined;
205 var x40: u64 = undefined;163 var x40: u64 = undefined;
206 mulxU64(&x39, &x40, x1, (arg2[3]));164 mulxU64(&x39, &x40, x1, arg2[3]);
207 var x41: u64 = undefined;165 var x41: u64 = undefined;
208 var x42: u64 = undefined;166 var x42: u64 = undefined;
209 mulxU64(&x41, &x42, x1, (arg2[2]));167 mulxU64(&x41, &x42, x1, arg2[2]);
210 var x43: u64 = undefined;168 var x43: u64 = undefined;
211 var x44: u64 = undefined;169 var x44: u64 = undefined;
212 mulxU64(&x43, &x44, x1, (arg2[1]));170 mulxU64(&x43, &x44, x1, arg2[1]);
213 var x45: u64 = undefined;171 var x45: u64 = undefined;
214 var x46: u64 = undefined;172 var x46: u64 = undefined;
215 mulxU64(&x45, &x46, x1, (arg2[0]));173 mulxU64(&x45, &x46, x1, arg2[0]);
216 var x47: u64 = undefined;174 var x47: u64 = undefined;
217 var x48: u1 = undefined;175 var x48: u1 = undefined;
218 addcarryxU64(&x47, &x48, 0x0, x46, x43);176 addcarryxU64(&x47, &x48, 0x0, x46, x43);
...@@ -222,7 +180,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -222,7 +180,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
222 var x51: u64 = undefined;180 var x51: u64 = undefined;
223 var x52: u1 = undefined;181 var x52: u1 = undefined;
224 addcarryxU64(&x51, &x52, x50, x42, x39);182 addcarryxU64(&x51, &x52, x50, x42, x39);
225 const x53 = (@as(u64, x52) + x40);183 const x53: u64 = (x52 + x40);
226 var x54: u64 = undefined;184 var x54: u64 = undefined;
227 var x55: u1 = undefined;185 var x55: u1 = undefined;
228 addcarryxU64(&x54, &x55, 0x0, x31, x45);186 addcarryxU64(&x54, &x55, 0x0, x31, x45);
...@@ -237,7 +195,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -237,7 +195,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
237 addcarryxU64(&x60, &x61, x59, x37, x51);195 addcarryxU64(&x60, &x61, x59, x37, x51);
238 var x62: u64 = undefined;196 var x62: u64 = undefined;
239 var x63: u1 = undefined;197 var x63: u1 = undefined;
240 addcarryxU64(&x62, &x63, x61, @as(u64, x38), x53);198 addcarryxU64(&x62, &x63, x61, x38, x53);
241 var x64: u64 = undefined;199 var x64: u64 = undefined;
242 var x65: u64 = undefined;200 var x65: u64 = undefined;
243 mulxU64(&x64, &x65, x54, 0xffffffff00000001);201 mulxU64(&x64, &x65, x54, 0xffffffff00000001);
...@@ -250,7 +208,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -250,7 +208,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
250 var x70: u64 = undefined;208 var x70: u64 = undefined;
251 var x71: u1 = undefined;209 var x71: u1 = undefined;
252 addcarryxU64(&x70, &x71, 0x0, x69, x66);210 addcarryxU64(&x70, &x71, 0x0, x69, x66);
253 const x72 = (@as(u64, x71) + x67);211 const x72: u64 = (x71 + x67);
254 var x73: u64 = undefined;212 var x73: u64 = undefined;
255 var x74: u1 = undefined;213 var x74: u1 = undefined;
256 addcarryxU64(&x73, &x74, 0x0, x54, x68);214 addcarryxU64(&x73, &x74, 0x0, x54, x68);
...@@ -266,19 +224,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -266,19 +224,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
266 var x81: u64 = undefined;224 var x81: u64 = undefined;
267 var x82: u1 = undefined;225 var x82: u1 = undefined;
268 addcarryxU64(&x81, &x82, x80, x62, x65);226 addcarryxU64(&x81, &x82, x80, x62, x65);
269 const x83 = (@as(u64, x82) + @as(u64, x63));227 const x83: u64 = (@as(u64, x82) + x63);
270 var x84: u64 = undefined;228 var x84: u64 = undefined;
271 var x85: u64 = undefined;229 var x85: u64 = undefined;
272 mulxU64(&x84, &x85, x2, (arg2[3]));230 mulxU64(&x84, &x85, x2, arg2[3]);
273 var x86: u64 = undefined;231 var x86: u64 = undefined;
274 var x87: u64 = undefined;232 var x87: u64 = undefined;
275 mulxU64(&x86, &x87, x2, (arg2[2]));233 mulxU64(&x86, &x87, x2, arg2[2]);
276 var x88: u64 = undefined;234 var x88: u64 = undefined;
277 var x89: u64 = undefined;235 var x89: u64 = undefined;
278 mulxU64(&x88, &x89, x2, (arg2[1]));236 mulxU64(&x88, &x89, x2, arg2[1]);
279 var x90: u64 = undefined;237 var x90: u64 = undefined;
280 var x91: u64 = undefined;238 var x91: u64 = undefined;
281 mulxU64(&x90, &x91, x2, (arg2[0]));239 mulxU64(&x90, &x91, x2, arg2[0]);
282 var x92: u64 = undefined;240 var x92: u64 = undefined;
283 var x93: u1 = undefined;241 var x93: u1 = undefined;
284 addcarryxU64(&x92, &x93, 0x0, x91, x88);242 addcarryxU64(&x92, &x93, 0x0, x91, x88);
...@@ -288,7 +246,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -288,7 +246,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
288 var x96: u64 = undefined;246 var x96: u64 = undefined;
289 var x97: u1 = undefined;247 var x97: u1 = undefined;
290 addcarryxU64(&x96, &x97, x95, x87, x84);248 addcarryxU64(&x96, &x97, x95, x87, x84);
291 const x98 = (@as(u64, x97) + x85);249 const x98: u64 = (x97 + x85);
292 var x99: u64 = undefined;250 var x99: u64 = undefined;
293 var x100: u1 = undefined;251 var x100: u1 = undefined;
294 addcarryxU64(&x99, &x100, 0x0, x75, x90);252 addcarryxU64(&x99, &x100, 0x0, x75, x90);
...@@ -316,7 +274,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -316,7 +274,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
316 var x115: u64 = undefined;274 var x115: u64 = undefined;
317 var x116: u1 = undefined;275 var x116: u1 = undefined;
318 addcarryxU64(&x115, &x116, 0x0, x114, x111);276 addcarryxU64(&x115, &x116, 0x0, x114, x111);
319 const x117 = (@as(u64, x116) + x112);277 const x117: u64 = (x116 + x112);
320 var x118: u64 = undefined;278 var x118: u64 = undefined;
321 var x119: u1 = undefined;279 var x119: u1 = undefined;
322 addcarryxU64(&x118, &x119, 0x0, x99, x113);280 addcarryxU64(&x118, &x119, 0x0, x99, x113);
...@@ -332,19 +290,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -332,19 +290,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
332 var x126: u64 = undefined;290 var x126: u64 = undefined;
333 var x127: u1 = undefined;291 var x127: u1 = undefined;
334 addcarryxU64(&x126, &x127, x125, x107, x110);292 addcarryxU64(&x126, &x127, x125, x107, x110);
335 const x128 = (@as(u64, x127) + @as(u64, x108));293 const x128: u64 = (@as(u64, x127) + x108);
336 var x129: u64 = undefined;294 var x129: u64 = undefined;
337 var x130: u64 = undefined;295 var x130: u64 = undefined;
338 mulxU64(&x129, &x130, x3, (arg2[3]));296 mulxU64(&x129, &x130, x3, arg2[3]);
339 var x131: u64 = undefined;297 var x131: u64 = undefined;
340 var x132: u64 = undefined;298 var x132: u64 = undefined;
341 mulxU64(&x131, &x132, x3, (arg2[2]));299 mulxU64(&x131, &x132, x3, arg2[2]);
342 var x133: u64 = undefined;300 var x133: u64 = undefined;
343 var x134: u64 = undefined;301 var x134: u64 = undefined;
344 mulxU64(&x133, &x134, x3, (arg2[1]));302 mulxU64(&x133, &x134, x3, arg2[1]);
345 var x135: u64 = undefined;303 var x135: u64 = undefined;
346 var x136: u64 = undefined;304 var x136: u64 = undefined;
347 mulxU64(&x135, &x136, x3, (arg2[0]));305 mulxU64(&x135, &x136, x3, arg2[0]);
348 var x137: u64 = undefined;306 var x137: u64 = undefined;
349 var x138: u1 = undefined;307 var x138: u1 = undefined;
350 addcarryxU64(&x137, &x138, 0x0, x136, x133);308 addcarryxU64(&x137, &x138, 0x0, x136, x133);
...@@ -354,7 +312,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -354,7 +312,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
354 var x141: u64 = undefined;312 var x141: u64 = undefined;
355 var x142: u1 = undefined;313 var x142: u1 = undefined;
356 addcarryxU64(&x141, &x142, x140, x132, x129);314 addcarryxU64(&x141, &x142, x140, x132, x129);
357 const x143 = (@as(u64, x142) + x130);315 const x143: u64 = (x142 + x130);
358 var x144: u64 = undefined;316 var x144: u64 = undefined;
359 var x145: u1 = undefined;317 var x145: u1 = undefined;
360 addcarryxU64(&x144, &x145, 0x0, x120, x135);318 addcarryxU64(&x144, &x145, 0x0, x120, x135);
...@@ -382,7 +340,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -382,7 +340,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
382 var x160: u64 = undefined;340 var x160: u64 = undefined;
383 var x161: u1 = undefined;341 var x161: u1 = undefined;
384 addcarryxU64(&x160, &x161, 0x0, x159, x156);342 addcarryxU64(&x160, &x161, 0x0, x159, x156);
385 const x162 = (@as(u64, x161) + x157);343 const x162: u64 = (x161 + x157);
386 var x163: u64 = undefined;344 var x163: u64 = undefined;
387 var x164: u1 = undefined;345 var x164: u1 = undefined;
388 addcarryxU64(&x163, &x164, 0x0, x144, x158);346 addcarryxU64(&x163, &x164, 0x0, x144, x158);
...@@ -398,7 +356,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -398,7 +356,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
398 var x171: u64 = undefined;356 var x171: u64 = undefined;
399 var x172: u1 = undefined;357 var x172: u1 = undefined;
400 addcarryxU64(&x171, &x172, x170, x152, x155);358 addcarryxU64(&x171, &x172, x170, x152, x155);
401 const x173 = (@as(u64, x172) + @as(u64, x153));359 const x173: u64 = (@as(u64, x172) + x153);
402 var x174: u64 = undefined;360 var x174: u64 = undefined;
403 var x175: u1 = undefined;361 var x175: u1 = undefined;
404 subborrowxU64(&x174, &x175, 0x0, x165, 0xffffffffffffffff);362 subborrowxU64(&x174, &x175, 0x0, x165, 0xffffffffffffffff);
...@@ -407,21 +365,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -407,21 +365,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
407 subborrowxU64(&x176, &x177, x175, x167, 0xffffffff);365 subborrowxU64(&x176, &x177, x175, x167, 0xffffffff);
408 var x178: u64 = undefined;366 var x178: u64 = undefined;
409 var x179: u1 = undefined;367 var x179: u1 = undefined;
410 subborrowxU64(&x178, &x179, x177, x169, @as(u64, 0x0));368 subborrowxU64(&x178, &x179, x177, x169, 0x0);
411 var x180: u64 = undefined;369 var x180: u64 = undefined;
412 var x181: u1 = undefined;370 var x181: u1 = undefined;
413 subborrowxU64(&x180, &x181, x179, x171, 0xffffffff00000001);371 subborrowxU64(&x180, &x181, x179, x171, 0xffffffff00000001);
414 var x182: u64 = undefined;372 var x182: u64 = undefined;
415 var x183: u1 = undefined;373 var x183: u1 = undefined;
416 subborrowxU64(&x182, &x183, x181, x173, @as(u64, 0x0));374 subborrowxU64(&x182, &x183, x181, x173, 0x0);
417 var x184: u64 = undefined;375 var x184: u64 = undefined;
418 cmovznzU64(&x184, x183, x174, x165);376 const x184_selection_mask = selectionMaskU64(x183);
377 x184 = x174 ^ ((x174 ^ x165) & x184_selection_mask);
419 var x185: u64 = undefined;378 var x185: u64 = undefined;
420 cmovznzU64(&x185, x183, x176, x167);379 x185 = x176 ^ ((x176 ^ x167) & x184_selection_mask);
421 var x186: u64 = undefined;380 var x186: u64 = undefined;
422 cmovznzU64(&x186, x183, x178, x169);381 x186 = x178 ^ ((x178 ^ x169) & x184_selection_mask);
423 var x187: u64 = undefined;382 var x187: u64 = undefined;
424 cmovznzU64(&x187, x183, x180, x171);383 x187 = x180 ^ ((x180 ^ x171) & x184_selection_mask);
425 out1[0] = x184;384 out1[0] = x184;
426 out1[1] = x185;385 out1[1] = x185;
427 out1[2] = x186;386 out1[2] = x186;
...@@ -439,22 +398,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -439,22 +398,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
439pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {398pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
440 @setRuntimeSafety(mode == .debug);399 @setRuntimeSafety(mode == .debug);
441400
442 const x1 = (arg1[1]);401 const x1: u64 = arg1[1];
443 const x2 = (arg1[2]);402 const x2: u64 = arg1[2];
444 const x3 = (arg1[3]);403 const x3: u64 = arg1[3];
445 const x4 = (arg1[0]);404 const x4: u64 = arg1[0];
446 var x5: u64 = undefined;405 var x5: u64 = undefined;
447 var x6: u64 = undefined;406 var x6: u64 = undefined;
448 mulxU64(&x5, &x6, x4, (arg1[3]));407 mulxU64(&x5, &x6, x4, arg1[3]);
449 var x7: u64 = undefined;408 var x7: u64 = undefined;
450 var x8: u64 = undefined;409 var x8: u64 = undefined;
451 mulxU64(&x7, &x8, x4, (arg1[2]));410 mulxU64(&x7, &x8, x4, arg1[2]);
452 var x9: u64 = undefined;411 var x9: u64 = undefined;
453 var x10: u64 = undefined;412 var x10: u64 = undefined;
454 mulxU64(&x9, &x10, x4, (arg1[1]));413 mulxU64(&x9, &x10, x4, arg1[1]);
455 var x11: u64 = undefined;414 var x11: u64 = undefined;
456 var x12: u64 = undefined;415 var x12: u64 = undefined;
457 mulxU64(&x11, &x12, x4, (arg1[0]));416 mulxU64(&x11, &x12, x4, arg1[0]);
458 var x13: u64 = undefined;417 var x13: u64 = undefined;
459 var x14: u1 = undefined;418 var x14: u1 = undefined;
460 addcarryxU64(&x13, &x14, 0x0, x12, x9);419 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -464,7 +423,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -464,7 +423,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
464 var x17: u64 = undefined;423 var x17: u64 = undefined;
465 var x18: u1 = undefined;424 var x18: u1 = undefined;
466 addcarryxU64(&x17, &x18, x16, x8, x5);425 addcarryxU64(&x17, &x18, x16, x8, x5);
467 const x19 = (@as(u64, x18) + x6);426 const x19: u64 = (x18 + x6);
468 var x20: u64 = undefined;427 var x20: u64 = undefined;
469 var x21: u64 = undefined;428 var x21: u64 = undefined;
470 mulxU64(&x20, &x21, x11, 0xffffffff00000001);429 mulxU64(&x20, &x21, x11, 0xffffffff00000001);
...@@ -477,7 +436,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -477,7 +436,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
477 var x26: u64 = undefined;436 var x26: u64 = undefined;
478 var x27: u1 = undefined;437 var x27: u1 = undefined;
479 addcarryxU64(&x26, &x27, 0x0, x25, x22);438 addcarryxU64(&x26, &x27, 0x0, x25, x22);
480 const x28 = (@as(u64, x27) + x23);439 const x28: u64 = (x27 + x23);
481 var x29: u64 = undefined;440 var x29: u64 = undefined;
482 var x30: u1 = undefined;441 var x30: u1 = undefined;
483 addcarryxU64(&x29, &x30, 0x0, x11, x24);442 addcarryxU64(&x29, &x30, 0x0, x11, x24);
...@@ -495,16 +454,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -495,16 +454,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
495 addcarryxU64(&x37, &x38, x36, x19, x21);454 addcarryxU64(&x37, &x38, x36, x19, x21);
496 var x39: u64 = undefined;455 var x39: u64 = undefined;
497 var x40: u64 = undefined;456 var x40: u64 = undefined;
498 mulxU64(&x39, &x40, x1, (arg1[3]));457 mulxU64(&x39, &x40, x1, arg1[3]);
499 var x41: u64 = undefined;458 var x41: u64 = undefined;
500 var x42: u64 = undefined;459 var x42: u64 = undefined;
501 mulxU64(&x41, &x42, x1, (arg1[2]));460 mulxU64(&x41, &x42, x1, arg1[2]);
502 var x43: u64 = undefined;461 var x43: u64 = undefined;
503 var x44: u64 = undefined;462 var x44: u64 = undefined;
504 mulxU64(&x43, &x44, x1, (arg1[1]));463 mulxU64(&x43, &x44, x1, arg1[1]);
505 var x45: u64 = undefined;464 var x45: u64 = undefined;
506 var x46: u64 = undefined;465 var x46: u64 = undefined;
507 mulxU64(&x45, &x46, x1, (arg1[0]));466 mulxU64(&x45, &x46, x1, arg1[0]);
508 var x47: u64 = undefined;467 var x47: u64 = undefined;
509 var x48: u1 = undefined;468 var x48: u1 = undefined;
510 addcarryxU64(&x47, &x48, 0x0, x46, x43);469 addcarryxU64(&x47, &x48, 0x0, x46, x43);
...@@ -514,7 +473,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -514,7 +473,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
514 var x51: u64 = undefined;473 var x51: u64 = undefined;
515 var x52: u1 = undefined;474 var x52: u1 = undefined;
516 addcarryxU64(&x51, &x52, x50, x42, x39);475 addcarryxU64(&x51, &x52, x50, x42, x39);
517 const x53 = (@as(u64, x52) + x40);476 const x53: u64 = (x52 + x40);
518 var x54: u64 = undefined;477 var x54: u64 = undefined;
519 var x55: u1 = undefined;478 var x55: u1 = undefined;
520 addcarryxU64(&x54, &x55, 0x0, x31, x45);479 addcarryxU64(&x54, &x55, 0x0, x31, x45);
...@@ -529,7 +488,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -529,7 +488,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
529 addcarryxU64(&x60, &x61, x59, x37, x51);488 addcarryxU64(&x60, &x61, x59, x37, x51);
530 var x62: u64 = undefined;489 var x62: u64 = undefined;
531 var x63: u1 = undefined;490 var x63: u1 = undefined;
532 addcarryxU64(&x62, &x63, x61, @as(u64, x38), x53);491 addcarryxU64(&x62, &x63, x61, x38, x53);
533 var x64: u64 = undefined;492 var x64: u64 = undefined;
534 var x65: u64 = undefined;493 var x65: u64 = undefined;
535 mulxU64(&x64, &x65, x54, 0xffffffff00000001);494 mulxU64(&x64, &x65, x54, 0xffffffff00000001);
...@@ -542,7 +501,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -542,7 +501,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
542 var x70: u64 = undefined;501 var x70: u64 = undefined;
543 var x71: u1 = undefined;502 var x71: u1 = undefined;
544 addcarryxU64(&x70, &x71, 0x0, x69, x66);503 addcarryxU64(&x70, &x71, 0x0, x69, x66);
545 const x72 = (@as(u64, x71) + x67);504 const x72: u64 = (x71 + x67);
546 var x73: u64 = undefined;505 var x73: u64 = undefined;
547 var x74: u1 = undefined;506 var x74: u1 = undefined;
548 addcarryxU64(&x73, &x74, 0x0, x54, x68);507 addcarryxU64(&x73, &x74, 0x0, x54, x68);
...@@ -558,19 +517,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -558,19 +517,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
558 var x81: u64 = undefined;517 var x81: u64 = undefined;
559 var x82: u1 = undefined;518 var x82: u1 = undefined;
560 addcarryxU64(&x81, &x82, x80, x62, x65);519 addcarryxU64(&x81, &x82, x80, x62, x65);
561 const x83 = (@as(u64, x82) + @as(u64, x63));520 const x83: u64 = (@as(u64, x82) + x63);
562 var x84: u64 = undefined;521 var x84: u64 = undefined;
563 var x85: u64 = undefined;522 var x85: u64 = undefined;
564 mulxU64(&x84, &x85, x2, (arg1[3]));523 mulxU64(&x84, &x85, x2, arg1[3]);
565 var x86: u64 = undefined;524 var x86: u64 = undefined;
566 var x87: u64 = undefined;525 var x87: u64 = undefined;
567 mulxU64(&x86, &x87, x2, (arg1[2]));526 mulxU64(&x86, &x87, x2, arg1[2]);
568 var x88: u64 = undefined;527 var x88: u64 = undefined;
569 var x89: u64 = undefined;528 var x89: u64 = undefined;
570 mulxU64(&x88, &x89, x2, (arg1[1]));529 mulxU64(&x88, &x89, x2, arg1[1]);
571 var x90: u64 = undefined;530 var x90: u64 = undefined;
572 var x91: u64 = undefined;531 var x91: u64 = undefined;
573 mulxU64(&x90, &x91, x2, (arg1[0]));532 mulxU64(&x90, &x91, x2, arg1[0]);
574 var x92: u64 = undefined;533 var x92: u64 = undefined;
575 var x93: u1 = undefined;534 var x93: u1 = undefined;
576 addcarryxU64(&x92, &x93, 0x0, x91, x88);535 addcarryxU64(&x92, &x93, 0x0, x91, x88);
...@@ -580,7 +539,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -580,7 +539,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
580 var x96: u64 = undefined;539 var x96: u64 = undefined;
581 var x97: u1 = undefined;540 var x97: u1 = undefined;
582 addcarryxU64(&x96, &x97, x95, x87, x84);541 addcarryxU64(&x96, &x97, x95, x87, x84);
583 const x98 = (@as(u64, x97) + x85);542 const x98: u64 = (x97 + x85);
584 var x99: u64 = undefined;543 var x99: u64 = undefined;
585 var x100: u1 = undefined;544 var x100: u1 = undefined;
586 addcarryxU64(&x99, &x100, 0x0, x75, x90);545 addcarryxU64(&x99, &x100, 0x0, x75, x90);
...@@ -608,7 +567,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -608,7 +567,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
608 var x115: u64 = undefined;567 var x115: u64 = undefined;
609 var x116: u1 = undefined;568 var x116: u1 = undefined;
610 addcarryxU64(&x115, &x116, 0x0, x114, x111);569 addcarryxU64(&x115, &x116, 0x0, x114, x111);
611 const x117 = (@as(u64, x116) + x112);570 const x117: u64 = (x116 + x112);
612 var x118: u64 = undefined;571 var x118: u64 = undefined;
613 var x119: u1 = undefined;572 var x119: u1 = undefined;
614 addcarryxU64(&x118, &x119, 0x0, x99, x113);573 addcarryxU64(&x118, &x119, 0x0, x99, x113);
...@@ -624,19 +583,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -624,19 +583,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
624 var x126: u64 = undefined;583 var x126: u64 = undefined;
625 var x127: u1 = undefined;584 var x127: u1 = undefined;
626 addcarryxU64(&x126, &x127, x125, x107, x110);585 addcarryxU64(&x126, &x127, x125, x107, x110);
627 const x128 = (@as(u64, x127) + @as(u64, x108));586 const x128: u64 = (@as(u64, x127) + x108);
628 var x129: u64 = undefined;587 var x129: u64 = undefined;
629 var x130: u64 = undefined;588 var x130: u64 = undefined;
630 mulxU64(&x129, &x130, x3, (arg1[3]));589 mulxU64(&x129, &x130, x3, arg1[3]);
631 var x131: u64 = undefined;590 var x131: u64 = undefined;
632 var x132: u64 = undefined;591 var x132: u64 = undefined;
633 mulxU64(&x131, &x132, x3, (arg1[2]));592 mulxU64(&x131, &x132, x3, arg1[2]);
634 var x133: u64 = undefined;593 var x133: u64 = undefined;
635 var x134: u64 = undefined;594 var x134: u64 = undefined;
636 mulxU64(&x133, &x134, x3, (arg1[1]));595 mulxU64(&x133, &x134, x3, arg1[1]);
637 var x135: u64 = undefined;596 var x135: u64 = undefined;
638 var x136: u64 = undefined;597 var x136: u64 = undefined;
639 mulxU64(&x135, &x136, x3, (arg1[0]));598 mulxU64(&x135, &x136, x3, arg1[0]);
640 var x137: u64 = undefined;599 var x137: u64 = undefined;
641 var x138: u1 = undefined;600 var x138: u1 = undefined;
642 addcarryxU64(&x137, &x138, 0x0, x136, x133);601 addcarryxU64(&x137, &x138, 0x0, x136, x133);
...@@ -646,7 +605,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -646,7 +605,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
646 var x141: u64 = undefined;605 var x141: u64 = undefined;
647 var x142: u1 = undefined;606 var x142: u1 = undefined;
648 addcarryxU64(&x141, &x142, x140, x132, x129);607 addcarryxU64(&x141, &x142, x140, x132, x129);
649 const x143 = (@as(u64, x142) + x130);608 const x143: u64 = (x142 + x130);
650 var x144: u64 = undefined;609 var x144: u64 = undefined;
651 var x145: u1 = undefined;610 var x145: u1 = undefined;
652 addcarryxU64(&x144, &x145, 0x0, x120, x135);611 addcarryxU64(&x144, &x145, 0x0, x120, x135);
...@@ -674,7 +633,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -674,7 +633,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
674 var x160: u64 = undefined;633 var x160: u64 = undefined;
675 var x161: u1 = undefined;634 var x161: u1 = undefined;
676 addcarryxU64(&x160, &x161, 0x0, x159, x156);635 addcarryxU64(&x160, &x161, 0x0, x159, x156);
677 const x162 = (@as(u64, x161) + x157);636 const x162: u64 = (x161 + x157);
678 var x163: u64 = undefined;637 var x163: u64 = undefined;
679 var x164: u1 = undefined;638 var x164: u1 = undefined;
680 addcarryxU64(&x163, &x164, 0x0, x144, x158);639 addcarryxU64(&x163, &x164, 0x0, x144, x158);
...@@ -690,7 +649,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -690,7 +649,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
690 var x171: u64 = undefined;649 var x171: u64 = undefined;
691 var x172: u1 = undefined;650 var x172: u1 = undefined;
692 addcarryxU64(&x171, &x172, x170, x152, x155);651 addcarryxU64(&x171, &x172, x170, x152, x155);
693 const x173 = (@as(u64, x172) + @as(u64, x153));652 const x173: u64 = (@as(u64, x172) + x153);
694 var x174: u64 = undefined;653 var x174: u64 = undefined;
695 var x175: u1 = undefined;654 var x175: u1 = undefined;
696 subborrowxU64(&x174, &x175, 0x0, x165, 0xffffffffffffffff);655 subborrowxU64(&x174, &x175, 0x0, x165, 0xffffffffffffffff);
...@@ -699,21 +658,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -699,21 +658,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
699 subborrowxU64(&x176, &x177, x175, x167, 0xffffffff);658 subborrowxU64(&x176, &x177, x175, x167, 0xffffffff);
700 var x178: u64 = undefined;659 var x178: u64 = undefined;
701 var x179: u1 = undefined;660 var x179: u1 = undefined;
702 subborrowxU64(&x178, &x179, x177, x169, @as(u64, 0x0));661 subborrowxU64(&x178, &x179, x177, x169, 0x0);
703 var x180: u64 = undefined;662 var x180: u64 = undefined;
704 var x181: u1 = undefined;663 var x181: u1 = undefined;
705 subborrowxU64(&x180, &x181, x179, x171, 0xffffffff00000001);664 subborrowxU64(&x180, &x181, x179, x171, 0xffffffff00000001);
706 var x182: u64 = undefined;665 var x182: u64 = undefined;
707 var x183: u1 = undefined;666 var x183: u1 = undefined;
708 subborrowxU64(&x182, &x183, x181, x173, @as(u64, 0x0));667 subborrowxU64(&x182, &x183, x181, x173, 0x0);
709 var x184: u64 = undefined;668 var x184: u64 = undefined;
710 cmovznzU64(&x184, x183, x174, x165);669 const x184_selection_mask = selectionMaskU64(x183);
670 x184 = x174 ^ ((x174 ^ x165) & x184_selection_mask);
711 var x185: u64 = undefined;671 var x185: u64 = undefined;
712 cmovznzU64(&x185, x183, x176, x167);672 x185 = x176 ^ ((x176 ^ x167) & x184_selection_mask);
713 var x186: u64 = undefined;673 var x186: u64 = undefined;
714 cmovznzU64(&x186, x183, x178, x169);674 x186 = x178 ^ ((x178 ^ x169) & x184_selection_mask);
715 var x187: u64 = undefined;675 var x187: u64 = undefined;
716 cmovznzU64(&x187, x183, x180, x171);676 x187 = x180 ^ ((x180 ^ x171) & x184_selection_mask);
717 out1[0] = x184;677 out1[0] = x184;
718 out1[1] = x185;678 out1[1] = x185;
719 out1[2] = x186;679 out1[2] = x186;
...@@ -734,16 +694,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -734,16 +694,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
734694
735 var x1: u64 = undefined;695 var x1: u64 = undefined;
736 var x2: u1 = undefined;696 var x2: u1 = undefined;
737 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));697 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
738 var x3: u64 = undefined;698 var x3: u64 = undefined;
739 var x4: u1 = undefined;699 var x4: u1 = undefined;
740 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));700 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
741 var x5: u64 = undefined;701 var x5: u64 = undefined;
742 var x6: u1 = undefined;702 var x6: u1 = undefined;
743 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));703 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
744 var x7: u64 = undefined;704 var x7: u64 = undefined;
745 var x8: u1 = undefined;705 var x8: u1 = undefined;
746 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));706 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
747 var x9: u64 = undefined;707 var x9: u64 = undefined;
748 var x10: u1 = undefined;708 var x10: u1 = undefined;
749 subborrowxU64(&x9, &x10, 0x0, x1, 0xffffffffffffffff);709 subborrowxU64(&x9, &x10, 0x0, x1, 0xffffffffffffffff);
...@@ -752,21 +712,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -752,21 +712,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
752 subborrowxU64(&x11, &x12, x10, x3, 0xffffffff);712 subborrowxU64(&x11, &x12, x10, x3, 0xffffffff);
753 var x13: u64 = undefined;713 var x13: u64 = undefined;
754 var x14: u1 = undefined;714 var x14: u1 = undefined;
755 subborrowxU64(&x13, &x14, x12, x5, @as(u64, 0x0));715 subborrowxU64(&x13, &x14, x12, x5, 0x0);
756 var x15: u64 = undefined;716 var x15: u64 = undefined;
757 var x16: u1 = undefined;717 var x16: u1 = undefined;
758 subborrowxU64(&x15, &x16, x14, x7, 0xffffffff00000001);718 subborrowxU64(&x15, &x16, x14, x7, 0xffffffff00000001);
759 var x17: u64 = undefined;719 var x17: u64 = undefined;
760 var x18: u1 = undefined;720 var x18: u1 = undefined;
761 subborrowxU64(&x17, &x18, x16, @as(u64, x8), @as(u64, 0x0));721 subborrowxU64(&x17, &x18, x16, x8, 0x0);
762 var x19: u64 = undefined;722 var x19: u64 = undefined;
763 cmovznzU64(&x19, x18, x9, x1);723 const x19_selection_mask = selectionMaskU64(x18);
724 x19 = x9 ^ ((x9 ^ x1) & x19_selection_mask);
764 var x20: u64 = undefined;725 var x20: u64 = undefined;
765 cmovznzU64(&x20, x18, x11, x3);726 x20 = x11 ^ ((x11 ^ x3) & x19_selection_mask);
766 var x21: u64 = undefined;727 var x21: u64 = undefined;
767 cmovznzU64(&x21, x18, x13, x5);728 x21 = x13 ^ ((x13 ^ x5) & x19_selection_mask);
768 var x22: u64 = undefined;729 var x22: u64 = undefined;
769 cmovznzU64(&x22, x18, x15, x7);730 x22 = x15 ^ ((x15 ^ x7) & x19_selection_mask);
770 out1[0] = x19;731 out1[0] = x19;
771 out1[1] = x20;732 out1[1] = x20;
772 out1[2] = x21;733 out1[2] = x21;
...@@ -787,18 +748,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -787,18 +748,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
787748
788 var x1: u64 = undefined;749 var x1: u64 = undefined;
789 var x2: u1 = undefined;750 var x2: u1 = undefined;
790 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));751 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
791 var x3: u64 = undefined;752 var x3: u64 = undefined;
792 var x4: u1 = undefined;753 var x4: u1 = undefined;
793 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));754 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
794 var x5: u64 = undefined;755 var x5: u64 = undefined;
795 var x6: u1 = undefined;756 var x6: u1 = undefined;
796 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));757 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
797 var x7: u64 = undefined;758 var x7: u64 = undefined;
798 var x8: u1 = undefined;759 var x8: u1 = undefined;
799 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));760 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
800 var x9: u64 = undefined;761 var x9: u64 = undefined;
801 cmovznzU64(&x9, x8, @as(u64, 0x0), 0xffffffffffffffff);762 const x9_selection_mask = selectionMaskU64(x8);
763 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
802 var x10: u64 = undefined;764 var x10: u64 = undefined;
803 var x11: u1 = undefined;765 var x11: u1 = undefined;
804 addcarryxU64(&x10, &x11, 0x0, x1, x9);766 addcarryxU64(&x10, &x11, 0x0, x1, x9);
...@@ -807,7 +769,7 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -807,7 +769,7 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
807 addcarryxU64(&x12, &x13, x11, x3, (x9 & 0xffffffff));769 addcarryxU64(&x12, &x13, x11, x3, (x9 & 0xffffffff));
808 var x14: u64 = undefined;770 var x14: u64 = undefined;
809 var x15: u1 = undefined;771 var x15: u1 = undefined;
810 addcarryxU64(&x14, &x15, x13, x5, @as(u64, 0x0));772 addcarryxU64(&x14, &x15, x13, x5, 0x0);
811 var x16: u64 = undefined;773 var x16: u64 = undefined;
812 var x17: u1 = undefined;774 var x17: u1 = undefined;
813 addcarryxU64(&x16, &x17, x15, x7, (x9 & 0xffffffff00000001));775 addcarryxU64(&x16, &x17, x15, x7, (x9 & 0xffffffff00000001));
...@@ -830,18 +792,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -830,18 +792,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
830792
831 var x1: u64 = undefined;793 var x1: u64 = undefined;
832 var x2: u1 = undefined;794 var x2: u1 = undefined;
833 subborrowxU64(&x1, &x2, 0x0, @as(u64, 0x0), (arg1[0]));795 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
834 var x3: u64 = undefined;796 var x3: u64 = undefined;
835 var x4: u1 = undefined;797 var x4: u1 = undefined;
836 subborrowxU64(&x3, &x4, x2, @as(u64, 0x0), (arg1[1]));798 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
837 var x5: u64 = undefined;799 var x5: u64 = undefined;
838 var x6: u1 = undefined;800 var x6: u1 = undefined;
839 subborrowxU64(&x5, &x6, x4, @as(u64, 0x0), (arg1[2]));801 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
840 var x7: u64 = undefined;802 var x7: u64 = undefined;
841 var x8: u1 = undefined;803 var x8: u1 = undefined;
842 subborrowxU64(&x7, &x8, x6, @as(u64, 0x0), (arg1[3]));804 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
843 var x9: u64 = undefined;805 var x9: u64 = undefined;
844 cmovznzU64(&x9, x8, @as(u64, 0x0), 0xffffffffffffffff);806 const x9_selection_mask = selectionMaskU64(x8);
807 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
845 var x10: u64 = undefined;808 var x10: u64 = undefined;
846 var x11: u1 = undefined;809 var x11: u1 = undefined;
847 addcarryxU64(&x10, &x11, 0x0, x1, x9);810 addcarryxU64(&x10, &x11, 0x0, x1, x9);
...@@ -850,7 +813,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -850,7 +813,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
850 addcarryxU64(&x12, &x13, x11, x3, (x9 & 0xffffffff));813 addcarryxU64(&x12, &x13, x11, x3, (x9 & 0xffffffff));
851 var x14: u64 = undefined;814 var x14: u64 = undefined;
852 var x15: u1 = undefined;815 var x15: u1 = undefined;
853 addcarryxU64(&x14, &x15, x13, x5, @as(u64, 0x0));816 addcarryxU64(&x14, &x15, x13, x5, 0x0);
854 var x16: u64 = undefined;817 var x16: u64 = undefined;
855 var x17: u1 = undefined;818 var x17: u1 = undefined;
856 addcarryxU64(&x16, &x17, x15, x7, (x9 & 0xffffffff00000001));819 addcarryxU64(&x16, &x17, x15, x7, (x9 & 0xffffffff00000001));
...@@ -871,7 +834,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -871,7 +834,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
871pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {834pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
872 @setRuntimeSafety(mode == .debug);835 @setRuntimeSafety(mode == .debug);
873836
874 const x1 = (arg1[0]);837 const x1: u64 = arg1[0];
875 var x2: u64 = undefined;838 var x2: u64 = undefined;
876 var x3: u64 = undefined;839 var x3: u64 = undefined;
877 mulxU64(&x2, &x3, x1, 0xffffffff00000001);840 mulxU64(&x2, &x3, x1, 0xffffffff00000001);
...@@ -889,10 +852,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -889,10 +852,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
889 addcarryxU64(&x10, &x11, 0x0, x1, x6);852 addcarryxU64(&x10, &x11, 0x0, x1, x6);
890 var x12: u64 = undefined;853 var x12: u64 = undefined;
891 var x13: u1 = undefined;854 var x13: u1 = undefined;
892 addcarryxU64(&x12, &x13, x11, @as(u64, 0x0), x8);855 addcarryxU64(&x12, &x13, x11, 0x0, x8);
893 var x14: u64 = undefined;856 var x14: u64 = undefined;
894 var x15: u1 = undefined;857 var x15: u1 = undefined;
895 addcarryxU64(&x14, &x15, 0x0, x12, (arg1[1]));858 addcarryxU64(&x14, &x15, 0x0, x12, arg1[1]);
896 var x16: u64 = undefined;859 var x16: u64 = undefined;
897 var x17: u64 = undefined;860 var x17: u64 = undefined;
898 mulxU64(&x16, &x17, x14, 0xffffffff00000001);861 mulxU64(&x16, &x17, x14, 0xffffffff00000001);
...@@ -910,22 +873,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -910,22 +873,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
910 addcarryxU64(&x24, &x25, 0x0, x14, x20);873 addcarryxU64(&x24, &x25, 0x0, x14, x20);
911 var x26: u64 = undefined;874 var x26: u64 = undefined;
912 var x27: u1 = undefined;875 var x27: u1 = undefined;
913 addcarryxU64(&x26, &x27, x25, (@as(u64, x15) + (@as(u64, x13) + (@as(u64, x9) + x5))), x22);876 addcarryxU64(&x26, &x27, x25, (x15 + (x13 + (x9 + x5))), x22);
914 var x28: u64 = undefined;877 var x28: u64 = undefined;
915 var x29: u1 = undefined;878 var x29: u1 = undefined;
916 addcarryxU64(&x28, &x29, x27, x2, (@as(u64, x23) + x19));879 addcarryxU64(&x28, &x29, x27, x2, (x23 + x19));
917 var x30: u64 = undefined;880 var x30: u64 = undefined;
918 var x31: u1 = undefined;881 var x31: u1 = undefined;
919 addcarryxU64(&x30, &x31, x29, x3, x16);882 addcarryxU64(&x30, &x31, x29, x3, x16);
920 var x32: u64 = undefined;883 var x32: u64 = undefined;
921 var x33: u1 = undefined;884 var x33: u1 = undefined;
922 addcarryxU64(&x32, &x33, 0x0, x26, (arg1[2]));885 addcarryxU64(&x32, &x33, 0x0, x26, arg1[2]);
923 var x34: u64 = undefined;886 var x34: u64 = undefined;
924 var x35: u1 = undefined;887 var x35: u1 = undefined;
925 addcarryxU64(&x34, &x35, x33, x28, @as(u64, 0x0));888 addcarryxU64(&x34, &x35, x33, x28, 0x0);
926 var x36: u64 = undefined;889 var x36: u64 = undefined;
927 var x37: u1 = undefined;890 var x37: u1 = undefined;
928 addcarryxU64(&x36, &x37, x35, x30, @as(u64, 0x0));891 addcarryxU64(&x36, &x37, x35, x30, 0x0);
929 var x38: u64 = undefined;892 var x38: u64 = undefined;
930 var x39: u64 = undefined;893 var x39: u64 = undefined;
931 mulxU64(&x38, &x39, x32, 0xffffffff00000001);894 mulxU64(&x38, &x39, x32, 0xffffffff00000001);
...@@ -946,19 +909,19 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -946,19 +909,19 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
946 addcarryxU64(&x48, &x49, x47, x34, x44);909 addcarryxU64(&x48, &x49, x47, x34, x44);
947 var x50: u64 = undefined;910 var x50: u64 = undefined;
948 var x51: u1 = undefined;911 var x51: u1 = undefined;
949 addcarryxU64(&x50, &x51, x49, x36, (@as(u64, x45) + x41));912 addcarryxU64(&x50, &x51, x49, x36, (x45 + x41));
950 var x52: u64 = undefined;913 var x52: u64 = undefined;
951 var x53: u1 = undefined;914 var x53: u1 = undefined;
952 addcarryxU64(&x52, &x53, x51, (@as(u64, x37) + (@as(u64, x31) + x17)), x38);915 addcarryxU64(&x52, &x53, x51, (x37 + (x31 + x17)), x38);
953 var x54: u64 = undefined;916 var x54: u64 = undefined;
954 var x55: u1 = undefined;917 var x55: u1 = undefined;
955 addcarryxU64(&x54, &x55, 0x0, x48, (arg1[3]));918 addcarryxU64(&x54, &x55, 0x0, x48, arg1[3]);
956 var x56: u64 = undefined;919 var x56: u64 = undefined;
957 var x57: u1 = undefined;920 var x57: u1 = undefined;
958 addcarryxU64(&x56, &x57, x55, x50, @as(u64, 0x0));921 addcarryxU64(&x56, &x57, x55, x50, 0x0);
959 var x58: u64 = undefined;922 var x58: u64 = undefined;
960 var x59: u1 = undefined;923 var x59: u1 = undefined;
961 addcarryxU64(&x58, &x59, x57, x52, @as(u64, 0x0));924 addcarryxU64(&x58, &x59, x57, x52, 0x0);
962 var x60: u64 = undefined;925 var x60: u64 = undefined;
963 var x61: u64 = undefined;926 var x61: u64 = undefined;
964 mulxU64(&x60, &x61, x54, 0xffffffff00000001);927 mulxU64(&x60, &x61, x54, 0xffffffff00000001);
...@@ -979,11 +942,11 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -979,11 +942,11 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
979 addcarryxU64(&x70, &x71, x69, x56, x66);942 addcarryxU64(&x70, &x71, x69, x56, x66);
980 var x72: u64 = undefined;943 var x72: u64 = undefined;
981 var x73: u1 = undefined;944 var x73: u1 = undefined;
982 addcarryxU64(&x72, &x73, x71, x58, (@as(u64, x67) + x63));945 addcarryxU64(&x72, &x73, x71, x58, (x67 + x63));
983 var x74: u64 = undefined;946 var x74: u64 = undefined;
984 var x75: u1 = undefined;947 var x75: u1 = undefined;
985 addcarryxU64(&x74, &x75, x73, (@as(u64, x59) + (@as(u64, x53) + x39)), x60);948 addcarryxU64(&x74, &x75, x73, (x59 + (x53 + x39)), x60);
986 const x76 = (@as(u64, x75) + x61);949 const x76: u64 = (x75 + x61);
987 var x77: u64 = undefined;950 var x77: u64 = undefined;
988 var x78: u1 = undefined;951 var x78: u1 = undefined;
989 subborrowxU64(&x77, &x78, 0x0, x70, 0xffffffffffffffff);952 subborrowxU64(&x77, &x78, 0x0, x70, 0xffffffffffffffff);
...@@ -992,21 +955,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -992,21 +955,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
992 subborrowxU64(&x79, &x80, x78, x72, 0xffffffff);955 subborrowxU64(&x79, &x80, x78, x72, 0xffffffff);
993 var x81: u64 = undefined;956 var x81: u64 = undefined;
994 var x82: u1 = undefined;957 var x82: u1 = undefined;
995 subborrowxU64(&x81, &x82, x80, x74, @as(u64, 0x0));958 subborrowxU64(&x81, &x82, x80, x74, 0x0);
996 var x83: u64 = undefined;959 var x83: u64 = undefined;
997 var x84: u1 = undefined;960 var x84: u1 = undefined;
998 subborrowxU64(&x83, &x84, x82, x76, 0xffffffff00000001);961 subborrowxU64(&x83, &x84, x82, x76, 0xffffffff00000001);
999 var x85: u64 = undefined;962 var x85: u64 = undefined;
1000 var x86: u1 = undefined;963 var x86: u1 = undefined;
1001 subborrowxU64(&x85, &x86, x84, @as(u64, 0x0), @as(u64, 0x0));964 subborrowxU64(&x85, &x86, x84, 0x0, 0x0);
1002 var x87: u64 = undefined;965 var x87: u64 = undefined;
1003 cmovznzU64(&x87, x86, x77, x70);966 const x87_selection_mask = selectionMaskU64(x86);
967 x87 = x77 ^ ((x77 ^ x70) & x87_selection_mask);
1004 var x88: u64 = undefined;968 var x88: u64 = undefined;
1005 cmovznzU64(&x88, x86, x79, x72);969 x88 = x79 ^ ((x79 ^ x72) & x87_selection_mask);
1006 var x89: u64 = undefined;970 var x89: u64 = undefined;
1007 cmovznzU64(&x89, x86, x81, x74);971 x89 = x81 ^ ((x81 ^ x74) & x87_selection_mask);
1008 var x90: u64 = undefined;972 var x90: u64 = undefined;
1009 cmovznzU64(&x90, x86, x83, x76);973 x90 = x83 ^ ((x83 ^ x76) & x87_selection_mask);
1010 out1[0] = x87;974 out1[0] = x87;
1011 out1[1] = x88;975 out1[1] = x88;
1012 out1[2] = x89;976 out1[2] = x89;
...@@ -1024,10 +988,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1024,10 +988,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1024pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {988pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
1025 @setRuntimeSafety(mode == .debug);989 @setRuntimeSafety(mode == .debug);
1026990
1027 const x1 = (arg1[1]);991 const x1: u64 = arg1[1];
1028 const x2 = (arg1[2]);992 const x2: u64 = arg1[2];
1029 const x3 = (arg1[3]);993 const x3: u64 = arg1[3];
1030 const x4 = (arg1[0]);994 const x4: u64 = arg1[0];
1031 var x5: u64 = undefined;995 var x5: u64 = undefined;
1032 var x6: u64 = undefined;996 var x6: u64 = undefined;
1033 mulxU64(&x5, &x6, x4, 0x4fffffffd);997 mulxU64(&x5, &x6, x4, 0x4fffffffd);
...@@ -1069,13 +1033,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1069,13 +1033,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1069 addcarryxU64(&x29, &x30, x28, x13, x25);1033 addcarryxU64(&x29, &x30, x28, x13, x25);
1070 var x31: u64 = undefined;1034 var x31: u64 = undefined;
1071 var x32: u1 = undefined;1035 var x32: u1 = undefined;
1072 addcarryxU64(&x31, &x32, x30, x15, (@as(u64, x26) + x22));1036 addcarryxU64(&x31, &x32, x30, x15, (x26 + x22));
1073 var x33: u64 = undefined;1037 var x33: u64 = undefined;
1074 var x34: u1 = undefined;1038 var x34: u1 = undefined;
1075 addcarryxU64(&x33, &x34, x32, x17, x19);1039 addcarryxU64(&x33, &x34, x32, x17, x19);
1076 var x35: u64 = undefined;1040 var x35: u64 = undefined;
1077 var x36: u1 = undefined;1041 var x36: u1 = undefined;
1078 addcarryxU64(&x35, &x36, x34, (@as(u64, x18) + x6), x20);1042 addcarryxU64(&x35, &x36, x34, (x18 + x6), x20);
1079 var x37: u64 = undefined;1043 var x37: u64 = undefined;
1080 var x38: u64 = undefined;1044 var x38: u64 = undefined;
1081 mulxU64(&x37, &x38, x1, 0x4fffffffd);1045 mulxU64(&x37, &x38, x1, 0x4fffffffd);
...@@ -1129,13 +1093,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1129,13 +1093,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1129 addcarryxU64(&x69, &x70, x68, x53, x65);1093 addcarryxU64(&x69, &x70, x68, x53, x65);
1130 var x71: u64 = undefined;1094 var x71: u64 = undefined;
1131 var x72: u1 = undefined;1095 var x72: u1 = undefined;
1132 addcarryxU64(&x71, &x72, x70, x55, (@as(u64, x66) + x62));1096 addcarryxU64(&x71, &x72, x70, x55, (x66 + x62));
1133 var x73: u64 = undefined;1097 var x73: u64 = undefined;
1134 var x74: u1 = undefined;1098 var x74: u1 = undefined;
1135 addcarryxU64(&x73, &x74, x72, x57, x59);1099 addcarryxU64(&x73, &x74, x72, x57, x59);
1136 var x75: u64 = undefined;1100 var x75: u64 = undefined;
1137 var x76: u1 = undefined;1101 var x76: u1 = undefined;
1138 addcarryxU64(&x75, &x76, x74, ((@as(u64, x58) + @as(u64, x36)) + (@as(u64, x50) + x38)), x60);1102 addcarryxU64(&x75, &x76, x74, ((@as(u64, x58) + x36) + (x50 + x38)), x60);
1139 var x77: u64 = undefined;1103 var x77: u64 = undefined;
1140 var x78: u64 = undefined;1104 var x78: u64 = undefined;
1141 mulxU64(&x77, &x78, x2, 0x4fffffffd);1105 mulxU64(&x77, &x78, x2, 0x4fffffffd);
...@@ -1189,13 +1153,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1189,13 +1153,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1189 addcarryxU64(&x109, &x110, x108, x93, x105);1153 addcarryxU64(&x109, &x110, x108, x93, x105);
1190 var x111: u64 = undefined;1154 var x111: u64 = undefined;
1191 var x112: u1 = undefined;1155 var x112: u1 = undefined;
1192 addcarryxU64(&x111, &x112, x110, x95, (@as(u64, x106) + x102));1156 addcarryxU64(&x111, &x112, x110, x95, (x106 + x102));
1193 var x113: u64 = undefined;1157 var x113: u64 = undefined;
1194 var x114: u1 = undefined;1158 var x114: u1 = undefined;
1195 addcarryxU64(&x113, &x114, x112, x97, x99);1159 addcarryxU64(&x113, &x114, x112, x97, x99);
1196 var x115: u64 = undefined;1160 var x115: u64 = undefined;
1197 var x116: u1 = undefined;1161 var x116: u1 = undefined;
1198 addcarryxU64(&x115, &x116, x114, ((@as(u64, x98) + @as(u64, x76)) + (@as(u64, x90) + x78)), x100);1162 addcarryxU64(&x115, &x116, x114, ((@as(u64, x98) + x76) + (x90 + x78)), x100);
1199 var x117: u64 = undefined;1163 var x117: u64 = undefined;
1200 var x118: u64 = undefined;1164 var x118: u64 = undefined;
1201 mulxU64(&x117, &x118, x3, 0x4fffffffd);1165 mulxU64(&x117, &x118, x3, 0x4fffffffd);
...@@ -1249,13 +1213,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1249,13 +1213,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1249 addcarryxU64(&x149, &x150, x148, x133, x145);1213 addcarryxU64(&x149, &x150, x148, x133, x145);
1250 var x151: u64 = undefined;1214 var x151: u64 = undefined;
1251 var x152: u1 = undefined;1215 var x152: u1 = undefined;
1252 addcarryxU64(&x151, &x152, x150, x135, (@as(u64, x146) + x142));1216 addcarryxU64(&x151, &x152, x150, x135, (x146 + x142));
1253 var x153: u64 = undefined;1217 var x153: u64 = undefined;
1254 var x154: u1 = undefined;1218 var x154: u1 = undefined;
1255 addcarryxU64(&x153, &x154, x152, x137, x139);1219 addcarryxU64(&x153, &x154, x152, x137, x139);
1256 var x155: u64 = undefined;1220 var x155: u64 = undefined;
1257 var x156: u1 = undefined;1221 var x156: u1 = undefined;
1258 addcarryxU64(&x155, &x156, x154, ((@as(u64, x138) + @as(u64, x116)) + (@as(u64, x130) + x118)), x140);1222 addcarryxU64(&x155, &x156, x154, ((@as(u64, x138) + x116) + (x130 + x118)), x140);
1259 var x157: u64 = undefined;1223 var x157: u64 = undefined;
1260 var x158: u1 = undefined;1224 var x158: u1 = undefined;
1261 subborrowxU64(&x157, &x158, 0x0, x149, 0xffffffffffffffff);1225 subborrowxU64(&x157, &x158, 0x0, x149, 0xffffffffffffffff);
...@@ -1264,21 +1228,22 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1264,21 +1228,22 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1264 subborrowxU64(&x159, &x160, x158, x151, 0xffffffff);1228 subborrowxU64(&x159, &x160, x158, x151, 0xffffffff);
1265 var x161: u64 = undefined;1229 var x161: u64 = undefined;
1266 var x162: u1 = undefined;1230 var x162: u1 = undefined;
1267 subborrowxU64(&x161, &x162, x160, x153, @as(u64, 0x0));1231 subborrowxU64(&x161, &x162, x160, x153, 0x0);
1268 var x163: u64 = undefined;1232 var x163: u64 = undefined;
1269 var x164: u1 = undefined;1233 var x164: u1 = undefined;
1270 subborrowxU64(&x163, &x164, x162, x155, 0xffffffff00000001);1234 subborrowxU64(&x163, &x164, x162, x155, 0xffffffff00000001);
1271 var x165: u64 = undefined;1235 var x165: u64 = undefined;
1272 var x166: u1 = undefined;1236 var x166: u1 = undefined;
1273 subborrowxU64(&x165, &x166, x164, @as(u64, x156), @as(u64, 0x0));1237 subborrowxU64(&x165, &x166, x164, x156, 0x0);
1274 var x167: u64 = undefined;1238 var x167: u64 = undefined;
1275 cmovznzU64(&x167, x166, x157, x149);1239 const x167_selection_mask = selectionMaskU64(x166);
1240 x167 = x157 ^ ((x157 ^ x149) & x167_selection_mask);
1276 var x168: u64 = undefined;1241 var x168: u64 = undefined;
1277 cmovznzU64(&x168, x166, x159, x151);1242 x168 = x159 ^ ((x159 ^ x151) & x167_selection_mask);
1278 var x169: u64 = undefined;1243 var x169: u64 = undefined;
1279 cmovznzU64(&x169, x166, x161, x153);1244 x169 = x161 ^ ((x161 ^ x153) & x167_selection_mask);
1280 var x170: u64 = undefined;1245 var x170: u64 = undefined;
1281 cmovznzU64(&x170, x166, x163, x155);1246 x170 = x163 ^ ((x163 ^ x155) & x167_selection_mask);
1282 out1[0] = x167;1247 out1[0] = x167;
1283 out1[1] = x168;1248 out1[1] = x168;
1284 out1[2] = x169;1249 out1[2] = x169;
...@@ -1299,14 +1264,14 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1299,14 +1264,14 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1299pub fn nonzero(out1: *u64, arg1: [4]u64) void {1264pub fn nonzero(out1: *u64, arg1: [4]u64) void {
1300 @setRuntimeSafety(mode == .debug);1265 @setRuntimeSafety(mode == .debug);
13011266
1302 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3]))));1267 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | arg1[3])));
1303 out1.* = x1;1268 out1.* = x1;
1304}1269}
13051270
1306/// The function selectznz is a multi-limb conditional select.1271/// The function selectznz is a multi-limb conditional select.
1307///1272///
1308/// Postconditions:1273/// Postconditions:
1309/// eval out1 = (if arg1 = 0 then eval arg2 else eval arg3)1274/// out1 = (if arg1 = 0 then arg2 else arg3)
1310///1275///
1311/// Input Bounds:1276/// Input Bounds:
1312/// arg1: [0x0 ~> 0x1]1277/// arg1: [0x0 ~> 0x1]
...@@ -1318,13 +1283,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1318,13 +1283,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1318 @setRuntimeSafety(mode == .debug);1283 @setRuntimeSafety(mode == .debug);
13191284
1320 var x1: u64 = undefined;1285 var x1: u64 = undefined;
1321 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));1286 const x1_selection_mask = selectionMaskU64(arg1);
1287 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
1322 var x2: u64 = undefined;1288 var x2: u64 = undefined;
1323 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));1289 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
1324 var x3: u64 = undefined;1290 var x3: u64 = undefined;
1325 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));1291 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
1326 var x4: u64 = undefined;1292 var x4: u64 = undefined;
1327 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));1293 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
1328 out1[0] = x1;1294 out1[0] = x1;
1329 out1[1] = x2;1295 out1[1] = x2;
1330 out1[2] = x3;1296 out1[2] = x3;
...@@ -1345,66 +1311,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1345,66 +1311,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1345pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {1311pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1346 @setRuntimeSafety(mode == .debug);1312 @setRuntimeSafety(mode == .debug);
13471313
1348 const x1 = (arg1[3]);1314 const x1: u64 = arg1[3];
1349 const x2 = (arg1[2]);1315 const x2: u64 = arg1[2];
1350 const x3 = (arg1[1]);1316 const x3: u64 = arg1[1];
1351 const x4 = (arg1[0]);1317 const x4: u64 = arg1[0];
1352 const x5 = @as(u8, @truncate((x4 & @as(u64, 0xff))));1318 const x5: u8 = @truncate(x4);
1353 const x6 = (x4 >> 8);1319 const x6: u64 = (x4 >> 8);
1354 const x7 = @as(u8, @truncate((x6 & @as(u64, 0xff))));1320 const x7: u8 = @truncate(x6);
1355 const x8 = (x6 >> 8);1321 const x8: u64 = (x6 >> 8);
1356 const x9 = @as(u8, @truncate((x8 & @as(u64, 0xff))));1322 const x9: u8 = @truncate(x8);
1357 const x10 = (x8 >> 8);1323 const x10: u64 = (x8 >> 8);
1358 const x11 = @as(u8, @truncate((x10 & @as(u64, 0xff))));1324 const x11: u8 = @truncate(x10);
1359 const x12 = (x10 >> 8);1325 const x12: u64 = (x10 >> 8);
1360 const x13 = @as(u8, @truncate((x12 & @as(u64, 0xff))));1326 const x13: u8 = @truncate(x12);
1361 const x14 = (x12 >> 8);1327 const x14: u64 = (x12 >> 8);
1362 const x15 = @as(u8, @truncate((x14 & @as(u64, 0xff))));1328 const x15: u8 = @truncate(x14);
1363 const x16 = (x14 >> 8);1329 const x16: u64 = (x14 >> 8);
1364 const x17 = @as(u8, @truncate((x16 & @as(u64, 0xff))));1330 const x17: u8 = @truncate(x16);
1365 const x18 = @as(u8, @truncate((x16 >> 8)));1331 const x18: u8 = @truncate((x16 >> 8));
1366 const x19 = @as(u8, @truncate((x3 & @as(u64, 0xff))));1332 const x19: u8 = @truncate(x3);
1367 const x20 = (x3 >> 8);1333 const x20: u64 = (x3 >> 8);
1368 const x21 = @as(u8, @truncate((x20 & @as(u64, 0xff))));1334 const x21: u8 = @truncate(x20);
1369 const x22 = (x20 >> 8);1335 const x22: u64 = (x20 >> 8);
1370 const x23 = @as(u8, @truncate((x22 & @as(u64, 0xff))));1336 const x23: u8 = @truncate(x22);
1371 const x24 = (x22 >> 8);1337 const x24: u64 = (x22 >> 8);
1372 const x25 = @as(u8, @truncate((x24 & @as(u64, 0xff))));1338 const x25: u8 = @truncate(x24);
1373 const x26 = (x24 >> 8);1339 const x26: u64 = (x24 >> 8);
1374 const x27 = @as(u8, @truncate((x26 & @as(u64, 0xff))));1340 const x27: u8 = @truncate(x26);
1375 const x28 = (x26 >> 8);1341 const x28: u64 = (x26 >> 8);
1376 const x29 = @as(u8, @truncate((x28 & @as(u64, 0xff))));1342 const x29: u8 = @truncate(x28);
1377 const x30 = (x28 >> 8);1343 const x30: u64 = (x28 >> 8);
1378 const x31 = @as(u8, @truncate((x30 & @as(u64, 0xff))));1344 const x31: u8 = @truncate(x30);
1379 const x32 = @as(u8, @truncate((x30 >> 8)));1345 const x32: u8 = @truncate((x30 >> 8));
1380 const x33 = @as(u8, @truncate((x2 & @as(u64, 0xff))));1346 const x33: u8 = @truncate(x2);
1381 const x34 = (x2 >> 8);1347 const x34: u64 = (x2 >> 8);
1382 const x35 = @as(u8, @truncate((x34 & @as(u64, 0xff))));1348 const x35: u8 = @truncate(x34);
1383 const x36 = (x34 >> 8);1349 const x36: u64 = (x34 >> 8);
1384 const x37 = @as(u8, @truncate((x36 & @as(u64, 0xff))));1350 const x37: u8 = @truncate(x36);
1385 const x38 = (x36 >> 8);1351 const x38: u64 = (x36 >> 8);
1386 const x39 = @as(u8, @truncate((x38 & @as(u64, 0xff))));1352 const x39: u8 = @truncate(x38);
1387 const x40 = (x38 >> 8);1353 const x40: u64 = (x38 >> 8);
1388 const x41 = @as(u8, @truncate((x40 & @as(u64, 0xff))));1354 const x41: u8 = @truncate(x40);
1389 const x42 = (x40 >> 8);1355 const x42: u64 = (x40 >> 8);
1390 const x43 = @as(u8, @truncate((x42 & @as(u64, 0xff))));1356 const x43: u8 = @truncate(x42);
1391 const x44 = (x42 >> 8);1357 const x44: u64 = (x42 >> 8);
1392 const x45 = @as(u8, @truncate((x44 & @as(u64, 0xff))));1358 const x45: u8 = @truncate(x44);
1393 const x46 = @as(u8, @truncate((x44 >> 8)));1359 const x46: u8 = @truncate((x44 >> 8));
1394 const x47 = @as(u8, @truncate((x1 & @as(u64, 0xff))));1360 const x47: u8 = @truncate(x1);
1395 const x48 = (x1 >> 8);1361 const x48: u64 = (x1 >> 8);
1396 const x49 = @as(u8, @truncate((x48 & @as(u64, 0xff))));1362 const x49: u8 = @truncate(x48);
1397 const x50 = (x48 >> 8);1363 const x50: u64 = (x48 >> 8);
1398 const x51 = @as(u8, @truncate((x50 & @as(u64, 0xff))));1364 const x51: u8 = @truncate(x50);
1399 const x52 = (x50 >> 8);1365 const x52: u64 = (x50 >> 8);
1400 const x53 = @as(u8, @truncate((x52 & @as(u64, 0xff))));1366 const x53: u8 = @truncate(x52);
1401 const x54 = (x52 >> 8);1367 const x54: u64 = (x52 >> 8);
1402 const x55 = @as(u8, @truncate((x54 & @as(u64, 0xff))));1368 const x55: u8 = @truncate(x54);
1403 const x56 = (x54 >> 8);1369 const x56: u64 = (x54 >> 8);
1404 const x57 = @as(u8, @truncate((x56 & @as(u64, 0xff))));1370 const x57: u8 = @truncate(x56);
1405 const x58 = (x56 >> 8);1371 const x58: u64 = (x56 >> 8);
1406 const x59 = @as(u8, @truncate((x58 & @as(u64, 0xff))));1372 const x59: u8 = @truncate(x58);
1407 const x60 = @as(u8, @truncate((x58 >> 8)));1373 const x60: u8 = @truncate((x58 >> 8));
1408 out1[0] = x5;1374 out1[0] = x5;
1409 out1[1] = x7;1375 out1[1] = x7;
1410 out1[2] = x9;1376 out1[2] = x9;
...@@ -1454,66 +1420,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {...@@ -1454,66 +1420,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1454pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {1420pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {
1455 @setRuntimeSafety(mode == .debug);1421 @setRuntimeSafety(mode == .debug);
14561422
1457 const x1 = (@as(u64, (arg1[31])) << 56);1423 const x1: u64 = (@as(u64, arg1[31]) << 56);
1458 const x2 = (@as(u64, (arg1[30])) << 48);1424 const x2: u64 = (@as(u64, arg1[30]) << 48);
1459 const x3 = (@as(u64, (arg1[29])) << 40);1425 const x3: u64 = (@as(u64, arg1[29]) << 40);
1460 const x4 = (@as(u64, (arg1[28])) << 32);1426 const x4: u64 = (@as(u64, arg1[28]) << 32);
1461 const x5 = (@as(u64, (arg1[27])) << 24);1427 const x5: u64 = (@as(u64, arg1[27]) << 24);
1462 const x6 = (@as(u64, (arg1[26])) << 16);1428 const x6: u64 = (@as(u64, arg1[26]) << 16);
1463 const x7 = (@as(u64, (arg1[25])) << 8);1429 const x7: u64 = (@as(u64, arg1[25]) << 8);
1464 const x8 = (arg1[24]);1430 const x8: u8 = arg1[24];
1465 const x9 = (@as(u64, (arg1[23])) << 56);1431 const x9: u64 = (@as(u64, arg1[23]) << 56);
1466 const x10 = (@as(u64, (arg1[22])) << 48);1432 const x10: u64 = (@as(u64, arg1[22]) << 48);
1467 const x11 = (@as(u64, (arg1[21])) << 40);1433 const x11: u64 = (@as(u64, arg1[21]) << 40);
1468 const x12 = (@as(u64, (arg1[20])) << 32);1434 const x12: u64 = (@as(u64, arg1[20]) << 32);
1469 const x13 = (@as(u64, (arg1[19])) << 24);1435 const x13: u64 = (@as(u64, arg1[19]) << 24);
1470 const x14 = (@as(u64, (arg1[18])) << 16);1436 const x14: u64 = (@as(u64, arg1[18]) << 16);
1471 const x15 = (@as(u64, (arg1[17])) << 8);1437 const x15: u64 = (@as(u64, arg1[17]) << 8);
1472 const x16 = (arg1[16]);1438 const x16: u8 = arg1[16];
1473 const x17 = (@as(u64, (arg1[15])) << 56);1439 const x17: u64 = (@as(u64, arg1[15]) << 56);
1474 const x18 = (@as(u64, (arg1[14])) << 48);1440 const x18: u64 = (@as(u64, arg1[14]) << 48);
1475 const x19 = (@as(u64, (arg1[13])) << 40);1441 const x19: u64 = (@as(u64, arg1[13]) << 40);
1476 const x20 = (@as(u64, (arg1[12])) << 32);1442 const x20: u64 = (@as(u64, arg1[12]) << 32);
1477 const x21 = (@as(u64, (arg1[11])) << 24);1443 const x21: u64 = (@as(u64, arg1[11]) << 24);
1478 const x22 = (@as(u64, (arg1[10])) << 16);1444 const x22: u64 = (@as(u64, arg1[10]) << 16);
1479 const x23 = (@as(u64, (arg1[9])) << 8);1445 const x23: u64 = (@as(u64, arg1[9]) << 8);
1480 const x24 = (arg1[8]);1446 const x24: u8 = arg1[8];
1481 const x25 = (@as(u64, (arg1[7])) << 56);1447 const x25: u64 = (@as(u64, arg1[7]) << 56);
1482 const x26 = (@as(u64, (arg1[6])) << 48);1448 const x26: u64 = (@as(u64, arg1[6]) << 48);
1483 const x27 = (@as(u64, (arg1[5])) << 40);1449 const x27: u64 = (@as(u64, arg1[5]) << 40);
1484 const x28 = (@as(u64, (arg1[4])) << 32);1450 const x28: u64 = (@as(u64, arg1[4]) << 32);
1485 const x29 = (@as(u64, (arg1[3])) << 24);1451 const x29: u64 = (@as(u64, arg1[3]) << 24);
1486 const x30 = (@as(u64, (arg1[2])) << 16);1452 const x30: u64 = (@as(u64, arg1[2]) << 16);
1487 const x31 = (@as(u64, (arg1[1])) << 8);1453 const x31: u64 = (@as(u64, arg1[1]) << 8);
1488 const x32 = (arg1[0]);1454 const x32: u8 = arg1[0];
1489 const x33 = (x31 + @as(u64, x32));1455 const x33: u64 = (x31 + x32);
1490 const x34 = (x30 + x33);1456 const x34: u64 = (x30 + x33);
1491 const x35 = (x29 + x34);1457 const x35: u64 = (x29 + x34);
1492 const x36 = (x28 + x35);1458 const x36: u64 = (x28 + x35);
1493 const x37 = (x27 + x36);1459 const x37: u64 = (x27 + x36);
1494 const x38 = (x26 + x37);1460 const x38: u64 = (x26 + x37);
1495 const x39 = (x25 + x38);1461 const x39: u64 = (x25 + x38);
1496 const x40 = (x23 + @as(u64, x24));1462 const x40: u64 = (x23 + x24);
1497 const x41 = (x22 + x40);1463 const x41: u64 = (x22 + x40);
1498 const x42 = (x21 + x41);1464 const x42: u64 = (x21 + x41);
1499 const x43 = (x20 + x42);1465 const x43: u64 = (x20 + x42);
1500 const x44 = (x19 + x43);1466 const x44: u64 = (x19 + x43);
1501 const x45 = (x18 + x44);1467 const x45: u64 = (x18 + x44);
1502 const x46 = (x17 + x45);1468 const x46: u64 = (x17 + x45);
1503 const x47 = (x15 + @as(u64, x16));1469 const x47: u64 = (x15 + x16);
1504 const x48 = (x14 + x47);1470 const x48: u64 = (x14 + x47);
1505 const x49 = (x13 + x48);1471 const x49: u64 = (x13 + x48);
1506 const x50 = (x12 + x49);1472 const x50: u64 = (x12 + x49);
1507 const x51 = (x11 + x50);1473 const x51: u64 = (x11 + x50);
1508 const x52 = (x10 + x51);1474 const x52: u64 = (x10 + x51);
1509 const x53 = (x9 + x52);1475 const x53: u64 = (x9 + x52);
1510 const x54 = (x7 + @as(u64, x8));1476 const x54: u64 = (x7 + x8);
1511 const x55 = (x6 + x54);1477 const x55: u64 = (x6 + x54);
1512 const x56 = (x5 + x55);1478 const x56: u64 = (x5 + x55);
1513 const x57 = (x4 + x56);1479 const x57: u64 = (x4 + x56);
1514 const x58 = (x3 + x57);1480 const x58: u64 = (x3 + x57);
1515 const x59 = (x2 + x58);1481 const x59: u64 = (x2 + x58);
1516 const x60 = (x1 + x59);1482 const x60: u64 = (x1 + x59);
1517 out1[0] = x39;1483 out1[0] = x39;
1518 out1[1] = x46;1484 out1[1] = x46;
1519 out1[2] = x53;1485 out1[2] = x53;
...@@ -1529,7 +1495,7 @@ pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {...@@ -1529,7 +1495,7 @@ pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {
1529pub fn setOne(out1: *MontgomeryDomainFieldElement) void {1495pub fn setOne(out1: *MontgomeryDomainFieldElement) void {
1530 @setRuntimeSafety(mode == .debug);1496 @setRuntimeSafety(mode == .debug);
15311497
1532 out1[0] = @as(u64, 0x1);1498 out1[0] = 0x1;
1533 out1[1] = 0xffffffff00000000;1499 out1[1] = 0xffffffff00000000;
1534 out1[2] = 0xffffffffffffffff;1500 out1[2] = 0xffffffffffffffff;
1535 out1[3] = 0xfffffffe;1501 out1[3] = 0xfffffffe;
...@@ -1548,9 +1514,9 @@ pub fn msat(out1: *[5]u64) void {...@@ -1548,9 +1514,9 @@ pub fn msat(out1: *[5]u64) void {
15481514
1549 out1[0] = 0xffffffffffffffff;1515 out1[0] = 0xffffffffffffffff;
1550 out1[1] = 0xffffffff;1516 out1[1] = 0xffffffff;
1551 out1[2] = @as(u64, 0x0);1517 out1[2] = 0x0;
1552 out1[3] = 0xffffffff00000001;1518 out1[3] = 0xffffffff00000001;
1553 out1[4] = @as(u64, 0x0);1519 out1[4] = 0x0;
1554}1520}
15551521
1556/// The function divstep computes a divstep.1522/// The function divstep computes a divstep.
...@@ -1586,56 +1552,58 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1586,56 +1552,58 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
15861552
1587 var x1: u64 = undefined;1553 var x1: u64 = undefined;
1588 var x2: u1 = undefined;1554 var x2: u1 = undefined;
1589 addcarryxU64(&x1, &x2, 0x0, (~arg1), @as(u64, 0x1));1555 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
1590 const x3 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & @as(u64, 0x1)))));1556 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
1591 var x4: u64 = undefined;1557 var x4: u64 = undefined;
1592 var x5: u1 = undefined;1558 var x5: u1 = undefined;
1593 addcarryxU64(&x4, &x5, 0x0, (~arg1), @as(u64, 0x1));1559 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
1594 var x6: u64 = undefined;1560 var x6: u64 = undefined;
1595 cmovznzU64(&x6, x3, arg1, x4);1561 const x6_selection_mask = selectionMaskU64(x3);
1562 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
1596 var x7: u64 = undefined;1563 var x7: u64 = undefined;
1597 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));1564 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
1598 var x8: u64 = undefined;1565 var x8: u64 = undefined;
1599 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));1566 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
1600 var x9: u64 = undefined;1567 var x9: u64 = undefined;
1601 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));1568 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
1602 var x10: u64 = undefined;1569 var x10: u64 = undefined;
1603 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));1570 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
1604 var x11: u64 = undefined;1571 var x11: u64 = undefined;
1605 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));1572 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
1606 var x12: u64 = undefined;1573 var x12: u64 = undefined;
1607 var x13: u1 = undefined;1574 var x13: u1 = undefined;
1608 addcarryxU64(&x12, &x13, 0x0, @as(u64, 0x1), (~(arg2[0])));1575 addcarryxU64(&x12, &x13, 0x0, 0x1, (~arg2[0]));
1609 var x14: u64 = undefined;1576 var x14: u64 = undefined;
1610 var x15: u1 = undefined;1577 var x15: u1 = undefined;
1611 addcarryxU64(&x14, &x15, x13, @as(u64, 0x0), (~(arg2[1])));1578 addcarryxU64(&x14, &x15, x13, 0x0, (~arg2[1]));
1612 var x16: u64 = undefined;1579 var x16: u64 = undefined;
1613 var x17: u1 = undefined;1580 var x17: u1 = undefined;
1614 addcarryxU64(&x16, &x17, x15, @as(u64, 0x0), (~(arg2[2])));1581 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[2]));
1615 var x18: u64 = undefined;1582 var x18: u64 = undefined;
1616 var x19: u1 = undefined;1583 var x19: u1 = undefined;
1617 addcarryxU64(&x18, &x19, x17, @as(u64, 0x0), (~(arg2[3])));1584 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[3]));
1618 var x20: u64 = undefined;1585 var x20: u64 = undefined;
1619 var x21: u1 = undefined;1586 var x21: u1 = undefined;
1620 addcarryxU64(&x20, &x21, x19, @as(u64, 0x0), (~(arg2[4])));1587 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[4]));
1621 var x22: u64 = undefined;1588 var x22: u64 = undefined;
1622 cmovznzU64(&x22, x3, (arg3[0]), x12);1589 const x22_selection_mask = selectionMaskU64(x3);
1590 x22 = arg3[0] ^ ((arg3[0] ^ x12) & x22_selection_mask);
1623 var x23: u64 = undefined;1591 var x23: u64 = undefined;
1624 cmovznzU64(&x23, x3, (arg3[1]), x14);1592 x23 = arg3[1] ^ ((arg3[1] ^ x14) & x22_selection_mask);
1625 var x24: u64 = undefined;1593 var x24: u64 = undefined;
1626 cmovznzU64(&x24, x3, (arg3[2]), x16);1594 x24 = arg3[2] ^ ((arg3[2] ^ x16) & x22_selection_mask);
1627 var x25: u64 = undefined;1595 var x25: u64 = undefined;
1628 cmovznzU64(&x25, x3, (arg3[3]), x18);1596 x25 = arg3[3] ^ ((arg3[3] ^ x18) & x22_selection_mask);
1629 var x26: u64 = undefined;1597 var x26: u64 = undefined;
1630 cmovznzU64(&x26, x3, (arg3[4]), x20);1598 x26 = arg3[4] ^ ((arg3[4] ^ x20) & x22_selection_mask);
1631 var x27: u64 = undefined;1599 var x27: u64 = undefined;
1632 cmovznzU64(&x27, x3, (arg4[0]), (arg5[0]));1600 x27 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x22_selection_mask);
1633 var x28: u64 = undefined;1601 var x28: u64 = undefined;
1634 cmovznzU64(&x28, x3, (arg4[1]), (arg5[1]));1602 x28 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x22_selection_mask);
1635 var x29: u64 = undefined;1603 var x29: u64 = undefined;
1636 cmovznzU64(&x29, x3, (arg4[2]), (arg5[2]));1604 x29 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x22_selection_mask);
1637 var x30: u64 = undefined;1605 var x30: u64 = undefined;
1638 cmovznzU64(&x30, x3, (arg4[3]), (arg5[3]));1606 x30 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x22_selection_mask);
1639 var x31: u64 = undefined;1607 var x31: u64 = undefined;
1640 var x32: u1 = undefined;1608 var x32: u1 = undefined;
1641 addcarryxU64(&x31, &x32, 0x0, x27, x27);1609 addcarryxU64(&x31, &x32, 0x0, x27, x27);
...@@ -1656,31 +1624,32 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1656,31 +1624,32 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1656 subborrowxU64(&x41, &x42, x40, x33, 0xffffffff);1624 subborrowxU64(&x41, &x42, x40, x33, 0xffffffff);
1657 var x43: u64 = undefined;1625 var x43: u64 = undefined;
1658 var x44: u1 = undefined;1626 var x44: u1 = undefined;
1659 subborrowxU64(&x43, &x44, x42, x35, @as(u64, 0x0));1627 subborrowxU64(&x43, &x44, x42, x35, 0x0);
1660 var x45: u64 = undefined;1628 var x45: u64 = undefined;
1661 var x46: u1 = undefined;1629 var x46: u1 = undefined;
1662 subborrowxU64(&x45, &x46, x44, x37, 0xffffffff00000001);1630 subborrowxU64(&x45, &x46, x44, x37, 0xffffffff00000001);
1663 var x47: u64 = undefined;1631 var x47: u64 = undefined;
1664 var x48: u1 = undefined;1632 var x48: u1 = undefined;
1665 subborrowxU64(&x47, &x48, x46, @as(u64, x38), @as(u64, 0x0));1633 subborrowxU64(&x47, &x48, x46, x38, 0x0);
1666 const x49 = (arg4[3]);1634 const x49: u64 = arg4[3];
1667 const x50 = (arg4[2]);1635 const x50: u64 = arg4[2];
1668 const x51 = (arg4[1]);1636 const x51: u64 = arg4[1];
1669 const x52 = (arg4[0]);1637 const x52: u64 = arg4[0];
1670 var x53: u64 = undefined;1638 var x53: u64 = undefined;
1671 var x54: u1 = undefined;1639 var x54: u1 = undefined;
1672 subborrowxU64(&x53, &x54, 0x0, @as(u64, 0x0), x52);1640 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);
1673 var x55: u64 = undefined;1641 var x55: u64 = undefined;
1674 var x56: u1 = undefined;1642 var x56: u1 = undefined;
1675 subborrowxU64(&x55, &x56, x54, @as(u64, 0x0), x51);1643 subborrowxU64(&x55, &x56, x54, 0x0, x51);
1676 var x57: u64 = undefined;1644 var x57: u64 = undefined;
1677 var x58: u1 = undefined;1645 var x58: u1 = undefined;
1678 subborrowxU64(&x57, &x58, x56, @as(u64, 0x0), x50);1646 subborrowxU64(&x57, &x58, x56, 0x0, x50);
1679 var x59: u64 = undefined;1647 var x59: u64 = undefined;
1680 var x60: u1 = undefined;1648 var x60: u1 = undefined;
1681 subborrowxU64(&x59, &x60, x58, @as(u64, 0x0), x49);1649 subborrowxU64(&x59, &x60, x58, 0x0, x49);
1682 var x61: u64 = undefined;1650 var x61: u64 = undefined;
1683 cmovznzU64(&x61, x60, @as(u64, 0x0), 0xffffffffffffffff);1651 const x61_selection_mask = selectionMaskU64(x60);
1652 x61 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x61_selection_mask);
1684 var x62: u64 = undefined;1653 var x62: u64 = undefined;
1685 var x63: u1 = undefined;1654 var x63: u1 = undefined;
1686 addcarryxU64(&x62, &x63, 0x0, x53, x61);1655 addcarryxU64(&x62, &x63, 0x0, x53, x61);
...@@ -1689,29 +1658,31 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1689,29 +1658,31 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1689 addcarryxU64(&x64, &x65, x63, x55, (x61 & 0xffffffff));1658 addcarryxU64(&x64, &x65, x63, x55, (x61 & 0xffffffff));
1690 var x66: u64 = undefined;1659 var x66: u64 = undefined;
1691 var x67: u1 = undefined;1660 var x67: u1 = undefined;
1692 addcarryxU64(&x66, &x67, x65, x57, @as(u64, 0x0));1661 addcarryxU64(&x66, &x67, x65, x57, 0x0);
1693 var x68: u64 = undefined;1662 var x68: u64 = undefined;
1694 var x69: u1 = undefined;1663 var x69: u1 = undefined;
1695 addcarryxU64(&x68, &x69, x67, x59, (x61 & 0xffffffff00000001));1664 addcarryxU64(&x68, &x69, x67, x59, (x61 & 0xffffffff00000001));
1696 var x70: u64 = undefined;1665 var x70: u64 = undefined;
1697 cmovznzU64(&x70, x3, (arg5[0]), x62);1666 const x70_selection_mask = selectionMaskU64(x3);
1667 x70 = arg5[0] ^ ((arg5[0] ^ x62) & x70_selection_mask);
1698 var x71: u64 = undefined;1668 var x71: u64 = undefined;
1699 cmovznzU64(&x71, x3, (arg5[1]), x64);1669 x71 = arg5[1] ^ ((arg5[1] ^ x64) & x70_selection_mask);
1700 var x72: u64 = undefined;1670 var x72: u64 = undefined;
1701 cmovznzU64(&x72, x3, (arg5[2]), x66);1671 x72 = arg5[2] ^ ((arg5[2] ^ x66) & x70_selection_mask);
1702 var x73: u64 = undefined;1672 var x73: u64 = undefined;
1703 cmovznzU64(&x73, x3, (arg5[3]), x68);1673 x73 = arg5[3] ^ ((arg5[3] ^ x68) & x70_selection_mask);
1704 const x74 = @as(u1, @truncate((x22 & @as(u64, 0x1))));1674 const x74: u1 = @truncate(x22);
1705 var x75: u64 = undefined;1675 var x75: u64 = undefined;
1706 cmovznzU64(&x75, x74, @as(u64, 0x0), x7);1676 const x75_selection_mask = selectionMaskU64(x74);
1677 x75 = 0x0 ^ ((0x0 ^ x7) & x75_selection_mask);
1707 var x76: u64 = undefined;1678 var x76: u64 = undefined;
1708 cmovznzU64(&x76, x74, @as(u64, 0x0), x8);1679 x76 = 0x0 ^ ((0x0 ^ x8) & x75_selection_mask);
1709 var x77: u64 = undefined;1680 var x77: u64 = undefined;
1710 cmovznzU64(&x77, x74, @as(u64, 0x0), x9);1681 x77 = 0x0 ^ ((0x0 ^ x9) & x75_selection_mask);
1711 var x78: u64 = undefined;1682 var x78: u64 = undefined;
1712 cmovznzU64(&x78, x74, @as(u64, 0x0), x10);1683 x78 = 0x0 ^ ((0x0 ^ x10) & x75_selection_mask);
1713 var x79: u64 = undefined;1684 var x79: u64 = undefined;
1714 cmovznzU64(&x79, x74, @as(u64, 0x0), x11);1685 x79 = 0x0 ^ ((0x0 ^ x11) & x75_selection_mask);
1715 var x80: u64 = undefined;1686 var x80: u64 = undefined;
1716 var x81: u1 = undefined;1687 var x81: u1 = undefined;
1717 addcarryxU64(&x80, &x81, 0x0, x22, x75);1688 addcarryxU64(&x80, &x81, 0x0, x22, x75);
...@@ -1728,13 +1699,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1728,13 +1699,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1728 var x89: u1 = undefined;1699 var x89: u1 = undefined;
1729 addcarryxU64(&x88, &x89, x87, x26, x79);1700 addcarryxU64(&x88, &x89, x87, x26, x79);
1730 var x90: u64 = undefined;1701 var x90: u64 = undefined;
1731 cmovznzU64(&x90, x74, @as(u64, 0x0), x27);1702 const x90_selection_mask = selectionMaskU64(x74);
1703 x90 = 0x0 ^ ((0x0 ^ x27) & x90_selection_mask);
1732 var x91: u64 = undefined;1704 var x91: u64 = undefined;
1733 cmovznzU64(&x91, x74, @as(u64, 0x0), x28);1705 x91 = 0x0 ^ ((0x0 ^ x28) & x90_selection_mask);
1734 var x92: u64 = undefined;1706 var x92: u64 = undefined;
1735 cmovznzU64(&x92, x74, @as(u64, 0x0), x29);1707 x92 = 0x0 ^ ((0x0 ^ x29) & x90_selection_mask);
1736 var x93: u64 = undefined;1708 var x93: u64 = undefined;
1737 cmovznzU64(&x93, x74, @as(u64, 0x0), x30);1709 x93 = 0x0 ^ ((0x0 ^ x30) & x90_selection_mask);
1738 var x94: u64 = undefined;1710 var x94: u64 = undefined;
1739 var x95: u1 = undefined;1711 var x95: u1 = undefined;
1740 addcarryxU64(&x94, &x95, 0x0, x70, x90);1712 addcarryxU64(&x94, &x95, 0x0, x70, x90);
...@@ -1755,37 +1727,39 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1755,37 +1727,39 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1755 subborrowxU64(&x104, &x105, x103, x96, 0xffffffff);1727 subborrowxU64(&x104, &x105, x103, x96, 0xffffffff);
1756 var x106: u64 = undefined;1728 var x106: u64 = undefined;
1757 var x107: u1 = undefined;1729 var x107: u1 = undefined;
1758 subborrowxU64(&x106, &x107, x105, x98, @as(u64, 0x0));1730 subborrowxU64(&x106, &x107, x105, x98, 0x0);
1759 var x108: u64 = undefined;1731 var x108: u64 = undefined;
1760 var x109: u1 = undefined;1732 var x109: u1 = undefined;
1761 subborrowxU64(&x108, &x109, x107, x100, 0xffffffff00000001);1733 subborrowxU64(&x108, &x109, x107, x100, 0xffffffff00000001);
1762 var x110: u64 = undefined;1734 var x110: u64 = undefined;
1763 var x111: u1 = undefined;1735 var x111: u1 = undefined;
1764 subborrowxU64(&x110, &x111, x109, @as(u64, x101), @as(u64, 0x0));1736 subborrowxU64(&x110, &x111, x109, x101, 0x0);
1765 var x112: u64 = undefined;1737 var x112: u64 = undefined;
1766 var x113: u1 = undefined;1738 var x113: u1 = undefined;
1767 addcarryxU64(&x112, &x113, 0x0, x6, @as(u64, 0x1));1739 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);
1768 const x114 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));1740 const x114: u64 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));
1769 const x115 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));1741 const x115: u64 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));
1770 const x116 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));1742 const x116: u64 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));
1771 const x117 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));1743 const x117: u64 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));
1772 const x118 = ((x88 & 0x8000000000000000) | (x88 >> 1));1744 const x118: u64 = ((x88 & 0x8000000000000000) | (x88 >> 1));
1773 var x119: u64 = undefined;1745 var x119: u64 = undefined;
1774 cmovznzU64(&x119, x48, x39, x31);1746 const x119_selection_mask = selectionMaskU64(x48);
1747 x119 = x39 ^ ((x39 ^ x31) & x119_selection_mask);
1775 var x120: u64 = undefined;1748 var x120: u64 = undefined;
1776 cmovznzU64(&x120, x48, x41, x33);1749 x120 = x41 ^ ((x41 ^ x33) & x119_selection_mask);
1777 var x121: u64 = undefined;1750 var x121: u64 = undefined;
1778 cmovznzU64(&x121, x48, x43, x35);1751 x121 = x43 ^ ((x43 ^ x35) & x119_selection_mask);
1779 var x122: u64 = undefined;1752 var x122: u64 = undefined;
1780 cmovznzU64(&x122, x48, x45, x37);1753 x122 = x45 ^ ((x45 ^ x37) & x119_selection_mask);
1781 var x123: u64 = undefined;1754 var x123: u64 = undefined;
1782 cmovznzU64(&x123, x111, x102, x94);1755 const x123_selection_mask = selectionMaskU64(x111);
1756 x123 = x102 ^ ((x102 ^ x94) & x123_selection_mask);
1783 var x124: u64 = undefined;1757 var x124: u64 = undefined;
1784 cmovznzU64(&x124, x111, x104, x96);1758 x124 = x104 ^ ((x104 ^ x96) & x123_selection_mask);
1785 var x125: u64 = undefined;1759 var x125: u64 = undefined;
1786 cmovznzU64(&x125, x111, x106, x98);1760 x125 = x106 ^ ((x106 ^ x98) & x123_selection_mask);
1787 var x126: u64 = undefined;1761 var x126: u64 = undefined;
1788 cmovznzU64(&x126, x111, x108, x100);1762 x126 = x108 ^ ((x108 ^ x100) & x123_selection_mask);
1789 out1.* = x112;1763 out1.* = x112;
1790 out2[0] = x7;1764 out2[0] = x7;
1791 out2[1] = x8;1765 out2[1] = x8;
lib/std/crypto/pcurves/p256/p256_scalar_64.zig+385-411
...@@ -13,42 +13,10 @@...@@ -13,42 +13,10 @@
13//13//
14// Computed values:14// Computed values:
15// eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)15// eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)
16// bytes_eval z = z[0]16// bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248)
17// + (z[1] << 8)
18// + (z[2] << 16)
19// + (z[3] << 24)
20// + (z[4] << 32)
21// + (z[5] << 40)
22// + (z[6] << 48)
23// + (z[7] << 56)
24// + (z[8] << 64)
25// + (z[9] << 72)
26// + (z[10] << 80)
27// + (z[11] << 88)
28// + (z[12] << 96)
29// + (z[13] << 104)
30// + (z[14] << 112)
31// + (z[15] << 120)
32// + (z[16] << 128)
33// + (z[17] << 136)
34// + (z[18] << 144)
35// + (z[19] << 152)
36// + (z[20] << 160)
37// + (z[21] << 168)
38// + (z[22] << 176)
39// + (z[23] << 184)
40// + (z[24] << 192)
41// + (z[25] << 200)
42// + (z[26] << 208)
43// + (z[27] << 216)
44// + (z[28] << 224)
45// + (z[29] << 232)
46// + (z[30] << 240)
47// + (z[31] << 248)
48// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in
49// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^25618// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256
5019
51const std = @import("std");
52const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
5321
54// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -59,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;...@@ -59,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;
59// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
60pub const NonMontgomeryDomainFieldElement = [4]u64;28pub const NonMontgomeryDomainFieldElement = [4]u64;
6129
62/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
63///
64/// Postconditions:
65/// out1 = (arg1 + arg2 + arg3) mod 2^64
66/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
67///
68/// Input Bounds:
69/// arg1: [0x0 ~> 0x1]
70/// arg2: [0x0 ~> 0xffffffffffffffff]
71/// arg3: [0x0 ~> 0xffffffffffffffff]
72/// Output Bounds:
73/// out1: [0x0 ~> 0xffffffffffffffff]
74/// out2: [0x0 ~> 0x1]
75fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
76 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
77 out1.* = @truncate(x);33
78 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
79}38}
8039
81/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
82///
83/// Postconditions:
84/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
85/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
86///
87/// Input Bounds:
88/// arg1: [0x0 ~> 0x1]
89/// arg2: [0x0 ~> 0xffffffffffffffff]
90/// arg3: [0x0 ~> 0xffffffffffffffff]
91/// Output Bounds:
92/// out1: [0x0 ~> 0xffffffffffffffff]
93/// out2: [0x0 ~> 0x1]
94fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
95 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
96 out1.* = @truncate(x);43
97 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
98}48}
9949
100/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
101///
102/// Postconditions:
103/// out1 = (arg1 * arg2) mod 2^64
104/// out2 = ⌊arg1 * arg2 / 2^64⌋
105///
106/// Input Bounds:
107/// arg1: [0x0 ~> 0xffffffffffffffff]
108/// arg2: [0x0 ~> 0xffffffffffffffff]
109/// Output Bounds:
110/// out1: [0x0 ~> 0xffffffffffffffff]
111/// out2: [0x0 ~> 0xffffffffffffffff]
112fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
113 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
11453
115 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
116 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
117 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
118}57}
11958
120/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
121///60fn selectionMaskU64(arg1: u1) u64 {
122/// Postconditions:61 @setRuntimeSafety(mode == .debug);
123/// out1 = (if arg1 = 0 then arg2 else arg3)62
124///63 const value: u64 = 0 -% @as(u64, arg1);
125/// Input Bounds:64 if (@inComptime()) return value;
126/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
127/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
128/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
129/// Output Bounds:68 }
130/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
131fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
132 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
13391
134 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
135 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
136}94}
13795
138/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -147,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -147,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
147pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
148 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
149107
150 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
151 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
152 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
153 const x4 = (arg1[0]);111 const x4: u64 = arg1[0];
154 var x5: u64 = undefined;112 var x5: u64 = undefined;
155 var x6: u64 = undefined;113 var x6: u64 = undefined;
156 mulxU64(&x5, &x6, x4, (arg2[3]));114 mulxU64(&x5, &x6, x4, arg2[3]);
157 var x7: u64 = undefined;115 var x7: u64 = undefined;
158 var x8: u64 = undefined;116 var x8: u64 = undefined;
159 mulxU64(&x7, &x8, x4, (arg2[2]));117 mulxU64(&x7, &x8, x4, arg2[2]);
160 var x9: u64 = undefined;118 var x9: u64 = undefined;
161 var x10: u64 = undefined;119 var x10: u64 = undefined;
162 mulxU64(&x9, &x10, x4, (arg2[1]));120 mulxU64(&x9, &x10, x4, arg2[1]);
163 var x11: u64 = undefined;121 var x11: u64 = undefined;
164 var x12: u64 = undefined;122 var x12: u64 = undefined;
165 mulxU64(&x11, &x12, x4, (arg2[0]));123 mulxU64(&x11, &x12, x4, arg2[0]);
166 var x13: u64 = undefined;124 var x13: u64 = undefined;
167 var x14: u1 = undefined;125 var x14: u1 = undefined;
168 addcarryxU64(&x13, &x14, 0x0, x12, x9);126 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -172,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -172,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
172 var x17: u64 = undefined;130 var x17: u64 = undefined;
173 var x18: u1 = undefined;131 var x18: u1 = undefined;
174 addcarryxU64(&x17, &x18, x16, x8, x5);132 addcarryxU64(&x17, &x18, x16, x8, x5);
175 const x19 = (@as(u64, x18) + x6);133 const x19: u64 = (x18 + x6);
176 var x20: u64 = undefined;134 var x20: u64 = undefined;
177 var x21: u64 = undefined;135 var x21: u64 = undefined;
178 mulxU64(&x20, &x21, x11, 0xccd1c8aaee00bc4f);136 mulxU64(&x20, &x21, x11, 0xccd1c8aaee00bc4f);
...@@ -197,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -197,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
197 var x34: u64 = undefined;155 var x34: u64 = undefined;
198 var x35: u1 = undefined;156 var x35: u1 = undefined;
199 addcarryxU64(&x34, &x35, x33, x25, x22);157 addcarryxU64(&x34, &x35, x33, x25, x22);
200 const x36 = (@as(u64, x35) + x23);158 const x36: u64 = (x35 + x23);
201 var x37: u64 = undefined;159 var x37: u64 = undefined;
202 var x38: u1 = undefined;160 var x38: u1 = undefined;
203 addcarryxU64(&x37, &x38, 0x0, x11, x28);161 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -215,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -215,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
215 addcarryxU64(&x45, &x46, x44, x19, x36);173 addcarryxU64(&x45, &x46, x44, x19, x36);
216 var x47: u64 = undefined;174 var x47: u64 = undefined;
217 var x48: u64 = undefined;175 var x48: u64 = undefined;
218 mulxU64(&x47, &x48, x1, (arg2[3]));176 mulxU64(&x47, &x48, x1, arg2[3]);
219 var x49: u64 = undefined;177 var x49: u64 = undefined;
220 var x50: u64 = undefined;178 var x50: u64 = undefined;
221 mulxU64(&x49, &x50, x1, (arg2[2]));179 mulxU64(&x49, &x50, x1, arg2[2]);
222 var x51: u64 = undefined;180 var x51: u64 = undefined;
223 var x52: u64 = undefined;181 var x52: u64 = undefined;
224 mulxU64(&x51, &x52, x1, (arg2[1]));182 mulxU64(&x51, &x52, x1, arg2[1]);
225 var x53: u64 = undefined;183 var x53: u64 = undefined;
226 var x54: u64 = undefined;184 var x54: u64 = undefined;
227 mulxU64(&x53, &x54, x1, (arg2[0]));185 mulxU64(&x53, &x54, x1, arg2[0]);
228 var x55: u64 = undefined;186 var x55: u64 = undefined;
229 var x56: u1 = undefined;187 var x56: u1 = undefined;
230 addcarryxU64(&x55, &x56, 0x0, x54, x51);188 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -234,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -234,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
234 var x59: u64 = undefined;192 var x59: u64 = undefined;
235 var x60: u1 = undefined;193 var x60: u1 = undefined;
236 addcarryxU64(&x59, &x60, x58, x50, x47);194 addcarryxU64(&x59, &x60, x58, x50, x47);
237 const x61 = (@as(u64, x60) + x48);195 const x61: u64 = (x60 + x48);
238 var x62: u64 = undefined;196 var x62: u64 = undefined;
239 var x63: u1 = undefined;197 var x63: u1 = undefined;
240 addcarryxU64(&x62, &x63, 0x0, x39, x53);198 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -249,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -249,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
249 addcarryxU64(&x68, &x69, x67, x45, x59);207 addcarryxU64(&x68, &x69, x67, x45, x59);
250 var x70: u64 = undefined;208 var x70: u64 = undefined;
251 var x71: u1 = undefined;209 var x71: u1 = undefined;
252 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);210 addcarryxU64(&x70, &x71, x69, x46, x61);
253 var x72: u64 = undefined;211 var x72: u64 = undefined;
254 var x73: u64 = undefined;212 var x73: u64 = undefined;
255 mulxU64(&x72, &x73, x62, 0xccd1c8aaee00bc4f);213 mulxU64(&x72, &x73, x62, 0xccd1c8aaee00bc4f);
...@@ -274,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -274,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
274 var x86: u64 = undefined;232 var x86: u64 = undefined;
275 var x87: u1 = undefined;233 var x87: u1 = undefined;
276 addcarryxU64(&x86, &x87, x85, x77, x74);234 addcarryxU64(&x86, &x87, x85, x77, x74);
277 const x88 = (@as(u64, x87) + x75);235 const x88: u64 = (x87 + x75);
278 var x89: u64 = undefined;236 var x89: u64 = undefined;
279 var x90: u1 = undefined;237 var x90: u1 = undefined;
280 addcarryxU64(&x89, &x90, 0x0, x62, x80);238 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -290,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -290,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
290 var x97: u64 = undefined;248 var x97: u64 = undefined;
291 var x98: u1 = undefined;249 var x98: u1 = undefined;
292 addcarryxU64(&x97, &x98, x96, x70, x88);250 addcarryxU64(&x97, &x98, x96, x70, x88);
293 const x99 = (@as(u64, x98) + @as(u64, x71));251 const x99: u64 = (@as(u64, x98) + x71);
294 var x100: u64 = undefined;252 var x100: u64 = undefined;
295 var x101: u64 = undefined;253 var x101: u64 = undefined;
296 mulxU64(&x100, &x101, x2, (arg2[3]));254 mulxU64(&x100, &x101, x2, arg2[3]);
297 var x102: u64 = undefined;255 var x102: u64 = undefined;
298 var x103: u64 = undefined;256 var x103: u64 = undefined;
299 mulxU64(&x102, &x103, x2, (arg2[2]));257 mulxU64(&x102, &x103, x2, arg2[2]);
300 var x104: u64 = undefined;258 var x104: u64 = undefined;
301 var x105: u64 = undefined;259 var x105: u64 = undefined;
302 mulxU64(&x104, &x105, x2, (arg2[1]));260 mulxU64(&x104, &x105, x2, arg2[1]);
303 var x106: u64 = undefined;261 var x106: u64 = undefined;
304 var x107: u64 = undefined;262 var x107: u64 = undefined;
305 mulxU64(&x106, &x107, x2, (arg2[0]));263 mulxU64(&x106, &x107, x2, arg2[0]);
306 var x108: u64 = undefined;264 var x108: u64 = undefined;
307 var x109: u1 = undefined;265 var x109: u1 = undefined;
308 addcarryxU64(&x108, &x109, 0x0, x107, x104);266 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -312,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -312,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
312 var x112: u64 = undefined;270 var x112: u64 = undefined;
313 var x113: u1 = undefined;271 var x113: u1 = undefined;
314 addcarryxU64(&x112, &x113, x111, x103, x100);272 addcarryxU64(&x112, &x113, x111, x103, x100);
315 const x114 = (@as(u64, x113) + x101);273 const x114: u64 = (x113 + x101);
316 var x115: u64 = undefined;274 var x115: u64 = undefined;
317 var x116: u1 = undefined;275 var x116: u1 = undefined;
318 addcarryxU64(&x115, &x116, 0x0, x91, x106);276 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -352,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -352,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
352 var x139: u64 = undefined;310 var x139: u64 = undefined;
353 var x140: u1 = undefined;311 var x140: u1 = undefined;
354 addcarryxU64(&x139, &x140, x138, x130, x127);312 addcarryxU64(&x139, &x140, x138, x130, x127);
355 const x141 = (@as(u64, x140) + x128);313 const x141: u64 = (x140 + x128);
356 var x142: u64 = undefined;314 var x142: u64 = undefined;
357 var x143: u1 = undefined;315 var x143: u1 = undefined;
358 addcarryxU64(&x142, &x143, 0x0, x115, x133);316 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -368,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -368,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
368 var x150: u64 = undefined;326 var x150: u64 = undefined;
369 var x151: u1 = undefined;327 var x151: u1 = undefined;
370 addcarryxU64(&x150, &x151, x149, x123, x141);328 addcarryxU64(&x150, &x151, x149, x123, x141);
371 const x152 = (@as(u64, x151) + @as(u64, x124));329 const x152: u64 = (@as(u64, x151) + x124);
372 var x153: u64 = undefined;330 var x153: u64 = undefined;
373 var x154: u64 = undefined;331 var x154: u64 = undefined;
374 mulxU64(&x153, &x154, x3, (arg2[3]));332 mulxU64(&x153, &x154, x3, arg2[3]);
375 var x155: u64 = undefined;333 var x155: u64 = undefined;
376 var x156: u64 = undefined;334 var x156: u64 = undefined;
377 mulxU64(&x155, &x156, x3, (arg2[2]));335 mulxU64(&x155, &x156, x3, arg2[2]);
378 var x157: u64 = undefined;336 var x157: u64 = undefined;
379 var x158: u64 = undefined;337 var x158: u64 = undefined;
380 mulxU64(&x157, &x158, x3, (arg2[1]));338 mulxU64(&x157, &x158, x3, arg2[1]);
381 var x159: u64 = undefined;339 var x159: u64 = undefined;
382 var x160: u64 = undefined;340 var x160: u64 = undefined;
383 mulxU64(&x159, &x160, x3, (arg2[0]));341 mulxU64(&x159, &x160, x3, arg2[0]);
384 var x161: u64 = undefined;342 var x161: u64 = undefined;
385 var x162: u1 = undefined;343 var x162: u1 = undefined;
386 addcarryxU64(&x161, &x162, 0x0, x160, x157);344 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -390,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -390,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
390 var x165: u64 = undefined;348 var x165: u64 = undefined;
391 var x166: u1 = undefined;349 var x166: u1 = undefined;
392 addcarryxU64(&x165, &x166, x164, x156, x153);350 addcarryxU64(&x165, &x166, x164, x156, x153);
393 const x167 = (@as(u64, x166) + x154);351 const x167: u64 = (x166 + x154);
394 var x168: u64 = undefined;352 var x168: u64 = undefined;
395 var x169: u1 = undefined;353 var x169: u1 = undefined;
396 addcarryxU64(&x168, &x169, 0x0, x144, x159);354 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -430,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -430,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
430 var x192: u64 = undefined;388 var x192: u64 = undefined;
431 var x193: u1 = undefined;389 var x193: u1 = undefined;
432 addcarryxU64(&x192, &x193, x191, x183, x180);390 addcarryxU64(&x192, &x193, x191, x183, x180);
433 const x194 = (@as(u64, x193) + x181);391 const x194: u64 = (x193 + x181);
434 var x195: u64 = undefined;392 var x195: u64 = undefined;
435 var x196: u1 = undefined;393 var x196: u1 = undefined;
436 addcarryxU64(&x195, &x196, 0x0, x168, x186);394 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -446,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -446,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
446 var x203: u64 = undefined;404 var x203: u64 = undefined;
447 var x204: u1 = undefined;405 var x204: u1 = undefined;
448 addcarryxU64(&x203, &x204, x202, x176, x194);406 addcarryxU64(&x203, &x204, x202, x176, x194);
449 const x205 = (@as(u64, x204) + @as(u64, x177));407 const x205: u64 = (@as(u64, x204) + x177);
450 var x206: u64 = undefined;408 var x206: u64 = undefined;
451 var x207: u1 = undefined;409 var x207: u1 = undefined;
452 subborrowxU64(&x206, &x207, 0x0, x197, 0xf3b9cac2fc632551);410 subborrowxU64(&x206, &x207, 0x0, x197, 0xf3b9cac2fc632551);
...@@ -461,15 +419,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -461,15 +419,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
461 subborrowxU64(&x212, &x213, x211, x203, 0xffffffff00000000);419 subborrowxU64(&x212, &x213, x211, x203, 0xffffffff00000000);
462 var x214: u64 = undefined;420 var x214: u64 = undefined;
463 var x215: u1 = undefined;421 var x215: u1 = undefined;
464 subborrowxU64(&x214, &x215, x213, x205, @as(u64, 0x0));422 subborrowxU64(&x214, &x215, x213, x205, 0x0);
465 var x216: u64 = undefined;423 var x216: u64 = undefined;
466 cmovznzU64(&x216, x215, x206, x197);424 const x216_selection_mask = selectionMaskU64(x215);
425 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
467 var x217: u64 = undefined;426 var x217: u64 = undefined;
468 cmovznzU64(&x217, x215, x208, x199);427 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
469 var x218: u64 = undefined;428 var x218: u64 = undefined;
470 cmovznzU64(&x218, x215, x210, x201);429 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
471 var x219: u64 = undefined;430 var x219: u64 = undefined;
472 cmovznzU64(&x219, x215, x212, x203);431 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
473 out1[0] = x216;432 out1[0] = x216;
474 out1[1] = x217;433 out1[1] = x217;
475 out1[2] = x218;434 out1[2] = x218;
...@@ -487,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -487,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
487pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {446pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
488 @setRuntimeSafety(mode == .debug);447 @setRuntimeSafety(mode == .debug);
489448
490 const x1 = (arg1[1]);449 const x1: u64 = arg1[1];
491 const x2 = (arg1[2]);450 const x2: u64 = arg1[2];
492 const x3 = (arg1[3]);451 const x3: u64 = arg1[3];
493 const x4 = (arg1[0]);452 const x4: u64 = arg1[0];
494 var x5: u64 = undefined;453 var x5: u64 = undefined;
495 var x6: u64 = undefined;454 var x6: u64 = undefined;
496 mulxU64(&x5, &x6, x4, (arg1[3]));455 mulxU64(&x5, &x6, x4, arg1[3]);
497 var x7: u64 = undefined;456 var x7: u64 = undefined;
498 var x8: u64 = undefined;457 var x8: u64 = undefined;
499 mulxU64(&x7, &x8, x4, (arg1[2]));458 mulxU64(&x7, &x8, x4, arg1[2]);
500 var x9: u64 = undefined;459 var x9: u64 = undefined;
501 var x10: u64 = undefined;460 var x10: u64 = undefined;
502 mulxU64(&x9, &x10, x4, (arg1[1]));461 mulxU64(&x9, &x10, x4, arg1[1]);
503 var x11: u64 = undefined;462 var x11: u64 = undefined;
504 var x12: u64 = undefined;463 var x12: u64 = undefined;
505 mulxU64(&x11, &x12, x4, (arg1[0]));464 mulxU64(&x11, &x12, x4, arg1[0]);
506 var x13: u64 = undefined;465 var x13: u64 = undefined;
507 var x14: u1 = undefined;466 var x14: u1 = undefined;
508 addcarryxU64(&x13, &x14, 0x0, x12, x9);467 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -512,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -512,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
512 var x17: u64 = undefined;471 var x17: u64 = undefined;
513 var x18: u1 = undefined;472 var x18: u1 = undefined;
514 addcarryxU64(&x17, &x18, x16, x8, x5);473 addcarryxU64(&x17, &x18, x16, x8, x5);
515 const x19 = (@as(u64, x18) + x6);474 const x19: u64 = (x18 + x6);
516 var x20: u64 = undefined;475 var x20: u64 = undefined;
517 var x21: u64 = undefined;476 var x21: u64 = undefined;
518 mulxU64(&x20, &x21, x11, 0xccd1c8aaee00bc4f);477 mulxU64(&x20, &x21, x11, 0xccd1c8aaee00bc4f);
...@@ -537,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -537,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
537 var x34: u64 = undefined;496 var x34: u64 = undefined;
538 var x35: u1 = undefined;497 var x35: u1 = undefined;
539 addcarryxU64(&x34, &x35, x33, x25, x22);498 addcarryxU64(&x34, &x35, x33, x25, x22);
540 const x36 = (@as(u64, x35) + x23);499 const x36: u64 = (x35 + x23);
541 var x37: u64 = undefined;500 var x37: u64 = undefined;
542 var x38: u1 = undefined;501 var x38: u1 = undefined;
543 addcarryxU64(&x37, &x38, 0x0, x11, x28);502 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -555,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -555,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
555 addcarryxU64(&x45, &x46, x44, x19, x36);514 addcarryxU64(&x45, &x46, x44, x19, x36);
556 var x47: u64 = undefined;515 var x47: u64 = undefined;
557 var x48: u64 = undefined;516 var x48: u64 = undefined;
558 mulxU64(&x47, &x48, x1, (arg1[3]));517 mulxU64(&x47, &x48, x1, arg1[3]);
559 var x49: u64 = undefined;518 var x49: u64 = undefined;
560 var x50: u64 = undefined;519 var x50: u64 = undefined;
561 mulxU64(&x49, &x50, x1, (arg1[2]));520 mulxU64(&x49, &x50, x1, arg1[2]);
562 var x51: u64 = undefined;521 var x51: u64 = undefined;
563 var x52: u64 = undefined;522 var x52: u64 = undefined;
564 mulxU64(&x51, &x52, x1, (arg1[1]));523 mulxU64(&x51, &x52, x1, arg1[1]);
565 var x53: u64 = undefined;524 var x53: u64 = undefined;
566 var x54: u64 = undefined;525 var x54: u64 = undefined;
567 mulxU64(&x53, &x54, x1, (arg1[0]));526 mulxU64(&x53, &x54, x1, arg1[0]);
568 var x55: u64 = undefined;527 var x55: u64 = undefined;
569 var x56: u1 = undefined;528 var x56: u1 = undefined;
570 addcarryxU64(&x55, &x56, 0x0, x54, x51);529 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -574,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -574,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
574 var x59: u64 = undefined;533 var x59: u64 = undefined;
575 var x60: u1 = undefined;534 var x60: u1 = undefined;
576 addcarryxU64(&x59, &x60, x58, x50, x47);535 addcarryxU64(&x59, &x60, x58, x50, x47);
577 const x61 = (@as(u64, x60) + x48);536 const x61: u64 = (x60 + x48);
578 var x62: u64 = undefined;537 var x62: u64 = undefined;
579 var x63: u1 = undefined;538 var x63: u1 = undefined;
580 addcarryxU64(&x62, &x63, 0x0, x39, x53);539 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -589,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -589,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
589 addcarryxU64(&x68, &x69, x67, x45, x59);548 addcarryxU64(&x68, &x69, x67, x45, x59);
590 var x70: u64 = undefined;549 var x70: u64 = undefined;
591 var x71: u1 = undefined;550 var x71: u1 = undefined;
592 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);551 addcarryxU64(&x70, &x71, x69, x46, x61);
593 var x72: u64 = undefined;552 var x72: u64 = undefined;
594 var x73: u64 = undefined;553 var x73: u64 = undefined;
595 mulxU64(&x72, &x73, x62, 0xccd1c8aaee00bc4f);554 mulxU64(&x72, &x73, x62, 0xccd1c8aaee00bc4f);
...@@ -614,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -614,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
614 var x86: u64 = undefined;573 var x86: u64 = undefined;
615 var x87: u1 = undefined;574 var x87: u1 = undefined;
616 addcarryxU64(&x86, &x87, x85, x77, x74);575 addcarryxU64(&x86, &x87, x85, x77, x74);
617 const x88 = (@as(u64, x87) + x75);576 const x88: u64 = (x87 + x75);
618 var x89: u64 = undefined;577 var x89: u64 = undefined;
619 var x90: u1 = undefined;578 var x90: u1 = undefined;
620 addcarryxU64(&x89, &x90, 0x0, x62, x80);579 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -630,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -630,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
630 var x97: u64 = undefined;589 var x97: u64 = undefined;
631 var x98: u1 = undefined;590 var x98: u1 = undefined;
632 addcarryxU64(&x97, &x98, x96, x70, x88);591 addcarryxU64(&x97, &x98, x96, x70, x88);
633 const x99 = (@as(u64, x98) + @as(u64, x71));592 const x99: u64 = (@as(u64, x98) + x71);
634 var x100: u64 = undefined;593 var x100: u64 = undefined;
635 var x101: u64 = undefined;594 var x101: u64 = undefined;
636 mulxU64(&x100, &x101, x2, (arg1[3]));595 mulxU64(&x100, &x101, x2, arg1[3]);
637 var x102: u64 = undefined;596 var x102: u64 = undefined;
638 var x103: u64 = undefined;597 var x103: u64 = undefined;
639 mulxU64(&x102, &x103, x2, (arg1[2]));598 mulxU64(&x102, &x103, x2, arg1[2]);
640 var x104: u64 = undefined;599 var x104: u64 = undefined;
641 var x105: u64 = undefined;600 var x105: u64 = undefined;
642 mulxU64(&x104, &x105, x2, (arg1[1]));601 mulxU64(&x104, &x105, x2, arg1[1]);
643 var x106: u64 = undefined;602 var x106: u64 = undefined;
644 var x107: u64 = undefined;603 var x107: u64 = undefined;
645 mulxU64(&x106, &x107, x2, (arg1[0]));604 mulxU64(&x106, &x107, x2, arg1[0]);
646 var x108: u64 = undefined;605 var x108: u64 = undefined;
647 var x109: u1 = undefined;606 var x109: u1 = undefined;
648 addcarryxU64(&x108, &x109, 0x0, x107, x104);607 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -652,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -652,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
652 var x112: u64 = undefined;611 var x112: u64 = undefined;
653 var x113: u1 = undefined;612 var x113: u1 = undefined;
654 addcarryxU64(&x112, &x113, x111, x103, x100);613 addcarryxU64(&x112, &x113, x111, x103, x100);
655 const x114 = (@as(u64, x113) + x101);614 const x114: u64 = (x113 + x101);
656 var x115: u64 = undefined;615 var x115: u64 = undefined;
657 var x116: u1 = undefined;616 var x116: u1 = undefined;
658 addcarryxU64(&x115, &x116, 0x0, x91, x106);617 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -692,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -692,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
692 var x139: u64 = undefined;651 var x139: u64 = undefined;
693 var x140: u1 = undefined;652 var x140: u1 = undefined;
694 addcarryxU64(&x139, &x140, x138, x130, x127);653 addcarryxU64(&x139, &x140, x138, x130, x127);
695 const x141 = (@as(u64, x140) + x128);654 const x141: u64 = (x140 + x128);
696 var x142: u64 = undefined;655 var x142: u64 = undefined;
697 var x143: u1 = undefined;656 var x143: u1 = undefined;
698 addcarryxU64(&x142, &x143, 0x0, x115, x133);657 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -708,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -708,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
708 var x150: u64 = undefined;667 var x150: u64 = undefined;
709 var x151: u1 = undefined;668 var x151: u1 = undefined;
710 addcarryxU64(&x150, &x151, x149, x123, x141);669 addcarryxU64(&x150, &x151, x149, x123, x141);
711 const x152 = (@as(u64, x151) + @as(u64, x124));670 const x152: u64 = (@as(u64, x151) + x124);
712 var x153: u64 = undefined;671 var x153: u64 = undefined;
713 var x154: u64 = undefined;672 var x154: u64 = undefined;
714 mulxU64(&x153, &x154, x3, (arg1[3]));673 mulxU64(&x153, &x154, x3, arg1[3]);
715 var x155: u64 = undefined;674 var x155: u64 = undefined;
716 var x156: u64 = undefined;675 var x156: u64 = undefined;
717 mulxU64(&x155, &x156, x3, (arg1[2]));676 mulxU64(&x155, &x156, x3, arg1[2]);
718 var x157: u64 = undefined;677 var x157: u64 = undefined;
719 var x158: u64 = undefined;678 var x158: u64 = undefined;
720 mulxU64(&x157, &x158, x3, (arg1[1]));679 mulxU64(&x157, &x158, x3, arg1[1]);
721 var x159: u64 = undefined;680 var x159: u64 = undefined;
722 var x160: u64 = undefined;681 var x160: u64 = undefined;
723 mulxU64(&x159, &x160, x3, (arg1[0]));682 mulxU64(&x159, &x160, x3, arg1[0]);
724 var x161: u64 = undefined;683 var x161: u64 = undefined;
725 var x162: u1 = undefined;684 var x162: u1 = undefined;
726 addcarryxU64(&x161, &x162, 0x0, x160, x157);685 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -730,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -730,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
730 var x165: u64 = undefined;689 var x165: u64 = undefined;
731 var x166: u1 = undefined;690 var x166: u1 = undefined;
732 addcarryxU64(&x165, &x166, x164, x156, x153);691 addcarryxU64(&x165, &x166, x164, x156, x153);
733 const x167 = (@as(u64, x166) + x154);692 const x167: u64 = (x166 + x154);
734 var x168: u64 = undefined;693 var x168: u64 = undefined;
735 var x169: u1 = undefined;694 var x169: u1 = undefined;
736 addcarryxU64(&x168, &x169, 0x0, x144, x159);695 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -770,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -770,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
770 var x192: u64 = undefined;729 var x192: u64 = undefined;
771 var x193: u1 = undefined;730 var x193: u1 = undefined;
772 addcarryxU64(&x192, &x193, x191, x183, x180);731 addcarryxU64(&x192, &x193, x191, x183, x180);
773 const x194 = (@as(u64, x193) + x181);732 const x194: u64 = (x193 + x181);
774 var x195: u64 = undefined;733 var x195: u64 = undefined;
775 var x196: u1 = undefined;734 var x196: u1 = undefined;
776 addcarryxU64(&x195, &x196, 0x0, x168, x186);735 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -786,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -786,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
786 var x203: u64 = undefined;745 var x203: u64 = undefined;
787 var x204: u1 = undefined;746 var x204: u1 = undefined;
788 addcarryxU64(&x203, &x204, x202, x176, x194);747 addcarryxU64(&x203, &x204, x202, x176, x194);
789 const x205 = (@as(u64, x204) + @as(u64, x177));748 const x205: u64 = (@as(u64, x204) + x177);
790 var x206: u64 = undefined;749 var x206: u64 = undefined;
791 var x207: u1 = undefined;750 var x207: u1 = undefined;
792 subborrowxU64(&x206, &x207, 0x0, x197, 0xf3b9cac2fc632551);751 subborrowxU64(&x206, &x207, 0x0, x197, 0xf3b9cac2fc632551);
...@@ -801,15 +760,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -801,15 +760,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
801 subborrowxU64(&x212, &x213, x211, x203, 0xffffffff00000000);760 subborrowxU64(&x212, &x213, x211, x203, 0xffffffff00000000);
802 var x214: u64 = undefined;761 var x214: u64 = undefined;
803 var x215: u1 = undefined;762 var x215: u1 = undefined;
804 subborrowxU64(&x214, &x215, x213, x205, @as(u64, 0x0));763 subborrowxU64(&x214, &x215, x213, x205, 0x0);
805 var x216: u64 = undefined;764 var x216: u64 = undefined;
806 cmovznzU64(&x216, x215, x206, x197);765 const x216_selection_mask = selectionMaskU64(x215);
766 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
807 var x217: u64 = undefined;767 var x217: u64 = undefined;
808 cmovznzU64(&x217, x215, x208, x199);768 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
809 var x218: u64 = undefined;769 var x218: u64 = undefined;
810 cmovznzU64(&x218, x215, x210, x201);770 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
811 var x219: u64 = undefined;771 var x219: u64 = undefined;
812 cmovznzU64(&x219, x215, x212, x203);772 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
813 out1[0] = x216;773 out1[0] = x216;
814 out1[1] = x217;774 out1[1] = x217;
815 out1[2] = x218;775 out1[2] = x218;
...@@ -830,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -830,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
830790
831 var x1: u64 = undefined;791 var x1: u64 = undefined;
832 var x2: u1 = undefined;792 var x2: u1 = undefined;
833 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));793 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
834 var x3: u64 = undefined;794 var x3: u64 = undefined;
835 var x4: u1 = undefined;795 var x4: u1 = undefined;
836 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));796 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
837 var x5: u64 = undefined;797 var x5: u64 = undefined;
838 var x6: u1 = undefined;798 var x6: u1 = undefined;
839 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));799 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
840 var x7: u64 = undefined;800 var x7: u64 = undefined;
841 var x8: u1 = undefined;801 var x8: u1 = undefined;
842 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));802 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
843 var x9: u64 = undefined;803 var x9: u64 = undefined;
844 var x10: u1 = undefined;804 var x10: u1 = undefined;
845 subborrowxU64(&x9, &x10, 0x0, x1, 0xf3b9cac2fc632551);805 subborrowxU64(&x9, &x10, 0x0, x1, 0xf3b9cac2fc632551);
...@@ -854,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -854,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
854 subborrowxU64(&x15, &x16, x14, x7, 0xffffffff00000000);814 subborrowxU64(&x15, &x16, x14, x7, 0xffffffff00000000);
855 var x17: u64 = undefined;815 var x17: u64 = undefined;
856 var x18: u1 = undefined;816 var x18: u1 = undefined;
857 subborrowxU64(&x17, &x18, x16, @as(u64, x8), @as(u64, 0x0));817 subborrowxU64(&x17, &x18, x16, x8, 0x0);
858 var x19: u64 = undefined;818 var x19: u64 = undefined;
859 cmovznzU64(&x19, x18, x9, x1);819 const x19_selection_mask = selectionMaskU64(x18);
820 x19 = x9 ^ ((x9 ^ x1) & x19_selection_mask);
860 var x20: u64 = undefined;821 var x20: u64 = undefined;
861 cmovznzU64(&x20, x18, x11, x3);822 x20 = x11 ^ ((x11 ^ x3) & x19_selection_mask);
862 var x21: u64 = undefined;823 var x21: u64 = undefined;
863 cmovznzU64(&x21, x18, x13, x5);824 x21 = x13 ^ ((x13 ^ x5) & x19_selection_mask);
864 var x22: u64 = undefined;825 var x22: u64 = undefined;
865 cmovznzU64(&x22, x18, x15, x7);826 x22 = x15 ^ ((x15 ^ x7) & x19_selection_mask);
866 out1[0] = x19;827 out1[0] = x19;
867 out1[1] = x20;828 out1[1] = x20;
868 out1[2] = x21;829 out1[2] = x21;
...@@ -883,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -883,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
883844
884 var x1: u64 = undefined;845 var x1: u64 = undefined;
885 var x2: u1 = undefined;846 var x2: u1 = undefined;
886 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));847 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
887 var x3: u64 = undefined;848 var x3: u64 = undefined;
888 var x4: u1 = undefined;849 var x4: u1 = undefined;
889 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));850 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
890 var x5: u64 = undefined;851 var x5: u64 = undefined;
891 var x6: u1 = undefined;852 var x6: u1 = undefined;
892 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));853 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
893 var x7: u64 = undefined;854 var x7: u64 = undefined;
894 var x8: u1 = undefined;855 var x8: u1 = undefined;
895 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));856 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
896 var x9: u64 = undefined;857 var x9: u64 = undefined;
897 cmovznzU64(&x9, x8, @as(u64, 0x0), 0xffffffffffffffff);858 const x9_selection_mask = selectionMaskU64(x8);
859 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
898 var x10: u64 = undefined;860 var x10: u64 = undefined;
899 var x11: u1 = undefined;861 var x11: u1 = undefined;
900 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xf3b9cac2fc632551));862 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xf3b9cac2fc632551));
...@@ -926,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -926,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
926888
927 var x1: u64 = undefined;889 var x1: u64 = undefined;
928 var x2: u1 = undefined;890 var x2: u1 = undefined;
929 subborrowxU64(&x1, &x2, 0x0, @as(u64, 0x0), (arg1[0]));891 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
930 var x3: u64 = undefined;892 var x3: u64 = undefined;
931 var x4: u1 = undefined;893 var x4: u1 = undefined;
932 subborrowxU64(&x3, &x4, x2, @as(u64, 0x0), (arg1[1]));894 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
933 var x5: u64 = undefined;895 var x5: u64 = undefined;
934 var x6: u1 = undefined;896 var x6: u1 = undefined;
935 subborrowxU64(&x5, &x6, x4, @as(u64, 0x0), (arg1[2]));897 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
936 var x7: u64 = undefined;898 var x7: u64 = undefined;
937 var x8: u1 = undefined;899 var x8: u1 = undefined;
938 subborrowxU64(&x7, &x8, x6, @as(u64, 0x0), (arg1[3]));900 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
939 var x9: u64 = undefined;901 var x9: u64 = undefined;
940 cmovznzU64(&x9, x8, @as(u64, 0x0), 0xffffffffffffffff);902 const x9_selection_mask = selectionMaskU64(x8);
903 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
941 var x10: u64 = undefined;904 var x10: u64 = undefined;
942 var x11: u1 = undefined;905 var x11: u1 = undefined;
943 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xf3b9cac2fc632551));906 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xf3b9cac2fc632551));
...@@ -967,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -967,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
967pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {930pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
968 @setRuntimeSafety(mode == .debug);931 @setRuntimeSafety(mode == .debug);
969932
970 const x1 = (arg1[0]);933 const x1: u64 = arg1[0];
971 var x2: u64 = undefined;934 var x2: u64 = undefined;
972 var x3: u64 = undefined;935 var x3: u64 = undefined;
973 mulxU64(&x2, &x3, x1, 0xccd1c8aaee00bc4f);936 mulxU64(&x2, &x3, x1, 0xccd1c8aaee00bc4f);
...@@ -997,22 +960,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -997,22 +960,22 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
997 addcarryxU64(&x18, &x19, 0x0, x1, x10);960 addcarryxU64(&x18, &x19, 0x0, x1, x10);
998 var x20: u64 = undefined;961 var x20: u64 = undefined;
999 var x21: u1 = undefined;962 var x21: u1 = undefined;
1000 addcarryxU64(&x20, &x21, x19, @as(u64, 0x0), x12);963 addcarryxU64(&x20, &x21, x19, 0x0, x12);
1001 var x22: u64 = undefined;964 var x22: u64 = undefined;
1002 var x23: u1 = undefined;965 var x23: u1 = undefined;
1003 addcarryxU64(&x22, &x23, x21, @as(u64, 0x0), x14);966 addcarryxU64(&x22, &x23, x21, 0x0, x14);
1004 var x24: u64 = undefined;967 var x24: u64 = undefined;
1005 var x25: u1 = undefined;968 var x25: u1 = undefined;
1006 addcarryxU64(&x24, &x25, x23, @as(u64, 0x0), x16);969 addcarryxU64(&x24, &x25, x23, 0x0, x16);
1007 var x26: u64 = undefined;970 var x26: u64 = undefined;
1008 var x27: u1 = undefined;971 var x27: u1 = undefined;
1009 addcarryxU64(&x26, &x27, 0x0, x20, (arg1[1]));972 addcarryxU64(&x26, &x27, 0x0, x20, arg1[1]);
1010 var x28: u64 = undefined;973 var x28: u64 = undefined;
1011 var x29: u1 = undefined;974 var x29: u1 = undefined;
1012 addcarryxU64(&x28, &x29, x27, x22, @as(u64, 0x0));975 addcarryxU64(&x28, &x29, x27, x22, 0x0);
1013 var x30: u64 = undefined;976 var x30: u64 = undefined;
1014 var x31: u1 = undefined;977 var x31: u1 = undefined;
1015 addcarryxU64(&x30, &x31, x29, x24, @as(u64, 0x0));978 addcarryxU64(&x30, &x31, x29, x24, 0x0);
1016 var x32: u64 = undefined;979 var x32: u64 = undefined;
1017 var x33: u64 = undefined;980 var x33: u64 = undefined;
1018 mulxU64(&x32, &x33, x26, 0xccd1c8aaee00bc4f);981 mulxU64(&x32, &x33, x26, 0xccd1c8aaee00bc4f);
...@@ -1048,16 +1011,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1048,16 +1011,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1048 addcarryxU64(&x52, &x53, x51, x30, x44);1011 addcarryxU64(&x52, &x53, x51, x30, x44);
1049 var x54: u64 = undefined;1012 var x54: u64 = undefined;
1050 var x55: u1 = undefined;1013 var x55: u1 = undefined;
1051 addcarryxU64(&x54, &x55, x53, (@as(u64, x31) + (@as(u64, x25) + (@as(u64, x17) + x5))), x46);1014 addcarryxU64(&x54, &x55, x53, (x31 + (x25 + (x17 + x5))), x46);
1052 var x56: u64 = undefined;1015 var x56: u64 = undefined;
1053 var x57: u1 = undefined;1016 var x57: u1 = undefined;
1054 addcarryxU64(&x56, &x57, 0x0, x50, (arg1[2]));1017 addcarryxU64(&x56, &x57, 0x0, x50, arg1[2]);
1055 var x58: u64 = undefined;1018 var x58: u64 = undefined;
1056 var x59: u1 = undefined;1019 var x59: u1 = undefined;
1057 addcarryxU64(&x58, &x59, x57, x52, @as(u64, 0x0));1020 addcarryxU64(&x58, &x59, x57, x52, 0x0);
1058 var x60: u64 = undefined;1021 var x60: u64 = undefined;
1059 var x61: u1 = undefined;1022 var x61: u1 = undefined;
1060 addcarryxU64(&x60, &x61, x59, x54, @as(u64, 0x0));1023 addcarryxU64(&x60, &x61, x59, x54, 0x0);
1061 var x62: u64 = undefined;1024 var x62: u64 = undefined;
1062 var x63: u64 = undefined;1025 var x63: u64 = undefined;
1063 mulxU64(&x62, &x63, x56, 0xccd1c8aaee00bc4f);1026 mulxU64(&x62, &x63, x56, 0xccd1c8aaee00bc4f);
...@@ -1093,16 +1056,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1093,16 +1056,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1093 addcarryxU64(&x82, &x83, x81, x60, x74);1056 addcarryxU64(&x82, &x83, x81, x60, x74);
1094 var x84: u64 = undefined;1057 var x84: u64 = undefined;
1095 var x85: u1 = undefined;1058 var x85: u1 = undefined;
1096 addcarryxU64(&x84, &x85, x83, (@as(u64, x61) + (@as(u64, x55) + (@as(u64, x47) + x35))), x76);1059 addcarryxU64(&x84, &x85, x83, (x61 + (x55 + (x47 + x35))), x76);
1097 var x86: u64 = undefined;1060 var x86: u64 = undefined;
1098 var x87: u1 = undefined;1061 var x87: u1 = undefined;
1099 addcarryxU64(&x86, &x87, 0x0, x80, (arg1[3]));1062 addcarryxU64(&x86, &x87, 0x0, x80, arg1[3]);
1100 var x88: u64 = undefined;1063 var x88: u64 = undefined;
1101 var x89: u1 = undefined;1064 var x89: u1 = undefined;
1102 addcarryxU64(&x88, &x89, x87, x82, @as(u64, 0x0));1065 addcarryxU64(&x88, &x89, x87, x82, 0x0);
1103 var x90: u64 = undefined;1066 var x90: u64 = undefined;
1104 var x91: u1 = undefined;1067 var x91: u1 = undefined;
1105 addcarryxU64(&x90, &x91, x89, x84, @as(u64, 0x0));1068 addcarryxU64(&x90, &x91, x89, x84, 0x0);
1106 var x92: u64 = undefined;1069 var x92: u64 = undefined;
1107 var x93: u64 = undefined;1070 var x93: u64 = undefined;
1108 mulxU64(&x92, &x93, x86, 0xccd1c8aaee00bc4f);1071 mulxU64(&x92, &x93, x86, 0xccd1c8aaee00bc4f);
...@@ -1138,8 +1101,8 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1138,8 +1101,8 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1138 addcarryxU64(&x112, &x113, x111, x90, x104);1101 addcarryxU64(&x112, &x113, x111, x90, x104);
1139 var x114: u64 = undefined;1102 var x114: u64 = undefined;
1140 var x115: u1 = undefined;1103 var x115: u1 = undefined;
1141 addcarryxU64(&x114, &x115, x113, (@as(u64, x91) + (@as(u64, x85) + (@as(u64, x77) + x65))), x106);1104 addcarryxU64(&x114, &x115, x113, (x91 + (x85 + (x77 + x65))), x106);
1142 const x116 = (@as(u64, x115) + (@as(u64, x107) + x95));1105 const x116: u64 = (x115 + (x107 + x95));
1143 var x117: u64 = undefined;1106 var x117: u64 = undefined;
1144 var x118: u1 = undefined;1107 var x118: u1 = undefined;
1145 subborrowxU64(&x117, &x118, 0x0, x110, 0xf3b9cac2fc632551);1108 subborrowxU64(&x117, &x118, 0x0, x110, 0xf3b9cac2fc632551);
...@@ -1154,15 +1117,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1154,15 +1117,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1154 subborrowxU64(&x123, &x124, x122, x116, 0xffffffff00000000);1117 subborrowxU64(&x123, &x124, x122, x116, 0xffffffff00000000);
1155 var x125: u64 = undefined;1118 var x125: u64 = undefined;
1156 var x126: u1 = undefined;1119 var x126: u1 = undefined;
1157 subborrowxU64(&x125, &x126, x124, @as(u64, 0x0), @as(u64, 0x0));1120 subborrowxU64(&x125, &x126, x124, 0x0, 0x0);
1158 var x127: u64 = undefined;1121 var x127: u64 = undefined;
1159 cmovznzU64(&x127, x126, x117, x110);1122 const x127_selection_mask = selectionMaskU64(x126);
1123 x127 = x117 ^ ((x117 ^ x110) & x127_selection_mask);
1160 var x128: u64 = undefined;1124 var x128: u64 = undefined;
1161 cmovznzU64(&x128, x126, x119, x112);1125 x128 = x119 ^ ((x119 ^ x112) & x127_selection_mask);
1162 var x129: u64 = undefined;1126 var x129: u64 = undefined;
1163 cmovznzU64(&x129, x126, x121, x114);1127 x129 = x121 ^ ((x121 ^ x114) & x127_selection_mask);
1164 var x130: u64 = undefined;1128 var x130: u64 = undefined;
1165 cmovznzU64(&x130, x126, x123, x116);1129 x130 = x123 ^ ((x123 ^ x116) & x127_selection_mask);
1166 out1[0] = x127;1130 out1[0] = x127;
1167 out1[1] = x128;1131 out1[1] = x128;
1168 out1[2] = x129;1132 out1[2] = x129;
...@@ -1180,10 +1144,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1180,10 +1144,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1180pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {1144pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
1181 @setRuntimeSafety(mode == .debug);1145 @setRuntimeSafety(mode == .debug);
11821146
1183 const x1 = (arg1[1]);1147 const x1: u64 = arg1[1];
1184 const x2 = (arg1[2]);1148 const x2: u64 = arg1[2];
1185 const x3 = (arg1[3]);1149 const x3: u64 = arg1[3];
1186 const x4 = (arg1[0]);1150 const x4: u64 = arg1[0];
1187 var x5: u64 = undefined;1151 var x5: u64 = undefined;
1188 var x6: u64 = undefined;1152 var x6: u64 = undefined;
1189 mulxU64(&x5, &x6, x4, 0x66e12d94f3d95620);1153 mulxU64(&x5, &x6, x4, 0x66e12d94f3d95620);
...@@ -1243,7 +1207,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1243,7 +1207,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1243 addcarryxU64(&x41, &x42, x40, x17, x33);1207 addcarryxU64(&x41, &x42, x40, x17, x33);
1244 var x43: u64 = undefined;1208 var x43: u64 = undefined;
1245 var x44: u1 = undefined;1209 var x44: u1 = undefined;
1246 addcarryxU64(&x43, &x44, x42, (@as(u64, x18) + x6), (@as(u64, x34) + x22));1210 addcarryxU64(&x43, &x44, x42, (x18 + x6), (x34 + x22));
1247 var x45: u64 = undefined;1211 var x45: u64 = undefined;
1248 var x46: u64 = undefined;1212 var x46: u64 = undefined;
1249 mulxU64(&x45, &x46, x1, 0x66e12d94f3d95620);1213 mulxU64(&x45, &x46, x1, 0x66e12d94f3d95620);
...@@ -1315,7 +1279,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1315,7 +1279,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1315 addcarryxU64(&x89, &x90, x88, x65, x81);1279 addcarryxU64(&x89, &x90, x88, x65, x81);
1316 var x91: u64 = undefined;1280 var x91: u64 = undefined;
1317 var x92: u1 = undefined;1281 var x92: u1 = undefined;
1318 addcarryxU64(&x91, &x92, x90, ((@as(u64, x66) + @as(u64, x44)) + (@as(u64, x58) + x46)), (@as(u64, x82) + x70));1282 addcarryxU64(&x91, &x92, x90, ((@as(u64, x66) + x44) + (x58 + x46)), (x82 + x70));
1319 var x93: u64 = undefined;1283 var x93: u64 = undefined;
1320 var x94: u64 = undefined;1284 var x94: u64 = undefined;
1321 mulxU64(&x93, &x94, x2, 0x66e12d94f3d95620);1285 mulxU64(&x93, &x94, x2, 0x66e12d94f3d95620);
...@@ -1387,7 +1351,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1387,7 +1351,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1387 addcarryxU64(&x137, &x138, x136, x113, x129);1351 addcarryxU64(&x137, &x138, x136, x113, x129);
1388 var x139: u64 = undefined;1352 var x139: u64 = undefined;
1389 var x140: u1 = undefined;1353 var x140: u1 = undefined;
1390 addcarryxU64(&x139, &x140, x138, ((@as(u64, x114) + @as(u64, x92)) + (@as(u64, x106) + x94)), (@as(u64, x130) + x118));1354 addcarryxU64(&x139, &x140, x138, ((@as(u64, x114) + x92) + (x106 + x94)), (x130 + x118));
1391 var x141: u64 = undefined;1355 var x141: u64 = undefined;
1392 var x142: u64 = undefined;1356 var x142: u64 = undefined;
1393 mulxU64(&x141, &x142, x3, 0x66e12d94f3d95620);1357 mulxU64(&x141, &x142, x3, 0x66e12d94f3d95620);
...@@ -1459,7 +1423,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1459,7 +1423,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1459 addcarryxU64(&x185, &x186, x184, x161, x177);1423 addcarryxU64(&x185, &x186, x184, x161, x177);
1460 var x187: u64 = undefined;1424 var x187: u64 = undefined;
1461 var x188: u1 = undefined;1425 var x188: u1 = undefined;
1462 addcarryxU64(&x187, &x188, x186, ((@as(u64, x162) + @as(u64, x140)) + (@as(u64, x154) + x142)), (@as(u64, x178) + x166));1426 addcarryxU64(&x187, &x188, x186, ((@as(u64, x162) + x140) + (x154 + x142)), (x178 + x166));
1463 var x189: u64 = undefined;1427 var x189: u64 = undefined;
1464 var x190: u1 = undefined;1428 var x190: u1 = undefined;
1465 subborrowxU64(&x189, &x190, 0x0, x181, 0xf3b9cac2fc632551);1429 subborrowxU64(&x189, &x190, 0x0, x181, 0xf3b9cac2fc632551);
...@@ -1474,15 +1438,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1474,15 +1438,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1474 subborrowxU64(&x195, &x196, x194, x187, 0xffffffff00000000);1438 subborrowxU64(&x195, &x196, x194, x187, 0xffffffff00000000);
1475 var x197: u64 = undefined;1439 var x197: u64 = undefined;
1476 var x198: u1 = undefined;1440 var x198: u1 = undefined;
1477 subborrowxU64(&x197, &x198, x196, @as(u64, x188), @as(u64, 0x0));1441 subborrowxU64(&x197, &x198, x196, x188, 0x0);
1478 var x199: u64 = undefined;1442 var x199: u64 = undefined;
1479 cmovznzU64(&x199, x198, x189, x181);1443 const x199_selection_mask = selectionMaskU64(x198);
1444 x199 = x189 ^ ((x189 ^ x181) & x199_selection_mask);
1480 var x200: u64 = undefined;1445 var x200: u64 = undefined;
1481 cmovznzU64(&x200, x198, x191, x183);1446 x200 = x191 ^ ((x191 ^ x183) & x199_selection_mask);
1482 var x201: u64 = undefined;1447 var x201: u64 = undefined;
1483 cmovznzU64(&x201, x198, x193, x185);1448 x201 = x193 ^ ((x193 ^ x185) & x199_selection_mask);
1484 var x202: u64 = undefined;1449 var x202: u64 = undefined;
1485 cmovznzU64(&x202, x198, x195, x187);1450 x202 = x195 ^ ((x195 ^ x187) & x199_selection_mask);
1486 out1[0] = x199;1451 out1[0] = x199;
1487 out1[1] = x200;1452 out1[1] = x200;
1488 out1[2] = x201;1453 out1[2] = x201;
...@@ -1503,14 +1468,14 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1503,14 +1468,14 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1503pub fn nonzero(out1: *u64, arg1: [4]u64) void {1468pub fn nonzero(out1: *u64, arg1: [4]u64) void {
1504 @setRuntimeSafety(mode == .debug);1469 @setRuntimeSafety(mode == .debug);
15051470
1506 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3]))));1471 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | arg1[3])));
1507 out1.* = x1;1472 out1.* = x1;
1508}1473}
15091474
1510/// The function selectznz is a multi-limb conditional select.1475/// The function selectznz is a multi-limb conditional select.
1511///1476///
1512/// Postconditions:1477/// Postconditions:
1513/// eval out1 = (if arg1 = 0 then eval arg2 else eval arg3)1478/// out1 = (if arg1 = 0 then arg2 else arg3)
1514///1479///
1515/// Input Bounds:1480/// Input Bounds:
1516/// arg1: [0x0 ~> 0x1]1481/// arg1: [0x0 ~> 0x1]
...@@ -1522,13 +1487,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1522,13 +1487,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1522 @setRuntimeSafety(mode == .debug);1487 @setRuntimeSafety(mode == .debug);
15231488
1524 var x1: u64 = undefined;1489 var x1: u64 = undefined;
1525 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));1490 const x1_selection_mask = selectionMaskU64(arg1);
1491 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
1526 var x2: u64 = undefined;1492 var x2: u64 = undefined;
1527 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));1493 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
1528 var x3: u64 = undefined;1494 var x3: u64 = undefined;
1529 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));1495 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
1530 var x4: u64 = undefined;1496 var x4: u64 = undefined;
1531 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));1497 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
1532 out1[0] = x1;1498 out1[0] = x1;
1533 out1[1] = x2;1499 out1[1] = x2;
1534 out1[2] = x3;1500 out1[2] = x3;
...@@ -1549,66 +1515,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1549,66 +1515,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1549pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {1515pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1550 @setRuntimeSafety(mode == .debug);1516 @setRuntimeSafety(mode == .debug);
15511517
1552 const x1 = (arg1[3]);1518 const x1: u64 = arg1[3];
1553 const x2 = (arg1[2]);1519 const x2: u64 = arg1[2];
1554 const x3 = (arg1[1]);1520 const x3: u64 = arg1[1];
1555 const x4 = (arg1[0]);1521 const x4: u64 = arg1[0];
1556 const x5 = @as(u8, @truncate((x4 & @as(u64, 0xff))));1522 const x5: u8 = @truncate(x4);
1557 const x6 = (x4 >> 8);1523 const x6: u64 = (x4 >> 8);
1558 const x7 = @as(u8, @truncate((x6 & @as(u64, 0xff))));1524 const x7: u8 = @truncate(x6);
1559 const x8 = (x6 >> 8);1525 const x8: u64 = (x6 >> 8);
1560 const x9 = @as(u8, @truncate((x8 & @as(u64, 0xff))));1526 const x9: u8 = @truncate(x8);
1561 const x10 = (x8 >> 8);1527 const x10: u64 = (x8 >> 8);
1562 const x11 = @as(u8, @truncate((x10 & @as(u64, 0xff))));1528 const x11: u8 = @truncate(x10);
1563 const x12 = (x10 >> 8);1529 const x12: u64 = (x10 >> 8);
1564 const x13 = @as(u8, @truncate((x12 & @as(u64, 0xff))));1530 const x13: u8 = @truncate(x12);
1565 const x14 = (x12 >> 8);1531 const x14: u64 = (x12 >> 8);
1566 const x15 = @as(u8, @truncate((x14 & @as(u64, 0xff))));1532 const x15: u8 = @truncate(x14);
1567 const x16 = (x14 >> 8);1533 const x16: u64 = (x14 >> 8);
1568 const x17 = @as(u8, @truncate((x16 & @as(u64, 0xff))));1534 const x17: u8 = @truncate(x16);
1569 const x18 = @as(u8, @truncate((x16 >> 8)));1535 const x18: u8 = @truncate((x16 >> 8));
1570 const x19 = @as(u8, @truncate((x3 & @as(u64, 0xff))));1536 const x19: u8 = @truncate(x3);
1571 const x20 = (x3 >> 8);1537 const x20: u64 = (x3 >> 8);
1572 const x21 = @as(u8, @truncate((x20 & @as(u64, 0xff))));1538 const x21: u8 = @truncate(x20);
1573 const x22 = (x20 >> 8);1539 const x22: u64 = (x20 >> 8);
1574 const x23 = @as(u8, @truncate((x22 & @as(u64, 0xff))));1540 const x23: u8 = @truncate(x22);
1575 const x24 = (x22 >> 8);1541 const x24: u64 = (x22 >> 8);
1576 const x25 = @as(u8, @truncate((x24 & @as(u64, 0xff))));1542 const x25: u8 = @truncate(x24);
1577 const x26 = (x24 >> 8);1543 const x26: u64 = (x24 >> 8);
1578 const x27 = @as(u8, @truncate((x26 & @as(u64, 0xff))));1544 const x27: u8 = @truncate(x26);
1579 const x28 = (x26 >> 8);1545 const x28: u64 = (x26 >> 8);
1580 const x29 = @as(u8, @truncate((x28 & @as(u64, 0xff))));1546 const x29: u8 = @truncate(x28);
1581 const x30 = (x28 >> 8);1547 const x30: u64 = (x28 >> 8);
1582 const x31 = @as(u8, @truncate((x30 & @as(u64, 0xff))));1548 const x31: u8 = @truncate(x30);
1583 const x32 = @as(u8, @truncate((x30 >> 8)));1549 const x32: u8 = @truncate((x30 >> 8));
1584 const x33 = @as(u8, @truncate((x2 & @as(u64, 0xff))));1550 const x33: u8 = @truncate(x2);
1585 const x34 = (x2 >> 8);1551 const x34: u64 = (x2 >> 8);
1586 const x35 = @as(u8, @truncate((x34 & @as(u64, 0xff))));1552 const x35: u8 = @truncate(x34);
1587 const x36 = (x34 >> 8);1553 const x36: u64 = (x34 >> 8);
1588 const x37 = @as(u8, @truncate((x36 & @as(u64, 0xff))));1554 const x37: u8 = @truncate(x36);
1589 const x38 = (x36 >> 8);1555 const x38: u64 = (x36 >> 8);
1590 const x39 = @as(u8, @truncate((x38 & @as(u64, 0xff))));1556 const x39: u8 = @truncate(x38);
1591 const x40 = (x38 >> 8);1557 const x40: u64 = (x38 >> 8);
1592 const x41 = @as(u8, @truncate((x40 & @as(u64, 0xff))));1558 const x41: u8 = @truncate(x40);
1593 const x42 = (x40 >> 8);1559 const x42: u64 = (x40 >> 8);
1594 const x43 = @as(u8, @truncate((x42 & @as(u64, 0xff))));1560 const x43: u8 = @truncate(x42);
1595 const x44 = (x42 >> 8);1561 const x44: u64 = (x42 >> 8);
1596 const x45 = @as(u8, @truncate((x44 & @as(u64, 0xff))));1562 const x45: u8 = @truncate(x44);
1597 const x46 = @as(u8, @truncate((x44 >> 8)));1563 const x46: u8 = @truncate((x44 >> 8));
1598 const x47 = @as(u8, @truncate((x1 & @as(u64, 0xff))));1564 const x47: u8 = @truncate(x1);
1599 const x48 = (x1 >> 8);1565 const x48: u64 = (x1 >> 8);
1600 const x49 = @as(u8, @truncate((x48 & @as(u64, 0xff))));1566 const x49: u8 = @truncate(x48);
1601 const x50 = (x48 >> 8);1567 const x50: u64 = (x48 >> 8);
1602 const x51 = @as(u8, @truncate((x50 & @as(u64, 0xff))));1568 const x51: u8 = @truncate(x50);
1603 const x52 = (x50 >> 8);1569 const x52: u64 = (x50 >> 8);
1604 const x53 = @as(u8, @truncate((x52 & @as(u64, 0xff))));1570 const x53: u8 = @truncate(x52);
1605 const x54 = (x52 >> 8);1571 const x54: u64 = (x52 >> 8);
1606 const x55 = @as(u8, @truncate((x54 & @as(u64, 0xff))));1572 const x55: u8 = @truncate(x54);
1607 const x56 = (x54 >> 8);1573 const x56: u64 = (x54 >> 8);
1608 const x57 = @as(u8, @truncate((x56 & @as(u64, 0xff))));1574 const x57: u8 = @truncate(x56);
1609 const x58 = (x56 >> 8);1575 const x58: u64 = (x56 >> 8);
1610 const x59 = @as(u8, @truncate((x58 & @as(u64, 0xff))));1576 const x59: u8 = @truncate(x58);
1611 const x60 = @as(u8, @truncate((x58 >> 8)));1577 const x60: u8 = @truncate((x58 >> 8));
1612 out1[0] = x5;1578 out1[0] = x5;
1613 out1[1] = x7;1579 out1[1] = x7;
1614 out1[2] = x9;1580 out1[2] = x9;
...@@ -1658,66 +1624,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {...@@ -1658,66 +1624,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1658pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {1624pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {
1659 @setRuntimeSafety(mode == .debug);1625 @setRuntimeSafety(mode == .debug);
16601626
1661 const x1 = (@as(u64, (arg1[31])) << 56);1627 const x1: u64 = (@as(u64, arg1[31]) << 56);
1662 const x2 = (@as(u64, (arg1[30])) << 48);1628 const x2: u64 = (@as(u64, arg1[30]) << 48);
1663 const x3 = (@as(u64, (arg1[29])) << 40);1629 const x3: u64 = (@as(u64, arg1[29]) << 40);
1664 const x4 = (@as(u64, (arg1[28])) << 32);1630 const x4: u64 = (@as(u64, arg1[28]) << 32);
1665 const x5 = (@as(u64, (arg1[27])) << 24);1631 const x5: u64 = (@as(u64, arg1[27]) << 24);
1666 const x6 = (@as(u64, (arg1[26])) << 16);1632 const x6: u64 = (@as(u64, arg1[26]) << 16);
1667 const x7 = (@as(u64, (arg1[25])) << 8);1633 const x7: u64 = (@as(u64, arg1[25]) << 8);
1668 const x8 = (arg1[24]);1634 const x8: u8 = arg1[24];
1669 const x9 = (@as(u64, (arg1[23])) << 56);1635 const x9: u64 = (@as(u64, arg1[23]) << 56);
1670 const x10 = (@as(u64, (arg1[22])) << 48);1636 const x10: u64 = (@as(u64, arg1[22]) << 48);
1671 const x11 = (@as(u64, (arg1[21])) << 40);1637 const x11: u64 = (@as(u64, arg1[21]) << 40);
1672 const x12 = (@as(u64, (arg1[20])) << 32);1638 const x12: u64 = (@as(u64, arg1[20]) << 32);
1673 const x13 = (@as(u64, (arg1[19])) << 24);1639 const x13: u64 = (@as(u64, arg1[19]) << 24);
1674 const x14 = (@as(u64, (arg1[18])) << 16);1640 const x14: u64 = (@as(u64, arg1[18]) << 16);
1675 const x15 = (@as(u64, (arg1[17])) << 8);1641 const x15: u64 = (@as(u64, arg1[17]) << 8);
1676 const x16 = (arg1[16]);1642 const x16: u8 = arg1[16];
1677 const x17 = (@as(u64, (arg1[15])) << 56);1643 const x17: u64 = (@as(u64, arg1[15]) << 56);
1678 const x18 = (@as(u64, (arg1[14])) << 48);1644 const x18: u64 = (@as(u64, arg1[14]) << 48);
1679 const x19 = (@as(u64, (arg1[13])) << 40);1645 const x19: u64 = (@as(u64, arg1[13]) << 40);
1680 const x20 = (@as(u64, (arg1[12])) << 32);1646 const x20: u64 = (@as(u64, arg1[12]) << 32);
1681 const x21 = (@as(u64, (arg1[11])) << 24);1647 const x21: u64 = (@as(u64, arg1[11]) << 24);
1682 const x22 = (@as(u64, (arg1[10])) << 16);1648 const x22: u64 = (@as(u64, arg1[10]) << 16);
1683 const x23 = (@as(u64, (arg1[9])) << 8);1649 const x23: u64 = (@as(u64, arg1[9]) << 8);
1684 const x24 = (arg1[8]);1650 const x24: u8 = arg1[8];
1685 const x25 = (@as(u64, (arg1[7])) << 56);1651 const x25: u64 = (@as(u64, arg1[7]) << 56);
1686 const x26 = (@as(u64, (arg1[6])) << 48);1652 const x26: u64 = (@as(u64, arg1[6]) << 48);
1687 const x27 = (@as(u64, (arg1[5])) << 40);1653 const x27: u64 = (@as(u64, arg1[5]) << 40);
1688 const x28 = (@as(u64, (arg1[4])) << 32);1654 const x28: u64 = (@as(u64, arg1[4]) << 32);
1689 const x29 = (@as(u64, (arg1[3])) << 24);1655 const x29: u64 = (@as(u64, arg1[3]) << 24);
1690 const x30 = (@as(u64, (arg1[2])) << 16);1656 const x30: u64 = (@as(u64, arg1[2]) << 16);
1691 const x31 = (@as(u64, (arg1[1])) << 8);1657 const x31: u64 = (@as(u64, arg1[1]) << 8);
1692 const x32 = (arg1[0]);1658 const x32: u8 = arg1[0];
1693 const x33 = (x31 + @as(u64, x32));1659 const x33: u64 = (x31 + x32);
1694 const x34 = (x30 + x33);1660 const x34: u64 = (x30 + x33);
1695 const x35 = (x29 + x34);1661 const x35: u64 = (x29 + x34);
1696 const x36 = (x28 + x35);1662 const x36: u64 = (x28 + x35);
1697 const x37 = (x27 + x36);1663 const x37: u64 = (x27 + x36);
1698 const x38 = (x26 + x37);1664 const x38: u64 = (x26 + x37);
1699 const x39 = (x25 + x38);1665 const x39: u64 = (x25 + x38);
1700 const x40 = (x23 + @as(u64, x24));1666 const x40: u64 = (x23 + x24);
1701 const x41 = (x22 + x40);1667 const x41: u64 = (x22 + x40);
1702 const x42 = (x21 + x41);1668 const x42: u64 = (x21 + x41);
1703 const x43 = (x20 + x42);1669 const x43: u64 = (x20 + x42);
1704 const x44 = (x19 + x43);1670 const x44: u64 = (x19 + x43);
1705 const x45 = (x18 + x44);1671 const x45: u64 = (x18 + x44);
1706 const x46 = (x17 + x45);1672 const x46: u64 = (x17 + x45);
1707 const x47 = (x15 + @as(u64, x16));1673 const x47: u64 = (x15 + x16);
1708 const x48 = (x14 + x47);1674 const x48: u64 = (x14 + x47);
1709 const x49 = (x13 + x48);1675 const x49: u64 = (x13 + x48);
1710 const x50 = (x12 + x49);1676 const x50: u64 = (x12 + x49);
1711 const x51 = (x11 + x50);1677 const x51: u64 = (x11 + x50);
1712 const x52 = (x10 + x51);1678 const x52: u64 = (x10 + x51);
1713 const x53 = (x9 + x52);1679 const x53: u64 = (x9 + x52);
1714 const x54 = (x7 + @as(u64, x8));1680 const x54: u64 = (x7 + x8);
1715 const x55 = (x6 + x54);1681 const x55: u64 = (x6 + x54);
1716 const x56 = (x5 + x55);1682 const x56: u64 = (x5 + x55);
1717 const x57 = (x4 + x56);1683 const x57: u64 = (x4 + x56);
1718 const x58 = (x3 + x57);1684 const x58: u64 = (x3 + x57);
1719 const x59 = (x2 + x58);1685 const x59: u64 = (x2 + x58);
1720 const x60 = (x1 + x59);1686 const x60: u64 = (x1 + x59);
1721 out1[0] = x39;1687 out1[0] = x39;
1722 out1[1] = x46;1688 out1[1] = x46;
1723 out1[2] = x53;1689 out1[2] = x53;
...@@ -1735,7 +1701,7 @@ pub fn setOne(out1: *MontgomeryDomainFieldElement) void {...@@ -1735,7 +1701,7 @@ pub fn setOne(out1: *MontgomeryDomainFieldElement) void {
17351701
1736 out1[0] = 0xc46353d039cdaaf;1702 out1[0] = 0xc46353d039cdaaf;
1737 out1[1] = 0x4319055258e8617b;1703 out1[1] = 0x4319055258e8617b;
1738 out1[2] = @as(u64, 0x0);1704 out1[2] = 0x0;
1739 out1[3] = 0xffffffff;1705 out1[3] = 0xffffffff;
1740}1706}
17411707
...@@ -1754,7 +1720,7 @@ pub fn msat(out1: *[5]u64) void {...@@ -1754,7 +1720,7 @@ pub fn msat(out1: *[5]u64) void {
1754 out1[1] = 0xbce6faada7179e84;1720 out1[1] = 0xbce6faada7179e84;
1755 out1[2] = 0xffffffffffffffff;1721 out1[2] = 0xffffffffffffffff;
1756 out1[3] = 0xffffffff00000000;1722 out1[3] = 0xffffffff00000000;
1757 out1[4] = @as(u64, 0x0);1723 out1[4] = 0x0;
1758}1724}
17591725
1760/// The function divstep computes a divstep.1726/// The function divstep computes a divstep.
...@@ -1790,56 +1756,58 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1790,56 +1756,58 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
17901756
1791 var x1: u64 = undefined;1757 var x1: u64 = undefined;
1792 var x2: u1 = undefined;1758 var x2: u1 = undefined;
1793 addcarryxU64(&x1, &x2, 0x0, (~arg1), @as(u64, 0x1));1759 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
1794 const x3 = @as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & @as(u64, 0x1))));1760 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
1795 var x4: u64 = undefined;1761 var x4: u64 = undefined;
1796 var x5: u1 = undefined;1762 var x5: u1 = undefined;
1797 addcarryxU64(&x4, &x5, 0x0, (~arg1), @as(u64, 0x1));1763 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
1798 var x6: u64 = undefined;1764 var x6: u64 = undefined;
1799 cmovznzU64(&x6, x3, arg1, x4);1765 const x6_selection_mask = selectionMaskU64(x3);
1766 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
1800 var x7: u64 = undefined;1767 var x7: u64 = undefined;
1801 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));1768 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
1802 var x8: u64 = undefined;1769 var x8: u64 = undefined;
1803 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));1770 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
1804 var x9: u64 = undefined;1771 var x9: u64 = undefined;
1805 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));1772 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
1806 var x10: u64 = undefined;1773 var x10: u64 = undefined;
1807 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));1774 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
1808 var x11: u64 = undefined;1775 var x11: u64 = undefined;
1809 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));1776 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
1810 var x12: u64 = undefined;1777 var x12: u64 = undefined;
1811 var x13: u1 = undefined;1778 var x13: u1 = undefined;
1812 addcarryxU64(&x12, &x13, 0x0, @as(u64, 0x1), (~(arg2[0])));1779 addcarryxU64(&x12, &x13, 0x0, 0x1, (~arg2[0]));
1813 var x14: u64 = undefined;1780 var x14: u64 = undefined;
1814 var x15: u1 = undefined;1781 var x15: u1 = undefined;
1815 addcarryxU64(&x14, &x15, x13, @as(u64, 0x0), (~(arg2[1])));1782 addcarryxU64(&x14, &x15, x13, 0x0, (~arg2[1]));
1816 var x16: u64 = undefined;1783 var x16: u64 = undefined;
1817 var x17: u1 = undefined;1784 var x17: u1 = undefined;
1818 addcarryxU64(&x16, &x17, x15, @as(u64, 0x0), (~(arg2[2])));1785 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[2]));
1819 var x18: u64 = undefined;1786 var x18: u64 = undefined;
1820 var x19: u1 = undefined;1787 var x19: u1 = undefined;
1821 addcarryxU64(&x18, &x19, x17, @as(u64, 0x0), (~(arg2[3])));1788 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[3]));
1822 var x20: u64 = undefined;1789 var x20: u64 = undefined;
1823 var x21: u1 = undefined;1790 var x21: u1 = undefined;
1824 addcarryxU64(&x20, &x21, x19, @as(u64, 0x0), (~(arg2[4])));1791 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[4]));
1825 var x22: u64 = undefined;1792 var x22: u64 = undefined;
1826 cmovznzU64(&x22, x3, (arg3[0]), x12);1793 const x22_selection_mask = selectionMaskU64(x3);
1794 x22 = arg3[0] ^ ((arg3[0] ^ x12) & x22_selection_mask);
1827 var x23: u64 = undefined;1795 var x23: u64 = undefined;
1828 cmovznzU64(&x23, x3, (arg3[1]), x14);1796 x23 = arg3[1] ^ ((arg3[1] ^ x14) & x22_selection_mask);
1829 var x24: u64 = undefined;1797 var x24: u64 = undefined;
1830 cmovznzU64(&x24, x3, (arg3[2]), x16);1798 x24 = arg3[2] ^ ((arg3[2] ^ x16) & x22_selection_mask);
1831 var x25: u64 = undefined;1799 var x25: u64 = undefined;
1832 cmovznzU64(&x25, x3, (arg3[3]), x18);1800 x25 = arg3[3] ^ ((arg3[3] ^ x18) & x22_selection_mask);
1833 var x26: u64 = undefined;1801 var x26: u64 = undefined;
1834 cmovznzU64(&x26, x3, (arg3[4]), x20);1802 x26 = arg3[4] ^ ((arg3[4] ^ x20) & x22_selection_mask);
1835 var x27: u64 = undefined;1803 var x27: u64 = undefined;
1836 cmovznzU64(&x27, x3, (arg4[0]), (arg5[0]));1804 x27 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x22_selection_mask);
1837 var x28: u64 = undefined;1805 var x28: u64 = undefined;
1838 cmovznzU64(&x28, x3, (arg4[1]), (arg5[1]));1806 x28 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x22_selection_mask);
1839 var x29: u64 = undefined;1807 var x29: u64 = undefined;
1840 cmovznzU64(&x29, x3, (arg4[2]), (arg5[2]));1808 x29 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x22_selection_mask);
1841 var x30: u64 = undefined;1809 var x30: u64 = undefined;
1842 cmovznzU64(&x30, x3, (arg4[3]), (arg5[3]));1810 x30 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x22_selection_mask);
1843 var x31: u64 = undefined;1811 var x31: u64 = undefined;
1844 var x32: u1 = undefined;1812 var x32: u1 = undefined;
1845 addcarryxU64(&x31, &x32, 0x0, x27, x27);1813 addcarryxU64(&x31, &x32, 0x0, x27, x27);
...@@ -1866,25 +1834,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1866,25 +1834,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1866 subborrowxU64(&x45, &x46, x44, x37, 0xffffffff00000000);1834 subborrowxU64(&x45, &x46, x44, x37, 0xffffffff00000000);
1867 var x47: u64 = undefined;1835 var x47: u64 = undefined;
1868 var x48: u1 = undefined;1836 var x48: u1 = undefined;
1869 subborrowxU64(&x47, &x48, x46, @as(u64, x38), @as(u64, 0x0));1837 subborrowxU64(&x47, &x48, x46, x38, 0x0);
1870 const x49 = (arg4[3]);1838 const x49: u64 = arg4[3];
1871 const x50 = (arg4[2]);1839 const x50: u64 = arg4[2];
1872 const x51 = (arg4[1]);1840 const x51: u64 = arg4[1];
1873 const x52 = (arg4[0]);1841 const x52: u64 = arg4[0];
1874 var x53: u64 = undefined;1842 var x53: u64 = undefined;
1875 var x54: u1 = undefined;1843 var x54: u1 = undefined;
1876 subborrowxU64(&x53, &x54, 0x0, @as(u64, 0x0), x52);1844 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);
1877 var x55: u64 = undefined;1845 var x55: u64 = undefined;
1878 var x56: u1 = undefined;1846 var x56: u1 = undefined;
1879 subborrowxU64(&x55, &x56, x54, @as(u64, 0x0), x51);1847 subborrowxU64(&x55, &x56, x54, 0x0, x51);
1880 var x57: u64 = undefined;1848 var x57: u64 = undefined;
1881 var x58: u1 = undefined;1849 var x58: u1 = undefined;
1882 subborrowxU64(&x57, &x58, x56, @as(u64, 0x0), x50);1850 subborrowxU64(&x57, &x58, x56, 0x0, x50);
1883 var x59: u64 = undefined;1851 var x59: u64 = undefined;
1884 var x60: u1 = undefined;1852 var x60: u1 = undefined;
1885 subborrowxU64(&x59, &x60, x58, @as(u64, 0x0), x49);1853 subborrowxU64(&x59, &x60, x58, 0x0, x49);
1886 var x61: u64 = undefined;1854 var x61: u64 = undefined;
1887 cmovznzU64(&x61, x60, @as(u64, 0x0), 0xffffffffffffffff);1855 const x61_selection_mask = selectionMaskU64(x60);
1856 x61 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x61_selection_mask);
1888 var x62: u64 = undefined;1857 var x62: u64 = undefined;
1889 var x63: u1 = undefined;1858 var x63: u1 = undefined;
1890 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xf3b9cac2fc632551));1859 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xf3b9cac2fc632551));
...@@ -1898,24 +1867,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1898,24 +1867,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1898 var x69: u1 = undefined;1867 var x69: u1 = undefined;
1899 addcarryxU64(&x68, &x69, x67, x59, (x61 & 0xffffffff00000000));1868 addcarryxU64(&x68, &x69, x67, x59, (x61 & 0xffffffff00000000));
1900 var x70: u64 = undefined;1869 var x70: u64 = undefined;
1901 cmovznzU64(&x70, x3, (arg5[0]), x62);1870 const x70_selection_mask = selectionMaskU64(x3);
1871 x70 = arg5[0] ^ ((arg5[0] ^ x62) & x70_selection_mask);
1902 var x71: u64 = undefined;1872 var x71: u64 = undefined;
1903 cmovznzU64(&x71, x3, (arg5[1]), x64);1873 x71 = arg5[1] ^ ((arg5[1] ^ x64) & x70_selection_mask);
1904 var x72: u64 = undefined;1874 var x72: u64 = undefined;
1905 cmovznzU64(&x72, x3, (arg5[2]), x66);1875 x72 = arg5[2] ^ ((arg5[2] ^ x66) & x70_selection_mask);
1906 var x73: u64 = undefined;1876 var x73: u64 = undefined;
1907 cmovznzU64(&x73, x3, (arg5[3]), x68);1877 x73 = arg5[3] ^ ((arg5[3] ^ x68) & x70_selection_mask);
1908 const x74 = @as(u1, @truncate((x22 & @as(u64, 0x1))));1878 const x74: u1 = @truncate(x22);
1909 var x75: u64 = undefined;1879 var x75: u64 = undefined;
1910 cmovznzU64(&x75, x74, @as(u64, 0x0), x7);1880 const x75_selection_mask = selectionMaskU64(x74);
1881 x75 = 0x0 ^ ((0x0 ^ x7) & x75_selection_mask);
1911 var x76: u64 = undefined;1882 var x76: u64 = undefined;
1912 cmovznzU64(&x76, x74, @as(u64, 0x0), x8);1883 x76 = 0x0 ^ ((0x0 ^ x8) & x75_selection_mask);
1913 var x77: u64 = undefined;1884 var x77: u64 = undefined;
1914 cmovznzU64(&x77, x74, @as(u64, 0x0), x9);1885 x77 = 0x0 ^ ((0x0 ^ x9) & x75_selection_mask);
1915 var x78: u64 = undefined;1886 var x78: u64 = undefined;
1916 cmovznzU64(&x78, x74, @as(u64, 0x0), x10);1887 x78 = 0x0 ^ ((0x0 ^ x10) & x75_selection_mask);
1917 var x79: u64 = undefined;1888 var x79: u64 = undefined;
1918 cmovznzU64(&x79, x74, @as(u64, 0x0), x11);1889 x79 = 0x0 ^ ((0x0 ^ x11) & x75_selection_mask);
1919 var x80: u64 = undefined;1890 var x80: u64 = undefined;
1920 var x81: u1 = undefined;1891 var x81: u1 = undefined;
1921 addcarryxU64(&x80, &x81, 0x0, x22, x75);1892 addcarryxU64(&x80, &x81, 0x0, x22, x75);
...@@ -1932,13 +1903,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1932,13 +1903,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1932 var x89: u1 = undefined;1903 var x89: u1 = undefined;
1933 addcarryxU64(&x88, &x89, x87, x26, x79);1904 addcarryxU64(&x88, &x89, x87, x26, x79);
1934 var x90: u64 = undefined;1905 var x90: u64 = undefined;
1935 cmovznzU64(&x90, x74, @as(u64, 0x0), x27);1906 const x90_selection_mask = selectionMaskU64(x74);
1907 x90 = 0x0 ^ ((0x0 ^ x27) & x90_selection_mask);
1936 var x91: u64 = undefined;1908 var x91: u64 = undefined;
1937 cmovznzU64(&x91, x74, @as(u64, 0x0), x28);1909 x91 = 0x0 ^ ((0x0 ^ x28) & x90_selection_mask);
1938 var x92: u64 = undefined;1910 var x92: u64 = undefined;
1939 cmovznzU64(&x92, x74, @as(u64, 0x0), x29);1911 x92 = 0x0 ^ ((0x0 ^ x29) & x90_selection_mask);
1940 var x93: u64 = undefined;1912 var x93: u64 = undefined;
1941 cmovznzU64(&x93, x74, @as(u64, 0x0), x30);1913 x93 = 0x0 ^ ((0x0 ^ x30) & x90_selection_mask);
1942 var x94: u64 = undefined;1914 var x94: u64 = undefined;
1943 var x95: u1 = undefined;1915 var x95: u1 = undefined;
1944 addcarryxU64(&x94, &x95, 0x0, x70, x90);1916 addcarryxU64(&x94, &x95, 0x0, x70, x90);
...@@ -1965,31 +1937,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1965,31 +1937,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1965 subborrowxU64(&x108, &x109, x107, x100, 0xffffffff00000000);1937 subborrowxU64(&x108, &x109, x107, x100, 0xffffffff00000000);
1966 var x110: u64 = undefined;1938 var x110: u64 = undefined;
1967 var x111: u1 = undefined;1939 var x111: u1 = undefined;
1968 subborrowxU64(&x110, &x111, x109, @as(u64, x101), @as(u64, 0x0));1940 subborrowxU64(&x110, &x111, x109, x101, 0x0);
1969 var x112: u64 = undefined;1941 var x112: u64 = undefined;
1970 var x113: u1 = undefined;1942 var x113: u1 = undefined;
1971 addcarryxU64(&x112, &x113, 0x0, x6, @as(u64, 0x1));1943 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);
1972 const x114 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));1944 const x114: u64 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));
1973 const x115 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));1945 const x115: u64 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));
1974 const x116 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));1946 const x116: u64 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));
1975 const x117 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));1947 const x117: u64 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));
1976 const x118 = ((x88 & 0x8000000000000000) | (x88 >> 1));1948 const x118: u64 = ((x88 & 0x8000000000000000) | (x88 >> 1));
1977 var x119: u64 = undefined;1949 var x119: u64 = undefined;
1978 cmovznzU64(&x119, x48, x39, x31);1950 const x119_selection_mask = selectionMaskU64(x48);
1951 x119 = x39 ^ ((x39 ^ x31) & x119_selection_mask);
1979 var x120: u64 = undefined;1952 var x120: u64 = undefined;
1980 cmovznzU64(&x120, x48, x41, x33);1953 x120 = x41 ^ ((x41 ^ x33) & x119_selection_mask);
1981 var x121: u64 = undefined;1954 var x121: u64 = undefined;
1982 cmovznzU64(&x121, x48, x43, x35);1955 x121 = x43 ^ ((x43 ^ x35) & x119_selection_mask);
1983 var x122: u64 = undefined;1956 var x122: u64 = undefined;
1984 cmovznzU64(&x122, x48, x45, x37);1957 x122 = x45 ^ ((x45 ^ x37) & x119_selection_mask);
1985 var x123: u64 = undefined;1958 var x123: u64 = undefined;
1986 cmovznzU64(&x123, x111, x102, x94);1959 const x123_selection_mask = selectionMaskU64(x111);
1960 x123 = x102 ^ ((x102 ^ x94) & x123_selection_mask);
1987 var x124: u64 = undefined;1961 var x124: u64 = undefined;
1988 cmovznzU64(&x124, x111, x104, x96);1962 x124 = x104 ^ ((x104 ^ x96) & x123_selection_mask);
1989 var x125: u64 = undefined;1963 var x125: u64 = undefined;
1990 cmovznzU64(&x125, x111, x106, x98);1964 x125 = x106 ^ ((x106 ^ x98) & x123_selection_mask);
1991 var x126: u64 = undefined;1965 var x126: u64 = undefined;
1992 cmovznzU64(&x126, x111, x108, x100);1966 x126 = x108 ^ ((x108 ^ x100) & x123_selection_mask);
1993 out1.* = x112;1967 out1.* = x112;
1994 out2[0] = x7;1968 out2[0] = x7;
1995 out2[1] = x8;1969 out2[1] = x8;
lib/std/crypto/pcurves/p384/p384_64.zig+533-528
...@@ -17,7 +17,6 @@...@@ -17,7 +17,6 @@
17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) in
18// if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^38418// if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^384
1919
20const std = @import("std");
21const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
2221
23// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [6]u64;...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [6]u64;
28// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
29pub const NonMontgomeryDomainFieldElement = [6]u64;28pub const NonMontgomeryDomainFieldElement = [6]u64;
3029
31/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
32///
33/// Postconditions:
34/// out1 = (arg1 + arg2 + arg3) mod 2^64
35/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
36///
37/// Input Bounds:
38/// arg1: [0x0 ~> 0x1]
39/// arg2: [0x0 ~> 0xffffffffffffffff]
40/// arg3: [0x0 ~> 0xffffffffffffffff]
41/// Output Bounds:
42/// out1: [0x0 ~> 0xffffffffffffffff]
43/// out2: [0x0 ~> 0x1]
44fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
45 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
46 out1.* = @truncate(x);33
47 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
48}38}
4939
50/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
51///
52/// Postconditions:
53/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
54/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
55///
56/// Input Bounds:
57/// arg1: [0x0 ~> 0x1]
58/// arg2: [0x0 ~> 0xffffffffffffffff]
59/// arg3: [0x0 ~> 0xffffffffffffffff]
60/// Output Bounds:
61/// out1: [0x0 ~> 0xffffffffffffffff]
62/// out2: [0x0 ~> 0x1]
63fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
64 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
65 out1.* = @truncate(x);43
66 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
67}48}
6849
69/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
70///
71/// Postconditions:
72/// out1 = (arg1 * arg2) mod 2^64
73/// out2 = ⌊arg1 * arg2 / 2^64⌋
74///
75/// Input Bounds:
76/// arg1: [0x0 ~> 0xffffffffffffffff]
77/// arg2: [0x0 ~> 0xffffffffffffffff]
78/// Output Bounds:
79/// out1: [0x0 ~> 0xffffffffffffffff]
80/// out2: [0x0 ~> 0xffffffffffffffff]
81fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
82 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
8353
84 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
85 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
86 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
87}57}
8858
89/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
90///60fn selectionMaskU64(arg1: u1) u64 {
91/// Postconditions:61 @setRuntimeSafety(mode == .debug);
92/// out1 = (if arg1 = 0 then arg2 else arg3)62
93///63 const value: u64 = 0 -% @as(u64, arg1);
94/// Input Bounds:64 if (@inComptime()) return value;
95/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
96/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
97/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
98/// Output Bounds:68 }
99/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
100fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
101 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
10291
103 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
104 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
105}94}
10695
107/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -116,30 +105,30 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -116,30 +105,30 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
116pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
117 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
118107
119 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
120 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
121 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
122 const x4 = (arg1[4]);111 const x4: u64 = arg1[4];
123 const x5 = (arg1[5]);112 const x5: u64 = arg1[5];
124 const x6 = (arg1[0]);113 const x6: u64 = arg1[0];
125 var x7: u64 = undefined;114 var x7: u64 = undefined;
126 var x8: u64 = undefined;115 var x8: u64 = undefined;
127 mulxU64(&x7, &x8, x6, (arg2[5]));116 mulxU64(&x7, &x8, x6, arg2[5]);
128 var x9: u64 = undefined;117 var x9: u64 = undefined;
129 var x10: u64 = undefined;118 var x10: u64 = undefined;
130 mulxU64(&x9, &x10, x6, (arg2[4]));119 mulxU64(&x9, &x10, x6, arg2[4]);
131 var x11: u64 = undefined;120 var x11: u64 = undefined;
132 var x12: u64 = undefined;121 var x12: u64 = undefined;
133 mulxU64(&x11, &x12, x6, (arg2[3]));122 mulxU64(&x11, &x12, x6, arg2[3]);
134 var x13: u64 = undefined;123 var x13: u64 = undefined;
135 var x14: u64 = undefined;124 var x14: u64 = undefined;
136 mulxU64(&x13, &x14, x6, (arg2[2]));125 mulxU64(&x13, &x14, x6, arg2[2]);
137 var x15: u64 = undefined;126 var x15: u64 = undefined;
138 var x16: u64 = undefined;127 var x16: u64 = undefined;
139 mulxU64(&x15, &x16, x6, (arg2[1]));128 mulxU64(&x15, &x16, x6, arg2[1]);
140 var x17: u64 = undefined;129 var x17: u64 = undefined;
141 var x18: u64 = undefined;130 var x18: u64 = undefined;
142 mulxU64(&x17, &x18, x6, (arg2[0]));131 mulxU64(&x17, &x18, x6, arg2[0]);
143 var x19: u64 = undefined;132 var x19: u64 = undefined;
144 var x20: u1 = undefined;133 var x20: u1 = undefined;
145 addcarryxU64(&x19, &x20, 0x0, x18, x15);134 addcarryxU64(&x19, &x20, 0x0, x18, x15);
...@@ -155,7 +144,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -155,7 +144,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
155 var x27: u64 = undefined;144 var x27: u64 = undefined;
156 var x28: u1 = undefined;145 var x28: u1 = undefined;
157 addcarryxU64(&x27, &x28, x26, x10, x7);146 addcarryxU64(&x27, &x28, x26, x10, x7);
158 const x29 = (@as(u64, x28) + x8);147 const x29: u64 = (x28 + x8);
159 var x30: u64 = undefined;148 var x30: u64 = undefined;
160 var x31: u64 = undefined;149 var x31: u64 = undefined;
161 mulxU64(&x30, &x31, x17, 0x100000001);150 mulxU64(&x30, &x31, x17, 0x100000001);
...@@ -192,7 +181,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -192,7 +181,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
192 var x52: u64 = undefined;181 var x52: u64 = undefined;
193 var x53: u1 = undefined;182 var x53: u1 = undefined;
194 addcarryxU64(&x52, &x53, x51, x35, x32);183 addcarryxU64(&x52, &x53, x51, x35, x32);
195 const x54 = (@as(u64, x53) + x33);184 const x54: u64 = (x53 + x33);
196 var x55: u64 = undefined;185 var x55: u64 = undefined;
197 var x56: u1 = undefined;186 var x56: u1 = undefined;
198 addcarryxU64(&x55, &x56, 0x0, x17, x42);187 addcarryxU64(&x55, &x56, 0x0, x17, x42);
...@@ -216,22 +205,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -216,22 +205,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
216 addcarryxU64(&x67, &x68, x66, x29, x54);205 addcarryxU64(&x67, &x68, x66, x29, x54);
217 var x69: u64 = undefined;206 var x69: u64 = undefined;
218 var x70: u64 = undefined;207 var x70: u64 = undefined;
219 mulxU64(&x69, &x70, x1, (arg2[5]));208 mulxU64(&x69, &x70, x1, arg2[5]);
220 var x71: u64 = undefined;209 var x71: u64 = undefined;
221 var x72: u64 = undefined;210 var x72: u64 = undefined;
222 mulxU64(&x71, &x72, x1, (arg2[4]));211 mulxU64(&x71, &x72, x1, arg2[4]);
223 var x73: u64 = undefined;212 var x73: u64 = undefined;
224 var x74: u64 = undefined;213 var x74: u64 = undefined;
225 mulxU64(&x73, &x74, x1, (arg2[3]));214 mulxU64(&x73, &x74, x1, arg2[3]);
226 var x75: u64 = undefined;215 var x75: u64 = undefined;
227 var x76: u64 = undefined;216 var x76: u64 = undefined;
228 mulxU64(&x75, &x76, x1, (arg2[2]));217 mulxU64(&x75, &x76, x1, arg2[2]);
229 var x77: u64 = undefined;218 var x77: u64 = undefined;
230 var x78: u64 = undefined;219 var x78: u64 = undefined;
231 mulxU64(&x77, &x78, x1, (arg2[1]));220 mulxU64(&x77, &x78, x1, arg2[1]);
232 var x79: u64 = undefined;221 var x79: u64 = undefined;
233 var x80: u64 = undefined;222 var x80: u64 = undefined;
234 mulxU64(&x79, &x80, x1, (arg2[0]));223 mulxU64(&x79, &x80, x1, arg2[0]);
235 var x81: u64 = undefined;224 var x81: u64 = undefined;
236 var x82: u1 = undefined;225 var x82: u1 = undefined;
237 addcarryxU64(&x81, &x82, 0x0, x80, x77);226 addcarryxU64(&x81, &x82, 0x0, x80, x77);
...@@ -247,7 +236,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -247,7 +236,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
247 var x89: u64 = undefined;236 var x89: u64 = undefined;
248 var x90: u1 = undefined;237 var x90: u1 = undefined;
249 addcarryxU64(&x89, &x90, x88, x72, x69);238 addcarryxU64(&x89, &x90, x88, x72, x69);
250 const x91 = (@as(u64, x90) + x70);239 const x91: u64 = (x90 + x70);
251 var x92: u64 = undefined;240 var x92: u64 = undefined;
252 var x93: u1 = undefined;241 var x93: u1 = undefined;
253 addcarryxU64(&x92, &x93, 0x0, x57, x79);242 addcarryxU64(&x92, &x93, 0x0, x57, x79);
...@@ -268,7 +257,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -268,7 +257,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
268 addcarryxU64(&x102, &x103, x101, x67, x89);257 addcarryxU64(&x102, &x103, x101, x67, x89);
269 var x104: u64 = undefined;258 var x104: u64 = undefined;
270 var x105: u1 = undefined;259 var x105: u1 = undefined;
271 addcarryxU64(&x104, &x105, x103, @as(u64, x68), x91);260 addcarryxU64(&x104, &x105, x103, x68, x91);
272 var x106: u64 = undefined;261 var x106: u64 = undefined;
273 var x107: u64 = undefined;262 var x107: u64 = undefined;
274 mulxU64(&x106, &x107, x92, 0x100000001);263 mulxU64(&x106, &x107, x92, 0x100000001);
...@@ -305,7 +294,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -305,7 +294,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
305 var x128: u64 = undefined;294 var x128: u64 = undefined;
306 var x129: u1 = undefined;295 var x129: u1 = undefined;
307 addcarryxU64(&x128, &x129, x127, x111, x108);296 addcarryxU64(&x128, &x129, x127, x111, x108);
308 const x130 = (@as(u64, x129) + x109);297 const x130: u64 = (x129 + x109);
309 var x131: u64 = undefined;298 var x131: u64 = undefined;
310 var x132: u1 = undefined;299 var x132: u1 = undefined;
311 addcarryxU64(&x131, &x132, 0x0, x92, x118);300 addcarryxU64(&x131, &x132, 0x0, x92, x118);
...@@ -327,25 +316,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -327,25 +316,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
327 var x143: u64 = undefined;316 var x143: u64 = undefined;
328 var x144: u1 = undefined;317 var x144: u1 = undefined;
329 addcarryxU64(&x143, &x144, x142, x104, x130);318 addcarryxU64(&x143, &x144, x142, x104, x130);
330 const x145 = (@as(u64, x144) + @as(u64, x105));319 const x145: u64 = (@as(u64, x144) + x105);
331 var x146: u64 = undefined;320 var x146: u64 = undefined;
332 var x147: u64 = undefined;321 var x147: u64 = undefined;
333 mulxU64(&x146, &x147, x2, (arg2[5]));322 mulxU64(&x146, &x147, x2, arg2[5]);
334 var x148: u64 = undefined;323 var x148: u64 = undefined;
335 var x149: u64 = undefined;324 var x149: u64 = undefined;
336 mulxU64(&x148, &x149, x2, (arg2[4]));325 mulxU64(&x148, &x149, x2, arg2[4]);
337 var x150: u64 = undefined;326 var x150: u64 = undefined;
338 var x151: u64 = undefined;327 var x151: u64 = undefined;
339 mulxU64(&x150, &x151, x2, (arg2[3]));328 mulxU64(&x150, &x151, x2, arg2[3]);
340 var x152: u64 = undefined;329 var x152: u64 = undefined;
341 var x153: u64 = undefined;330 var x153: u64 = undefined;
342 mulxU64(&x152, &x153, x2, (arg2[2]));331 mulxU64(&x152, &x153, x2, arg2[2]);
343 var x154: u64 = undefined;332 var x154: u64 = undefined;
344 var x155: u64 = undefined;333 var x155: u64 = undefined;
345 mulxU64(&x154, &x155, x2, (arg2[1]));334 mulxU64(&x154, &x155, x2, arg2[1]);
346 var x156: u64 = undefined;335 var x156: u64 = undefined;
347 var x157: u64 = undefined;336 var x157: u64 = undefined;
348 mulxU64(&x156, &x157, x2, (arg2[0]));337 mulxU64(&x156, &x157, x2, arg2[0]);
349 var x158: u64 = undefined;338 var x158: u64 = undefined;
350 var x159: u1 = undefined;339 var x159: u1 = undefined;
351 addcarryxU64(&x158, &x159, 0x0, x157, x154);340 addcarryxU64(&x158, &x159, 0x0, x157, x154);
...@@ -361,7 +350,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -361,7 +350,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
361 var x166: u64 = undefined;350 var x166: u64 = undefined;
362 var x167: u1 = undefined;351 var x167: u1 = undefined;
363 addcarryxU64(&x166, &x167, x165, x149, x146);352 addcarryxU64(&x166, &x167, x165, x149, x146);
364 const x168 = (@as(u64, x167) + x147);353 const x168: u64 = (x167 + x147);
365 var x169: u64 = undefined;354 var x169: u64 = undefined;
366 var x170: u1 = undefined;355 var x170: u1 = undefined;
367 addcarryxU64(&x169, &x170, 0x0, x133, x156);356 addcarryxU64(&x169, &x170, 0x0, x133, x156);
...@@ -419,7 +408,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -419,7 +408,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
419 var x205: u64 = undefined;408 var x205: u64 = undefined;
420 var x206: u1 = undefined;409 var x206: u1 = undefined;
421 addcarryxU64(&x205, &x206, x204, x188, x185);410 addcarryxU64(&x205, &x206, x204, x188, x185);
422 const x207 = (@as(u64, x206) + x186);411 const x207: u64 = (x206 + x186);
423 var x208: u64 = undefined;412 var x208: u64 = undefined;
424 var x209: u1 = undefined;413 var x209: u1 = undefined;
425 addcarryxU64(&x208, &x209, 0x0, x169, x195);414 addcarryxU64(&x208, &x209, 0x0, x169, x195);
...@@ -441,25 +430,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -441,25 +430,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
441 var x220: u64 = undefined;430 var x220: u64 = undefined;
442 var x221: u1 = undefined;431 var x221: u1 = undefined;
443 addcarryxU64(&x220, &x221, x219, x181, x207);432 addcarryxU64(&x220, &x221, x219, x181, x207);
444 const x222 = (@as(u64, x221) + @as(u64, x182));433 const x222: u64 = (@as(u64, x221) + x182);
445 var x223: u64 = undefined;434 var x223: u64 = undefined;
446 var x224: u64 = undefined;435 var x224: u64 = undefined;
447 mulxU64(&x223, &x224, x3, (arg2[5]));436 mulxU64(&x223, &x224, x3, arg2[5]);
448 var x225: u64 = undefined;437 var x225: u64 = undefined;
449 var x226: u64 = undefined;438 var x226: u64 = undefined;
450 mulxU64(&x225, &x226, x3, (arg2[4]));439 mulxU64(&x225, &x226, x3, arg2[4]);
451 var x227: u64 = undefined;440 var x227: u64 = undefined;
452 var x228: u64 = undefined;441 var x228: u64 = undefined;
453 mulxU64(&x227, &x228, x3, (arg2[3]));442 mulxU64(&x227, &x228, x3, arg2[3]);
454 var x229: u64 = undefined;443 var x229: u64 = undefined;
455 var x230: u64 = undefined;444 var x230: u64 = undefined;
456 mulxU64(&x229, &x230, x3, (arg2[2]));445 mulxU64(&x229, &x230, x3, arg2[2]);
457 var x231: u64 = undefined;446 var x231: u64 = undefined;
458 var x232: u64 = undefined;447 var x232: u64 = undefined;
459 mulxU64(&x231, &x232, x3, (arg2[1]));448 mulxU64(&x231, &x232, x3, arg2[1]);
460 var x233: u64 = undefined;449 var x233: u64 = undefined;
461 var x234: u64 = undefined;450 var x234: u64 = undefined;
462 mulxU64(&x233, &x234, x3, (arg2[0]));451 mulxU64(&x233, &x234, x3, arg2[0]);
463 var x235: u64 = undefined;452 var x235: u64 = undefined;
464 var x236: u1 = undefined;453 var x236: u1 = undefined;
465 addcarryxU64(&x235, &x236, 0x0, x234, x231);454 addcarryxU64(&x235, &x236, 0x0, x234, x231);
...@@ -475,7 +464,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -475,7 +464,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
475 var x243: u64 = undefined;464 var x243: u64 = undefined;
476 var x244: u1 = undefined;465 var x244: u1 = undefined;
477 addcarryxU64(&x243, &x244, x242, x226, x223);466 addcarryxU64(&x243, &x244, x242, x226, x223);
478 const x245 = (@as(u64, x244) + x224);467 const x245: u64 = (x244 + x224);
479 var x246: u64 = undefined;468 var x246: u64 = undefined;
480 var x247: u1 = undefined;469 var x247: u1 = undefined;
481 addcarryxU64(&x246, &x247, 0x0, x210, x233);470 addcarryxU64(&x246, &x247, 0x0, x210, x233);
...@@ -533,7 +522,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -533,7 +522,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
533 var x282: u64 = undefined;522 var x282: u64 = undefined;
534 var x283: u1 = undefined;523 var x283: u1 = undefined;
535 addcarryxU64(&x282, &x283, x281, x265, x262);524 addcarryxU64(&x282, &x283, x281, x265, x262);
536 const x284 = (@as(u64, x283) + x263);525 const x284: u64 = (x283 + x263);
537 var x285: u64 = undefined;526 var x285: u64 = undefined;
538 var x286: u1 = undefined;527 var x286: u1 = undefined;
539 addcarryxU64(&x285, &x286, 0x0, x246, x272);528 addcarryxU64(&x285, &x286, 0x0, x246, x272);
...@@ -555,25 +544,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -555,25 +544,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
555 var x297: u64 = undefined;544 var x297: u64 = undefined;
556 var x298: u1 = undefined;545 var x298: u1 = undefined;
557 addcarryxU64(&x297, &x298, x296, x258, x284);546 addcarryxU64(&x297, &x298, x296, x258, x284);
558 const x299 = (@as(u64, x298) + @as(u64, x259));547 const x299: u64 = (@as(u64, x298) + x259);
559 var x300: u64 = undefined;548 var x300: u64 = undefined;
560 var x301: u64 = undefined;549 var x301: u64 = undefined;
561 mulxU64(&x300, &x301, x4, (arg2[5]));550 mulxU64(&x300, &x301, x4, arg2[5]);
562 var x302: u64 = undefined;551 var x302: u64 = undefined;
563 var x303: u64 = undefined;552 var x303: u64 = undefined;
564 mulxU64(&x302, &x303, x4, (arg2[4]));553 mulxU64(&x302, &x303, x4, arg2[4]);
565 var x304: u64 = undefined;554 var x304: u64 = undefined;
566 var x305: u64 = undefined;555 var x305: u64 = undefined;
567 mulxU64(&x304, &x305, x4, (arg2[3]));556 mulxU64(&x304, &x305, x4, arg2[3]);
568 var x306: u64 = undefined;557 var x306: u64 = undefined;
569 var x307: u64 = undefined;558 var x307: u64 = undefined;
570 mulxU64(&x306, &x307, x4, (arg2[2]));559 mulxU64(&x306, &x307, x4, arg2[2]);
571 var x308: u64 = undefined;560 var x308: u64 = undefined;
572 var x309: u64 = undefined;561 var x309: u64 = undefined;
573 mulxU64(&x308, &x309, x4, (arg2[1]));562 mulxU64(&x308, &x309, x4, arg2[1]);
574 var x310: u64 = undefined;563 var x310: u64 = undefined;
575 var x311: u64 = undefined;564 var x311: u64 = undefined;
576 mulxU64(&x310, &x311, x4, (arg2[0]));565 mulxU64(&x310, &x311, x4, arg2[0]);
577 var x312: u64 = undefined;566 var x312: u64 = undefined;
578 var x313: u1 = undefined;567 var x313: u1 = undefined;
579 addcarryxU64(&x312, &x313, 0x0, x311, x308);568 addcarryxU64(&x312, &x313, 0x0, x311, x308);
...@@ -589,7 +578,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -589,7 +578,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
589 var x320: u64 = undefined;578 var x320: u64 = undefined;
590 var x321: u1 = undefined;579 var x321: u1 = undefined;
591 addcarryxU64(&x320, &x321, x319, x303, x300);580 addcarryxU64(&x320, &x321, x319, x303, x300);
592 const x322 = (@as(u64, x321) + x301);581 const x322: u64 = (x321 + x301);
593 var x323: u64 = undefined;582 var x323: u64 = undefined;
594 var x324: u1 = undefined;583 var x324: u1 = undefined;
595 addcarryxU64(&x323, &x324, 0x0, x287, x310);584 addcarryxU64(&x323, &x324, 0x0, x287, x310);
...@@ -647,7 +636,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -647,7 +636,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
647 var x359: u64 = undefined;636 var x359: u64 = undefined;
648 var x360: u1 = undefined;637 var x360: u1 = undefined;
649 addcarryxU64(&x359, &x360, x358, x342, x339);638 addcarryxU64(&x359, &x360, x358, x342, x339);
650 const x361 = (@as(u64, x360) + x340);639 const x361: u64 = (x360 + x340);
651 var x362: u64 = undefined;640 var x362: u64 = undefined;
652 var x363: u1 = undefined;641 var x363: u1 = undefined;
653 addcarryxU64(&x362, &x363, 0x0, x323, x349);642 addcarryxU64(&x362, &x363, 0x0, x323, x349);
...@@ -669,25 +658,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -669,25 +658,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
669 var x374: u64 = undefined;658 var x374: u64 = undefined;
670 var x375: u1 = undefined;659 var x375: u1 = undefined;
671 addcarryxU64(&x374, &x375, x373, x335, x361);660 addcarryxU64(&x374, &x375, x373, x335, x361);
672 const x376 = (@as(u64, x375) + @as(u64, x336));661 const x376: u64 = (@as(u64, x375) + x336);
673 var x377: u64 = undefined;662 var x377: u64 = undefined;
674 var x378: u64 = undefined;663 var x378: u64 = undefined;
675 mulxU64(&x377, &x378, x5, (arg2[5]));664 mulxU64(&x377, &x378, x5, arg2[5]);
676 var x379: u64 = undefined;665 var x379: u64 = undefined;
677 var x380: u64 = undefined;666 var x380: u64 = undefined;
678 mulxU64(&x379, &x380, x5, (arg2[4]));667 mulxU64(&x379, &x380, x5, arg2[4]);
679 var x381: u64 = undefined;668 var x381: u64 = undefined;
680 var x382: u64 = undefined;669 var x382: u64 = undefined;
681 mulxU64(&x381, &x382, x5, (arg2[3]));670 mulxU64(&x381, &x382, x5, arg2[3]);
682 var x383: u64 = undefined;671 var x383: u64 = undefined;
683 var x384: u64 = undefined;672 var x384: u64 = undefined;
684 mulxU64(&x383, &x384, x5, (arg2[2]));673 mulxU64(&x383, &x384, x5, arg2[2]);
685 var x385: u64 = undefined;674 var x385: u64 = undefined;
686 var x386: u64 = undefined;675 var x386: u64 = undefined;
687 mulxU64(&x385, &x386, x5, (arg2[1]));676 mulxU64(&x385, &x386, x5, arg2[1]);
688 var x387: u64 = undefined;677 var x387: u64 = undefined;
689 var x388: u64 = undefined;678 var x388: u64 = undefined;
690 mulxU64(&x387, &x388, x5, (arg2[0]));679 mulxU64(&x387, &x388, x5, arg2[0]);
691 var x389: u64 = undefined;680 var x389: u64 = undefined;
692 var x390: u1 = undefined;681 var x390: u1 = undefined;
693 addcarryxU64(&x389, &x390, 0x0, x388, x385);682 addcarryxU64(&x389, &x390, 0x0, x388, x385);
...@@ -703,7 +692,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -703,7 +692,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
703 var x397: u64 = undefined;692 var x397: u64 = undefined;
704 var x398: u1 = undefined;693 var x398: u1 = undefined;
705 addcarryxU64(&x397, &x398, x396, x380, x377);694 addcarryxU64(&x397, &x398, x396, x380, x377);
706 const x399 = (@as(u64, x398) + x378);695 const x399: u64 = (x398 + x378);
707 var x400: u64 = undefined;696 var x400: u64 = undefined;
708 var x401: u1 = undefined;697 var x401: u1 = undefined;
709 addcarryxU64(&x400, &x401, 0x0, x364, x387);698 addcarryxU64(&x400, &x401, 0x0, x364, x387);
...@@ -761,7 +750,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -761,7 +750,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
761 var x436: u64 = undefined;750 var x436: u64 = undefined;
762 var x437: u1 = undefined;751 var x437: u1 = undefined;
763 addcarryxU64(&x436, &x437, x435, x419, x416);752 addcarryxU64(&x436, &x437, x435, x419, x416);
764 const x438 = (@as(u64, x437) + x417);753 const x438: u64 = (x437 + x417);
765 var x439: u64 = undefined;754 var x439: u64 = undefined;
766 var x440: u1 = undefined;755 var x440: u1 = undefined;
767 addcarryxU64(&x439, &x440, 0x0, x400, x426);756 addcarryxU64(&x439, &x440, 0x0, x400, x426);
...@@ -783,7 +772,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -783,7 +772,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
783 var x451: u64 = undefined;772 var x451: u64 = undefined;
784 var x452: u1 = undefined;773 var x452: u1 = undefined;
785 addcarryxU64(&x451, &x452, x450, x412, x438);774 addcarryxU64(&x451, &x452, x450, x412, x438);
786 const x453 = (@as(u64, x452) + @as(u64, x413));775 const x453: u64 = (@as(u64, x452) + x413);
787 var x454: u64 = undefined;776 var x454: u64 = undefined;
788 var x455: u1 = undefined;777 var x455: u1 = undefined;
789 subborrowxU64(&x454, &x455, 0x0, x441, 0xffffffff);778 subborrowxU64(&x454, &x455, 0x0, x441, 0xffffffff);
...@@ -806,17 +795,18 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -806,17 +795,18 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
806 var x467: u1 = undefined;795 var x467: u1 = undefined;
807 subborrowxU64(&x466, &x467, x465, x453, 0x0);796 subborrowxU64(&x466, &x467, x465, x453, 0x0);
808 var x468: u64 = undefined;797 var x468: u64 = undefined;
809 cmovznzU64(&x468, x467, x454, x441);798 const x468_selection_mask = selectionMaskU64(x467);
799 x468 = x454 ^ ((x454 ^ x441) & x468_selection_mask);
810 var x469: u64 = undefined;800 var x469: u64 = undefined;
811 cmovznzU64(&x469, x467, x456, x443);801 x469 = x456 ^ ((x456 ^ x443) & x468_selection_mask);
812 var x470: u64 = undefined;802 var x470: u64 = undefined;
813 cmovznzU64(&x470, x467, x458, x445);803 x470 = x458 ^ ((x458 ^ x445) & x468_selection_mask);
814 var x471: u64 = undefined;804 var x471: u64 = undefined;
815 cmovznzU64(&x471, x467, x460, x447);805 x471 = x460 ^ ((x460 ^ x447) & x468_selection_mask);
816 var x472: u64 = undefined;806 var x472: u64 = undefined;
817 cmovznzU64(&x472, x467, x462, x449);807 x472 = x462 ^ ((x462 ^ x449) & x468_selection_mask);
818 var x473: u64 = undefined;808 var x473: u64 = undefined;
819 cmovznzU64(&x473, x467, x464, x451);809 x473 = x464 ^ ((x464 ^ x451) & x468_selection_mask);
820 out1[0] = x468;810 out1[0] = x468;
821 out1[1] = x469;811 out1[1] = x469;
822 out1[2] = x470;812 out1[2] = x470;
...@@ -836,30 +826,30 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -836,30 +826,30 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
836pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {826pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
837 @setRuntimeSafety(mode == .debug);827 @setRuntimeSafety(mode == .debug);
838828
839 const x1 = (arg1[1]);829 const x1: u64 = arg1[1];
840 const x2 = (arg1[2]);830 const x2: u64 = arg1[2];
841 const x3 = (arg1[3]);831 const x3: u64 = arg1[3];
842 const x4 = (arg1[4]);832 const x4: u64 = arg1[4];
843 const x5 = (arg1[5]);833 const x5: u64 = arg1[5];
844 const x6 = (arg1[0]);834 const x6: u64 = arg1[0];
845 var x7: u64 = undefined;835 var x7: u64 = undefined;
846 var x8: u64 = undefined;836 var x8: u64 = undefined;
847 mulxU64(&x7, &x8, x6, (arg1[5]));837 mulxU64(&x7, &x8, x6, arg1[5]);
848 var x9: u64 = undefined;838 var x9: u64 = undefined;
849 var x10: u64 = undefined;839 var x10: u64 = undefined;
850 mulxU64(&x9, &x10, x6, (arg1[4]));840 mulxU64(&x9, &x10, x6, arg1[4]);
851 var x11: u64 = undefined;841 var x11: u64 = undefined;
852 var x12: u64 = undefined;842 var x12: u64 = undefined;
853 mulxU64(&x11, &x12, x6, (arg1[3]));843 mulxU64(&x11, &x12, x6, arg1[3]);
854 var x13: u64 = undefined;844 var x13: u64 = undefined;
855 var x14: u64 = undefined;845 var x14: u64 = undefined;
856 mulxU64(&x13, &x14, x6, (arg1[2]));846 mulxU64(&x13, &x14, x6, arg1[2]);
857 var x15: u64 = undefined;847 var x15: u64 = undefined;
858 var x16: u64 = undefined;848 var x16: u64 = undefined;
859 mulxU64(&x15, &x16, x6, (arg1[1]));849 mulxU64(&x15, &x16, x6, arg1[1]);
860 var x17: u64 = undefined;850 var x17: u64 = undefined;
861 var x18: u64 = undefined;851 var x18: u64 = undefined;
862 mulxU64(&x17, &x18, x6, (arg1[0]));852 mulxU64(&x17, &x18, x6, arg1[0]);
863 var x19: u64 = undefined;853 var x19: u64 = undefined;
864 var x20: u1 = undefined;854 var x20: u1 = undefined;
865 addcarryxU64(&x19, &x20, 0x0, x18, x15);855 addcarryxU64(&x19, &x20, 0x0, x18, x15);
...@@ -875,7 +865,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -875,7 +865,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
875 var x27: u64 = undefined;865 var x27: u64 = undefined;
876 var x28: u1 = undefined;866 var x28: u1 = undefined;
877 addcarryxU64(&x27, &x28, x26, x10, x7);867 addcarryxU64(&x27, &x28, x26, x10, x7);
878 const x29 = (@as(u64, x28) + x8);868 const x29: u64 = (x28 + x8);
879 var x30: u64 = undefined;869 var x30: u64 = undefined;
880 var x31: u64 = undefined;870 var x31: u64 = undefined;
881 mulxU64(&x30, &x31, x17, 0x100000001);871 mulxU64(&x30, &x31, x17, 0x100000001);
...@@ -912,7 +902,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -912,7 +902,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
912 var x52: u64 = undefined;902 var x52: u64 = undefined;
913 var x53: u1 = undefined;903 var x53: u1 = undefined;
914 addcarryxU64(&x52, &x53, x51, x35, x32);904 addcarryxU64(&x52, &x53, x51, x35, x32);
915 const x54 = (@as(u64, x53) + x33);905 const x54: u64 = (x53 + x33);
916 var x55: u64 = undefined;906 var x55: u64 = undefined;
917 var x56: u1 = undefined;907 var x56: u1 = undefined;
918 addcarryxU64(&x55, &x56, 0x0, x17, x42);908 addcarryxU64(&x55, &x56, 0x0, x17, x42);
...@@ -936,22 +926,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -936,22 +926,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
936 addcarryxU64(&x67, &x68, x66, x29, x54);926 addcarryxU64(&x67, &x68, x66, x29, x54);
937 var x69: u64 = undefined;927 var x69: u64 = undefined;
938 var x70: u64 = undefined;928 var x70: u64 = undefined;
939 mulxU64(&x69, &x70, x1, (arg1[5]));929 mulxU64(&x69, &x70, x1, arg1[5]);
940 var x71: u64 = undefined;930 var x71: u64 = undefined;
941 var x72: u64 = undefined;931 var x72: u64 = undefined;
942 mulxU64(&x71, &x72, x1, (arg1[4]));932 mulxU64(&x71, &x72, x1, arg1[4]);
943 var x73: u64 = undefined;933 var x73: u64 = undefined;
944 var x74: u64 = undefined;934 var x74: u64 = undefined;
945 mulxU64(&x73, &x74, x1, (arg1[3]));935 mulxU64(&x73, &x74, x1, arg1[3]);
946 var x75: u64 = undefined;936 var x75: u64 = undefined;
947 var x76: u64 = undefined;937 var x76: u64 = undefined;
948 mulxU64(&x75, &x76, x1, (arg1[2]));938 mulxU64(&x75, &x76, x1, arg1[2]);
949 var x77: u64 = undefined;939 var x77: u64 = undefined;
950 var x78: u64 = undefined;940 var x78: u64 = undefined;
951 mulxU64(&x77, &x78, x1, (arg1[1]));941 mulxU64(&x77, &x78, x1, arg1[1]);
952 var x79: u64 = undefined;942 var x79: u64 = undefined;
953 var x80: u64 = undefined;943 var x80: u64 = undefined;
954 mulxU64(&x79, &x80, x1, (arg1[0]));944 mulxU64(&x79, &x80, x1, arg1[0]);
955 var x81: u64 = undefined;945 var x81: u64 = undefined;
956 var x82: u1 = undefined;946 var x82: u1 = undefined;
957 addcarryxU64(&x81, &x82, 0x0, x80, x77);947 addcarryxU64(&x81, &x82, 0x0, x80, x77);
...@@ -967,7 +957,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -967,7 +957,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
967 var x89: u64 = undefined;957 var x89: u64 = undefined;
968 var x90: u1 = undefined;958 var x90: u1 = undefined;
969 addcarryxU64(&x89, &x90, x88, x72, x69);959 addcarryxU64(&x89, &x90, x88, x72, x69);
970 const x91 = (@as(u64, x90) + x70);960 const x91: u64 = (x90 + x70);
971 var x92: u64 = undefined;961 var x92: u64 = undefined;
972 var x93: u1 = undefined;962 var x93: u1 = undefined;
973 addcarryxU64(&x92, &x93, 0x0, x57, x79);963 addcarryxU64(&x92, &x93, 0x0, x57, x79);
...@@ -988,7 +978,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -988,7 +978,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
988 addcarryxU64(&x102, &x103, x101, x67, x89);978 addcarryxU64(&x102, &x103, x101, x67, x89);
989 var x104: u64 = undefined;979 var x104: u64 = undefined;
990 var x105: u1 = undefined;980 var x105: u1 = undefined;
991 addcarryxU64(&x104, &x105, x103, @as(u64, x68), x91);981 addcarryxU64(&x104, &x105, x103, x68, x91);
992 var x106: u64 = undefined;982 var x106: u64 = undefined;
993 var x107: u64 = undefined;983 var x107: u64 = undefined;
994 mulxU64(&x106, &x107, x92, 0x100000001);984 mulxU64(&x106, &x107, x92, 0x100000001);
...@@ -1025,7 +1015,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1025,7 +1015,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1025 var x128: u64 = undefined;1015 var x128: u64 = undefined;
1026 var x129: u1 = undefined;1016 var x129: u1 = undefined;
1027 addcarryxU64(&x128, &x129, x127, x111, x108);1017 addcarryxU64(&x128, &x129, x127, x111, x108);
1028 const x130 = (@as(u64, x129) + x109);1018 const x130: u64 = (x129 + x109);
1029 var x131: u64 = undefined;1019 var x131: u64 = undefined;
1030 var x132: u1 = undefined;1020 var x132: u1 = undefined;
1031 addcarryxU64(&x131, &x132, 0x0, x92, x118);1021 addcarryxU64(&x131, &x132, 0x0, x92, x118);
...@@ -1047,25 +1037,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1047,25 +1037,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1047 var x143: u64 = undefined;1037 var x143: u64 = undefined;
1048 var x144: u1 = undefined;1038 var x144: u1 = undefined;
1049 addcarryxU64(&x143, &x144, x142, x104, x130);1039 addcarryxU64(&x143, &x144, x142, x104, x130);
1050 const x145 = (@as(u64, x144) + @as(u64, x105));1040 const x145: u64 = (@as(u64, x144) + x105);
1051 var x146: u64 = undefined;1041 var x146: u64 = undefined;
1052 var x147: u64 = undefined;1042 var x147: u64 = undefined;
1053 mulxU64(&x146, &x147, x2, (arg1[5]));1043 mulxU64(&x146, &x147, x2, arg1[5]);
1054 var x148: u64 = undefined;1044 var x148: u64 = undefined;
1055 var x149: u64 = undefined;1045 var x149: u64 = undefined;
1056 mulxU64(&x148, &x149, x2, (arg1[4]));1046 mulxU64(&x148, &x149, x2, arg1[4]);
1057 var x150: u64 = undefined;1047 var x150: u64 = undefined;
1058 var x151: u64 = undefined;1048 var x151: u64 = undefined;
1059 mulxU64(&x150, &x151, x2, (arg1[3]));1049 mulxU64(&x150, &x151, x2, arg1[3]);
1060 var x152: u64 = undefined;1050 var x152: u64 = undefined;
1061 var x153: u64 = undefined;1051 var x153: u64 = undefined;
1062 mulxU64(&x152, &x153, x2, (arg1[2]));1052 mulxU64(&x152, &x153, x2, arg1[2]);
1063 var x154: u64 = undefined;1053 var x154: u64 = undefined;
1064 var x155: u64 = undefined;1054 var x155: u64 = undefined;
1065 mulxU64(&x154, &x155, x2, (arg1[1]));1055 mulxU64(&x154, &x155, x2, arg1[1]);
1066 var x156: u64 = undefined;1056 var x156: u64 = undefined;
1067 var x157: u64 = undefined;1057 var x157: u64 = undefined;
1068 mulxU64(&x156, &x157, x2, (arg1[0]));1058 mulxU64(&x156, &x157, x2, arg1[0]);
1069 var x158: u64 = undefined;1059 var x158: u64 = undefined;
1070 var x159: u1 = undefined;1060 var x159: u1 = undefined;
1071 addcarryxU64(&x158, &x159, 0x0, x157, x154);1061 addcarryxU64(&x158, &x159, 0x0, x157, x154);
...@@ -1081,7 +1071,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1081,7 +1071,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1081 var x166: u64 = undefined;1071 var x166: u64 = undefined;
1082 var x167: u1 = undefined;1072 var x167: u1 = undefined;
1083 addcarryxU64(&x166, &x167, x165, x149, x146);1073 addcarryxU64(&x166, &x167, x165, x149, x146);
1084 const x168 = (@as(u64, x167) + x147);1074 const x168: u64 = (x167 + x147);
1085 var x169: u64 = undefined;1075 var x169: u64 = undefined;
1086 var x170: u1 = undefined;1076 var x170: u1 = undefined;
1087 addcarryxU64(&x169, &x170, 0x0, x133, x156);1077 addcarryxU64(&x169, &x170, 0x0, x133, x156);
...@@ -1139,7 +1129,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1139,7 +1129,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1139 var x205: u64 = undefined;1129 var x205: u64 = undefined;
1140 var x206: u1 = undefined;1130 var x206: u1 = undefined;
1141 addcarryxU64(&x205, &x206, x204, x188, x185);1131 addcarryxU64(&x205, &x206, x204, x188, x185);
1142 const x207 = (@as(u64, x206) + x186);1132 const x207: u64 = (x206 + x186);
1143 var x208: u64 = undefined;1133 var x208: u64 = undefined;
1144 var x209: u1 = undefined;1134 var x209: u1 = undefined;
1145 addcarryxU64(&x208, &x209, 0x0, x169, x195);1135 addcarryxU64(&x208, &x209, 0x0, x169, x195);
...@@ -1161,25 +1151,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1161,25 +1151,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1161 var x220: u64 = undefined;1151 var x220: u64 = undefined;
1162 var x221: u1 = undefined;1152 var x221: u1 = undefined;
1163 addcarryxU64(&x220, &x221, x219, x181, x207);1153 addcarryxU64(&x220, &x221, x219, x181, x207);
1164 const x222 = (@as(u64, x221) + @as(u64, x182));1154 const x222: u64 = (@as(u64, x221) + x182);
1165 var x223: u64 = undefined;1155 var x223: u64 = undefined;
1166 var x224: u64 = undefined;1156 var x224: u64 = undefined;
1167 mulxU64(&x223, &x224, x3, (arg1[5]));1157 mulxU64(&x223, &x224, x3, arg1[5]);
1168 var x225: u64 = undefined;1158 var x225: u64 = undefined;
1169 var x226: u64 = undefined;1159 var x226: u64 = undefined;
1170 mulxU64(&x225, &x226, x3, (arg1[4]));1160 mulxU64(&x225, &x226, x3, arg1[4]);
1171 var x227: u64 = undefined;1161 var x227: u64 = undefined;
1172 var x228: u64 = undefined;1162 var x228: u64 = undefined;
1173 mulxU64(&x227, &x228, x3, (arg1[3]));1163 mulxU64(&x227, &x228, x3, arg1[3]);
1174 var x229: u64 = undefined;1164 var x229: u64 = undefined;
1175 var x230: u64 = undefined;1165 var x230: u64 = undefined;
1176 mulxU64(&x229, &x230, x3, (arg1[2]));1166 mulxU64(&x229, &x230, x3, arg1[2]);
1177 var x231: u64 = undefined;1167 var x231: u64 = undefined;
1178 var x232: u64 = undefined;1168 var x232: u64 = undefined;
1179 mulxU64(&x231, &x232, x3, (arg1[1]));1169 mulxU64(&x231, &x232, x3, arg1[1]);
1180 var x233: u64 = undefined;1170 var x233: u64 = undefined;
1181 var x234: u64 = undefined;1171 var x234: u64 = undefined;
1182 mulxU64(&x233, &x234, x3, (arg1[0]));1172 mulxU64(&x233, &x234, x3, arg1[0]);
1183 var x235: u64 = undefined;1173 var x235: u64 = undefined;
1184 var x236: u1 = undefined;1174 var x236: u1 = undefined;
1185 addcarryxU64(&x235, &x236, 0x0, x234, x231);1175 addcarryxU64(&x235, &x236, 0x0, x234, x231);
...@@ -1195,7 +1185,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1195,7 +1185,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1195 var x243: u64 = undefined;1185 var x243: u64 = undefined;
1196 var x244: u1 = undefined;1186 var x244: u1 = undefined;
1197 addcarryxU64(&x243, &x244, x242, x226, x223);1187 addcarryxU64(&x243, &x244, x242, x226, x223);
1198 const x245 = (@as(u64, x244) + x224);1188 const x245: u64 = (x244 + x224);
1199 var x246: u64 = undefined;1189 var x246: u64 = undefined;
1200 var x247: u1 = undefined;1190 var x247: u1 = undefined;
1201 addcarryxU64(&x246, &x247, 0x0, x210, x233);1191 addcarryxU64(&x246, &x247, 0x0, x210, x233);
...@@ -1253,7 +1243,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1253,7 +1243,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1253 var x282: u64 = undefined;1243 var x282: u64 = undefined;
1254 var x283: u1 = undefined;1244 var x283: u1 = undefined;
1255 addcarryxU64(&x282, &x283, x281, x265, x262);1245 addcarryxU64(&x282, &x283, x281, x265, x262);
1256 const x284 = (@as(u64, x283) + x263);1246 const x284: u64 = (x283 + x263);
1257 var x285: u64 = undefined;1247 var x285: u64 = undefined;
1258 var x286: u1 = undefined;1248 var x286: u1 = undefined;
1259 addcarryxU64(&x285, &x286, 0x0, x246, x272);1249 addcarryxU64(&x285, &x286, 0x0, x246, x272);
...@@ -1275,25 +1265,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1275,25 +1265,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1275 var x297: u64 = undefined;1265 var x297: u64 = undefined;
1276 var x298: u1 = undefined;1266 var x298: u1 = undefined;
1277 addcarryxU64(&x297, &x298, x296, x258, x284);1267 addcarryxU64(&x297, &x298, x296, x258, x284);
1278 const x299 = (@as(u64, x298) + @as(u64, x259));1268 const x299: u64 = (@as(u64, x298) + x259);
1279 var x300: u64 = undefined;1269 var x300: u64 = undefined;
1280 var x301: u64 = undefined;1270 var x301: u64 = undefined;
1281 mulxU64(&x300, &x301, x4, (arg1[5]));1271 mulxU64(&x300, &x301, x4, arg1[5]);
1282 var x302: u64 = undefined;1272 var x302: u64 = undefined;
1283 var x303: u64 = undefined;1273 var x303: u64 = undefined;
1284 mulxU64(&x302, &x303, x4, (arg1[4]));1274 mulxU64(&x302, &x303, x4, arg1[4]);
1285 var x304: u64 = undefined;1275 var x304: u64 = undefined;
1286 var x305: u64 = undefined;1276 var x305: u64 = undefined;
1287 mulxU64(&x304, &x305, x4, (arg1[3]));1277 mulxU64(&x304, &x305, x4, arg1[3]);
1288 var x306: u64 = undefined;1278 var x306: u64 = undefined;
1289 var x307: u64 = undefined;1279 var x307: u64 = undefined;
1290 mulxU64(&x306, &x307, x4, (arg1[2]));1280 mulxU64(&x306, &x307, x4, arg1[2]);
1291 var x308: u64 = undefined;1281 var x308: u64 = undefined;
1292 var x309: u64 = undefined;1282 var x309: u64 = undefined;
1293 mulxU64(&x308, &x309, x4, (arg1[1]));1283 mulxU64(&x308, &x309, x4, arg1[1]);
1294 var x310: u64 = undefined;1284 var x310: u64 = undefined;
1295 var x311: u64 = undefined;1285 var x311: u64 = undefined;
1296 mulxU64(&x310, &x311, x4, (arg1[0]));1286 mulxU64(&x310, &x311, x4, arg1[0]);
1297 var x312: u64 = undefined;1287 var x312: u64 = undefined;
1298 var x313: u1 = undefined;1288 var x313: u1 = undefined;
1299 addcarryxU64(&x312, &x313, 0x0, x311, x308);1289 addcarryxU64(&x312, &x313, 0x0, x311, x308);
...@@ -1309,7 +1299,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1309,7 +1299,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1309 var x320: u64 = undefined;1299 var x320: u64 = undefined;
1310 var x321: u1 = undefined;1300 var x321: u1 = undefined;
1311 addcarryxU64(&x320, &x321, x319, x303, x300);1301 addcarryxU64(&x320, &x321, x319, x303, x300);
1312 const x322 = (@as(u64, x321) + x301);1302 const x322: u64 = (x321 + x301);
1313 var x323: u64 = undefined;1303 var x323: u64 = undefined;
1314 var x324: u1 = undefined;1304 var x324: u1 = undefined;
1315 addcarryxU64(&x323, &x324, 0x0, x287, x310);1305 addcarryxU64(&x323, &x324, 0x0, x287, x310);
...@@ -1367,7 +1357,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1367,7 +1357,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1367 var x359: u64 = undefined;1357 var x359: u64 = undefined;
1368 var x360: u1 = undefined;1358 var x360: u1 = undefined;
1369 addcarryxU64(&x359, &x360, x358, x342, x339);1359 addcarryxU64(&x359, &x360, x358, x342, x339);
1370 const x361 = (@as(u64, x360) + x340);1360 const x361: u64 = (x360 + x340);
1371 var x362: u64 = undefined;1361 var x362: u64 = undefined;
1372 var x363: u1 = undefined;1362 var x363: u1 = undefined;
1373 addcarryxU64(&x362, &x363, 0x0, x323, x349);1363 addcarryxU64(&x362, &x363, 0x0, x323, x349);
...@@ -1389,25 +1379,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1389,25 +1379,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1389 var x374: u64 = undefined;1379 var x374: u64 = undefined;
1390 var x375: u1 = undefined;1380 var x375: u1 = undefined;
1391 addcarryxU64(&x374, &x375, x373, x335, x361);1381 addcarryxU64(&x374, &x375, x373, x335, x361);
1392 const x376 = (@as(u64, x375) + @as(u64, x336));1382 const x376: u64 = (@as(u64, x375) + x336);
1393 var x377: u64 = undefined;1383 var x377: u64 = undefined;
1394 var x378: u64 = undefined;1384 var x378: u64 = undefined;
1395 mulxU64(&x377, &x378, x5, (arg1[5]));1385 mulxU64(&x377, &x378, x5, arg1[5]);
1396 var x379: u64 = undefined;1386 var x379: u64 = undefined;
1397 var x380: u64 = undefined;1387 var x380: u64 = undefined;
1398 mulxU64(&x379, &x380, x5, (arg1[4]));1388 mulxU64(&x379, &x380, x5, arg1[4]);
1399 var x381: u64 = undefined;1389 var x381: u64 = undefined;
1400 var x382: u64 = undefined;1390 var x382: u64 = undefined;
1401 mulxU64(&x381, &x382, x5, (arg1[3]));1391 mulxU64(&x381, &x382, x5, arg1[3]);
1402 var x383: u64 = undefined;1392 var x383: u64 = undefined;
1403 var x384: u64 = undefined;1393 var x384: u64 = undefined;
1404 mulxU64(&x383, &x384, x5, (arg1[2]));1394 mulxU64(&x383, &x384, x5, arg1[2]);
1405 var x385: u64 = undefined;1395 var x385: u64 = undefined;
1406 var x386: u64 = undefined;1396 var x386: u64 = undefined;
1407 mulxU64(&x385, &x386, x5, (arg1[1]));1397 mulxU64(&x385, &x386, x5, arg1[1]);
1408 var x387: u64 = undefined;1398 var x387: u64 = undefined;
1409 var x388: u64 = undefined;1399 var x388: u64 = undefined;
1410 mulxU64(&x387, &x388, x5, (arg1[0]));1400 mulxU64(&x387, &x388, x5, arg1[0]);
1411 var x389: u64 = undefined;1401 var x389: u64 = undefined;
1412 var x390: u1 = undefined;1402 var x390: u1 = undefined;
1413 addcarryxU64(&x389, &x390, 0x0, x388, x385);1403 addcarryxU64(&x389, &x390, 0x0, x388, x385);
...@@ -1423,7 +1413,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1423,7 +1413,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1423 var x397: u64 = undefined;1413 var x397: u64 = undefined;
1424 var x398: u1 = undefined;1414 var x398: u1 = undefined;
1425 addcarryxU64(&x397, &x398, x396, x380, x377);1415 addcarryxU64(&x397, &x398, x396, x380, x377);
1426 const x399 = (@as(u64, x398) + x378);1416 const x399: u64 = (x398 + x378);
1427 var x400: u64 = undefined;1417 var x400: u64 = undefined;
1428 var x401: u1 = undefined;1418 var x401: u1 = undefined;
1429 addcarryxU64(&x400, &x401, 0x0, x364, x387);1419 addcarryxU64(&x400, &x401, 0x0, x364, x387);
...@@ -1481,7 +1471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1481,7 +1471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1481 var x436: u64 = undefined;1471 var x436: u64 = undefined;
1482 var x437: u1 = undefined;1472 var x437: u1 = undefined;
1483 addcarryxU64(&x436, &x437, x435, x419, x416);1473 addcarryxU64(&x436, &x437, x435, x419, x416);
1484 const x438 = (@as(u64, x437) + x417);1474 const x438: u64 = (x437 + x417);
1485 var x439: u64 = undefined;1475 var x439: u64 = undefined;
1486 var x440: u1 = undefined;1476 var x440: u1 = undefined;
1487 addcarryxU64(&x439, &x440, 0x0, x400, x426);1477 addcarryxU64(&x439, &x440, 0x0, x400, x426);
...@@ -1503,7 +1493,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1503,7 +1493,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1503 var x451: u64 = undefined;1493 var x451: u64 = undefined;
1504 var x452: u1 = undefined;1494 var x452: u1 = undefined;
1505 addcarryxU64(&x451, &x452, x450, x412, x438);1495 addcarryxU64(&x451, &x452, x450, x412, x438);
1506 const x453 = (@as(u64, x452) + @as(u64, x413));1496 const x453: u64 = (@as(u64, x452) + x413);
1507 var x454: u64 = undefined;1497 var x454: u64 = undefined;
1508 var x455: u1 = undefined;1498 var x455: u1 = undefined;
1509 subborrowxU64(&x454, &x455, 0x0, x441, 0xffffffff);1499 subborrowxU64(&x454, &x455, 0x0, x441, 0xffffffff);
...@@ -1526,17 +1516,18 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1526,17 +1516,18 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1526 var x467: u1 = undefined;1516 var x467: u1 = undefined;
1527 subborrowxU64(&x466, &x467, x465, x453, 0x0);1517 subborrowxU64(&x466, &x467, x465, x453, 0x0);
1528 var x468: u64 = undefined;1518 var x468: u64 = undefined;
1529 cmovznzU64(&x468, x467, x454, x441);1519 const x468_selection_mask = selectionMaskU64(x467);
1520 x468 = x454 ^ ((x454 ^ x441) & x468_selection_mask);
1530 var x469: u64 = undefined;1521 var x469: u64 = undefined;
1531 cmovznzU64(&x469, x467, x456, x443);1522 x469 = x456 ^ ((x456 ^ x443) & x468_selection_mask);
1532 var x470: u64 = undefined;1523 var x470: u64 = undefined;
1533 cmovznzU64(&x470, x467, x458, x445);1524 x470 = x458 ^ ((x458 ^ x445) & x468_selection_mask);
1534 var x471: u64 = undefined;1525 var x471: u64 = undefined;
1535 cmovznzU64(&x471, x467, x460, x447);1526 x471 = x460 ^ ((x460 ^ x447) & x468_selection_mask);
1536 var x472: u64 = undefined;1527 var x472: u64 = undefined;
1537 cmovznzU64(&x472, x467, x462, x449);1528 x472 = x462 ^ ((x462 ^ x449) & x468_selection_mask);
1538 var x473: u64 = undefined;1529 var x473: u64 = undefined;
1539 cmovznzU64(&x473, x467, x464, x451);1530 x473 = x464 ^ ((x464 ^ x451) & x468_selection_mask);
1540 out1[0] = x468;1531 out1[0] = x468;
1541 out1[1] = x469;1532 out1[1] = x469;
1542 out1[2] = x470;1533 out1[2] = x470;
...@@ -1559,22 +1550,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1559,22 +1550,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
15591550
1560 var x1: u64 = undefined;1551 var x1: u64 = undefined;
1561 var x2: u1 = undefined;1552 var x2: u1 = undefined;
1562 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));1553 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
1563 var x3: u64 = undefined;1554 var x3: u64 = undefined;
1564 var x4: u1 = undefined;1555 var x4: u1 = undefined;
1565 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));1556 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
1566 var x5: u64 = undefined;1557 var x5: u64 = undefined;
1567 var x6: u1 = undefined;1558 var x6: u1 = undefined;
1568 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));1559 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
1569 var x7: u64 = undefined;1560 var x7: u64 = undefined;
1570 var x8: u1 = undefined;1561 var x8: u1 = undefined;
1571 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));1562 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
1572 var x9: u64 = undefined;1563 var x9: u64 = undefined;
1573 var x10: u1 = undefined;1564 var x10: u1 = undefined;
1574 addcarryxU64(&x9, &x10, x8, (arg1[4]), (arg2[4]));1565 addcarryxU64(&x9, &x10, x8, arg1[4], arg2[4]);
1575 var x11: u64 = undefined;1566 var x11: u64 = undefined;
1576 var x12: u1 = undefined;1567 var x12: u1 = undefined;
1577 addcarryxU64(&x11, &x12, x10, (arg1[5]), (arg2[5]));1568 addcarryxU64(&x11, &x12, x10, arg1[5], arg2[5]);
1578 var x13: u64 = undefined;1569 var x13: u64 = undefined;
1579 var x14: u1 = undefined;1570 var x14: u1 = undefined;
1580 subborrowxU64(&x13, &x14, 0x0, x1, 0xffffffff);1571 subborrowxU64(&x13, &x14, 0x0, x1, 0xffffffff);
...@@ -1595,19 +1586,20 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1595,19 +1586,20 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
1595 subborrowxU64(&x23, &x24, x22, x11, 0xffffffffffffffff);1586 subborrowxU64(&x23, &x24, x22, x11, 0xffffffffffffffff);
1596 var x25: u64 = undefined;1587 var x25: u64 = undefined;
1597 var x26: u1 = undefined;1588 var x26: u1 = undefined;
1598 subborrowxU64(&x25, &x26, x24, @as(u64, x12), 0x0);1589 subborrowxU64(&x25, &x26, x24, x12, 0x0);
1599 var x27: u64 = undefined;1590 var x27: u64 = undefined;
1600 cmovznzU64(&x27, x26, x13, x1);1591 const x27_selection_mask = selectionMaskU64(x26);
1592 x27 = x13 ^ ((x13 ^ x1) & x27_selection_mask);
1601 var x28: u64 = undefined;1593 var x28: u64 = undefined;
1602 cmovznzU64(&x28, x26, x15, x3);1594 x28 = x15 ^ ((x15 ^ x3) & x27_selection_mask);
1603 var x29: u64 = undefined;1595 var x29: u64 = undefined;
1604 cmovznzU64(&x29, x26, x17, x5);1596 x29 = x17 ^ ((x17 ^ x5) & x27_selection_mask);
1605 var x30: u64 = undefined;1597 var x30: u64 = undefined;
1606 cmovznzU64(&x30, x26, x19, x7);1598 x30 = x19 ^ ((x19 ^ x7) & x27_selection_mask);
1607 var x31: u64 = undefined;1599 var x31: u64 = undefined;
1608 cmovznzU64(&x31, x26, x21, x9);1600 x31 = x21 ^ ((x21 ^ x9) & x27_selection_mask);
1609 var x32: u64 = undefined;1601 var x32: u64 = undefined;
1610 cmovznzU64(&x32, x26, x23, x11);1602 x32 = x23 ^ ((x23 ^ x11) & x27_selection_mask);
1611 out1[0] = x27;1603 out1[0] = x27;
1612 out1[1] = x28;1604 out1[1] = x28;
1613 out1[2] = x29;1605 out1[2] = x29;
...@@ -1630,24 +1622,25 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1630,24 +1622,25 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
16301622
1631 var x1: u64 = undefined;1623 var x1: u64 = undefined;
1632 var x2: u1 = undefined;1624 var x2: u1 = undefined;
1633 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));1625 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
1634 var x3: u64 = undefined;1626 var x3: u64 = undefined;
1635 var x4: u1 = undefined;1627 var x4: u1 = undefined;
1636 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));1628 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
1637 var x5: u64 = undefined;1629 var x5: u64 = undefined;
1638 var x6: u1 = undefined;1630 var x6: u1 = undefined;
1639 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));1631 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
1640 var x7: u64 = undefined;1632 var x7: u64 = undefined;
1641 var x8: u1 = undefined;1633 var x8: u1 = undefined;
1642 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));1634 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
1643 var x9: u64 = undefined;1635 var x9: u64 = undefined;
1644 var x10: u1 = undefined;1636 var x10: u1 = undefined;
1645 subborrowxU64(&x9, &x10, x8, (arg1[4]), (arg2[4]));1637 subborrowxU64(&x9, &x10, x8, arg1[4], arg2[4]);
1646 var x11: u64 = undefined;1638 var x11: u64 = undefined;
1647 var x12: u1 = undefined;1639 var x12: u1 = undefined;
1648 subborrowxU64(&x11, &x12, x10, (arg1[5]), (arg2[5]));1640 subborrowxU64(&x11, &x12, x10, arg1[5], arg2[5]);
1649 var x13: u64 = undefined;1641 var x13: u64 = undefined;
1650 cmovznzU64(&x13, x12, 0x0, 0xffffffffffffffff);1642 const x13_selection_mask = selectionMaskU64(x12);
1643 x13 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x13_selection_mask);
1651 var x14: u64 = undefined;1644 var x14: u64 = undefined;
1652 var x15: u1 = undefined;1645 var x15: u1 = undefined;
1653 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xffffffff));1646 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xffffffff));
...@@ -1687,24 +1680,25 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1687,24 +1680,25 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
16871680
1688 var x1: u64 = undefined;1681 var x1: u64 = undefined;
1689 var x2: u1 = undefined;1682 var x2: u1 = undefined;
1690 subborrowxU64(&x1, &x2, 0x0, 0x0, (arg1[0]));1683 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
1691 var x3: u64 = undefined;1684 var x3: u64 = undefined;
1692 var x4: u1 = undefined;1685 var x4: u1 = undefined;
1693 subborrowxU64(&x3, &x4, x2, 0x0, (arg1[1]));1686 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
1694 var x5: u64 = undefined;1687 var x5: u64 = undefined;
1695 var x6: u1 = undefined;1688 var x6: u1 = undefined;
1696 subborrowxU64(&x5, &x6, x4, 0x0, (arg1[2]));1689 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
1697 var x7: u64 = undefined;1690 var x7: u64 = undefined;
1698 var x8: u1 = undefined;1691 var x8: u1 = undefined;
1699 subborrowxU64(&x7, &x8, x6, 0x0, (arg1[3]));1692 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
1700 var x9: u64 = undefined;1693 var x9: u64 = undefined;
1701 var x10: u1 = undefined;1694 var x10: u1 = undefined;
1702 subborrowxU64(&x9, &x10, x8, 0x0, (arg1[4]));1695 subborrowxU64(&x9, &x10, x8, 0x0, arg1[4]);
1703 var x11: u64 = undefined;1696 var x11: u64 = undefined;
1704 var x12: u1 = undefined;1697 var x12: u1 = undefined;
1705 subborrowxU64(&x11, &x12, x10, 0x0, (arg1[5]));1698 subborrowxU64(&x11, &x12, x10, 0x0, arg1[5]);
1706 var x13: u64 = undefined;1699 var x13: u64 = undefined;
1707 cmovznzU64(&x13, x12, 0x0, 0xffffffffffffffff);1700 const x13_selection_mask = selectionMaskU64(x12);
1701 x13 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x13_selection_mask);
1708 var x14: u64 = undefined;1702 var x14: u64 = undefined;
1709 var x15: u1 = undefined;1703 var x15: u1 = undefined;
1710 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xffffffff));1704 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xffffffff));
...@@ -1742,7 +1736,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1742,7 +1736,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
1742pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {1736pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
1743 @setRuntimeSafety(mode == .debug);1737 @setRuntimeSafety(mode == .debug);
17441738
1745 const x1 = (arg1[0]);1739 const x1: u64 = arg1[0];
1746 var x2: u64 = undefined;1740 var x2: u64 = undefined;
1747 var x3: u64 = undefined;1741 var x3: u64 = undefined;
1748 mulxU64(&x2, &x3, x1, 0x100000001);1742 mulxU64(&x2, &x3, x1, 0x100000001);
...@@ -1799,10 +1793,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1799,10 +1793,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1799 addcarryxU64(&x36, &x37, x35, 0x0, x24);1793 addcarryxU64(&x36, &x37, x35, 0x0, x24);
1800 var x38: u64 = undefined;1794 var x38: u64 = undefined;
1801 var x39: u1 = undefined;1795 var x39: u1 = undefined;
1802 addcarryxU64(&x38, &x39, x37, 0x0, (@as(u64, x25) + x5));1796 addcarryxU64(&x38, &x39, x37, 0x0, (x25 + x5));
1803 var x40: u64 = undefined;1797 var x40: u64 = undefined;
1804 var x41: u1 = undefined;1798 var x41: u1 = undefined;
1805 addcarryxU64(&x40, &x41, 0x0, x28, (arg1[1]));1799 addcarryxU64(&x40, &x41, 0x0, x28, arg1[1]);
1806 var x42: u64 = undefined;1800 var x42: u64 = undefined;
1807 var x43: u1 = undefined;1801 var x43: u1 = undefined;
1808 addcarryxU64(&x42, &x43, x41, x30, 0x0);1802 addcarryxU64(&x42, &x43, x41, x30, 0x0);
...@@ -1874,10 +1868,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1874,10 +1868,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1874 addcarryxU64(&x86, &x87, x85, x50, x74);1868 addcarryxU64(&x86, &x87, x85, x50, x74);
1875 var x88: u64 = undefined;1869 var x88: u64 = undefined;
1876 var x89: u1 = undefined;1870 var x89: u1 = undefined;
1877 addcarryxU64(&x88, &x89, x87, (@as(u64, x51) + @as(u64, x39)), (@as(u64, x75) + x55));1871 addcarryxU64(&x88, &x89, x87, (@as(u64, x51) + x39), (x75 + x55));
1878 var x90: u64 = undefined;1872 var x90: u64 = undefined;
1879 var x91: u1 = undefined;1873 var x91: u1 = undefined;
1880 addcarryxU64(&x90, &x91, 0x0, x78, (arg1[2]));1874 addcarryxU64(&x90, &x91, 0x0, x78, arg1[2]);
1881 var x92: u64 = undefined;1875 var x92: u64 = undefined;
1882 var x93: u1 = undefined;1876 var x93: u1 = undefined;
1883 addcarryxU64(&x92, &x93, x91, x80, 0x0);1877 addcarryxU64(&x92, &x93, x91, x80, 0x0);
...@@ -1949,10 +1943,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1949,10 +1943,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1949 addcarryxU64(&x136, &x137, x135, x100, x124);1943 addcarryxU64(&x136, &x137, x135, x100, x124);
1950 var x138: u64 = undefined;1944 var x138: u64 = undefined;
1951 var x139: u1 = undefined;1945 var x139: u1 = undefined;
1952 addcarryxU64(&x138, &x139, x137, (@as(u64, x101) + @as(u64, x89)), (@as(u64, x125) + x105));1946 addcarryxU64(&x138, &x139, x137, (@as(u64, x101) + x89), (x125 + x105));
1953 var x140: u64 = undefined;1947 var x140: u64 = undefined;
1954 var x141: u1 = undefined;1948 var x141: u1 = undefined;
1955 addcarryxU64(&x140, &x141, 0x0, x128, (arg1[3]));1949 addcarryxU64(&x140, &x141, 0x0, x128, arg1[3]);
1956 var x142: u64 = undefined;1950 var x142: u64 = undefined;
1957 var x143: u1 = undefined;1951 var x143: u1 = undefined;
1958 addcarryxU64(&x142, &x143, x141, x130, 0x0);1952 addcarryxU64(&x142, &x143, x141, x130, 0x0);
...@@ -2024,10 +2018,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2024,10 +2018,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2024 addcarryxU64(&x186, &x187, x185, x150, x174);2018 addcarryxU64(&x186, &x187, x185, x150, x174);
2025 var x188: u64 = undefined;2019 var x188: u64 = undefined;
2026 var x189: u1 = undefined;2020 var x189: u1 = undefined;
2027 addcarryxU64(&x188, &x189, x187, (@as(u64, x151) + @as(u64, x139)), (@as(u64, x175) + x155));2021 addcarryxU64(&x188, &x189, x187, (@as(u64, x151) + x139), (x175 + x155));
2028 var x190: u64 = undefined;2022 var x190: u64 = undefined;
2029 var x191: u1 = undefined;2023 var x191: u1 = undefined;
2030 addcarryxU64(&x190, &x191, 0x0, x178, (arg1[4]));2024 addcarryxU64(&x190, &x191, 0x0, x178, arg1[4]);
2031 var x192: u64 = undefined;2025 var x192: u64 = undefined;
2032 var x193: u1 = undefined;2026 var x193: u1 = undefined;
2033 addcarryxU64(&x192, &x193, x191, x180, 0x0);2027 addcarryxU64(&x192, &x193, x191, x180, 0x0);
...@@ -2099,10 +2093,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2099,10 +2093,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2099 addcarryxU64(&x236, &x237, x235, x200, x224);2093 addcarryxU64(&x236, &x237, x235, x200, x224);
2100 var x238: u64 = undefined;2094 var x238: u64 = undefined;
2101 var x239: u1 = undefined;2095 var x239: u1 = undefined;
2102 addcarryxU64(&x238, &x239, x237, (@as(u64, x201) + @as(u64, x189)), (@as(u64, x225) + x205));2096 addcarryxU64(&x238, &x239, x237, (@as(u64, x201) + x189), (x225 + x205));
2103 var x240: u64 = undefined;2097 var x240: u64 = undefined;
2104 var x241: u1 = undefined;2098 var x241: u1 = undefined;
2105 addcarryxU64(&x240, &x241, 0x0, x228, (arg1[5]));2099 addcarryxU64(&x240, &x241, 0x0, x228, arg1[5]);
2106 var x242: u64 = undefined;2100 var x242: u64 = undefined;
2107 var x243: u1 = undefined;2101 var x243: u1 = undefined;
2108 addcarryxU64(&x242, &x243, x241, x230, 0x0);2102 addcarryxU64(&x242, &x243, x241, x230, 0x0);
...@@ -2174,7 +2168,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2174,7 +2168,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2174 addcarryxU64(&x286, &x287, x285, x250, x274);2168 addcarryxU64(&x286, &x287, x285, x250, x274);
2175 var x288: u64 = undefined;2169 var x288: u64 = undefined;
2176 var x289: u1 = undefined;2170 var x289: u1 = undefined;
2177 addcarryxU64(&x288, &x289, x287, (@as(u64, x251) + @as(u64, x239)), (@as(u64, x275) + x255));2171 addcarryxU64(&x288, &x289, x287, (@as(u64, x251) + x239), (x275 + x255));
2178 var x290: u64 = undefined;2172 var x290: u64 = undefined;
2179 var x291: u1 = undefined;2173 var x291: u1 = undefined;
2180 subborrowxU64(&x290, &x291, 0x0, x278, 0xffffffff);2174 subborrowxU64(&x290, &x291, 0x0, x278, 0xffffffff);
...@@ -2195,19 +2189,20 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2195,19 +2189,20 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2195 subborrowxU64(&x300, &x301, x299, x288, 0xffffffffffffffff);2189 subborrowxU64(&x300, &x301, x299, x288, 0xffffffffffffffff);
2196 var x302: u64 = undefined;2190 var x302: u64 = undefined;
2197 var x303: u1 = undefined;2191 var x303: u1 = undefined;
2198 subborrowxU64(&x302, &x303, x301, @as(u64, x289), 0x0);2192 subborrowxU64(&x302, &x303, x301, x289, 0x0);
2199 var x304: u64 = undefined;2193 var x304: u64 = undefined;
2200 cmovznzU64(&x304, x303, x290, x278);2194 const x304_selection_mask = selectionMaskU64(x303);
2195 x304 = x290 ^ ((x290 ^ x278) & x304_selection_mask);
2201 var x305: u64 = undefined;2196 var x305: u64 = undefined;
2202 cmovznzU64(&x305, x303, x292, x280);2197 x305 = x292 ^ ((x292 ^ x280) & x304_selection_mask);
2203 var x306: u64 = undefined;2198 var x306: u64 = undefined;
2204 cmovznzU64(&x306, x303, x294, x282);2199 x306 = x294 ^ ((x294 ^ x282) & x304_selection_mask);
2205 var x307: u64 = undefined;2200 var x307: u64 = undefined;
2206 cmovznzU64(&x307, x303, x296, x284);2201 x307 = x296 ^ ((x296 ^ x284) & x304_selection_mask);
2207 var x308: u64 = undefined;2202 var x308: u64 = undefined;
2208 cmovznzU64(&x308, x303, x298, x286);2203 x308 = x298 ^ ((x298 ^ x286) & x304_selection_mask);
2209 var x309: u64 = undefined;2204 var x309: u64 = undefined;
2210 cmovznzU64(&x309, x303, x300, x288);2205 x309 = x300 ^ ((x300 ^ x288) & x304_selection_mask);
2211 out1[0] = x304;2206 out1[0] = x304;
2212 out1[1] = x305;2207 out1[1] = x305;
2213 out1[2] = x306;2208 out1[2] = x306;
...@@ -2227,12 +2222,12 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2227,12 +2222,12 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2227pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {2222pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
2228 @setRuntimeSafety(mode == .debug);2223 @setRuntimeSafety(mode == .debug);
22292224
2230 const x1 = (arg1[1]);2225 const x1: u64 = arg1[1];
2231 const x2 = (arg1[2]);2226 const x2: u64 = arg1[2];
2232 const x3 = (arg1[3]);2227 const x3: u64 = arg1[3];
2233 const x4 = (arg1[4]);2228 const x4: u64 = arg1[4];
2234 const x5 = (arg1[5]);2229 const x5: u64 = arg1[5];
2235 const x6 = (arg1[0]);2230 const x6: u64 = arg1[0];
2236 var x7: u64 = undefined;2231 var x7: u64 = undefined;
2237 var x8: u64 = undefined;2232 var x8: u64 = undefined;
2238 mulxU64(&x7, &x8, x6, 0x200000000);2233 mulxU64(&x7, &x8, x6, 0x200000000);
...@@ -2310,10 +2305,10 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2310,10 +2305,10 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2310 addcarryxU64(&x55, &x56, x54, x21, x43);2305 addcarryxU64(&x55, &x56, x54, x21, x43);
2311 var x57: u64 = undefined;2306 var x57: u64 = undefined;
2312 var x58: u1 = undefined;2307 var x58: u1 = undefined;
2313 addcarryxU64(&x57, &x58, x56, @as(u64, x22), x45);2308 addcarryxU64(&x57, &x58, x56, x22, x45);
2314 var x59: u64 = undefined;2309 var x59: u64 = undefined;
2315 var x60: u1 = undefined;2310 var x60: u1 = undefined;
2316 addcarryxU64(&x59, &x60, x58, 0x0, (@as(u64, x46) + x26));2311 addcarryxU64(&x59, &x60, x58, 0x0, (x46 + x26));
2317 var x61: u64 = undefined;2312 var x61: u64 = undefined;
2318 var x62: u64 = undefined;2313 var x62: u64 = undefined;
2319 mulxU64(&x61, &x62, x1, 0x200000000);2314 mulxU64(&x61, &x62, x1, 0x200000000);
...@@ -2355,7 +2350,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2355,7 +2350,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2355 addcarryxU64(&x85, &x86, x84, x57, x75);2350 addcarryxU64(&x85, &x86, x84, x57, x75);
2356 var x87: u64 = undefined;2351 var x87: u64 = undefined;
2357 var x88: u1 = undefined;2352 var x88: u1 = undefined;
2358 addcarryxU64(&x87, &x88, x86, x59, @as(u64, x76));2353 addcarryxU64(&x87, &x88, x86, x59, x76);
2359 var x89: u64 = undefined;2354 var x89: u64 = undefined;
2360 var x90: u64 = undefined;2355 var x90: u64 = undefined;
2361 mulxU64(&x89, &x90, x77, 0x100000001);2356 mulxU64(&x89, &x90, x77, 0x100000001);
...@@ -2412,7 +2407,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2412,7 +2407,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2412 addcarryxU64(&x123, &x124, x122, x87, x111);2407 addcarryxU64(&x123, &x124, x122, x87, x111);
2413 var x125: u64 = undefined;2408 var x125: u64 = undefined;
2414 var x126: u1 = undefined;2409 var x126: u1 = undefined;
2415 addcarryxU64(&x125, &x126, x124, (@as(u64, x88) + @as(u64, x60)), (@as(u64, x112) + x92));2410 addcarryxU64(&x125, &x126, x124, (@as(u64, x88) + x60), (x112 + x92));
2416 var x127: u64 = undefined;2411 var x127: u64 = undefined;
2417 var x128: u64 = undefined;2412 var x128: u64 = undefined;
2418 mulxU64(&x127, &x128, x2, 0x200000000);2413 mulxU64(&x127, &x128, x2, 0x200000000);
...@@ -2454,7 +2449,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2454,7 +2449,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2454 addcarryxU64(&x151, &x152, x150, x123, x141);2449 addcarryxU64(&x151, &x152, x150, x123, x141);
2455 var x153: u64 = undefined;2450 var x153: u64 = undefined;
2456 var x154: u1 = undefined;2451 var x154: u1 = undefined;
2457 addcarryxU64(&x153, &x154, x152, x125, @as(u64, x142));2452 addcarryxU64(&x153, &x154, x152, x125, x142);
2458 var x155: u64 = undefined;2453 var x155: u64 = undefined;
2459 var x156: u64 = undefined;2454 var x156: u64 = undefined;
2460 mulxU64(&x155, &x156, x143, 0x100000001);2455 mulxU64(&x155, &x156, x143, 0x100000001);
...@@ -2511,7 +2506,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2511,7 +2506,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2511 addcarryxU64(&x189, &x190, x188, x153, x177);2506 addcarryxU64(&x189, &x190, x188, x153, x177);
2512 var x191: u64 = undefined;2507 var x191: u64 = undefined;
2513 var x192: u1 = undefined;2508 var x192: u1 = undefined;
2514 addcarryxU64(&x191, &x192, x190, (@as(u64, x154) + @as(u64, x126)), (@as(u64, x178) + x158));2509 addcarryxU64(&x191, &x192, x190, (@as(u64, x154) + x126), (x178 + x158));
2515 var x193: u64 = undefined;2510 var x193: u64 = undefined;
2516 var x194: u64 = undefined;2511 var x194: u64 = undefined;
2517 mulxU64(&x193, &x194, x3, 0x200000000);2512 mulxU64(&x193, &x194, x3, 0x200000000);
...@@ -2553,7 +2548,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2553,7 +2548,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2553 addcarryxU64(&x217, &x218, x216, x189, x207);2548 addcarryxU64(&x217, &x218, x216, x189, x207);
2554 var x219: u64 = undefined;2549 var x219: u64 = undefined;
2555 var x220: u1 = undefined;2550 var x220: u1 = undefined;
2556 addcarryxU64(&x219, &x220, x218, x191, @as(u64, x208));2551 addcarryxU64(&x219, &x220, x218, x191, x208);
2557 var x221: u64 = undefined;2552 var x221: u64 = undefined;
2558 var x222: u64 = undefined;2553 var x222: u64 = undefined;
2559 mulxU64(&x221, &x222, x209, 0x100000001);2554 mulxU64(&x221, &x222, x209, 0x100000001);
...@@ -2610,7 +2605,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2610,7 +2605,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2610 addcarryxU64(&x255, &x256, x254, x219, x243);2605 addcarryxU64(&x255, &x256, x254, x219, x243);
2611 var x257: u64 = undefined;2606 var x257: u64 = undefined;
2612 var x258: u1 = undefined;2607 var x258: u1 = undefined;
2613 addcarryxU64(&x257, &x258, x256, (@as(u64, x220) + @as(u64, x192)), (@as(u64, x244) + x224));2608 addcarryxU64(&x257, &x258, x256, (@as(u64, x220) + x192), (x244 + x224));
2614 var x259: u64 = undefined;2609 var x259: u64 = undefined;
2615 var x260: u64 = undefined;2610 var x260: u64 = undefined;
2616 mulxU64(&x259, &x260, x4, 0x200000000);2611 mulxU64(&x259, &x260, x4, 0x200000000);
...@@ -2652,7 +2647,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2652,7 +2647,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2652 addcarryxU64(&x283, &x284, x282, x255, x273);2647 addcarryxU64(&x283, &x284, x282, x255, x273);
2653 var x285: u64 = undefined;2648 var x285: u64 = undefined;
2654 var x286: u1 = undefined;2649 var x286: u1 = undefined;
2655 addcarryxU64(&x285, &x286, x284, x257, @as(u64, x274));2650 addcarryxU64(&x285, &x286, x284, x257, x274);
2656 var x287: u64 = undefined;2651 var x287: u64 = undefined;
2657 var x288: u64 = undefined;2652 var x288: u64 = undefined;
2658 mulxU64(&x287, &x288, x275, 0x100000001);2653 mulxU64(&x287, &x288, x275, 0x100000001);
...@@ -2709,7 +2704,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2709,7 +2704,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2709 addcarryxU64(&x321, &x322, x320, x285, x309);2704 addcarryxU64(&x321, &x322, x320, x285, x309);
2710 var x323: u64 = undefined;2705 var x323: u64 = undefined;
2711 var x324: u1 = undefined;2706 var x324: u1 = undefined;
2712 addcarryxU64(&x323, &x324, x322, (@as(u64, x286) + @as(u64, x258)), (@as(u64, x310) + x290));2707 addcarryxU64(&x323, &x324, x322, (@as(u64, x286) + x258), (x310 + x290));
2713 var x325: u64 = undefined;2708 var x325: u64 = undefined;
2714 var x326: u64 = undefined;2709 var x326: u64 = undefined;
2715 mulxU64(&x325, &x326, x5, 0x200000000);2710 mulxU64(&x325, &x326, x5, 0x200000000);
...@@ -2751,7 +2746,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2751,7 +2746,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2751 addcarryxU64(&x349, &x350, x348, x321, x339);2746 addcarryxU64(&x349, &x350, x348, x321, x339);
2752 var x351: u64 = undefined;2747 var x351: u64 = undefined;
2753 var x352: u1 = undefined;2748 var x352: u1 = undefined;
2754 addcarryxU64(&x351, &x352, x350, x323, @as(u64, x340));2749 addcarryxU64(&x351, &x352, x350, x323, x340);
2755 var x353: u64 = undefined;2750 var x353: u64 = undefined;
2756 var x354: u64 = undefined;2751 var x354: u64 = undefined;
2757 mulxU64(&x353, &x354, x341, 0x100000001);2752 mulxU64(&x353, &x354, x341, 0x100000001);
...@@ -2808,7 +2803,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2808,7 +2803,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2808 addcarryxU64(&x387, &x388, x386, x351, x375);2803 addcarryxU64(&x387, &x388, x386, x351, x375);
2809 var x389: u64 = undefined;2804 var x389: u64 = undefined;
2810 var x390: u1 = undefined;2805 var x390: u1 = undefined;
2811 addcarryxU64(&x389, &x390, x388, (@as(u64, x352) + @as(u64, x324)), (@as(u64, x376) + x356));2806 addcarryxU64(&x389, &x390, x388, (@as(u64, x352) + x324), (x376 + x356));
2812 var x391: u64 = undefined;2807 var x391: u64 = undefined;
2813 var x392: u1 = undefined;2808 var x392: u1 = undefined;
2814 subborrowxU64(&x391, &x392, 0x0, x379, 0xffffffff);2809 subborrowxU64(&x391, &x392, 0x0, x379, 0xffffffff);
...@@ -2829,19 +2824,20 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2829,19 +2824,20 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2829 subborrowxU64(&x401, &x402, x400, x389, 0xffffffffffffffff);2824 subborrowxU64(&x401, &x402, x400, x389, 0xffffffffffffffff);
2830 var x403: u64 = undefined;2825 var x403: u64 = undefined;
2831 var x404: u1 = undefined;2826 var x404: u1 = undefined;
2832 subborrowxU64(&x403, &x404, x402, @as(u64, x390), 0x0);2827 subborrowxU64(&x403, &x404, x402, x390, 0x0);
2833 var x405: u64 = undefined;2828 var x405: u64 = undefined;
2834 cmovznzU64(&x405, x404, x391, x379);2829 const x405_selection_mask = selectionMaskU64(x404);
2830 x405 = x391 ^ ((x391 ^ x379) & x405_selection_mask);
2835 var x406: u64 = undefined;2831 var x406: u64 = undefined;
2836 cmovznzU64(&x406, x404, x393, x381);2832 x406 = x393 ^ ((x393 ^ x381) & x405_selection_mask);
2837 var x407: u64 = undefined;2833 var x407: u64 = undefined;
2838 cmovznzU64(&x407, x404, x395, x383);2834 x407 = x395 ^ ((x395 ^ x383) & x405_selection_mask);
2839 var x408: u64 = undefined;2835 var x408: u64 = undefined;
2840 cmovznzU64(&x408, x404, x397, x385);2836 x408 = x397 ^ ((x397 ^ x385) & x405_selection_mask);
2841 var x409: u64 = undefined;2837 var x409: u64 = undefined;
2842 cmovznzU64(&x409, x404, x399, x387);2838 x409 = x399 ^ ((x399 ^ x387) & x405_selection_mask);
2843 var x410: u64 = undefined;2839 var x410: u64 = undefined;
2844 cmovznzU64(&x410, x404, x401, x389);2840 x410 = x401 ^ ((x401 ^ x389) & x405_selection_mask);
2845 out1[0] = x405;2841 out1[0] = x405;
2846 out1[1] = x406;2842 out1[1] = x406;
2847 out1[2] = x407;2843 out1[2] = x407;
...@@ -2864,7 +2860,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2864,7 +2860,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2864pub fn nonzero(out1: *u64, arg1: [6]u64) void {2860pub fn nonzero(out1: *u64, arg1: [6]u64) void {
2865 @setRuntimeSafety(mode == .debug);2861 @setRuntimeSafety(mode == .debug);
28662862
2867 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | (arg1[5]))))));2863 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5])))));
2868 out1.* = x1;2864 out1.* = x1;
2869}2865}
28702866
...@@ -2883,17 +2879,18 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {...@@ -2883,17 +2879,18 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {
2883 @setRuntimeSafety(mode == .debug);2879 @setRuntimeSafety(mode == .debug);
28842880
2885 var x1: u64 = undefined;2881 var x1: u64 = undefined;
2886 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));2882 const x1_selection_mask = selectionMaskU64(arg1);
2883 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
2887 var x2: u64 = undefined;2884 var x2: u64 = undefined;
2888 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));2885 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
2889 var x3: u64 = undefined;2886 var x3: u64 = undefined;
2890 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));2887 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
2891 var x4: u64 = undefined;2888 var x4: u64 = undefined;
2892 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));2889 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
2893 var x5: u64 = undefined;2890 var x5: u64 = undefined;
2894 cmovznzU64(&x5, arg1, (arg2[4]), (arg3[4]));2891 x5 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x1_selection_mask);
2895 var x6: u64 = undefined;2892 var x6: u64 = undefined;
2896 cmovznzU64(&x6, arg1, (arg2[5]), (arg3[5]));2893 x6 = arg2[5] ^ ((arg2[5] ^ arg3[5]) & x1_selection_mask);
2897 out1[0] = x1;2894 out1[0] = x1;
2898 out1[1] = x2;2895 out1[1] = x2;
2899 out1[2] = x3;2896 out1[2] = x3;
...@@ -2916,96 +2913,96 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {...@@ -2916,96 +2913,96 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {
2916pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {2913pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {
2917 @setRuntimeSafety(mode == .debug);2914 @setRuntimeSafety(mode == .debug);
29182915
2919 const x1 = (arg1[5]);2916 const x1: u64 = arg1[5];
2920 const x2 = (arg1[4]);2917 const x2: u64 = arg1[4];
2921 const x3 = (arg1[3]);2918 const x3: u64 = arg1[3];
2922 const x4 = (arg1[2]);2919 const x4: u64 = arg1[2];
2923 const x5 = (arg1[1]);2920 const x5: u64 = arg1[1];
2924 const x6 = (arg1[0]);2921 const x6: u64 = arg1[0];
2925 const x7 = @as(u8, @truncate((x6 & 0xff)));2922 const x7: u8 = @truncate(x6);
2926 const x8 = (x6 >> 8);2923 const x8: u64 = (x6 >> 8);
2927 const x9 = @as(u8, @truncate((x8 & 0xff)));2924 const x9: u8 = @truncate(x8);
2928 const x10 = (x8 >> 8);2925 const x10: u64 = (x8 >> 8);
2929 const x11 = @as(u8, @truncate((x10 & 0xff)));2926 const x11: u8 = @truncate(x10);
2930 const x12 = (x10 >> 8);2927 const x12: u64 = (x10 >> 8);
2931 const x13 = @as(u8, @truncate((x12 & 0xff)));2928 const x13: u8 = @truncate(x12);
2932 const x14 = (x12 >> 8);2929 const x14: u64 = (x12 >> 8);
2933 const x15 = @as(u8, @truncate((x14 & 0xff)));2930 const x15: u8 = @truncate(x14);
2934 const x16 = (x14 >> 8);2931 const x16: u64 = (x14 >> 8);
2935 const x17 = @as(u8, @truncate((x16 & 0xff)));2932 const x17: u8 = @truncate(x16);
2936 const x18 = (x16 >> 8);2933 const x18: u64 = (x16 >> 8);
2937 const x19 = @as(u8, @truncate((x18 & 0xff)));2934 const x19: u8 = @truncate(x18);
2938 const x20 = @as(u8, @truncate((x18 >> 8)));2935 const x20: u8 = @truncate((x18 >> 8));
2939 const x21 = @as(u8, @truncate((x5 & 0xff)));2936 const x21: u8 = @truncate(x5);
2940 const x22 = (x5 >> 8);2937 const x22: u64 = (x5 >> 8);
2941 const x23 = @as(u8, @truncate((x22 & 0xff)));2938 const x23: u8 = @truncate(x22);
2942 const x24 = (x22 >> 8);2939 const x24: u64 = (x22 >> 8);
2943 const x25 = @as(u8, @truncate((x24 & 0xff)));2940 const x25: u8 = @truncate(x24);
2944 const x26 = (x24 >> 8);2941 const x26: u64 = (x24 >> 8);
2945 const x27 = @as(u8, @truncate((x26 & 0xff)));2942 const x27: u8 = @truncate(x26);
2946 const x28 = (x26 >> 8);2943 const x28: u64 = (x26 >> 8);
2947 const x29 = @as(u8, @truncate((x28 & 0xff)));2944 const x29: u8 = @truncate(x28);
2948 const x30 = (x28 >> 8);2945 const x30: u64 = (x28 >> 8);
2949 const x31 = @as(u8, @truncate((x30 & 0xff)));2946 const x31: u8 = @truncate(x30);
2950 const x32 = (x30 >> 8);2947 const x32: u64 = (x30 >> 8);
2951 const x33 = @as(u8, @truncate((x32 & 0xff)));2948 const x33: u8 = @truncate(x32);
2952 const x34 = @as(u8, @truncate((x32 >> 8)));2949 const x34: u8 = @truncate((x32 >> 8));
2953 const x35 = @as(u8, @truncate((x4 & 0xff)));2950 const x35: u8 = @truncate(x4);
2954 const x36 = (x4 >> 8);2951 const x36: u64 = (x4 >> 8);
2955 const x37 = @as(u8, @truncate((x36 & 0xff)));2952 const x37: u8 = @truncate(x36);
2956 const x38 = (x36 >> 8);2953 const x38: u64 = (x36 >> 8);
2957 const x39 = @as(u8, @truncate((x38 & 0xff)));2954 const x39: u8 = @truncate(x38);
2958 const x40 = (x38 >> 8);2955 const x40: u64 = (x38 >> 8);
2959 const x41 = @as(u8, @truncate((x40 & 0xff)));2956 const x41: u8 = @truncate(x40);
2960 const x42 = (x40 >> 8);2957 const x42: u64 = (x40 >> 8);
2961 const x43 = @as(u8, @truncate((x42 & 0xff)));2958 const x43: u8 = @truncate(x42);
2962 const x44 = (x42 >> 8);2959 const x44: u64 = (x42 >> 8);
2963 const x45 = @as(u8, @truncate((x44 & 0xff)));2960 const x45: u8 = @truncate(x44);
2964 const x46 = (x44 >> 8);2961 const x46: u64 = (x44 >> 8);
2965 const x47 = @as(u8, @truncate((x46 & 0xff)));2962 const x47: u8 = @truncate(x46);
2966 const x48 = @as(u8, @truncate((x46 >> 8)));2963 const x48: u8 = @truncate((x46 >> 8));
2967 const x49 = @as(u8, @truncate((x3 & 0xff)));2964 const x49: u8 = @truncate(x3);
2968 const x50 = (x3 >> 8);2965 const x50: u64 = (x3 >> 8);
2969 const x51 = @as(u8, @truncate((x50 & 0xff)));2966 const x51: u8 = @truncate(x50);
2970 const x52 = (x50 >> 8);2967 const x52: u64 = (x50 >> 8);
2971 const x53 = @as(u8, @truncate((x52 & 0xff)));2968 const x53: u8 = @truncate(x52);
2972 const x54 = (x52 >> 8);2969 const x54: u64 = (x52 >> 8);
2973 const x55 = @as(u8, @truncate((x54 & 0xff)));2970 const x55: u8 = @truncate(x54);
2974 const x56 = (x54 >> 8);2971 const x56: u64 = (x54 >> 8);
2975 const x57 = @as(u8, @truncate((x56 & 0xff)));2972 const x57: u8 = @truncate(x56);
2976 const x58 = (x56 >> 8);2973 const x58: u64 = (x56 >> 8);
2977 const x59 = @as(u8, @truncate((x58 & 0xff)));2974 const x59: u8 = @truncate(x58);
2978 const x60 = (x58 >> 8);2975 const x60: u64 = (x58 >> 8);
2979 const x61 = @as(u8, @truncate((x60 & 0xff)));2976 const x61: u8 = @truncate(x60);
2980 const x62 = @as(u8, @truncate((x60 >> 8)));2977 const x62: u8 = @truncate((x60 >> 8));
2981 const x63 = @as(u8, @truncate((x2 & 0xff)));2978 const x63: u8 = @truncate(x2);
2982 const x64 = (x2 >> 8);2979 const x64: u64 = (x2 >> 8);
2983 const x65 = @as(u8, @truncate((x64 & 0xff)));2980 const x65: u8 = @truncate(x64);
2984 const x66 = (x64 >> 8);2981 const x66: u64 = (x64 >> 8);
2985 const x67 = @as(u8, @truncate((x66 & 0xff)));2982 const x67: u8 = @truncate(x66);
2986 const x68 = (x66 >> 8);2983 const x68: u64 = (x66 >> 8);
2987 const x69 = @as(u8, @truncate((x68 & 0xff)));2984 const x69: u8 = @truncate(x68);
2988 const x70 = (x68 >> 8);2985 const x70: u64 = (x68 >> 8);
2989 const x71 = @as(u8, @truncate((x70 & 0xff)));2986 const x71: u8 = @truncate(x70);
2990 const x72 = (x70 >> 8);2987 const x72: u64 = (x70 >> 8);
2991 const x73 = @as(u8, @truncate((x72 & 0xff)));2988 const x73: u8 = @truncate(x72);
2992 const x74 = (x72 >> 8);2989 const x74: u64 = (x72 >> 8);
2993 const x75 = @as(u8, @truncate((x74 & 0xff)));2990 const x75: u8 = @truncate(x74);
2994 const x76 = @as(u8, @truncate((x74 >> 8)));2991 const x76: u8 = @truncate((x74 >> 8));
2995 const x77 = @as(u8, @truncate((x1 & 0xff)));2992 const x77: u8 = @truncate(x1);
2996 const x78 = (x1 >> 8);2993 const x78: u64 = (x1 >> 8);
2997 const x79 = @as(u8, @truncate((x78 & 0xff)));2994 const x79: u8 = @truncate(x78);
2998 const x80 = (x78 >> 8);2995 const x80: u64 = (x78 >> 8);
2999 const x81 = @as(u8, @truncate((x80 & 0xff)));2996 const x81: u8 = @truncate(x80);
3000 const x82 = (x80 >> 8);2997 const x82: u64 = (x80 >> 8);
3001 const x83 = @as(u8, @truncate((x82 & 0xff)));2998 const x83: u8 = @truncate(x82);
3002 const x84 = (x82 >> 8);2999 const x84: u64 = (x82 >> 8);
3003 const x85 = @as(u8, @truncate((x84 & 0xff)));3000 const x85: u8 = @truncate(x84);
3004 const x86 = (x84 >> 8);3001 const x86: u64 = (x84 >> 8);
3005 const x87 = @as(u8, @truncate((x86 & 0xff)));3002 const x87: u8 = @truncate(x86);
3006 const x88 = (x86 >> 8);3003 const x88: u64 = (x86 >> 8);
3007 const x89 = @as(u8, @truncate((x88 & 0xff)));3004 const x89: u8 = @truncate(x88);
3008 const x90 = @as(u8, @truncate((x88 >> 8)));3005 const x90: u8 = @truncate((x88 >> 8));
3009 out1[0] = x7;3006 out1[0] = x7;
3010 out1[1] = x9;3007 out1[1] = x9;
3011 out1[2] = x11;3008 out1[2] = x11;
...@@ -3071,96 +3068,96 @@ pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {...@@ -3071,96 +3068,96 @@ pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {
3071pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void {3068pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void {
3072 @setRuntimeSafety(mode == .debug);3069 @setRuntimeSafety(mode == .debug);
30733070
3074 const x1 = (@as(u64, (arg1[47])) << 56);3071 const x1: u64 = (@as(u64, arg1[47]) << 56);
3075 const x2 = (@as(u64, (arg1[46])) << 48);3072 const x2: u64 = (@as(u64, arg1[46]) << 48);
3076 const x3 = (@as(u64, (arg1[45])) << 40);3073 const x3: u64 = (@as(u64, arg1[45]) << 40);
3077 const x4 = (@as(u64, (arg1[44])) << 32);3074 const x4: u64 = (@as(u64, arg1[44]) << 32);
3078 const x5 = (@as(u64, (arg1[43])) << 24);3075 const x5: u64 = (@as(u64, arg1[43]) << 24);
3079 const x6 = (@as(u64, (arg1[42])) << 16);3076 const x6: u64 = (@as(u64, arg1[42]) << 16);
3080 const x7 = (@as(u64, (arg1[41])) << 8);3077 const x7: u64 = (@as(u64, arg1[41]) << 8);
3081 const x8 = (arg1[40]);3078 const x8: u8 = arg1[40];
3082 const x9 = (@as(u64, (arg1[39])) << 56);3079 const x9: u64 = (@as(u64, arg1[39]) << 56);
3083 const x10 = (@as(u64, (arg1[38])) << 48);3080 const x10: u64 = (@as(u64, arg1[38]) << 48);
3084 const x11 = (@as(u64, (arg1[37])) << 40);3081 const x11: u64 = (@as(u64, arg1[37]) << 40);
3085 const x12 = (@as(u64, (arg1[36])) << 32);3082 const x12: u64 = (@as(u64, arg1[36]) << 32);
3086 const x13 = (@as(u64, (arg1[35])) << 24);3083 const x13: u64 = (@as(u64, arg1[35]) << 24);
3087 const x14 = (@as(u64, (arg1[34])) << 16);3084 const x14: u64 = (@as(u64, arg1[34]) << 16);
3088 const x15 = (@as(u64, (arg1[33])) << 8);3085 const x15: u64 = (@as(u64, arg1[33]) << 8);
3089 const x16 = (arg1[32]);3086 const x16: u8 = arg1[32];
3090 const x17 = (@as(u64, (arg1[31])) << 56);3087 const x17: u64 = (@as(u64, arg1[31]) << 56);
3091 const x18 = (@as(u64, (arg1[30])) << 48);3088 const x18: u64 = (@as(u64, arg1[30]) << 48);
3092 const x19 = (@as(u64, (arg1[29])) << 40);3089 const x19: u64 = (@as(u64, arg1[29]) << 40);
3093 const x20 = (@as(u64, (arg1[28])) << 32);3090 const x20: u64 = (@as(u64, arg1[28]) << 32);
3094 const x21 = (@as(u64, (arg1[27])) << 24);3091 const x21: u64 = (@as(u64, arg1[27]) << 24);
3095 const x22 = (@as(u64, (arg1[26])) << 16);3092 const x22: u64 = (@as(u64, arg1[26]) << 16);
3096 const x23 = (@as(u64, (arg1[25])) << 8);3093 const x23: u64 = (@as(u64, arg1[25]) << 8);
3097 const x24 = (arg1[24]);3094 const x24: u8 = arg1[24];
3098 const x25 = (@as(u64, (arg1[23])) << 56);3095 const x25: u64 = (@as(u64, arg1[23]) << 56);
3099 const x26 = (@as(u64, (arg1[22])) << 48);3096 const x26: u64 = (@as(u64, arg1[22]) << 48);
3100 const x27 = (@as(u64, (arg1[21])) << 40);3097 const x27: u64 = (@as(u64, arg1[21]) << 40);
3101 const x28 = (@as(u64, (arg1[20])) << 32);3098 const x28: u64 = (@as(u64, arg1[20]) << 32);
3102 const x29 = (@as(u64, (arg1[19])) << 24);3099 const x29: u64 = (@as(u64, arg1[19]) << 24);
3103 const x30 = (@as(u64, (arg1[18])) << 16);3100 const x30: u64 = (@as(u64, arg1[18]) << 16);
3104 const x31 = (@as(u64, (arg1[17])) << 8);3101 const x31: u64 = (@as(u64, arg1[17]) << 8);
3105 const x32 = (arg1[16]);3102 const x32: u8 = arg1[16];
3106 const x33 = (@as(u64, (arg1[15])) << 56);3103 const x33: u64 = (@as(u64, arg1[15]) << 56);
3107 const x34 = (@as(u64, (arg1[14])) << 48);3104 const x34: u64 = (@as(u64, arg1[14]) << 48);
3108 const x35 = (@as(u64, (arg1[13])) << 40);3105 const x35: u64 = (@as(u64, arg1[13]) << 40);
3109 const x36 = (@as(u64, (arg1[12])) << 32);3106 const x36: u64 = (@as(u64, arg1[12]) << 32);
3110 const x37 = (@as(u64, (arg1[11])) << 24);3107 const x37: u64 = (@as(u64, arg1[11]) << 24);
3111 const x38 = (@as(u64, (arg1[10])) << 16);3108 const x38: u64 = (@as(u64, arg1[10]) << 16);
3112 const x39 = (@as(u64, (arg1[9])) << 8);3109 const x39: u64 = (@as(u64, arg1[9]) << 8);
3113 const x40 = (arg1[8]);3110 const x40: u8 = arg1[8];
3114 const x41 = (@as(u64, (arg1[7])) << 56);3111 const x41: u64 = (@as(u64, arg1[7]) << 56);
3115 const x42 = (@as(u64, (arg1[6])) << 48);3112 const x42: u64 = (@as(u64, arg1[6]) << 48);
3116 const x43 = (@as(u64, (arg1[5])) << 40);3113 const x43: u64 = (@as(u64, arg1[5]) << 40);
3117 const x44 = (@as(u64, (arg1[4])) << 32);3114 const x44: u64 = (@as(u64, arg1[4]) << 32);
3118 const x45 = (@as(u64, (arg1[3])) << 24);3115 const x45: u64 = (@as(u64, arg1[3]) << 24);
3119 const x46 = (@as(u64, (arg1[2])) << 16);3116 const x46: u64 = (@as(u64, arg1[2]) << 16);
3120 const x47 = (@as(u64, (arg1[1])) << 8);3117 const x47: u64 = (@as(u64, arg1[1]) << 8);
3121 const x48 = (arg1[0]);3118 const x48: u8 = arg1[0];
3122 const x49 = (x47 + @as(u64, x48));3119 const x49: u64 = (x47 + x48);
3123 const x50 = (x46 + x49);3120 const x50: u64 = (x46 + x49);
3124 const x51 = (x45 + x50);3121 const x51: u64 = (x45 + x50);
3125 const x52 = (x44 + x51);3122 const x52: u64 = (x44 + x51);
3126 const x53 = (x43 + x52);3123 const x53: u64 = (x43 + x52);
3127 const x54 = (x42 + x53);3124 const x54: u64 = (x42 + x53);
3128 const x55 = (x41 + x54);3125 const x55: u64 = (x41 + x54);
3129 const x56 = (x39 + @as(u64, x40));3126 const x56: u64 = (x39 + x40);
3130 const x57 = (x38 + x56);3127 const x57: u64 = (x38 + x56);
3131 const x58 = (x37 + x57);3128 const x58: u64 = (x37 + x57);
3132 const x59 = (x36 + x58);3129 const x59: u64 = (x36 + x58);
3133 const x60 = (x35 + x59);3130 const x60: u64 = (x35 + x59);
3134 const x61 = (x34 + x60);3131 const x61: u64 = (x34 + x60);
3135 const x62 = (x33 + x61);3132 const x62: u64 = (x33 + x61);
3136 const x63 = (x31 + @as(u64, x32));3133 const x63: u64 = (x31 + x32);
3137 const x64 = (x30 + x63);3134 const x64: u64 = (x30 + x63);
3138 const x65 = (x29 + x64);3135 const x65: u64 = (x29 + x64);
3139 const x66 = (x28 + x65);3136 const x66: u64 = (x28 + x65);
3140 const x67 = (x27 + x66);3137 const x67: u64 = (x27 + x66);
3141 const x68 = (x26 + x67);3138 const x68: u64 = (x26 + x67);
3142 const x69 = (x25 + x68);3139 const x69: u64 = (x25 + x68);
3143 const x70 = (x23 + @as(u64, x24));3140 const x70: u64 = (x23 + x24);
3144 const x71 = (x22 + x70);3141 const x71: u64 = (x22 + x70);
3145 const x72 = (x21 + x71);3142 const x72: u64 = (x21 + x71);
3146 const x73 = (x20 + x72);3143 const x73: u64 = (x20 + x72);
3147 const x74 = (x19 + x73);3144 const x74: u64 = (x19 + x73);
3148 const x75 = (x18 + x74);3145 const x75: u64 = (x18 + x74);
3149 const x76 = (x17 + x75);3146 const x76: u64 = (x17 + x75);
3150 const x77 = (x15 + @as(u64, x16));3147 const x77: u64 = (x15 + x16);
3151 const x78 = (x14 + x77);3148 const x78: u64 = (x14 + x77);
3152 const x79 = (x13 + x78);3149 const x79: u64 = (x13 + x78);
3153 const x80 = (x12 + x79);3150 const x80: u64 = (x12 + x79);
3154 const x81 = (x11 + x80);3151 const x81: u64 = (x11 + x80);
3155 const x82 = (x10 + x81);3152 const x82: u64 = (x10 + x81);
3156 const x83 = (x9 + x82);3153 const x83: u64 = (x9 + x82);
3157 const x84 = (x7 + @as(u64, x8));3154 const x84: u64 = (x7 + x8);
3158 const x85 = (x6 + x84);3155 const x85: u64 = (x6 + x84);
3159 const x86 = (x5 + x85);3156 const x86: u64 = (x5 + x85);
3160 const x87 = (x4 + x86);3157 const x87: u64 = (x4 + x86);
3161 const x88 = (x3 + x87);3158 const x88: u64 = (x3 + x87);
3162 const x89 = (x2 + x88);3159 const x89: u64 = (x2 + x88);
3163 const x90 = (x1 + x89);3160 const x90: u64 = (x1 + x89);
3164 out1[0] = x55;3161 out1[0] = x55;
3165 out1[1] = x62;3162 out1[1] = x62;
3166 out1[2] = x69;3163 out1[2] = x69;
...@@ -3240,73 +3237,75 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3240,73 +3237,75 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3240 var x1: u64 = undefined;3237 var x1: u64 = undefined;
3241 var x2: u1 = undefined;3238 var x2: u1 = undefined;
3242 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);3239 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
3243 const x3 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & 0x1))));3240 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
3244 var x4: u64 = undefined;3241 var x4: u64 = undefined;
3245 var x5: u1 = undefined;3242 var x5: u1 = undefined;
3246 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);3243 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
3247 var x6: u64 = undefined;3244 var x6: u64 = undefined;
3248 cmovznzU64(&x6, x3, arg1, x4);3245 const x6_selection_mask = selectionMaskU64(x3);
3246 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
3249 var x7: u64 = undefined;3247 var x7: u64 = undefined;
3250 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));3248 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
3251 var x8: u64 = undefined;3249 var x8: u64 = undefined;
3252 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));3250 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
3253 var x9: u64 = undefined;3251 var x9: u64 = undefined;
3254 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));3252 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
3255 var x10: u64 = undefined;3253 var x10: u64 = undefined;
3256 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));3254 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
3257 var x11: u64 = undefined;3255 var x11: u64 = undefined;
3258 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));3256 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
3259 var x12: u64 = undefined;3257 var x12: u64 = undefined;
3260 cmovznzU64(&x12, x3, (arg2[5]), (arg3[5]));3258 x12 = arg2[5] ^ ((arg2[5] ^ arg3[5]) & x6_selection_mask);
3261 var x13: u64 = undefined;3259 var x13: u64 = undefined;
3262 cmovznzU64(&x13, x3, (arg2[6]), (arg3[6]));3260 x13 = arg2[6] ^ ((arg2[6] ^ arg3[6]) & x6_selection_mask);
3263 var x14: u64 = undefined;3261 var x14: u64 = undefined;
3264 var x15: u1 = undefined;3262 var x15: u1 = undefined;
3265 addcarryxU64(&x14, &x15, 0x0, 0x1, (~(arg2[0])));3263 addcarryxU64(&x14, &x15, 0x0, 0x1, (~arg2[0]));
3266 var x16: u64 = undefined;3264 var x16: u64 = undefined;
3267 var x17: u1 = undefined;3265 var x17: u1 = undefined;
3268 addcarryxU64(&x16, &x17, x15, 0x0, (~(arg2[1])));3266 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[1]));
3269 var x18: u64 = undefined;3267 var x18: u64 = undefined;
3270 var x19: u1 = undefined;3268 var x19: u1 = undefined;
3271 addcarryxU64(&x18, &x19, x17, 0x0, (~(arg2[2])));3269 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[2]));
3272 var x20: u64 = undefined;3270 var x20: u64 = undefined;
3273 var x21: u1 = undefined;3271 var x21: u1 = undefined;
3274 addcarryxU64(&x20, &x21, x19, 0x0, (~(arg2[3])));3272 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[3]));
3275 var x22: u64 = undefined;3273 var x22: u64 = undefined;
3276 var x23: u1 = undefined;3274 var x23: u1 = undefined;
3277 addcarryxU64(&x22, &x23, x21, 0x0, (~(arg2[4])));3275 addcarryxU64(&x22, &x23, x21, 0x0, (~arg2[4]));
3278 var x24: u64 = undefined;3276 var x24: u64 = undefined;
3279 var x25: u1 = undefined;3277 var x25: u1 = undefined;
3280 addcarryxU64(&x24, &x25, x23, 0x0, (~(arg2[5])));3278 addcarryxU64(&x24, &x25, x23, 0x0, (~arg2[5]));
3281 var x26: u64 = undefined;3279 var x26: u64 = undefined;
3282 var x27: u1 = undefined;3280 var x27: u1 = undefined;
3283 addcarryxU64(&x26, &x27, x25, 0x0, (~(arg2[6])));3281 addcarryxU64(&x26, &x27, x25, 0x0, (~arg2[6]));
3284 var x28: u64 = undefined;3282 var x28: u64 = undefined;
3285 cmovznzU64(&x28, x3, (arg3[0]), x14);3283 const x28_selection_mask = selectionMaskU64(x3);
3284 x28 = arg3[0] ^ ((arg3[0] ^ x14) & x28_selection_mask);
3286 var x29: u64 = undefined;3285 var x29: u64 = undefined;
3287 cmovznzU64(&x29, x3, (arg3[1]), x16);3286 x29 = arg3[1] ^ ((arg3[1] ^ x16) & x28_selection_mask);
3288 var x30: u64 = undefined;3287 var x30: u64 = undefined;
3289 cmovznzU64(&x30, x3, (arg3[2]), x18);3288 x30 = arg3[2] ^ ((arg3[2] ^ x18) & x28_selection_mask);
3290 var x31: u64 = undefined;3289 var x31: u64 = undefined;
3291 cmovznzU64(&x31, x3, (arg3[3]), x20);3290 x31 = arg3[3] ^ ((arg3[3] ^ x20) & x28_selection_mask);
3292 var x32: u64 = undefined;3291 var x32: u64 = undefined;
3293 cmovznzU64(&x32, x3, (arg3[4]), x22);3292 x32 = arg3[4] ^ ((arg3[4] ^ x22) & x28_selection_mask);
3294 var x33: u64 = undefined;3293 var x33: u64 = undefined;
3295 cmovznzU64(&x33, x3, (arg3[5]), x24);3294 x33 = arg3[5] ^ ((arg3[5] ^ x24) & x28_selection_mask);
3296 var x34: u64 = undefined;3295 var x34: u64 = undefined;
3297 cmovznzU64(&x34, x3, (arg3[6]), x26);3296 x34 = arg3[6] ^ ((arg3[6] ^ x26) & x28_selection_mask);
3298 var x35: u64 = undefined;3297 var x35: u64 = undefined;
3299 cmovznzU64(&x35, x3, (arg4[0]), (arg5[0]));3298 x35 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x28_selection_mask);
3300 var x36: u64 = undefined;3299 var x36: u64 = undefined;
3301 cmovznzU64(&x36, x3, (arg4[1]), (arg5[1]));3300 x36 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x28_selection_mask);
3302 var x37: u64 = undefined;3301 var x37: u64 = undefined;
3303 cmovznzU64(&x37, x3, (arg4[2]), (arg5[2]));3302 x37 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x28_selection_mask);
3304 var x38: u64 = undefined;3303 var x38: u64 = undefined;
3305 cmovznzU64(&x38, x3, (arg4[3]), (arg5[3]));3304 x38 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x28_selection_mask);
3306 var x39: u64 = undefined;3305 var x39: u64 = undefined;
3307 cmovznzU64(&x39, x3, (arg4[4]), (arg5[4]));3306 x39 = arg4[4] ^ ((arg4[4] ^ arg5[4]) & x28_selection_mask);
3308 var x40: u64 = undefined;3307 var x40: u64 = undefined;
3309 cmovznzU64(&x40, x3, (arg4[5]), (arg5[5]));3308 x40 = arg4[5] ^ ((arg4[5] ^ arg5[5]) & x28_selection_mask);
3310 var x41: u64 = undefined;3309 var x41: u64 = undefined;
3311 var x42: u1 = undefined;3310 var x42: u1 = undefined;
3312 addcarryxU64(&x41, &x42, 0x0, x35, x35);3311 addcarryxU64(&x41, &x42, 0x0, x35, x35);
...@@ -3345,13 +3344,13 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3345,13 +3344,13 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3345 subborrowxU64(&x63, &x64, x62, x51, 0xffffffffffffffff);3344 subborrowxU64(&x63, &x64, x62, x51, 0xffffffffffffffff);
3346 var x65: u64 = undefined;3345 var x65: u64 = undefined;
3347 var x66: u1 = undefined;3346 var x66: u1 = undefined;
3348 subborrowxU64(&x65, &x66, x64, @as(u64, x52), 0x0);3347 subborrowxU64(&x65, &x66, x64, x52, 0x0);
3349 const x67 = (arg4[5]);3348 const x67: u64 = arg4[5];
3350 const x68 = (arg4[4]);3349 const x68: u64 = arg4[4];
3351 const x69 = (arg4[3]);3350 const x69: u64 = arg4[3];
3352 const x70 = (arg4[2]);3351 const x70: u64 = arg4[2];
3353 const x71 = (arg4[1]);3352 const x71: u64 = arg4[1];
3354 const x72 = (arg4[0]);3353 const x72: u64 = arg4[0];
3355 var x73: u64 = undefined;3354 var x73: u64 = undefined;
3356 var x74: u1 = undefined;3355 var x74: u1 = undefined;
3357 subborrowxU64(&x73, &x74, 0x0, 0x0, x72);3356 subborrowxU64(&x73, &x74, 0x0, 0x0, x72);
...@@ -3371,7 +3370,8 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3371,7 +3370,8 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3371 var x84: u1 = undefined;3370 var x84: u1 = undefined;
3372 subborrowxU64(&x83, &x84, x82, 0x0, x67);3371 subborrowxU64(&x83, &x84, x82, 0x0, x67);
3373 var x85: u64 = undefined;3372 var x85: u64 = undefined;
3374 cmovznzU64(&x85, x84, 0x0, 0xffffffffffffffff);3373 const x85_selection_mask = selectionMaskU64(x84);
3374 x85 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x85_selection_mask);
3375 var x86: u64 = undefined;3375 var x86: u64 = undefined;
3376 var x87: u1 = undefined;3376 var x87: u1 = undefined;
3377 addcarryxU64(&x86, &x87, 0x0, x73, (x85 & 0xffffffff));3377 addcarryxU64(&x86, &x87, 0x0, x73, (x85 & 0xffffffff));
...@@ -3391,32 +3391,34 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3391,32 +3391,34 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3391 var x97: u1 = undefined;3391 var x97: u1 = undefined;
3392 addcarryxU64(&x96, &x97, x95, x83, x85);3392 addcarryxU64(&x96, &x97, x95, x83, x85);
3393 var x98: u64 = undefined;3393 var x98: u64 = undefined;
3394 cmovznzU64(&x98, x3, (arg5[0]), x86);3394 const x98_selection_mask = selectionMaskU64(x3);
3395 x98 = arg5[0] ^ ((arg5[0] ^ x86) & x98_selection_mask);
3395 var x99: u64 = undefined;3396 var x99: u64 = undefined;
3396 cmovznzU64(&x99, x3, (arg5[1]), x88);3397 x99 = arg5[1] ^ ((arg5[1] ^ x88) & x98_selection_mask);
3397 var x100: u64 = undefined;3398 var x100: u64 = undefined;
3398 cmovznzU64(&x100, x3, (arg5[2]), x90);3399 x100 = arg5[2] ^ ((arg5[2] ^ x90) & x98_selection_mask);
3399 var x101: u64 = undefined;3400 var x101: u64 = undefined;
3400 cmovznzU64(&x101, x3, (arg5[3]), x92);3401 x101 = arg5[3] ^ ((arg5[3] ^ x92) & x98_selection_mask);
3401 var x102: u64 = undefined;3402 var x102: u64 = undefined;
3402 cmovznzU64(&x102, x3, (arg5[4]), x94);3403 x102 = arg5[4] ^ ((arg5[4] ^ x94) & x98_selection_mask);
3403 var x103: u64 = undefined;3404 var x103: u64 = undefined;
3404 cmovznzU64(&x103, x3, (arg5[5]), x96);3405 x103 = arg5[5] ^ ((arg5[5] ^ x96) & x98_selection_mask);
3405 const x104 = @as(u1, @truncate((x28 & 0x1)));3406 const x104: u1 = @truncate(x28);
3406 var x105: u64 = undefined;3407 var x105: u64 = undefined;
3407 cmovznzU64(&x105, x104, 0x0, x7);3408 const x105_selection_mask = selectionMaskU64(x104);
3409 x105 = 0x0 ^ ((0x0 ^ x7) & x105_selection_mask);
3408 var x106: u64 = undefined;3410 var x106: u64 = undefined;
3409 cmovznzU64(&x106, x104, 0x0, x8);3411 x106 = 0x0 ^ ((0x0 ^ x8) & x105_selection_mask);
3410 var x107: u64 = undefined;3412 var x107: u64 = undefined;
3411 cmovznzU64(&x107, x104, 0x0, x9);3413 x107 = 0x0 ^ ((0x0 ^ x9) & x105_selection_mask);
3412 var x108: u64 = undefined;3414 var x108: u64 = undefined;
3413 cmovznzU64(&x108, x104, 0x0, x10);3415 x108 = 0x0 ^ ((0x0 ^ x10) & x105_selection_mask);
3414 var x109: u64 = undefined;3416 var x109: u64 = undefined;
3415 cmovznzU64(&x109, x104, 0x0, x11);3417 x109 = 0x0 ^ ((0x0 ^ x11) & x105_selection_mask);
3416 var x110: u64 = undefined;3418 var x110: u64 = undefined;
3417 cmovznzU64(&x110, x104, 0x0, x12);3419 x110 = 0x0 ^ ((0x0 ^ x12) & x105_selection_mask);
3418 var x111: u64 = undefined;3420 var x111: u64 = undefined;
3419 cmovznzU64(&x111, x104, 0x0, x13);3421 x111 = 0x0 ^ ((0x0 ^ x13) & x105_selection_mask);
3420 var x112: u64 = undefined;3422 var x112: u64 = undefined;
3421 var x113: u1 = undefined;3423 var x113: u1 = undefined;
3422 addcarryxU64(&x112, &x113, 0x0, x28, x105);3424 addcarryxU64(&x112, &x113, 0x0, x28, x105);
...@@ -3439,17 +3441,18 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3439,17 +3441,18 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3439 var x125: u1 = undefined;3441 var x125: u1 = undefined;
3440 addcarryxU64(&x124, &x125, x123, x34, x111);3442 addcarryxU64(&x124, &x125, x123, x34, x111);
3441 var x126: u64 = undefined;3443 var x126: u64 = undefined;
3442 cmovznzU64(&x126, x104, 0x0, x35);3444 const x126_selection_mask = selectionMaskU64(x104);
3445 x126 = 0x0 ^ ((0x0 ^ x35) & x126_selection_mask);
3443 var x127: u64 = undefined;3446 var x127: u64 = undefined;
3444 cmovznzU64(&x127, x104, 0x0, x36);3447 x127 = 0x0 ^ ((0x0 ^ x36) & x126_selection_mask);
3445 var x128: u64 = undefined;3448 var x128: u64 = undefined;
3446 cmovznzU64(&x128, x104, 0x0, x37);3449 x128 = 0x0 ^ ((0x0 ^ x37) & x126_selection_mask);
3447 var x129: u64 = undefined;3450 var x129: u64 = undefined;
3448 cmovznzU64(&x129, x104, 0x0, x38);3451 x129 = 0x0 ^ ((0x0 ^ x38) & x126_selection_mask);
3449 var x130: u64 = undefined;3452 var x130: u64 = undefined;
3450 cmovznzU64(&x130, x104, 0x0, x39);3453 x130 = 0x0 ^ ((0x0 ^ x39) & x126_selection_mask);
3451 var x131: u64 = undefined;3454 var x131: u64 = undefined;
3452 cmovznzU64(&x131, x104, 0x0, x40);3455 x131 = 0x0 ^ ((0x0 ^ x40) & x126_selection_mask);
3453 var x132: u64 = undefined;3456 var x132: u64 = undefined;
3454 var x133: u1 = undefined;3457 var x133: u1 = undefined;
3455 addcarryxU64(&x132, &x133, 0x0, x98, x126);3458 addcarryxU64(&x132, &x133, 0x0, x98, x126);
...@@ -3488,41 +3491,43 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3488,41 +3491,43 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3488 subborrowxU64(&x154, &x155, x153, x142, 0xffffffffffffffff);3491 subborrowxU64(&x154, &x155, x153, x142, 0xffffffffffffffff);
3489 var x156: u64 = undefined;3492 var x156: u64 = undefined;
3490 var x157: u1 = undefined;3493 var x157: u1 = undefined;
3491 subborrowxU64(&x156, &x157, x155, @as(u64, x143), 0x0);3494 subborrowxU64(&x156, &x157, x155, x143, 0x0);
3492 var x158: u64 = undefined;3495 var x158: u64 = undefined;
3493 var x159: u1 = undefined;3496 var x159: u1 = undefined;
3494 addcarryxU64(&x158, &x159, 0x0, x6, 0x1);3497 addcarryxU64(&x158, &x159, 0x0, x6, 0x1);
3495 const x160 = ((x112 >> 1) | ((x114 << 63) & 0xffffffffffffffff));3498 const x160: u64 = ((x112 >> 1) | ((x114 << 63) & 0xffffffffffffffff));
3496 const x161 = ((x114 >> 1) | ((x116 << 63) & 0xffffffffffffffff));3499 const x161: u64 = ((x114 >> 1) | ((x116 << 63) & 0xffffffffffffffff));
3497 const x162 = ((x116 >> 1) | ((x118 << 63) & 0xffffffffffffffff));3500 const x162: u64 = ((x116 >> 1) | ((x118 << 63) & 0xffffffffffffffff));
3498 const x163 = ((x118 >> 1) | ((x120 << 63) & 0xffffffffffffffff));3501 const x163: u64 = ((x118 >> 1) | ((x120 << 63) & 0xffffffffffffffff));
3499 const x164 = ((x120 >> 1) | ((x122 << 63) & 0xffffffffffffffff));3502 const x164: u64 = ((x120 >> 1) | ((x122 << 63) & 0xffffffffffffffff));
3500 const x165 = ((x122 >> 1) | ((x124 << 63) & 0xffffffffffffffff));3503 const x165: u64 = ((x122 >> 1) | ((x124 << 63) & 0xffffffffffffffff));
3501 const x166 = ((x124 & 0x8000000000000000) | (x124 >> 1));3504 const x166: u64 = ((x124 & 0x8000000000000000) | (x124 >> 1));
3502 var x167: u64 = undefined;3505 var x167: u64 = undefined;
3503 cmovznzU64(&x167, x66, x53, x41);3506 const x167_selection_mask = selectionMaskU64(x66);
3507 x167 = x53 ^ ((x53 ^ x41) & x167_selection_mask);
3504 var x168: u64 = undefined;3508 var x168: u64 = undefined;
3505 cmovznzU64(&x168, x66, x55, x43);3509 x168 = x55 ^ ((x55 ^ x43) & x167_selection_mask);
3506 var x169: u64 = undefined;3510 var x169: u64 = undefined;
3507 cmovznzU64(&x169, x66, x57, x45);3511 x169 = x57 ^ ((x57 ^ x45) & x167_selection_mask);
3508 var x170: u64 = undefined;3512 var x170: u64 = undefined;
3509 cmovznzU64(&x170, x66, x59, x47);3513 x170 = x59 ^ ((x59 ^ x47) & x167_selection_mask);
3510 var x171: u64 = undefined;3514 var x171: u64 = undefined;
3511 cmovznzU64(&x171, x66, x61, x49);3515 x171 = x61 ^ ((x61 ^ x49) & x167_selection_mask);
3512 var x172: u64 = undefined;3516 var x172: u64 = undefined;
3513 cmovznzU64(&x172, x66, x63, x51);3517 x172 = x63 ^ ((x63 ^ x51) & x167_selection_mask);
3514 var x173: u64 = undefined;3518 var x173: u64 = undefined;
3515 cmovznzU64(&x173, x157, x144, x132);3519 const x173_selection_mask = selectionMaskU64(x157);
3520 x173 = x144 ^ ((x144 ^ x132) & x173_selection_mask);
3516 var x174: u64 = undefined;3521 var x174: u64 = undefined;
3517 cmovznzU64(&x174, x157, x146, x134);3522 x174 = x146 ^ ((x146 ^ x134) & x173_selection_mask);
3518 var x175: u64 = undefined;3523 var x175: u64 = undefined;
3519 cmovznzU64(&x175, x157, x148, x136);3524 x175 = x148 ^ ((x148 ^ x136) & x173_selection_mask);
3520 var x176: u64 = undefined;3525 var x176: u64 = undefined;
3521 cmovznzU64(&x176, x157, x150, x138);3526 x176 = x150 ^ ((x150 ^ x138) & x173_selection_mask);
3522 var x177: u64 = undefined;3527 var x177: u64 = undefined;
3523 cmovznzU64(&x177, x157, x152, x140);3528 x177 = x152 ^ ((x152 ^ x140) & x173_selection_mask);
3524 var x178: u64 = undefined;3529 var x178: u64 = undefined;
3525 cmovznzU64(&x178, x157, x154, x142);3530 x178 = x154 ^ ((x154 ^ x142) & x173_selection_mask);
3526 out1.* = x158;3531 out1.* = x158;
3527 out2[0] = x7;3532 out2[0] = x7;
3528 out2[1] = x8;3533 out2[1] = x8;
lib/std/crypto/pcurves/p384/p384_scalar_64.zig+527-522
...@@ -17,7 +17,6 @@...@@ -17,7 +17,6 @@
17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) in
18// if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^38418// if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^384
1919
20const std = @import("std");
21const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
2221
23// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [6]u64;...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [6]u64;
28// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
29pub const NonMontgomeryDomainFieldElement = [6]u64;28pub const NonMontgomeryDomainFieldElement = [6]u64;
3029
31/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
32///
33/// Postconditions:
34/// out1 = (arg1 + arg2 + arg3) mod 2^64
35/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
36///
37/// Input Bounds:
38/// arg1: [0x0 ~> 0x1]
39/// arg2: [0x0 ~> 0xffffffffffffffff]
40/// arg3: [0x0 ~> 0xffffffffffffffff]
41/// Output Bounds:
42/// out1: [0x0 ~> 0xffffffffffffffff]
43/// out2: [0x0 ~> 0x1]
44fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
45 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
46 out1.* = @truncate(x);33
47 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
48}38}
4939
50/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
51///
52/// Postconditions:
53/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
54/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
55///
56/// Input Bounds:
57/// arg1: [0x0 ~> 0x1]
58/// arg2: [0x0 ~> 0xffffffffffffffff]
59/// arg3: [0x0 ~> 0xffffffffffffffff]
60/// Output Bounds:
61/// out1: [0x0 ~> 0xffffffffffffffff]
62/// out2: [0x0 ~> 0x1]
63fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
64 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
65 out1.* = @truncate(x);43
66 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
67}48}
6849
69/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
70///
71/// Postconditions:
72/// out1 = (arg1 * arg2) mod 2^64
73/// out2 = ⌊arg1 * arg2 / 2^64⌋
74///
75/// Input Bounds:
76/// arg1: [0x0 ~> 0xffffffffffffffff]
77/// arg2: [0x0 ~> 0xffffffffffffffff]
78/// Output Bounds:
79/// out1: [0x0 ~> 0xffffffffffffffff]
80/// out2: [0x0 ~> 0xffffffffffffffff]
81fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
82 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
8353
84 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
85 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
86 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
87}57}
8858
89/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
90///60fn selectionMaskU64(arg1: u1) u64 {
91/// Postconditions:61 @setRuntimeSafety(mode == .debug);
92/// out1 = (if arg1 = 0 then arg2 else arg3)62
93///63 const value: u64 = 0 -% @as(u64, arg1);
94/// Input Bounds:64 if (@inComptime()) return value;
95/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
96/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
97/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
98/// Output Bounds:68 }
99/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
100fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
101 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
10291
103 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
104 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
105}94}
10695
107/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -116,30 +105,30 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -116,30 +105,30 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
116pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
117 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
118107
119 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
120 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
121 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
122 const x4 = (arg1[4]);111 const x4: u64 = arg1[4];
123 const x5 = (arg1[5]);112 const x5: u64 = arg1[5];
124 const x6 = (arg1[0]);113 const x6: u64 = arg1[0];
125 var x7: u64 = undefined;114 var x7: u64 = undefined;
126 var x8: u64 = undefined;115 var x8: u64 = undefined;
127 mulxU64(&x7, &x8, x6, (arg2[5]));116 mulxU64(&x7, &x8, x6, arg2[5]);
128 var x9: u64 = undefined;117 var x9: u64 = undefined;
129 var x10: u64 = undefined;118 var x10: u64 = undefined;
130 mulxU64(&x9, &x10, x6, (arg2[4]));119 mulxU64(&x9, &x10, x6, arg2[4]);
131 var x11: u64 = undefined;120 var x11: u64 = undefined;
132 var x12: u64 = undefined;121 var x12: u64 = undefined;
133 mulxU64(&x11, &x12, x6, (arg2[3]));122 mulxU64(&x11, &x12, x6, arg2[3]);
134 var x13: u64 = undefined;123 var x13: u64 = undefined;
135 var x14: u64 = undefined;124 var x14: u64 = undefined;
136 mulxU64(&x13, &x14, x6, (arg2[2]));125 mulxU64(&x13, &x14, x6, arg2[2]);
137 var x15: u64 = undefined;126 var x15: u64 = undefined;
138 var x16: u64 = undefined;127 var x16: u64 = undefined;
139 mulxU64(&x15, &x16, x6, (arg2[1]));128 mulxU64(&x15, &x16, x6, arg2[1]);
140 var x17: u64 = undefined;129 var x17: u64 = undefined;
141 var x18: u64 = undefined;130 var x18: u64 = undefined;
142 mulxU64(&x17, &x18, x6, (arg2[0]));131 mulxU64(&x17, &x18, x6, arg2[0]);
143 var x19: u64 = undefined;132 var x19: u64 = undefined;
144 var x20: u1 = undefined;133 var x20: u1 = undefined;
145 addcarryxU64(&x19, &x20, 0x0, x18, x15);134 addcarryxU64(&x19, &x20, 0x0, x18, x15);
...@@ -155,7 +144,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -155,7 +144,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
155 var x27: u64 = undefined;144 var x27: u64 = undefined;
156 var x28: u1 = undefined;145 var x28: u1 = undefined;
157 addcarryxU64(&x27, &x28, x26, x10, x7);146 addcarryxU64(&x27, &x28, x26, x10, x7);
158 const x29 = (@as(u64, x28) + x8);147 const x29: u64 = (x28 + x8);
159 var x30: u64 = undefined;148 var x30: u64 = undefined;
160 var x31: u64 = undefined;149 var x31: u64 = undefined;
161 mulxU64(&x30, &x31, x17, 0x6ed46089e88fdc45);150 mulxU64(&x30, &x31, x17, 0x6ed46089e88fdc45);
...@@ -192,7 +181,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -192,7 +181,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
192 var x52: u64 = undefined;181 var x52: u64 = undefined;
193 var x53: u1 = undefined;182 var x53: u1 = undefined;
194 addcarryxU64(&x52, &x53, x51, x35, x32);183 addcarryxU64(&x52, &x53, x51, x35, x32);
195 const x54 = (@as(u64, x53) + x33);184 const x54: u64 = (x53 + x33);
196 var x55: u64 = undefined;185 var x55: u64 = undefined;
197 var x56: u1 = undefined;186 var x56: u1 = undefined;
198 addcarryxU64(&x55, &x56, 0x0, x17, x42);187 addcarryxU64(&x55, &x56, 0x0, x17, x42);
...@@ -216,22 +205,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -216,22 +205,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
216 addcarryxU64(&x67, &x68, x66, x29, x54);205 addcarryxU64(&x67, &x68, x66, x29, x54);
217 var x69: u64 = undefined;206 var x69: u64 = undefined;
218 var x70: u64 = undefined;207 var x70: u64 = undefined;
219 mulxU64(&x69, &x70, x1, (arg2[5]));208 mulxU64(&x69, &x70, x1, arg2[5]);
220 var x71: u64 = undefined;209 var x71: u64 = undefined;
221 var x72: u64 = undefined;210 var x72: u64 = undefined;
222 mulxU64(&x71, &x72, x1, (arg2[4]));211 mulxU64(&x71, &x72, x1, arg2[4]);
223 var x73: u64 = undefined;212 var x73: u64 = undefined;
224 var x74: u64 = undefined;213 var x74: u64 = undefined;
225 mulxU64(&x73, &x74, x1, (arg2[3]));214 mulxU64(&x73, &x74, x1, arg2[3]);
226 var x75: u64 = undefined;215 var x75: u64 = undefined;
227 var x76: u64 = undefined;216 var x76: u64 = undefined;
228 mulxU64(&x75, &x76, x1, (arg2[2]));217 mulxU64(&x75, &x76, x1, arg2[2]);
229 var x77: u64 = undefined;218 var x77: u64 = undefined;
230 var x78: u64 = undefined;219 var x78: u64 = undefined;
231 mulxU64(&x77, &x78, x1, (arg2[1]));220 mulxU64(&x77, &x78, x1, arg2[1]);
232 var x79: u64 = undefined;221 var x79: u64 = undefined;
233 var x80: u64 = undefined;222 var x80: u64 = undefined;
234 mulxU64(&x79, &x80, x1, (arg2[0]));223 mulxU64(&x79, &x80, x1, arg2[0]);
235 var x81: u64 = undefined;224 var x81: u64 = undefined;
236 var x82: u1 = undefined;225 var x82: u1 = undefined;
237 addcarryxU64(&x81, &x82, 0x0, x80, x77);226 addcarryxU64(&x81, &x82, 0x0, x80, x77);
...@@ -247,7 +236,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -247,7 +236,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
247 var x89: u64 = undefined;236 var x89: u64 = undefined;
248 var x90: u1 = undefined;237 var x90: u1 = undefined;
249 addcarryxU64(&x89, &x90, x88, x72, x69);238 addcarryxU64(&x89, &x90, x88, x72, x69);
250 const x91 = (@as(u64, x90) + x70);239 const x91: u64 = (x90 + x70);
251 var x92: u64 = undefined;240 var x92: u64 = undefined;
252 var x93: u1 = undefined;241 var x93: u1 = undefined;
253 addcarryxU64(&x92, &x93, 0x0, x57, x79);242 addcarryxU64(&x92, &x93, 0x0, x57, x79);
...@@ -268,7 +257,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -268,7 +257,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
268 addcarryxU64(&x102, &x103, x101, x67, x89);257 addcarryxU64(&x102, &x103, x101, x67, x89);
269 var x104: u64 = undefined;258 var x104: u64 = undefined;
270 var x105: u1 = undefined;259 var x105: u1 = undefined;
271 addcarryxU64(&x104, &x105, x103, @as(u64, x68), x91);260 addcarryxU64(&x104, &x105, x103, x68, x91);
272 var x106: u64 = undefined;261 var x106: u64 = undefined;
273 var x107: u64 = undefined;262 var x107: u64 = undefined;
274 mulxU64(&x106, &x107, x92, 0x6ed46089e88fdc45);263 mulxU64(&x106, &x107, x92, 0x6ed46089e88fdc45);
...@@ -305,7 +294,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -305,7 +294,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
305 var x128: u64 = undefined;294 var x128: u64 = undefined;
306 var x129: u1 = undefined;295 var x129: u1 = undefined;
307 addcarryxU64(&x128, &x129, x127, x111, x108);296 addcarryxU64(&x128, &x129, x127, x111, x108);
308 const x130 = (@as(u64, x129) + x109);297 const x130: u64 = (x129 + x109);
309 var x131: u64 = undefined;298 var x131: u64 = undefined;
310 var x132: u1 = undefined;299 var x132: u1 = undefined;
311 addcarryxU64(&x131, &x132, 0x0, x92, x118);300 addcarryxU64(&x131, &x132, 0x0, x92, x118);
...@@ -327,25 +316,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -327,25 +316,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
327 var x143: u64 = undefined;316 var x143: u64 = undefined;
328 var x144: u1 = undefined;317 var x144: u1 = undefined;
329 addcarryxU64(&x143, &x144, x142, x104, x130);318 addcarryxU64(&x143, &x144, x142, x104, x130);
330 const x145 = (@as(u64, x144) + @as(u64, x105));319 const x145: u64 = (@as(u64, x144) + x105);
331 var x146: u64 = undefined;320 var x146: u64 = undefined;
332 var x147: u64 = undefined;321 var x147: u64 = undefined;
333 mulxU64(&x146, &x147, x2, (arg2[5]));322 mulxU64(&x146, &x147, x2, arg2[5]);
334 var x148: u64 = undefined;323 var x148: u64 = undefined;
335 var x149: u64 = undefined;324 var x149: u64 = undefined;
336 mulxU64(&x148, &x149, x2, (arg2[4]));325 mulxU64(&x148, &x149, x2, arg2[4]);
337 var x150: u64 = undefined;326 var x150: u64 = undefined;
338 var x151: u64 = undefined;327 var x151: u64 = undefined;
339 mulxU64(&x150, &x151, x2, (arg2[3]));328 mulxU64(&x150, &x151, x2, arg2[3]);
340 var x152: u64 = undefined;329 var x152: u64 = undefined;
341 var x153: u64 = undefined;330 var x153: u64 = undefined;
342 mulxU64(&x152, &x153, x2, (arg2[2]));331 mulxU64(&x152, &x153, x2, arg2[2]);
343 var x154: u64 = undefined;332 var x154: u64 = undefined;
344 var x155: u64 = undefined;333 var x155: u64 = undefined;
345 mulxU64(&x154, &x155, x2, (arg2[1]));334 mulxU64(&x154, &x155, x2, arg2[1]);
346 var x156: u64 = undefined;335 var x156: u64 = undefined;
347 var x157: u64 = undefined;336 var x157: u64 = undefined;
348 mulxU64(&x156, &x157, x2, (arg2[0]));337 mulxU64(&x156, &x157, x2, arg2[0]);
349 var x158: u64 = undefined;338 var x158: u64 = undefined;
350 var x159: u1 = undefined;339 var x159: u1 = undefined;
351 addcarryxU64(&x158, &x159, 0x0, x157, x154);340 addcarryxU64(&x158, &x159, 0x0, x157, x154);
...@@ -361,7 +350,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -361,7 +350,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
361 var x166: u64 = undefined;350 var x166: u64 = undefined;
362 var x167: u1 = undefined;351 var x167: u1 = undefined;
363 addcarryxU64(&x166, &x167, x165, x149, x146);352 addcarryxU64(&x166, &x167, x165, x149, x146);
364 const x168 = (@as(u64, x167) + x147);353 const x168: u64 = (x167 + x147);
365 var x169: u64 = undefined;354 var x169: u64 = undefined;
366 var x170: u1 = undefined;355 var x170: u1 = undefined;
367 addcarryxU64(&x169, &x170, 0x0, x133, x156);356 addcarryxU64(&x169, &x170, 0x0, x133, x156);
...@@ -419,7 +408,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -419,7 +408,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
419 var x205: u64 = undefined;408 var x205: u64 = undefined;
420 var x206: u1 = undefined;409 var x206: u1 = undefined;
421 addcarryxU64(&x205, &x206, x204, x188, x185);410 addcarryxU64(&x205, &x206, x204, x188, x185);
422 const x207 = (@as(u64, x206) + x186);411 const x207: u64 = (x206 + x186);
423 var x208: u64 = undefined;412 var x208: u64 = undefined;
424 var x209: u1 = undefined;413 var x209: u1 = undefined;
425 addcarryxU64(&x208, &x209, 0x0, x169, x195);414 addcarryxU64(&x208, &x209, 0x0, x169, x195);
...@@ -441,25 +430,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -441,25 +430,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
441 var x220: u64 = undefined;430 var x220: u64 = undefined;
442 var x221: u1 = undefined;431 var x221: u1 = undefined;
443 addcarryxU64(&x220, &x221, x219, x181, x207);432 addcarryxU64(&x220, &x221, x219, x181, x207);
444 const x222 = (@as(u64, x221) + @as(u64, x182));433 const x222: u64 = (@as(u64, x221) + x182);
445 var x223: u64 = undefined;434 var x223: u64 = undefined;
446 var x224: u64 = undefined;435 var x224: u64 = undefined;
447 mulxU64(&x223, &x224, x3, (arg2[5]));436 mulxU64(&x223, &x224, x3, arg2[5]);
448 var x225: u64 = undefined;437 var x225: u64 = undefined;
449 var x226: u64 = undefined;438 var x226: u64 = undefined;
450 mulxU64(&x225, &x226, x3, (arg2[4]));439 mulxU64(&x225, &x226, x3, arg2[4]);
451 var x227: u64 = undefined;440 var x227: u64 = undefined;
452 var x228: u64 = undefined;441 var x228: u64 = undefined;
453 mulxU64(&x227, &x228, x3, (arg2[3]));442 mulxU64(&x227, &x228, x3, arg2[3]);
454 var x229: u64 = undefined;443 var x229: u64 = undefined;
455 var x230: u64 = undefined;444 var x230: u64 = undefined;
456 mulxU64(&x229, &x230, x3, (arg2[2]));445 mulxU64(&x229, &x230, x3, arg2[2]);
457 var x231: u64 = undefined;446 var x231: u64 = undefined;
458 var x232: u64 = undefined;447 var x232: u64 = undefined;
459 mulxU64(&x231, &x232, x3, (arg2[1]));448 mulxU64(&x231, &x232, x3, arg2[1]);
460 var x233: u64 = undefined;449 var x233: u64 = undefined;
461 var x234: u64 = undefined;450 var x234: u64 = undefined;
462 mulxU64(&x233, &x234, x3, (arg2[0]));451 mulxU64(&x233, &x234, x3, arg2[0]);
463 var x235: u64 = undefined;452 var x235: u64 = undefined;
464 var x236: u1 = undefined;453 var x236: u1 = undefined;
465 addcarryxU64(&x235, &x236, 0x0, x234, x231);454 addcarryxU64(&x235, &x236, 0x0, x234, x231);
...@@ -475,7 +464,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -475,7 +464,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
475 var x243: u64 = undefined;464 var x243: u64 = undefined;
476 var x244: u1 = undefined;465 var x244: u1 = undefined;
477 addcarryxU64(&x243, &x244, x242, x226, x223);466 addcarryxU64(&x243, &x244, x242, x226, x223);
478 const x245 = (@as(u64, x244) + x224);467 const x245: u64 = (x244 + x224);
479 var x246: u64 = undefined;468 var x246: u64 = undefined;
480 var x247: u1 = undefined;469 var x247: u1 = undefined;
481 addcarryxU64(&x246, &x247, 0x0, x210, x233);470 addcarryxU64(&x246, &x247, 0x0, x210, x233);
...@@ -533,7 +522,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -533,7 +522,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
533 var x282: u64 = undefined;522 var x282: u64 = undefined;
534 var x283: u1 = undefined;523 var x283: u1 = undefined;
535 addcarryxU64(&x282, &x283, x281, x265, x262);524 addcarryxU64(&x282, &x283, x281, x265, x262);
536 const x284 = (@as(u64, x283) + x263);525 const x284: u64 = (x283 + x263);
537 var x285: u64 = undefined;526 var x285: u64 = undefined;
538 var x286: u1 = undefined;527 var x286: u1 = undefined;
539 addcarryxU64(&x285, &x286, 0x0, x246, x272);528 addcarryxU64(&x285, &x286, 0x0, x246, x272);
...@@ -555,25 +544,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -555,25 +544,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
555 var x297: u64 = undefined;544 var x297: u64 = undefined;
556 var x298: u1 = undefined;545 var x298: u1 = undefined;
557 addcarryxU64(&x297, &x298, x296, x258, x284);546 addcarryxU64(&x297, &x298, x296, x258, x284);
558 const x299 = (@as(u64, x298) + @as(u64, x259));547 const x299: u64 = (@as(u64, x298) + x259);
559 var x300: u64 = undefined;548 var x300: u64 = undefined;
560 var x301: u64 = undefined;549 var x301: u64 = undefined;
561 mulxU64(&x300, &x301, x4, (arg2[5]));550 mulxU64(&x300, &x301, x4, arg2[5]);
562 var x302: u64 = undefined;551 var x302: u64 = undefined;
563 var x303: u64 = undefined;552 var x303: u64 = undefined;
564 mulxU64(&x302, &x303, x4, (arg2[4]));553 mulxU64(&x302, &x303, x4, arg2[4]);
565 var x304: u64 = undefined;554 var x304: u64 = undefined;
566 var x305: u64 = undefined;555 var x305: u64 = undefined;
567 mulxU64(&x304, &x305, x4, (arg2[3]));556 mulxU64(&x304, &x305, x4, arg2[3]);
568 var x306: u64 = undefined;557 var x306: u64 = undefined;
569 var x307: u64 = undefined;558 var x307: u64 = undefined;
570 mulxU64(&x306, &x307, x4, (arg2[2]));559 mulxU64(&x306, &x307, x4, arg2[2]);
571 var x308: u64 = undefined;560 var x308: u64 = undefined;
572 var x309: u64 = undefined;561 var x309: u64 = undefined;
573 mulxU64(&x308, &x309, x4, (arg2[1]));562 mulxU64(&x308, &x309, x4, arg2[1]);
574 var x310: u64 = undefined;563 var x310: u64 = undefined;
575 var x311: u64 = undefined;564 var x311: u64 = undefined;
576 mulxU64(&x310, &x311, x4, (arg2[0]));565 mulxU64(&x310, &x311, x4, arg2[0]);
577 var x312: u64 = undefined;566 var x312: u64 = undefined;
578 var x313: u1 = undefined;567 var x313: u1 = undefined;
579 addcarryxU64(&x312, &x313, 0x0, x311, x308);568 addcarryxU64(&x312, &x313, 0x0, x311, x308);
...@@ -589,7 +578,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -589,7 +578,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
589 var x320: u64 = undefined;578 var x320: u64 = undefined;
590 var x321: u1 = undefined;579 var x321: u1 = undefined;
591 addcarryxU64(&x320, &x321, x319, x303, x300);580 addcarryxU64(&x320, &x321, x319, x303, x300);
592 const x322 = (@as(u64, x321) + x301);581 const x322: u64 = (x321 + x301);
593 var x323: u64 = undefined;582 var x323: u64 = undefined;
594 var x324: u1 = undefined;583 var x324: u1 = undefined;
595 addcarryxU64(&x323, &x324, 0x0, x287, x310);584 addcarryxU64(&x323, &x324, 0x0, x287, x310);
...@@ -647,7 +636,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -647,7 +636,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
647 var x359: u64 = undefined;636 var x359: u64 = undefined;
648 var x360: u1 = undefined;637 var x360: u1 = undefined;
649 addcarryxU64(&x359, &x360, x358, x342, x339);638 addcarryxU64(&x359, &x360, x358, x342, x339);
650 const x361 = (@as(u64, x360) + x340);639 const x361: u64 = (x360 + x340);
651 var x362: u64 = undefined;640 var x362: u64 = undefined;
652 var x363: u1 = undefined;641 var x363: u1 = undefined;
653 addcarryxU64(&x362, &x363, 0x0, x323, x349);642 addcarryxU64(&x362, &x363, 0x0, x323, x349);
...@@ -669,25 +658,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -669,25 +658,25 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
669 var x374: u64 = undefined;658 var x374: u64 = undefined;
670 var x375: u1 = undefined;659 var x375: u1 = undefined;
671 addcarryxU64(&x374, &x375, x373, x335, x361);660 addcarryxU64(&x374, &x375, x373, x335, x361);
672 const x376 = (@as(u64, x375) + @as(u64, x336));661 const x376: u64 = (@as(u64, x375) + x336);
673 var x377: u64 = undefined;662 var x377: u64 = undefined;
674 var x378: u64 = undefined;663 var x378: u64 = undefined;
675 mulxU64(&x377, &x378, x5, (arg2[5]));664 mulxU64(&x377, &x378, x5, arg2[5]);
676 var x379: u64 = undefined;665 var x379: u64 = undefined;
677 var x380: u64 = undefined;666 var x380: u64 = undefined;
678 mulxU64(&x379, &x380, x5, (arg2[4]));667 mulxU64(&x379, &x380, x5, arg2[4]);
679 var x381: u64 = undefined;668 var x381: u64 = undefined;
680 var x382: u64 = undefined;669 var x382: u64 = undefined;
681 mulxU64(&x381, &x382, x5, (arg2[3]));670 mulxU64(&x381, &x382, x5, arg2[3]);
682 var x383: u64 = undefined;671 var x383: u64 = undefined;
683 var x384: u64 = undefined;672 var x384: u64 = undefined;
684 mulxU64(&x383, &x384, x5, (arg2[2]));673 mulxU64(&x383, &x384, x5, arg2[2]);
685 var x385: u64 = undefined;674 var x385: u64 = undefined;
686 var x386: u64 = undefined;675 var x386: u64 = undefined;
687 mulxU64(&x385, &x386, x5, (arg2[1]));676 mulxU64(&x385, &x386, x5, arg2[1]);
688 var x387: u64 = undefined;677 var x387: u64 = undefined;
689 var x388: u64 = undefined;678 var x388: u64 = undefined;
690 mulxU64(&x387, &x388, x5, (arg2[0]));679 mulxU64(&x387, &x388, x5, arg2[0]);
691 var x389: u64 = undefined;680 var x389: u64 = undefined;
692 var x390: u1 = undefined;681 var x390: u1 = undefined;
693 addcarryxU64(&x389, &x390, 0x0, x388, x385);682 addcarryxU64(&x389, &x390, 0x0, x388, x385);
...@@ -703,7 +692,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -703,7 +692,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
703 var x397: u64 = undefined;692 var x397: u64 = undefined;
704 var x398: u1 = undefined;693 var x398: u1 = undefined;
705 addcarryxU64(&x397, &x398, x396, x380, x377);694 addcarryxU64(&x397, &x398, x396, x380, x377);
706 const x399 = (@as(u64, x398) + x378);695 const x399: u64 = (x398 + x378);
707 var x400: u64 = undefined;696 var x400: u64 = undefined;
708 var x401: u1 = undefined;697 var x401: u1 = undefined;
709 addcarryxU64(&x400, &x401, 0x0, x364, x387);698 addcarryxU64(&x400, &x401, 0x0, x364, x387);
...@@ -761,7 +750,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -761,7 +750,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
761 var x436: u64 = undefined;750 var x436: u64 = undefined;
762 var x437: u1 = undefined;751 var x437: u1 = undefined;
763 addcarryxU64(&x436, &x437, x435, x419, x416);752 addcarryxU64(&x436, &x437, x435, x419, x416);
764 const x438 = (@as(u64, x437) + x417);753 const x438: u64 = (x437 + x417);
765 var x439: u64 = undefined;754 var x439: u64 = undefined;
766 var x440: u1 = undefined;755 var x440: u1 = undefined;
767 addcarryxU64(&x439, &x440, 0x0, x400, x426);756 addcarryxU64(&x439, &x440, 0x0, x400, x426);
...@@ -783,7 +772,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -783,7 +772,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
783 var x451: u64 = undefined;772 var x451: u64 = undefined;
784 var x452: u1 = undefined;773 var x452: u1 = undefined;
785 addcarryxU64(&x451, &x452, x450, x412, x438);774 addcarryxU64(&x451, &x452, x450, x412, x438);
786 const x453 = (@as(u64, x452) + @as(u64, x413));775 const x453: u64 = (@as(u64, x452) + x413);
787 var x454: u64 = undefined;776 var x454: u64 = undefined;
788 var x455: u1 = undefined;777 var x455: u1 = undefined;
789 subborrowxU64(&x454, &x455, 0x0, x441, 0xecec196accc52973);778 subborrowxU64(&x454, &x455, 0x0, x441, 0xecec196accc52973);
...@@ -806,17 +795,18 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -806,17 +795,18 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
806 var x467: u1 = undefined;795 var x467: u1 = undefined;
807 subborrowxU64(&x466, &x467, x465, x453, 0x0);796 subborrowxU64(&x466, &x467, x465, x453, 0x0);
808 var x468: u64 = undefined;797 var x468: u64 = undefined;
809 cmovznzU64(&x468, x467, x454, x441);798 const x468_selection_mask = selectionMaskU64(x467);
799 x468 = x454 ^ ((x454 ^ x441) & x468_selection_mask);
810 var x469: u64 = undefined;800 var x469: u64 = undefined;
811 cmovznzU64(&x469, x467, x456, x443);801 x469 = x456 ^ ((x456 ^ x443) & x468_selection_mask);
812 var x470: u64 = undefined;802 var x470: u64 = undefined;
813 cmovznzU64(&x470, x467, x458, x445);803 x470 = x458 ^ ((x458 ^ x445) & x468_selection_mask);
814 var x471: u64 = undefined;804 var x471: u64 = undefined;
815 cmovznzU64(&x471, x467, x460, x447);805 x471 = x460 ^ ((x460 ^ x447) & x468_selection_mask);
816 var x472: u64 = undefined;806 var x472: u64 = undefined;
817 cmovznzU64(&x472, x467, x462, x449);807 x472 = x462 ^ ((x462 ^ x449) & x468_selection_mask);
818 var x473: u64 = undefined;808 var x473: u64 = undefined;
819 cmovznzU64(&x473, x467, x464, x451);809 x473 = x464 ^ ((x464 ^ x451) & x468_selection_mask);
820 out1[0] = x468;810 out1[0] = x468;
821 out1[1] = x469;811 out1[1] = x469;
822 out1[2] = x470;812 out1[2] = x470;
...@@ -836,30 +826,30 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -836,30 +826,30 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
836pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {826pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
837 @setRuntimeSafety(mode == .debug);827 @setRuntimeSafety(mode == .debug);
838828
839 const x1 = (arg1[1]);829 const x1: u64 = arg1[1];
840 const x2 = (arg1[2]);830 const x2: u64 = arg1[2];
841 const x3 = (arg1[3]);831 const x3: u64 = arg1[3];
842 const x4 = (arg1[4]);832 const x4: u64 = arg1[4];
843 const x5 = (arg1[5]);833 const x5: u64 = arg1[5];
844 const x6 = (arg1[0]);834 const x6: u64 = arg1[0];
845 var x7: u64 = undefined;835 var x7: u64 = undefined;
846 var x8: u64 = undefined;836 var x8: u64 = undefined;
847 mulxU64(&x7, &x8, x6, (arg1[5]));837 mulxU64(&x7, &x8, x6, arg1[5]);
848 var x9: u64 = undefined;838 var x9: u64 = undefined;
849 var x10: u64 = undefined;839 var x10: u64 = undefined;
850 mulxU64(&x9, &x10, x6, (arg1[4]));840 mulxU64(&x9, &x10, x6, arg1[4]);
851 var x11: u64 = undefined;841 var x11: u64 = undefined;
852 var x12: u64 = undefined;842 var x12: u64 = undefined;
853 mulxU64(&x11, &x12, x6, (arg1[3]));843 mulxU64(&x11, &x12, x6, arg1[3]);
854 var x13: u64 = undefined;844 var x13: u64 = undefined;
855 var x14: u64 = undefined;845 var x14: u64 = undefined;
856 mulxU64(&x13, &x14, x6, (arg1[2]));846 mulxU64(&x13, &x14, x6, arg1[2]);
857 var x15: u64 = undefined;847 var x15: u64 = undefined;
858 var x16: u64 = undefined;848 var x16: u64 = undefined;
859 mulxU64(&x15, &x16, x6, (arg1[1]));849 mulxU64(&x15, &x16, x6, arg1[1]);
860 var x17: u64 = undefined;850 var x17: u64 = undefined;
861 var x18: u64 = undefined;851 var x18: u64 = undefined;
862 mulxU64(&x17, &x18, x6, (arg1[0]));852 mulxU64(&x17, &x18, x6, arg1[0]);
863 var x19: u64 = undefined;853 var x19: u64 = undefined;
864 var x20: u1 = undefined;854 var x20: u1 = undefined;
865 addcarryxU64(&x19, &x20, 0x0, x18, x15);855 addcarryxU64(&x19, &x20, 0x0, x18, x15);
...@@ -875,7 +865,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -875,7 +865,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
875 var x27: u64 = undefined;865 var x27: u64 = undefined;
876 var x28: u1 = undefined;866 var x28: u1 = undefined;
877 addcarryxU64(&x27, &x28, x26, x10, x7);867 addcarryxU64(&x27, &x28, x26, x10, x7);
878 const x29 = (@as(u64, x28) + x8);868 const x29: u64 = (x28 + x8);
879 var x30: u64 = undefined;869 var x30: u64 = undefined;
880 var x31: u64 = undefined;870 var x31: u64 = undefined;
881 mulxU64(&x30, &x31, x17, 0x6ed46089e88fdc45);871 mulxU64(&x30, &x31, x17, 0x6ed46089e88fdc45);
...@@ -912,7 +902,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -912,7 +902,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
912 var x52: u64 = undefined;902 var x52: u64 = undefined;
913 var x53: u1 = undefined;903 var x53: u1 = undefined;
914 addcarryxU64(&x52, &x53, x51, x35, x32);904 addcarryxU64(&x52, &x53, x51, x35, x32);
915 const x54 = (@as(u64, x53) + x33);905 const x54: u64 = (x53 + x33);
916 var x55: u64 = undefined;906 var x55: u64 = undefined;
917 var x56: u1 = undefined;907 var x56: u1 = undefined;
918 addcarryxU64(&x55, &x56, 0x0, x17, x42);908 addcarryxU64(&x55, &x56, 0x0, x17, x42);
...@@ -936,22 +926,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -936,22 +926,22 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
936 addcarryxU64(&x67, &x68, x66, x29, x54);926 addcarryxU64(&x67, &x68, x66, x29, x54);
937 var x69: u64 = undefined;927 var x69: u64 = undefined;
938 var x70: u64 = undefined;928 var x70: u64 = undefined;
939 mulxU64(&x69, &x70, x1, (arg1[5]));929 mulxU64(&x69, &x70, x1, arg1[5]);
940 var x71: u64 = undefined;930 var x71: u64 = undefined;
941 var x72: u64 = undefined;931 var x72: u64 = undefined;
942 mulxU64(&x71, &x72, x1, (arg1[4]));932 mulxU64(&x71, &x72, x1, arg1[4]);
943 var x73: u64 = undefined;933 var x73: u64 = undefined;
944 var x74: u64 = undefined;934 var x74: u64 = undefined;
945 mulxU64(&x73, &x74, x1, (arg1[3]));935 mulxU64(&x73, &x74, x1, arg1[3]);
946 var x75: u64 = undefined;936 var x75: u64 = undefined;
947 var x76: u64 = undefined;937 var x76: u64 = undefined;
948 mulxU64(&x75, &x76, x1, (arg1[2]));938 mulxU64(&x75, &x76, x1, arg1[2]);
949 var x77: u64 = undefined;939 var x77: u64 = undefined;
950 var x78: u64 = undefined;940 var x78: u64 = undefined;
951 mulxU64(&x77, &x78, x1, (arg1[1]));941 mulxU64(&x77, &x78, x1, arg1[1]);
952 var x79: u64 = undefined;942 var x79: u64 = undefined;
953 var x80: u64 = undefined;943 var x80: u64 = undefined;
954 mulxU64(&x79, &x80, x1, (arg1[0]));944 mulxU64(&x79, &x80, x1, arg1[0]);
955 var x81: u64 = undefined;945 var x81: u64 = undefined;
956 var x82: u1 = undefined;946 var x82: u1 = undefined;
957 addcarryxU64(&x81, &x82, 0x0, x80, x77);947 addcarryxU64(&x81, &x82, 0x0, x80, x77);
...@@ -967,7 +957,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -967,7 +957,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
967 var x89: u64 = undefined;957 var x89: u64 = undefined;
968 var x90: u1 = undefined;958 var x90: u1 = undefined;
969 addcarryxU64(&x89, &x90, x88, x72, x69);959 addcarryxU64(&x89, &x90, x88, x72, x69);
970 const x91 = (@as(u64, x90) + x70);960 const x91: u64 = (x90 + x70);
971 var x92: u64 = undefined;961 var x92: u64 = undefined;
972 var x93: u1 = undefined;962 var x93: u1 = undefined;
973 addcarryxU64(&x92, &x93, 0x0, x57, x79);963 addcarryxU64(&x92, &x93, 0x0, x57, x79);
...@@ -988,7 +978,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -988,7 +978,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
988 addcarryxU64(&x102, &x103, x101, x67, x89);978 addcarryxU64(&x102, &x103, x101, x67, x89);
989 var x104: u64 = undefined;979 var x104: u64 = undefined;
990 var x105: u1 = undefined;980 var x105: u1 = undefined;
991 addcarryxU64(&x104, &x105, x103, @as(u64, x68), x91);981 addcarryxU64(&x104, &x105, x103, x68, x91);
992 var x106: u64 = undefined;982 var x106: u64 = undefined;
993 var x107: u64 = undefined;983 var x107: u64 = undefined;
994 mulxU64(&x106, &x107, x92, 0x6ed46089e88fdc45);984 mulxU64(&x106, &x107, x92, 0x6ed46089e88fdc45);
...@@ -1025,7 +1015,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1025,7 +1015,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1025 var x128: u64 = undefined;1015 var x128: u64 = undefined;
1026 var x129: u1 = undefined;1016 var x129: u1 = undefined;
1027 addcarryxU64(&x128, &x129, x127, x111, x108);1017 addcarryxU64(&x128, &x129, x127, x111, x108);
1028 const x130 = (@as(u64, x129) + x109);1018 const x130: u64 = (x129 + x109);
1029 var x131: u64 = undefined;1019 var x131: u64 = undefined;
1030 var x132: u1 = undefined;1020 var x132: u1 = undefined;
1031 addcarryxU64(&x131, &x132, 0x0, x92, x118);1021 addcarryxU64(&x131, &x132, 0x0, x92, x118);
...@@ -1047,25 +1037,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1047,25 +1037,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1047 var x143: u64 = undefined;1037 var x143: u64 = undefined;
1048 var x144: u1 = undefined;1038 var x144: u1 = undefined;
1049 addcarryxU64(&x143, &x144, x142, x104, x130);1039 addcarryxU64(&x143, &x144, x142, x104, x130);
1050 const x145 = (@as(u64, x144) + @as(u64, x105));1040 const x145: u64 = (@as(u64, x144) + x105);
1051 var x146: u64 = undefined;1041 var x146: u64 = undefined;
1052 var x147: u64 = undefined;1042 var x147: u64 = undefined;
1053 mulxU64(&x146, &x147, x2, (arg1[5]));1043 mulxU64(&x146, &x147, x2, arg1[5]);
1054 var x148: u64 = undefined;1044 var x148: u64 = undefined;
1055 var x149: u64 = undefined;1045 var x149: u64 = undefined;
1056 mulxU64(&x148, &x149, x2, (arg1[4]));1046 mulxU64(&x148, &x149, x2, arg1[4]);
1057 var x150: u64 = undefined;1047 var x150: u64 = undefined;
1058 var x151: u64 = undefined;1048 var x151: u64 = undefined;
1059 mulxU64(&x150, &x151, x2, (arg1[3]));1049 mulxU64(&x150, &x151, x2, arg1[3]);
1060 var x152: u64 = undefined;1050 var x152: u64 = undefined;
1061 var x153: u64 = undefined;1051 var x153: u64 = undefined;
1062 mulxU64(&x152, &x153, x2, (arg1[2]));1052 mulxU64(&x152, &x153, x2, arg1[2]);
1063 var x154: u64 = undefined;1053 var x154: u64 = undefined;
1064 var x155: u64 = undefined;1054 var x155: u64 = undefined;
1065 mulxU64(&x154, &x155, x2, (arg1[1]));1055 mulxU64(&x154, &x155, x2, arg1[1]);
1066 var x156: u64 = undefined;1056 var x156: u64 = undefined;
1067 var x157: u64 = undefined;1057 var x157: u64 = undefined;
1068 mulxU64(&x156, &x157, x2, (arg1[0]));1058 mulxU64(&x156, &x157, x2, arg1[0]);
1069 var x158: u64 = undefined;1059 var x158: u64 = undefined;
1070 var x159: u1 = undefined;1060 var x159: u1 = undefined;
1071 addcarryxU64(&x158, &x159, 0x0, x157, x154);1061 addcarryxU64(&x158, &x159, 0x0, x157, x154);
...@@ -1081,7 +1071,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1081,7 +1071,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1081 var x166: u64 = undefined;1071 var x166: u64 = undefined;
1082 var x167: u1 = undefined;1072 var x167: u1 = undefined;
1083 addcarryxU64(&x166, &x167, x165, x149, x146);1073 addcarryxU64(&x166, &x167, x165, x149, x146);
1084 const x168 = (@as(u64, x167) + x147);1074 const x168: u64 = (x167 + x147);
1085 var x169: u64 = undefined;1075 var x169: u64 = undefined;
1086 var x170: u1 = undefined;1076 var x170: u1 = undefined;
1087 addcarryxU64(&x169, &x170, 0x0, x133, x156);1077 addcarryxU64(&x169, &x170, 0x0, x133, x156);
...@@ -1139,7 +1129,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1139,7 +1129,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1139 var x205: u64 = undefined;1129 var x205: u64 = undefined;
1140 var x206: u1 = undefined;1130 var x206: u1 = undefined;
1141 addcarryxU64(&x205, &x206, x204, x188, x185);1131 addcarryxU64(&x205, &x206, x204, x188, x185);
1142 const x207 = (@as(u64, x206) + x186);1132 const x207: u64 = (x206 + x186);
1143 var x208: u64 = undefined;1133 var x208: u64 = undefined;
1144 var x209: u1 = undefined;1134 var x209: u1 = undefined;
1145 addcarryxU64(&x208, &x209, 0x0, x169, x195);1135 addcarryxU64(&x208, &x209, 0x0, x169, x195);
...@@ -1161,25 +1151,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1161,25 +1151,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1161 var x220: u64 = undefined;1151 var x220: u64 = undefined;
1162 var x221: u1 = undefined;1152 var x221: u1 = undefined;
1163 addcarryxU64(&x220, &x221, x219, x181, x207);1153 addcarryxU64(&x220, &x221, x219, x181, x207);
1164 const x222 = (@as(u64, x221) + @as(u64, x182));1154 const x222: u64 = (@as(u64, x221) + x182);
1165 var x223: u64 = undefined;1155 var x223: u64 = undefined;
1166 var x224: u64 = undefined;1156 var x224: u64 = undefined;
1167 mulxU64(&x223, &x224, x3, (arg1[5]));1157 mulxU64(&x223, &x224, x3, arg1[5]);
1168 var x225: u64 = undefined;1158 var x225: u64 = undefined;
1169 var x226: u64 = undefined;1159 var x226: u64 = undefined;
1170 mulxU64(&x225, &x226, x3, (arg1[4]));1160 mulxU64(&x225, &x226, x3, arg1[4]);
1171 var x227: u64 = undefined;1161 var x227: u64 = undefined;
1172 var x228: u64 = undefined;1162 var x228: u64 = undefined;
1173 mulxU64(&x227, &x228, x3, (arg1[3]));1163 mulxU64(&x227, &x228, x3, arg1[3]);
1174 var x229: u64 = undefined;1164 var x229: u64 = undefined;
1175 var x230: u64 = undefined;1165 var x230: u64 = undefined;
1176 mulxU64(&x229, &x230, x3, (arg1[2]));1166 mulxU64(&x229, &x230, x3, arg1[2]);
1177 var x231: u64 = undefined;1167 var x231: u64 = undefined;
1178 var x232: u64 = undefined;1168 var x232: u64 = undefined;
1179 mulxU64(&x231, &x232, x3, (arg1[1]));1169 mulxU64(&x231, &x232, x3, arg1[1]);
1180 var x233: u64 = undefined;1170 var x233: u64 = undefined;
1181 var x234: u64 = undefined;1171 var x234: u64 = undefined;
1182 mulxU64(&x233, &x234, x3, (arg1[0]));1172 mulxU64(&x233, &x234, x3, arg1[0]);
1183 var x235: u64 = undefined;1173 var x235: u64 = undefined;
1184 var x236: u1 = undefined;1174 var x236: u1 = undefined;
1185 addcarryxU64(&x235, &x236, 0x0, x234, x231);1175 addcarryxU64(&x235, &x236, 0x0, x234, x231);
...@@ -1195,7 +1185,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1195,7 +1185,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1195 var x243: u64 = undefined;1185 var x243: u64 = undefined;
1196 var x244: u1 = undefined;1186 var x244: u1 = undefined;
1197 addcarryxU64(&x243, &x244, x242, x226, x223);1187 addcarryxU64(&x243, &x244, x242, x226, x223);
1198 const x245 = (@as(u64, x244) + x224);1188 const x245: u64 = (x244 + x224);
1199 var x246: u64 = undefined;1189 var x246: u64 = undefined;
1200 var x247: u1 = undefined;1190 var x247: u1 = undefined;
1201 addcarryxU64(&x246, &x247, 0x0, x210, x233);1191 addcarryxU64(&x246, &x247, 0x0, x210, x233);
...@@ -1253,7 +1243,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1253,7 +1243,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1253 var x282: u64 = undefined;1243 var x282: u64 = undefined;
1254 var x283: u1 = undefined;1244 var x283: u1 = undefined;
1255 addcarryxU64(&x282, &x283, x281, x265, x262);1245 addcarryxU64(&x282, &x283, x281, x265, x262);
1256 const x284 = (@as(u64, x283) + x263);1246 const x284: u64 = (x283 + x263);
1257 var x285: u64 = undefined;1247 var x285: u64 = undefined;
1258 var x286: u1 = undefined;1248 var x286: u1 = undefined;
1259 addcarryxU64(&x285, &x286, 0x0, x246, x272);1249 addcarryxU64(&x285, &x286, 0x0, x246, x272);
...@@ -1275,25 +1265,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1275,25 +1265,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1275 var x297: u64 = undefined;1265 var x297: u64 = undefined;
1276 var x298: u1 = undefined;1266 var x298: u1 = undefined;
1277 addcarryxU64(&x297, &x298, x296, x258, x284);1267 addcarryxU64(&x297, &x298, x296, x258, x284);
1278 const x299 = (@as(u64, x298) + @as(u64, x259));1268 const x299: u64 = (@as(u64, x298) + x259);
1279 var x300: u64 = undefined;1269 var x300: u64 = undefined;
1280 var x301: u64 = undefined;1270 var x301: u64 = undefined;
1281 mulxU64(&x300, &x301, x4, (arg1[5]));1271 mulxU64(&x300, &x301, x4, arg1[5]);
1282 var x302: u64 = undefined;1272 var x302: u64 = undefined;
1283 var x303: u64 = undefined;1273 var x303: u64 = undefined;
1284 mulxU64(&x302, &x303, x4, (arg1[4]));1274 mulxU64(&x302, &x303, x4, arg1[4]);
1285 var x304: u64 = undefined;1275 var x304: u64 = undefined;
1286 var x305: u64 = undefined;1276 var x305: u64 = undefined;
1287 mulxU64(&x304, &x305, x4, (arg1[3]));1277 mulxU64(&x304, &x305, x4, arg1[3]);
1288 var x306: u64 = undefined;1278 var x306: u64 = undefined;
1289 var x307: u64 = undefined;1279 var x307: u64 = undefined;
1290 mulxU64(&x306, &x307, x4, (arg1[2]));1280 mulxU64(&x306, &x307, x4, arg1[2]);
1291 var x308: u64 = undefined;1281 var x308: u64 = undefined;
1292 var x309: u64 = undefined;1282 var x309: u64 = undefined;
1293 mulxU64(&x308, &x309, x4, (arg1[1]));1283 mulxU64(&x308, &x309, x4, arg1[1]);
1294 var x310: u64 = undefined;1284 var x310: u64 = undefined;
1295 var x311: u64 = undefined;1285 var x311: u64 = undefined;
1296 mulxU64(&x310, &x311, x4, (arg1[0]));1286 mulxU64(&x310, &x311, x4, arg1[0]);
1297 var x312: u64 = undefined;1287 var x312: u64 = undefined;
1298 var x313: u1 = undefined;1288 var x313: u1 = undefined;
1299 addcarryxU64(&x312, &x313, 0x0, x311, x308);1289 addcarryxU64(&x312, &x313, 0x0, x311, x308);
...@@ -1309,7 +1299,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1309,7 +1299,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1309 var x320: u64 = undefined;1299 var x320: u64 = undefined;
1310 var x321: u1 = undefined;1300 var x321: u1 = undefined;
1311 addcarryxU64(&x320, &x321, x319, x303, x300);1301 addcarryxU64(&x320, &x321, x319, x303, x300);
1312 const x322 = (@as(u64, x321) + x301);1302 const x322: u64 = (x321 + x301);
1313 var x323: u64 = undefined;1303 var x323: u64 = undefined;
1314 var x324: u1 = undefined;1304 var x324: u1 = undefined;
1315 addcarryxU64(&x323, &x324, 0x0, x287, x310);1305 addcarryxU64(&x323, &x324, 0x0, x287, x310);
...@@ -1367,7 +1357,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1367,7 +1357,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1367 var x359: u64 = undefined;1357 var x359: u64 = undefined;
1368 var x360: u1 = undefined;1358 var x360: u1 = undefined;
1369 addcarryxU64(&x359, &x360, x358, x342, x339);1359 addcarryxU64(&x359, &x360, x358, x342, x339);
1370 const x361 = (@as(u64, x360) + x340);1360 const x361: u64 = (x360 + x340);
1371 var x362: u64 = undefined;1361 var x362: u64 = undefined;
1372 var x363: u1 = undefined;1362 var x363: u1 = undefined;
1373 addcarryxU64(&x362, &x363, 0x0, x323, x349);1363 addcarryxU64(&x362, &x363, 0x0, x323, x349);
...@@ -1389,25 +1379,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1389,25 +1379,25 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1389 var x374: u64 = undefined;1379 var x374: u64 = undefined;
1390 var x375: u1 = undefined;1380 var x375: u1 = undefined;
1391 addcarryxU64(&x374, &x375, x373, x335, x361);1381 addcarryxU64(&x374, &x375, x373, x335, x361);
1392 const x376 = (@as(u64, x375) + @as(u64, x336));1382 const x376: u64 = (@as(u64, x375) + x336);
1393 var x377: u64 = undefined;1383 var x377: u64 = undefined;
1394 var x378: u64 = undefined;1384 var x378: u64 = undefined;
1395 mulxU64(&x377, &x378, x5, (arg1[5]));1385 mulxU64(&x377, &x378, x5, arg1[5]);
1396 var x379: u64 = undefined;1386 var x379: u64 = undefined;
1397 var x380: u64 = undefined;1387 var x380: u64 = undefined;
1398 mulxU64(&x379, &x380, x5, (arg1[4]));1388 mulxU64(&x379, &x380, x5, arg1[4]);
1399 var x381: u64 = undefined;1389 var x381: u64 = undefined;
1400 var x382: u64 = undefined;1390 var x382: u64 = undefined;
1401 mulxU64(&x381, &x382, x5, (arg1[3]));1391 mulxU64(&x381, &x382, x5, arg1[3]);
1402 var x383: u64 = undefined;1392 var x383: u64 = undefined;
1403 var x384: u64 = undefined;1393 var x384: u64 = undefined;
1404 mulxU64(&x383, &x384, x5, (arg1[2]));1394 mulxU64(&x383, &x384, x5, arg1[2]);
1405 var x385: u64 = undefined;1395 var x385: u64 = undefined;
1406 var x386: u64 = undefined;1396 var x386: u64 = undefined;
1407 mulxU64(&x385, &x386, x5, (arg1[1]));1397 mulxU64(&x385, &x386, x5, arg1[1]);
1408 var x387: u64 = undefined;1398 var x387: u64 = undefined;
1409 var x388: u64 = undefined;1399 var x388: u64 = undefined;
1410 mulxU64(&x387, &x388, x5, (arg1[0]));1400 mulxU64(&x387, &x388, x5, arg1[0]);
1411 var x389: u64 = undefined;1401 var x389: u64 = undefined;
1412 var x390: u1 = undefined;1402 var x390: u1 = undefined;
1413 addcarryxU64(&x389, &x390, 0x0, x388, x385);1403 addcarryxU64(&x389, &x390, 0x0, x388, x385);
...@@ -1423,7 +1413,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1423,7 +1413,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1423 var x397: u64 = undefined;1413 var x397: u64 = undefined;
1424 var x398: u1 = undefined;1414 var x398: u1 = undefined;
1425 addcarryxU64(&x397, &x398, x396, x380, x377);1415 addcarryxU64(&x397, &x398, x396, x380, x377);
1426 const x399 = (@as(u64, x398) + x378);1416 const x399: u64 = (x398 + x378);
1427 var x400: u64 = undefined;1417 var x400: u64 = undefined;
1428 var x401: u1 = undefined;1418 var x401: u1 = undefined;
1429 addcarryxU64(&x400, &x401, 0x0, x364, x387);1419 addcarryxU64(&x400, &x401, 0x0, x364, x387);
...@@ -1481,7 +1471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1481,7 +1471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1481 var x436: u64 = undefined;1471 var x436: u64 = undefined;
1482 var x437: u1 = undefined;1472 var x437: u1 = undefined;
1483 addcarryxU64(&x436, &x437, x435, x419, x416);1473 addcarryxU64(&x436, &x437, x435, x419, x416);
1484 const x438 = (@as(u64, x437) + x417);1474 const x438: u64 = (x437 + x417);
1485 var x439: u64 = undefined;1475 var x439: u64 = undefined;
1486 var x440: u1 = undefined;1476 var x440: u1 = undefined;
1487 addcarryxU64(&x439, &x440, 0x0, x400, x426);1477 addcarryxU64(&x439, &x440, 0x0, x400, x426);
...@@ -1503,7 +1493,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1503,7 +1493,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1503 var x451: u64 = undefined;1493 var x451: u64 = undefined;
1504 var x452: u1 = undefined;1494 var x452: u1 = undefined;
1505 addcarryxU64(&x451, &x452, x450, x412, x438);1495 addcarryxU64(&x451, &x452, x450, x412, x438);
1506 const x453 = (@as(u64, x452) + @as(u64, x413));1496 const x453: u64 = (@as(u64, x452) + x413);
1507 var x454: u64 = undefined;1497 var x454: u64 = undefined;
1508 var x455: u1 = undefined;1498 var x455: u1 = undefined;
1509 subborrowxU64(&x454, &x455, 0x0, x441, 0xecec196accc52973);1499 subborrowxU64(&x454, &x455, 0x0, x441, 0xecec196accc52973);
...@@ -1526,17 +1516,18 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -1526,17 +1516,18 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
1526 var x467: u1 = undefined;1516 var x467: u1 = undefined;
1527 subborrowxU64(&x466, &x467, x465, x453, 0x0);1517 subborrowxU64(&x466, &x467, x465, x453, 0x0);
1528 var x468: u64 = undefined;1518 var x468: u64 = undefined;
1529 cmovznzU64(&x468, x467, x454, x441);1519 const x468_selection_mask = selectionMaskU64(x467);
1520 x468 = x454 ^ ((x454 ^ x441) & x468_selection_mask);
1530 var x469: u64 = undefined;1521 var x469: u64 = undefined;
1531 cmovznzU64(&x469, x467, x456, x443);1522 x469 = x456 ^ ((x456 ^ x443) & x468_selection_mask);
1532 var x470: u64 = undefined;1523 var x470: u64 = undefined;
1533 cmovznzU64(&x470, x467, x458, x445);1524 x470 = x458 ^ ((x458 ^ x445) & x468_selection_mask);
1534 var x471: u64 = undefined;1525 var x471: u64 = undefined;
1535 cmovznzU64(&x471, x467, x460, x447);1526 x471 = x460 ^ ((x460 ^ x447) & x468_selection_mask);
1536 var x472: u64 = undefined;1527 var x472: u64 = undefined;
1537 cmovznzU64(&x472, x467, x462, x449);1528 x472 = x462 ^ ((x462 ^ x449) & x468_selection_mask);
1538 var x473: u64 = undefined;1529 var x473: u64 = undefined;
1539 cmovznzU64(&x473, x467, x464, x451);1530 x473 = x464 ^ ((x464 ^ x451) & x468_selection_mask);
1540 out1[0] = x468;1531 out1[0] = x468;
1541 out1[1] = x469;1532 out1[1] = x469;
1542 out1[2] = x470;1533 out1[2] = x470;
...@@ -1559,22 +1550,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1559,22 +1550,22 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
15591550
1560 var x1: u64 = undefined;1551 var x1: u64 = undefined;
1561 var x2: u1 = undefined;1552 var x2: u1 = undefined;
1562 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));1553 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
1563 var x3: u64 = undefined;1554 var x3: u64 = undefined;
1564 var x4: u1 = undefined;1555 var x4: u1 = undefined;
1565 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));1556 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
1566 var x5: u64 = undefined;1557 var x5: u64 = undefined;
1567 var x6: u1 = undefined;1558 var x6: u1 = undefined;
1568 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));1559 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
1569 var x7: u64 = undefined;1560 var x7: u64 = undefined;
1570 var x8: u1 = undefined;1561 var x8: u1 = undefined;
1571 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));1562 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
1572 var x9: u64 = undefined;1563 var x9: u64 = undefined;
1573 var x10: u1 = undefined;1564 var x10: u1 = undefined;
1574 addcarryxU64(&x9, &x10, x8, (arg1[4]), (arg2[4]));1565 addcarryxU64(&x9, &x10, x8, arg1[4], arg2[4]);
1575 var x11: u64 = undefined;1566 var x11: u64 = undefined;
1576 var x12: u1 = undefined;1567 var x12: u1 = undefined;
1577 addcarryxU64(&x11, &x12, x10, (arg1[5]), (arg2[5]));1568 addcarryxU64(&x11, &x12, x10, arg1[5], arg2[5]);
1578 var x13: u64 = undefined;1569 var x13: u64 = undefined;
1579 var x14: u1 = undefined;1570 var x14: u1 = undefined;
1580 subborrowxU64(&x13, &x14, 0x0, x1, 0xecec196accc52973);1571 subborrowxU64(&x13, &x14, 0x0, x1, 0xecec196accc52973);
...@@ -1595,19 +1586,20 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1595,19 +1586,20 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
1595 subborrowxU64(&x23, &x24, x22, x11, 0xffffffffffffffff);1586 subborrowxU64(&x23, &x24, x22, x11, 0xffffffffffffffff);
1596 var x25: u64 = undefined;1587 var x25: u64 = undefined;
1597 var x26: u1 = undefined;1588 var x26: u1 = undefined;
1598 subborrowxU64(&x25, &x26, x24, @as(u64, x12), 0x0);1589 subborrowxU64(&x25, &x26, x24, x12, 0x0);
1599 var x27: u64 = undefined;1590 var x27: u64 = undefined;
1600 cmovznzU64(&x27, x26, x13, x1);1591 const x27_selection_mask = selectionMaskU64(x26);
1592 x27 = x13 ^ ((x13 ^ x1) & x27_selection_mask);
1601 var x28: u64 = undefined;1593 var x28: u64 = undefined;
1602 cmovznzU64(&x28, x26, x15, x3);1594 x28 = x15 ^ ((x15 ^ x3) & x27_selection_mask);
1603 var x29: u64 = undefined;1595 var x29: u64 = undefined;
1604 cmovznzU64(&x29, x26, x17, x5);1596 x29 = x17 ^ ((x17 ^ x5) & x27_selection_mask);
1605 var x30: u64 = undefined;1597 var x30: u64 = undefined;
1606 cmovznzU64(&x30, x26, x19, x7);1598 x30 = x19 ^ ((x19 ^ x7) & x27_selection_mask);
1607 var x31: u64 = undefined;1599 var x31: u64 = undefined;
1608 cmovznzU64(&x31, x26, x21, x9);1600 x31 = x21 ^ ((x21 ^ x9) & x27_selection_mask);
1609 var x32: u64 = undefined;1601 var x32: u64 = undefined;
1610 cmovznzU64(&x32, x26, x23, x11);1602 x32 = x23 ^ ((x23 ^ x11) & x27_selection_mask);
1611 out1[0] = x27;1603 out1[0] = x27;
1612 out1[1] = x28;1604 out1[1] = x28;
1613 out1[2] = x29;1605 out1[2] = x29;
...@@ -1630,24 +1622,25 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1630,24 +1622,25 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
16301622
1631 var x1: u64 = undefined;1623 var x1: u64 = undefined;
1632 var x2: u1 = undefined;1624 var x2: u1 = undefined;
1633 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));1625 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
1634 var x3: u64 = undefined;1626 var x3: u64 = undefined;
1635 var x4: u1 = undefined;1627 var x4: u1 = undefined;
1636 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));1628 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
1637 var x5: u64 = undefined;1629 var x5: u64 = undefined;
1638 var x6: u1 = undefined;1630 var x6: u1 = undefined;
1639 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));1631 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
1640 var x7: u64 = undefined;1632 var x7: u64 = undefined;
1641 var x8: u1 = undefined;1633 var x8: u1 = undefined;
1642 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));1634 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
1643 var x9: u64 = undefined;1635 var x9: u64 = undefined;
1644 var x10: u1 = undefined;1636 var x10: u1 = undefined;
1645 subborrowxU64(&x9, &x10, x8, (arg1[4]), (arg2[4]));1637 subborrowxU64(&x9, &x10, x8, arg1[4], arg2[4]);
1646 var x11: u64 = undefined;1638 var x11: u64 = undefined;
1647 var x12: u1 = undefined;1639 var x12: u1 = undefined;
1648 subborrowxU64(&x11, &x12, x10, (arg1[5]), (arg2[5]));1640 subborrowxU64(&x11, &x12, x10, arg1[5], arg2[5]);
1649 var x13: u64 = undefined;1641 var x13: u64 = undefined;
1650 cmovznzU64(&x13, x12, 0x0, 0xffffffffffffffff);1642 const x13_selection_mask = selectionMaskU64(x12);
1643 x13 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x13_selection_mask);
1651 var x14: u64 = undefined;1644 var x14: u64 = undefined;
1652 var x15: u1 = undefined;1645 var x15: u1 = undefined;
1653 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xecec196accc52973));1646 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xecec196accc52973));
...@@ -1687,24 +1680,25 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1687,24 +1680,25 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
16871680
1688 var x1: u64 = undefined;1681 var x1: u64 = undefined;
1689 var x2: u1 = undefined;1682 var x2: u1 = undefined;
1690 subborrowxU64(&x1, &x2, 0x0, 0x0, (arg1[0]));1683 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
1691 var x3: u64 = undefined;1684 var x3: u64 = undefined;
1692 var x4: u1 = undefined;1685 var x4: u1 = undefined;
1693 subborrowxU64(&x3, &x4, x2, 0x0, (arg1[1]));1686 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
1694 var x5: u64 = undefined;1687 var x5: u64 = undefined;
1695 var x6: u1 = undefined;1688 var x6: u1 = undefined;
1696 subborrowxU64(&x5, &x6, x4, 0x0, (arg1[2]));1689 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
1697 var x7: u64 = undefined;1690 var x7: u64 = undefined;
1698 var x8: u1 = undefined;1691 var x8: u1 = undefined;
1699 subborrowxU64(&x7, &x8, x6, 0x0, (arg1[3]));1692 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
1700 var x9: u64 = undefined;1693 var x9: u64 = undefined;
1701 var x10: u1 = undefined;1694 var x10: u1 = undefined;
1702 subborrowxU64(&x9, &x10, x8, 0x0, (arg1[4]));1695 subborrowxU64(&x9, &x10, x8, 0x0, arg1[4]);
1703 var x11: u64 = undefined;1696 var x11: u64 = undefined;
1704 var x12: u1 = undefined;1697 var x12: u1 = undefined;
1705 subborrowxU64(&x11, &x12, x10, 0x0, (arg1[5]));1698 subborrowxU64(&x11, &x12, x10, 0x0, arg1[5]);
1706 var x13: u64 = undefined;1699 var x13: u64 = undefined;
1707 cmovznzU64(&x13, x12, 0x0, 0xffffffffffffffff);1700 const x13_selection_mask = selectionMaskU64(x12);
1701 x13 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x13_selection_mask);
1708 var x14: u64 = undefined;1702 var x14: u64 = undefined;
1709 var x15: u1 = undefined;1703 var x15: u1 = undefined;
1710 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xecec196accc52973));1704 addcarryxU64(&x14, &x15, 0x0, x1, (x13 & 0xecec196accc52973));
...@@ -1742,7 +1736,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -1742,7 +1736,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
1742pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {1736pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
1743 @setRuntimeSafety(mode == .debug);1737 @setRuntimeSafety(mode == .debug);
17441738
1745 const x1 = (arg1[0]);1739 const x1: u64 = arg1[0];
1746 var x2: u64 = undefined;1740 var x2: u64 = undefined;
1747 var x3: u64 = undefined;1741 var x3: u64 = undefined;
1748 mulxU64(&x2, &x3, x1, 0x6ed46089e88fdc45);1742 mulxU64(&x2, &x3, x1, 0x6ed46089e88fdc45);
...@@ -1799,10 +1793,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1799,10 +1793,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1799 addcarryxU64(&x36, &x37, x35, 0x0, x24);1793 addcarryxU64(&x36, &x37, x35, 0x0, x24);
1800 var x38: u64 = undefined;1794 var x38: u64 = undefined;
1801 var x39: u1 = undefined;1795 var x39: u1 = undefined;
1802 addcarryxU64(&x38, &x39, x37, 0x0, (@as(u64, x25) + x5));1796 addcarryxU64(&x38, &x39, x37, 0x0, (x25 + x5));
1803 var x40: u64 = undefined;1797 var x40: u64 = undefined;
1804 var x41: u1 = undefined;1798 var x41: u1 = undefined;
1805 addcarryxU64(&x40, &x41, 0x0, x28, (arg1[1]));1799 addcarryxU64(&x40, &x41, 0x0, x28, arg1[1]);
1806 var x42: u64 = undefined;1800 var x42: u64 = undefined;
1807 var x43: u1 = undefined;1801 var x43: u1 = undefined;
1808 addcarryxU64(&x42, &x43, x41, x30, 0x0);1802 addcarryxU64(&x42, &x43, x41, x30, 0x0);
...@@ -1874,10 +1868,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1874,10 +1868,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1874 addcarryxU64(&x86, &x87, x85, x50, x74);1868 addcarryxU64(&x86, &x87, x85, x50, x74);
1875 var x88: u64 = undefined;1869 var x88: u64 = undefined;
1876 var x89: u1 = undefined;1870 var x89: u1 = undefined;
1877 addcarryxU64(&x88, &x89, x87, (@as(u64, x51) + @as(u64, x39)), (@as(u64, x75) + x55));1871 addcarryxU64(&x88, &x89, x87, (@as(u64, x51) + x39), (x75 + x55));
1878 var x90: u64 = undefined;1872 var x90: u64 = undefined;
1879 var x91: u1 = undefined;1873 var x91: u1 = undefined;
1880 addcarryxU64(&x90, &x91, 0x0, x78, (arg1[2]));1874 addcarryxU64(&x90, &x91, 0x0, x78, arg1[2]);
1881 var x92: u64 = undefined;1875 var x92: u64 = undefined;
1882 var x93: u1 = undefined;1876 var x93: u1 = undefined;
1883 addcarryxU64(&x92, &x93, x91, x80, 0x0);1877 addcarryxU64(&x92, &x93, x91, x80, 0x0);
...@@ -1949,10 +1943,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1949,10 +1943,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1949 addcarryxU64(&x136, &x137, x135, x100, x124);1943 addcarryxU64(&x136, &x137, x135, x100, x124);
1950 var x138: u64 = undefined;1944 var x138: u64 = undefined;
1951 var x139: u1 = undefined;1945 var x139: u1 = undefined;
1952 addcarryxU64(&x138, &x139, x137, (@as(u64, x101) + @as(u64, x89)), (@as(u64, x125) + x105));1946 addcarryxU64(&x138, &x139, x137, (@as(u64, x101) + x89), (x125 + x105));
1953 var x140: u64 = undefined;1947 var x140: u64 = undefined;
1954 var x141: u1 = undefined;1948 var x141: u1 = undefined;
1955 addcarryxU64(&x140, &x141, 0x0, x128, (arg1[3]));1949 addcarryxU64(&x140, &x141, 0x0, x128, arg1[3]);
1956 var x142: u64 = undefined;1950 var x142: u64 = undefined;
1957 var x143: u1 = undefined;1951 var x143: u1 = undefined;
1958 addcarryxU64(&x142, &x143, x141, x130, 0x0);1952 addcarryxU64(&x142, &x143, x141, x130, 0x0);
...@@ -2024,10 +2018,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2024,10 +2018,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2024 addcarryxU64(&x186, &x187, x185, x150, x174);2018 addcarryxU64(&x186, &x187, x185, x150, x174);
2025 var x188: u64 = undefined;2019 var x188: u64 = undefined;
2026 var x189: u1 = undefined;2020 var x189: u1 = undefined;
2027 addcarryxU64(&x188, &x189, x187, (@as(u64, x151) + @as(u64, x139)), (@as(u64, x175) + x155));2021 addcarryxU64(&x188, &x189, x187, (@as(u64, x151) + x139), (x175 + x155));
2028 var x190: u64 = undefined;2022 var x190: u64 = undefined;
2029 var x191: u1 = undefined;2023 var x191: u1 = undefined;
2030 addcarryxU64(&x190, &x191, 0x0, x178, (arg1[4]));2024 addcarryxU64(&x190, &x191, 0x0, x178, arg1[4]);
2031 var x192: u64 = undefined;2025 var x192: u64 = undefined;
2032 var x193: u1 = undefined;2026 var x193: u1 = undefined;
2033 addcarryxU64(&x192, &x193, x191, x180, 0x0);2027 addcarryxU64(&x192, &x193, x191, x180, 0x0);
...@@ -2099,10 +2093,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2099,10 +2093,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2099 addcarryxU64(&x236, &x237, x235, x200, x224);2093 addcarryxU64(&x236, &x237, x235, x200, x224);
2100 var x238: u64 = undefined;2094 var x238: u64 = undefined;
2101 var x239: u1 = undefined;2095 var x239: u1 = undefined;
2102 addcarryxU64(&x238, &x239, x237, (@as(u64, x201) + @as(u64, x189)), (@as(u64, x225) + x205));2096 addcarryxU64(&x238, &x239, x237, (@as(u64, x201) + x189), (x225 + x205));
2103 var x240: u64 = undefined;2097 var x240: u64 = undefined;
2104 var x241: u1 = undefined;2098 var x241: u1 = undefined;
2105 addcarryxU64(&x240, &x241, 0x0, x228, (arg1[5]));2099 addcarryxU64(&x240, &x241, 0x0, x228, arg1[5]);
2106 var x242: u64 = undefined;2100 var x242: u64 = undefined;
2107 var x243: u1 = undefined;2101 var x243: u1 = undefined;
2108 addcarryxU64(&x242, &x243, x241, x230, 0x0);2102 addcarryxU64(&x242, &x243, x241, x230, 0x0);
...@@ -2174,7 +2168,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2174,7 +2168,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2174 addcarryxU64(&x286, &x287, x285, x250, x274);2168 addcarryxU64(&x286, &x287, x285, x250, x274);
2175 var x288: u64 = undefined;2169 var x288: u64 = undefined;
2176 var x289: u1 = undefined;2170 var x289: u1 = undefined;
2177 addcarryxU64(&x288, &x289, x287, (@as(u64, x251) + @as(u64, x239)), (@as(u64, x275) + x255));2171 addcarryxU64(&x288, &x289, x287, (@as(u64, x251) + x239), (x275 + x255));
2178 var x290: u64 = undefined;2172 var x290: u64 = undefined;
2179 var x291: u1 = undefined;2173 var x291: u1 = undefined;
2180 subborrowxU64(&x290, &x291, 0x0, x278, 0xecec196accc52973);2174 subborrowxU64(&x290, &x291, 0x0, x278, 0xecec196accc52973);
...@@ -2195,19 +2189,20 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2195,19 +2189,20 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2195 subborrowxU64(&x300, &x301, x299, x288, 0xffffffffffffffff);2189 subborrowxU64(&x300, &x301, x299, x288, 0xffffffffffffffff);
2196 var x302: u64 = undefined;2190 var x302: u64 = undefined;
2197 var x303: u1 = undefined;2191 var x303: u1 = undefined;
2198 subborrowxU64(&x302, &x303, x301, @as(u64, x289), 0x0);2192 subborrowxU64(&x302, &x303, x301, x289, 0x0);
2199 var x304: u64 = undefined;2193 var x304: u64 = undefined;
2200 cmovznzU64(&x304, x303, x290, x278);2194 const x304_selection_mask = selectionMaskU64(x303);
2195 x304 = x290 ^ ((x290 ^ x278) & x304_selection_mask);
2201 var x305: u64 = undefined;2196 var x305: u64 = undefined;
2202 cmovznzU64(&x305, x303, x292, x280);2197 x305 = x292 ^ ((x292 ^ x280) & x304_selection_mask);
2203 var x306: u64 = undefined;2198 var x306: u64 = undefined;
2204 cmovznzU64(&x306, x303, x294, x282);2199 x306 = x294 ^ ((x294 ^ x282) & x304_selection_mask);
2205 var x307: u64 = undefined;2200 var x307: u64 = undefined;
2206 cmovznzU64(&x307, x303, x296, x284);2201 x307 = x296 ^ ((x296 ^ x284) & x304_selection_mask);
2207 var x308: u64 = undefined;2202 var x308: u64 = undefined;
2208 cmovznzU64(&x308, x303, x298, x286);2203 x308 = x298 ^ ((x298 ^ x286) & x304_selection_mask);
2209 var x309: u64 = undefined;2204 var x309: u64 = undefined;
2210 cmovznzU64(&x309, x303, x300, x288);2205 x309 = x300 ^ ((x300 ^ x288) & x304_selection_mask);
2211 out1[0] = x304;2206 out1[0] = x304;
2212 out1[1] = x305;2207 out1[1] = x305;
2213 out1[2] = x306;2208 out1[2] = x306;
...@@ -2227,12 +2222,12 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -2227,12 +2222,12 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
2227pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {2222pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
2228 @setRuntimeSafety(mode == .debug);2223 @setRuntimeSafety(mode == .debug);
22292224
2230 const x1 = (arg1[1]);2225 const x1: u64 = arg1[1];
2231 const x2 = (arg1[2]);2226 const x2: u64 = arg1[2];
2232 const x3 = (arg1[3]);2227 const x3: u64 = arg1[3];
2233 const x4 = (arg1[4]);2228 const x4: u64 = arg1[4];
2234 const x5 = (arg1[5]);2229 const x5: u64 = arg1[5];
2235 const x6 = (arg1[0]);2230 const x6: u64 = arg1[0];
2236 var x7: u64 = undefined;2231 var x7: u64 = undefined;
2237 var x8: u64 = undefined;2232 var x8: u64 = undefined;
2238 mulxU64(&x7, &x8, x6, 0xc84ee012b39bf21);2233 mulxU64(&x7, &x8, x6, 0xc84ee012b39bf21);
...@@ -2322,7 +2317,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2322,7 +2317,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2322 addcarryxU64(&x63, &x64, x62, x27, x51);2317 addcarryxU64(&x63, &x64, x62, x27, x51);
2323 var x65: u64 = undefined;2318 var x65: u64 = undefined;
2324 var x66: u1 = undefined;2319 var x66: u1 = undefined;
2325 addcarryxU64(&x65, &x66, x64, (@as(u64, x28) + x8), (@as(u64, x52) + x32));2320 addcarryxU64(&x65, &x66, x64, (x28 + x8), (x52 + x32));
2326 var x67: u64 = undefined;2321 var x67: u64 = undefined;
2327 var x68: u64 = undefined;2322 var x68: u64 = undefined;
2328 mulxU64(&x67, &x68, x1, 0xc84ee012b39bf21);2323 mulxU64(&x67, &x68, x1, 0xc84ee012b39bf21);
...@@ -2430,7 +2425,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2430,7 +2425,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2430 addcarryxU64(&x135, &x136, x134, x99, x123);2425 addcarryxU64(&x135, &x136, x134, x99, x123);
2431 var x137: u64 = undefined;2426 var x137: u64 = undefined;
2432 var x138: u1 = undefined;2427 var x138: u1 = undefined;
2433 addcarryxU64(&x137, &x138, x136, ((@as(u64, x100) + @as(u64, x66)) + (@as(u64, x88) + x68)), (@as(u64, x124) + x104));2428 addcarryxU64(&x137, &x138, x136, ((@as(u64, x100) + x66) + (x88 + x68)), (x124 + x104));
2434 var x139: u64 = undefined;2429 var x139: u64 = undefined;
2435 var x140: u64 = undefined;2430 var x140: u64 = undefined;
2436 mulxU64(&x139, &x140, x2, 0xc84ee012b39bf21);2431 mulxU64(&x139, &x140, x2, 0xc84ee012b39bf21);
...@@ -2538,7 +2533,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2538,7 +2533,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2538 addcarryxU64(&x207, &x208, x206, x171, x195);2533 addcarryxU64(&x207, &x208, x206, x171, x195);
2539 var x209: u64 = undefined;2534 var x209: u64 = undefined;
2540 var x210: u1 = undefined;2535 var x210: u1 = undefined;
2541 addcarryxU64(&x209, &x210, x208, ((@as(u64, x172) + @as(u64, x138)) + (@as(u64, x160) + x140)), (@as(u64, x196) + x176));2536 addcarryxU64(&x209, &x210, x208, ((@as(u64, x172) + x138) + (x160 + x140)), (x196 + x176));
2542 var x211: u64 = undefined;2537 var x211: u64 = undefined;
2543 var x212: u64 = undefined;2538 var x212: u64 = undefined;
2544 mulxU64(&x211, &x212, x3, 0xc84ee012b39bf21);2539 mulxU64(&x211, &x212, x3, 0xc84ee012b39bf21);
...@@ -2646,7 +2641,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2646,7 +2641,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2646 addcarryxU64(&x279, &x280, x278, x243, x267);2641 addcarryxU64(&x279, &x280, x278, x243, x267);
2647 var x281: u64 = undefined;2642 var x281: u64 = undefined;
2648 var x282: u1 = undefined;2643 var x282: u1 = undefined;
2649 addcarryxU64(&x281, &x282, x280, ((@as(u64, x244) + @as(u64, x210)) + (@as(u64, x232) + x212)), (@as(u64, x268) + x248));2644 addcarryxU64(&x281, &x282, x280, ((@as(u64, x244) + x210) + (x232 + x212)), (x268 + x248));
2650 var x283: u64 = undefined;2645 var x283: u64 = undefined;
2651 var x284: u64 = undefined;2646 var x284: u64 = undefined;
2652 mulxU64(&x283, &x284, x4, 0xc84ee012b39bf21);2647 mulxU64(&x283, &x284, x4, 0xc84ee012b39bf21);
...@@ -2754,7 +2749,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2754,7 +2749,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2754 addcarryxU64(&x351, &x352, x350, x315, x339);2749 addcarryxU64(&x351, &x352, x350, x315, x339);
2755 var x353: u64 = undefined;2750 var x353: u64 = undefined;
2756 var x354: u1 = undefined;2751 var x354: u1 = undefined;
2757 addcarryxU64(&x353, &x354, x352, ((@as(u64, x316) + @as(u64, x282)) + (@as(u64, x304) + x284)), (@as(u64, x340) + x320));2752 addcarryxU64(&x353, &x354, x352, ((@as(u64, x316) + x282) + (x304 + x284)), (x340 + x320));
2758 var x355: u64 = undefined;2753 var x355: u64 = undefined;
2759 var x356: u64 = undefined;2754 var x356: u64 = undefined;
2760 mulxU64(&x355, &x356, x5, 0xc84ee012b39bf21);2755 mulxU64(&x355, &x356, x5, 0xc84ee012b39bf21);
...@@ -2862,7 +2857,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2862,7 +2857,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2862 addcarryxU64(&x423, &x424, x422, x387, x411);2857 addcarryxU64(&x423, &x424, x422, x387, x411);
2863 var x425: u64 = undefined;2858 var x425: u64 = undefined;
2864 var x426: u1 = undefined;2859 var x426: u1 = undefined;
2865 addcarryxU64(&x425, &x426, x424, ((@as(u64, x388) + @as(u64, x354)) + (@as(u64, x376) + x356)), (@as(u64, x412) + x392));2860 addcarryxU64(&x425, &x426, x424, ((@as(u64, x388) + x354) + (x376 + x356)), (x412 + x392));
2866 var x427: u64 = undefined;2861 var x427: u64 = undefined;
2867 var x428: u1 = undefined;2862 var x428: u1 = undefined;
2868 subborrowxU64(&x427, &x428, 0x0, x415, 0xecec196accc52973);2863 subborrowxU64(&x427, &x428, 0x0, x415, 0xecec196accc52973);
...@@ -2883,19 +2878,20 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2883,19 +2878,20 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2883 subborrowxU64(&x437, &x438, x436, x425, 0xffffffffffffffff);2878 subborrowxU64(&x437, &x438, x436, x425, 0xffffffffffffffff);
2884 var x439: u64 = undefined;2879 var x439: u64 = undefined;
2885 var x440: u1 = undefined;2880 var x440: u1 = undefined;
2886 subborrowxU64(&x439, &x440, x438, @as(u64, x426), 0x0);2881 subborrowxU64(&x439, &x440, x438, x426, 0x0);
2887 var x441: u64 = undefined;2882 var x441: u64 = undefined;
2888 cmovznzU64(&x441, x440, x427, x415);2883 const x441_selection_mask = selectionMaskU64(x440);
2884 x441 = x427 ^ ((x427 ^ x415) & x441_selection_mask);
2889 var x442: u64 = undefined;2885 var x442: u64 = undefined;
2890 cmovznzU64(&x442, x440, x429, x417);2886 x442 = x429 ^ ((x429 ^ x417) & x441_selection_mask);
2891 var x443: u64 = undefined;2887 var x443: u64 = undefined;
2892 cmovznzU64(&x443, x440, x431, x419);2888 x443 = x431 ^ ((x431 ^ x419) & x441_selection_mask);
2893 var x444: u64 = undefined;2889 var x444: u64 = undefined;
2894 cmovznzU64(&x444, x440, x433, x421);2890 x444 = x433 ^ ((x433 ^ x421) & x441_selection_mask);
2895 var x445: u64 = undefined;2891 var x445: u64 = undefined;
2896 cmovznzU64(&x445, x440, x435, x423);2892 x445 = x435 ^ ((x435 ^ x423) & x441_selection_mask);
2897 var x446: u64 = undefined;2893 var x446: u64 = undefined;
2898 cmovznzU64(&x446, x440, x437, x425);2894 x446 = x437 ^ ((x437 ^ x425) & x441_selection_mask);
2899 out1[0] = x441;2895 out1[0] = x441;
2900 out1[1] = x442;2896 out1[1] = x442;
2901 out1[2] = x443;2897 out1[2] = x443;
...@@ -2918,7 +2914,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -2918,7 +2914,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
2918pub fn nonzero(out1: *u64, arg1: [6]u64) void {2914pub fn nonzero(out1: *u64, arg1: [6]u64) void {
2919 @setRuntimeSafety(mode == .debug);2915 @setRuntimeSafety(mode == .debug);
29202916
2921 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | (arg1[5]))))));2917 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5])))));
2922 out1.* = x1;2918 out1.* = x1;
2923}2919}
29242920
...@@ -2937,17 +2933,18 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {...@@ -2937,17 +2933,18 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {
2937 @setRuntimeSafety(mode == .debug);2933 @setRuntimeSafety(mode == .debug);
29382934
2939 var x1: u64 = undefined;2935 var x1: u64 = undefined;
2940 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));2936 const x1_selection_mask = selectionMaskU64(arg1);
2937 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
2941 var x2: u64 = undefined;2938 var x2: u64 = undefined;
2942 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));2939 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
2943 var x3: u64 = undefined;2940 var x3: u64 = undefined;
2944 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));2941 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
2945 var x4: u64 = undefined;2942 var x4: u64 = undefined;
2946 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));2943 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
2947 var x5: u64 = undefined;2944 var x5: u64 = undefined;
2948 cmovznzU64(&x5, arg1, (arg2[4]), (arg3[4]));2945 x5 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x1_selection_mask);
2949 var x6: u64 = undefined;2946 var x6: u64 = undefined;
2950 cmovznzU64(&x6, arg1, (arg2[5]), (arg3[5]));2947 x6 = arg2[5] ^ ((arg2[5] ^ arg3[5]) & x1_selection_mask);
2951 out1[0] = x1;2948 out1[0] = x1;
2952 out1[1] = x2;2949 out1[1] = x2;
2953 out1[2] = x3;2950 out1[2] = x3;
...@@ -2970,96 +2967,96 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {...@@ -2970,96 +2967,96 @@ pub fn selectznz(out1: *[6]u64, arg1: u1, arg2: [6]u64, arg3: [6]u64) void {
2970pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {2967pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {
2971 @setRuntimeSafety(mode == .debug);2968 @setRuntimeSafety(mode == .debug);
29722969
2973 const x1 = (arg1[5]);2970 const x1: u64 = arg1[5];
2974 const x2 = (arg1[4]);2971 const x2: u64 = arg1[4];
2975 const x3 = (arg1[3]);2972 const x3: u64 = arg1[3];
2976 const x4 = (arg1[2]);2973 const x4: u64 = arg1[2];
2977 const x5 = (arg1[1]);2974 const x5: u64 = arg1[1];
2978 const x6 = (arg1[0]);2975 const x6: u64 = arg1[0];
2979 const x7 = @as(u8, @truncate((x6 & 0xff)));2976 const x7: u8 = @truncate(x6);
2980 const x8 = (x6 >> 8);2977 const x8: u64 = (x6 >> 8);
2981 const x9 = @as(u8, @truncate((x8 & 0xff)));2978 const x9: u8 = @truncate(x8);
2982 const x10 = (x8 >> 8);2979 const x10: u64 = (x8 >> 8);
2983 const x11 = @as(u8, @truncate((x10 & 0xff)));2980 const x11: u8 = @truncate(x10);
2984 const x12 = (x10 >> 8);2981 const x12: u64 = (x10 >> 8);
2985 const x13 = @as(u8, @truncate((x12 & 0xff)));2982 const x13: u8 = @truncate(x12);
2986 const x14 = (x12 >> 8);2983 const x14: u64 = (x12 >> 8);
2987 const x15 = @as(u8, @truncate((x14 & 0xff)));2984 const x15: u8 = @truncate(x14);
2988 const x16 = (x14 >> 8);2985 const x16: u64 = (x14 >> 8);
2989 const x17 = @as(u8, @truncate((x16 & 0xff)));2986 const x17: u8 = @truncate(x16);
2990 const x18 = (x16 >> 8);2987 const x18: u64 = (x16 >> 8);
2991 const x19 = @as(u8, @truncate((x18 & 0xff)));2988 const x19: u8 = @truncate(x18);
2992 const x20 = @as(u8, @truncate((x18 >> 8)));2989 const x20: u8 = @truncate((x18 >> 8));
2993 const x21 = @as(u8, @truncate((x5 & 0xff)));2990 const x21: u8 = @truncate(x5);
2994 const x22 = (x5 >> 8);2991 const x22: u64 = (x5 >> 8);
2995 const x23 = @as(u8, @truncate((x22 & 0xff)));2992 const x23: u8 = @truncate(x22);
2996 const x24 = (x22 >> 8);2993 const x24: u64 = (x22 >> 8);
2997 const x25 = @as(u8, @truncate((x24 & 0xff)));2994 const x25: u8 = @truncate(x24);
2998 const x26 = (x24 >> 8);2995 const x26: u64 = (x24 >> 8);
2999 const x27 = @as(u8, @truncate((x26 & 0xff)));2996 const x27: u8 = @truncate(x26);
3000 const x28 = (x26 >> 8);2997 const x28: u64 = (x26 >> 8);
3001 const x29 = @as(u8, @truncate((x28 & 0xff)));2998 const x29: u8 = @truncate(x28);
3002 const x30 = (x28 >> 8);2999 const x30: u64 = (x28 >> 8);
3003 const x31 = @as(u8, @truncate((x30 & 0xff)));3000 const x31: u8 = @truncate(x30);
3004 const x32 = (x30 >> 8);3001 const x32: u64 = (x30 >> 8);
3005 const x33 = @as(u8, @truncate((x32 & 0xff)));3002 const x33: u8 = @truncate(x32);
3006 const x34 = @as(u8, @truncate((x32 >> 8)));3003 const x34: u8 = @truncate((x32 >> 8));
3007 const x35 = @as(u8, @truncate((x4 & 0xff)));3004 const x35: u8 = @truncate(x4);
3008 const x36 = (x4 >> 8);3005 const x36: u64 = (x4 >> 8);
3009 const x37 = @as(u8, @truncate((x36 & 0xff)));3006 const x37: u8 = @truncate(x36);
3010 const x38 = (x36 >> 8);3007 const x38: u64 = (x36 >> 8);
3011 const x39 = @as(u8, @truncate((x38 & 0xff)));3008 const x39: u8 = @truncate(x38);
3012 const x40 = (x38 >> 8);3009 const x40: u64 = (x38 >> 8);
3013 const x41 = @as(u8, @truncate((x40 & 0xff)));3010 const x41: u8 = @truncate(x40);
3014 const x42 = (x40 >> 8);3011 const x42: u64 = (x40 >> 8);
3015 const x43 = @as(u8, @truncate((x42 & 0xff)));3012 const x43: u8 = @truncate(x42);
3016 const x44 = (x42 >> 8);3013 const x44: u64 = (x42 >> 8);
3017 const x45 = @as(u8, @truncate((x44 & 0xff)));3014 const x45: u8 = @truncate(x44);
3018 const x46 = (x44 >> 8);3015 const x46: u64 = (x44 >> 8);
3019 const x47 = @as(u8, @truncate((x46 & 0xff)));3016 const x47: u8 = @truncate(x46);
3020 const x48 = @as(u8, @truncate((x46 >> 8)));3017 const x48: u8 = @truncate((x46 >> 8));
3021 const x49 = @as(u8, @truncate((x3 & 0xff)));3018 const x49: u8 = @truncate(x3);
3022 const x50 = (x3 >> 8);3019 const x50: u64 = (x3 >> 8);
3023 const x51 = @as(u8, @truncate((x50 & 0xff)));3020 const x51: u8 = @truncate(x50);
3024 const x52 = (x50 >> 8);3021 const x52: u64 = (x50 >> 8);
3025 const x53 = @as(u8, @truncate((x52 & 0xff)));3022 const x53: u8 = @truncate(x52);
3026 const x54 = (x52 >> 8);3023 const x54: u64 = (x52 >> 8);
3027 const x55 = @as(u8, @truncate((x54 & 0xff)));3024 const x55: u8 = @truncate(x54);
3028 const x56 = (x54 >> 8);3025 const x56: u64 = (x54 >> 8);
3029 const x57 = @as(u8, @truncate((x56 & 0xff)));3026 const x57: u8 = @truncate(x56);
3030 const x58 = (x56 >> 8);3027 const x58: u64 = (x56 >> 8);
3031 const x59 = @as(u8, @truncate((x58 & 0xff)));3028 const x59: u8 = @truncate(x58);
3032 const x60 = (x58 >> 8);3029 const x60: u64 = (x58 >> 8);
3033 const x61 = @as(u8, @truncate((x60 & 0xff)));3030 const x61: u8 = @truncate(x60);
3034 const x62 = @as(u8, @truncate((x60 >> 8)));3031 const x62: u8 = @truncate((x60 >> 8));
3035 const x63 = @as(u8, @truncate((x2 & 0xff)));3032 const x63: u8 = @truncate(x2);
3036 const x64 = (x2 >> 8);3033 const x64: u64 = (x2 >> 8);
3037 const x65 = @as(u8, @truncate((x64 & 0xff)));3034 const x65: u8 = @truncate(x64);
3038 const x66 = (x64 >> 8);3035 const x66: u64 = (x64 >> 8);
3039 const x67 = @as(u8, @truncate((x66 & 0xff)));3036 const x67: u8 = @truncate(x66);
3040 const x68 = (x66 >> 8);3037 const x68: u64 = (x66 >> 8);
3041 const x69 = @as(u8, @truncate((x68 & 0xff)));3038 const x69: u8 = @truncate(x68);
3042 const x70 = (x68 >> 8);3039 const x70: u64 = (x68 >> 8);
3043 const x71 = @as(u8, @truncate((x70 & 0xff)));3040 const x71: u8 = @truncate(x70);
3044 const x72 = (x70 >> 8);3041 const x72: u64 = (x70 >> 8);
3045 const x73 = @as(u8, @truncate((x72 & 0xff)));3042 const x73: u8 = @truncate(x72);
3046 const x74 = (x72 >> 8);3043 const x74: u64 = (x72 >> 8);
3047 const x75 = @as(u8, @truncate((x74 & 0xff)));3044 const x75: u8 = @truncate(x74);
3048 const x76 = @as(u8, @truncate((x74 >> 8)));3045 const x76: u8 = @truncate((x74 >> 8));
3049 const x77 = @as(u8, @truncate((x1 & 0xff)));3046 const x77: u8 = @truncate(x1);
3050 const x78 = (x1 >> 8);3047 const x78: u64 = (x1 >> 8);
3051 const x79 = @as(u8, @truncate((x78 & 0xff)));3048 const x79: u8 = @truncate(x78);
3052 const x80 = (x78 >> 8);3049 const x80: u64 = (x78 >> 8);
3053 const x81 = @as(u8, @truncate((x80 & 0xff)));3050 const x81: u8 = @truncate(x80);
3054 const x82 = (x80 >> 8);3051 const x82: u64 = (x80 >> 8);
3055 const x83 = @as(u8, @truncate((x82 & 0xff)));3052 const x83: u8 = @truncate(x82);
3056 const x84 = (x82 >> 8);3053 const x84: u64 = (x82 >> 8);
3057 const x85 = @as(u8, @truncate((x84 & 0xff)));3054 const x85: u8 = @truncate(x84);
3058 const x86 = (x84 >> 8);3055 const x86: u64 = (x84 >> 8);
3059 const x87 = @as(u8, @truncate((x86 & 0xff)));3056 const x87: u8 = @truncate(x86);
3060 const x88 = (x86 >> 8);3057 const x88: u64 = (x86 >> 8);
3061 const x89 = @as(u8, @truncate((x88 & 0xff)));3058 const x89: u8 = @truncate(x88);
3062 const x90 = @as(u8, @truncate((x88 >> 8)));3059 const x90: u8 = @truncate((x88 >> 8));
3063 out1[0] = x7;3060 out1[0] = x7;
3064 out1[1] = x9;3061 out1[1] = x9;
3065 out1[2] = x11;3062 out1[2] = x11;
...@@ -3125,96 +3122,96 @@ pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {...@@ -3125,96 +3122,96 @@ pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void {
3125pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void {3122pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void {
3126 @setRuntimeSafety(mode == .debug);3123 @setRuntimeSafety(mode == .debug);
31273124
3128 const x1 = (@as(u64, (arg1[47])) << 56);3125 const x1: u64 = (@as(u64, arg1[47]) << 56);
3129 const x2 = (@as(u64, (arg1[46])) << 48);3126 const x2: u64 = (@as(u64, arg1[46]) << 48);
3130 const x3 = (@as(u64, (arg1[45])) << 40);3127 const x3: u64 = (@as(u64, arg1[45]) << 40);
3131 const x4 = (@as(u64, (arg1[44])) << 32);3128 const x4: u64 = (@as(u64, arg1[44]) << 32);
3132 const x5 = (@as(u64, (arg1[43])) << 24);3129 const x5: u64 = (@as(u64, arg1[43]) << 24);
3133 const x6 = (@as(u64, (arg1[42])) << 16);3130 const x6: u64 = (@as(u64, arg1[42]) << 16);
3134 const x7 = (@as(u64, (arg1[41])) << 8);3131 const x7: u64 = (@as(u64, arg1[41]) << 8);
3135 const x8 = (arg1[40]);3132 const x8: u8 = arg1[40];
3136 const x9 = (@as(u64, (arg1[39])) << 56);3133 const x9: u64 = (@as(u64, arg1[39]) << 56);
3137 const x10 = (@as(u64, (arg1[38])) << 48);3134 const x10: u64 = (@as(u64, arg1[38]) << 48);
3138 const x11 = (@as(u64, (arg1[37])) << 40);3135 const x11: u64 = (@as(u64, arg1[37]) << 40);
3139 const x12 = (@as(u64, (arg1[36])) << 32);3136 const x12: u64 = (@as(u64, arg1[36]) << 32);
3140 const x13 = (@as(u64, (arg1[35])) << 24);3137 const x13: u64 = (@as(u64, arg1[35]) << 24);
3141 const x14 = (@as(u64, (arg1[34])) << 16);3138 const x14: u64 = (@as(u64, arg1[34]) << 16);
3142 const x15 = (@as(u64, (arg1[33])) << 8);3139 const x15: u64 = (@as(u64, arg1[33]) << 8);
3143 const x16 = (arg1[32]);3140 const x16: u8 = arg1[32];
3144 const x17 = (@as(u64, (arg1[31])) << 56);3141 const x17: u64 = (@as(u64, arg1[31]) << 56);
3145 const x18 = (@as(u64, (arg1[30])) << 48);3142 const x18: u64 = (@as(u64, arg1[30]) << 48);
3146 const x19 = (@as(u64, (arg1[29])) << 40);3143 const x19: u64 = (@as(u64, arg1[29]) << 40);
3147 const x20 = (@as(u64, (arg1[28])) << 32);3144 const x20: u64 = (@as(u64, arg1[28]) << 32);
3148 const x21 = (@as(u64, (arg1[27])) << 24);3145 const x21: u64 = (@as(u64, arg1[27]) << 24);
3149 const x22 = (@as(u64, (arg1[26])) << 16);3146 const x22: u64 = (@as(u64, arg1[26]) << 16);
3150 const x23 = (@as(u64, (arg1[25])) << 8);3147 const x23: u64 = (@as(u64, arg1[25]) << 8);
3151 const x24 = (arg1[24]);3148 const x24: u8 = arg1[24];
3152 const x25 = (@as(u64, (arg1[23])) << 56);3149 const x25: u64 = (@as(u64, arg1[23]) << 56);
3153 const x26 = (@as(u64, (arg1[22])) << 48);3150 const x26: u64 = (@as(u64, arg1[22]) << 48);
3154 const x27 = (@as(u64, (arg1[21])) << 40);3151 const x27: u64 = (@as(u64, arg1[21]) << 40);
3155 const x28 = (@as(u64, (arg1[20])) << 32);3152 const x28: u64 = (@as(u64, arg1[20]) << 32);
3156 const x29 = (@as(u64, (arg1[19])) << 24);3153 const x29: u64 = (@as(u64, arg1[19]) << 24);
3157 const x30 = (@as(u64, (arg1[18])) << 16);3154 const x30: u64 = (@as(u64, arg1[18]) << 16);
3158 const x31 = (@as(u64, (arg1[17])) << 8);3155 const x31: u64 = (@as(u64, arg1[17]) << 8);
3159 const x32 = (arg1[16]);3156 const x32: u8 = arg1[16];
3160 const x33 = (@as(u64, (arg1[15])) << 56);3157 const x33: u64 = (@as(u64, arg1[15]) << 56);
3161 const x34 = (@as(u64, (arg1[14])) << 48);3158 const x34: u64 = (@as(u64, arg1[14]) << 48);
3162 const x35 = (@as(u64, (arg1[13])) << 40);3159 const x35: u64 = (@as(u64, arg1[13]) << 40);
3163 const x36 = (@as(u64, (arg1[12])) << 32);3160 const x36: u64 = (@as(u64, arg1[12]) << 32);
3164 const x37 = (@as(u64, (arg1[11])) << 24);3161 const x37: u64 = (@as(u64, arg1[11]) << 24);
3165 const x38 = (@as(u64, (arg1[10])) << 16);3162 const x38: u64 = (@as(u64, arg1[10]) << 16);
3166 const x39 = (@as(u64, (arg1[9])) << 8);3163 const x39: u64 = (@as(u64, arg1[9]) << 8);
3167 const x40 = (arg1[8]);3164 const x40: u8 = arg1[8];
3168 const x41 = (@as(u64, (arg1[7])) << 56);3165 const x41: u64 = (@as(u64, arg1[7]) << 56);
3169 const x42 = (@as(u64, (arg1[6])) << 48);3166 const x42: u64 = (@as(u64, arg1[6]) << 48);
3170 const x43 = (@as(u64, (arg1[5])) << 40);3167 const x43: u64 = (@as(u64, arg1[5]) << 40);
3171 const x44 = (@as(u64, (arg1[4])) << 32);3168 const x44: u64 = (@as(u64, arg1[4]) << 32);
3172 const x45 = (@as(u64, (arg1[3])) << 24);3169 const x45: u64 = (@as(u64, arg1[3]) << 24);
3173 const x46 = (@as(u64, (arg1[2])) << 16);3170 const x46: u64 = (@as(u64, arg1[2]) << 16);
3174 const x47 = (@as(u64, (arg1[1])) << 8);3171 const x47: u64 = (@as(u64, arg1[1]) << 8);
3175 const x48 = (arg1[0]);3172 const x48: u8 = arg1[0];
3176 const x49 = (x47 + @as(u64, x48));3173 const x49: u64 = (x47 + x48);
3177 const x50 = (x46 + x49);3174 const x50: u64 = (x46 + x49);
3178 const x51 = (x45 + x50);3175 const x51: u64 = (x45 + x50);
3179 const x52 = (x44 + x51);3176 const x52: u64 = (x44 + x51);
3180 const x53 = (x43 + x52);3177 const x53: u64 = (x43 + x52);
3181 const x54 = (x42 + x53);3178 const x54: u64 = (x42 + x53);
3182 const x55 = (x41 + x54);3179 const x55: u64 = (x41 + x54);
3183 const x56 = (x39 + @as(u64, x40));3180 const x56: u64 = (x39 + x40);
3184 const x57 = (x38 + x56);3181 const x57: u64 = (x38 + x56);
3185 const x58 = (x37 + x57);3182 const x58: u64 = (x37 + x57);
3186 const x59 = (x36 + x58);3183 const x59: u64 = (x36 + x58);
3187 const x60 = (x35 + x59);3184 const x60: u64 = (x35 + x59);
3188 const x61 = (x34 + x60);3185 const x61: u64 = (x34 + x60);
3189 const x62 = (x33 + x61);3186 const x62: u64 = (x33 + x61);
3190 const x63 = (x31 + @as(u64, x32));3187 const x63: u64 = (x31 + x32);
3191 const x64 = (x30 + x63);3188 const x64: u64 = (x30 + x63);
3192 const x65 = (x29 + x64);3189 const x65: u64 = (x29 + x64);
3193 const x66 = (x28 + x65);3190 const x66: u64 = (x28 + x65);
3194 const x67 = (x27 + x66);3191 const x67: u64 = (x27 + x66);
3195 const x68 = (x26 + x67);3192 const x68: u64 = (x26 + x67);
3196 const x69 = (x25 + x68);3193 const x69: u64 = (x25 + x68);
3197 const x70 = (x23 + @as(u64, x24));3194 const x70: u64 = (x23 + x24);
3198 const x71 = (x22 + x70);3195 const x71: u64 = (x22 + x70);
3199 const x72 = (x21 + x71);3196 const x72: u64 = (x21 + x71);
3200 const x73 = (x20 + x72);3197 const x73: u64 = (x20 + x72);
3201 const x74 = (x19 + x73);3198 const x74: u64 = (x19 + x73);
3202 const x75 = (x18 + x74);3199 const x75: u64 = (x18 + x74);
3203 const x76 = (x17 + x75);3200 const x76: u64 = (x17 + x75);
3204 const x77 = (x15 + @as(u64, x16));3201 const x77: u64 = (x15 + x16);
3205 const x78 = (x14 + x77);3202 const x78: u64 = (x14 + x77);
3206 const x79 = (x13 + x78);3203 const x79: u64 = (x13 + x78);
3207 const x80 = (x12 + x79);3204 const x80: u64 = (x12 + x79);
3208 const x81 = (x11 + x80);3205 const x81: u64 = (x11 + x80);
3209 const x82 = (x10 + x81);3206 const x82: u64 = (x10 + x81);
3210 const x83 = (x9 + x82);3207 const x83: u64 = (x9 + x82);
3211 const x84 = (x7 + @as(u64, x8));3208 const x84: u64 = (x7 + x8);
3212 const x85 = (x6 + x84);3209 const x85: u64 = (x6 + x84);
3213 const x86 = (x5 + x85);3210 const x86: u64 = (x5 + x85);
3214 const x87 = (x4 + x86);3211 const x87: u64 = (x4 + x86);
3215 const x88 = (x3 + x87);3212 const x88: u64 = (x3 + x87);
3216 const x89 = (x2 + x88);3213 const x89: u64 = (x2 + x88);
3217 const x90 = (x1 + x89);3214 const x90: u64 = (x1 + x89);
3218 out1[0] = x55;3215 out1[0] = x55;
3219 out1[1] = x62;3216 out1[1] = x62;
3220 out1[2] = x69;3217 out1[2] = x69;
...@@ -3294,73 +3291,75 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3294,73 +3291,75 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3294 var x1: u64 = undefined;3291 var x1: u64 = undefined;
3295 var x2: u1 = undefined;3292 var x2: u1 = undefined;
3296 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);3293 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
3297 const x3 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & 0x1))));3294 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
3298 var x4: u64 = undefined;3295 var x4: u64 = undefined;
3299 var x5: u1 = undefined;3296 var x5: u1 = undefined;
3300 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);3297 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
3301 var x6: u64 = undefined;3298 var x6: u64 = undefined;
3302 cmovznzU64(&x6, x3, arg1, x4);3299 const x6_selection_mask = selectionMaskU64(x3);
3300 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
3303 var x7: u64 = undefined;3301 var x7: u64 = undefined;
3304 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));3302 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
3305 var x8: u64 = undefined;3303 var x8: u64 = undefined;
3306 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));3304 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
3307 var x9: u64 = undefined;3305 var x9: u64 = undefined;
3308 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));3306 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
3309 var x10: u64 = undefined;3307 var x10: u64 = undefined;
3310 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));3308 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
3311 var x11: u64 = undefined;3309 var x11: u64 = undefined;
3312 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));3310 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
3313 var x12: u64 = undefined;3311 var x12: u64 = undefined;
3314 cmovznzU64(&x12, x3, (arg2[5]), (arg3[5]));3312 x12 = arg2[5] ^ ((arg2[5] ^ arg3[5]) & x6_selection_mask);
3315 var x13: u64 = undefined;3313 var x13: u64 = undefined;
3316 cmovznzU64(&x13, x3, (arg2[6]), (arg3[6]));3314 x13 = arg2[6] ^ ((arg2[6] ^ arg3[6]) & x6_selection_mask);
3317 var x14: u64 = undefined;3315 var x14: u64 = undefined;
3318 var x15: u1 = undefined;3316 var x15: u1 = undefined;
3319 addcarryxU64(&x14, &x15, 0x0, 0x1, (~(arg2[0])));3317 addcarryxU64(&x14, &x15, 0x0, 0x1, (~arg2[0]));
3320 var x16: u64 = undefined;3318 var x16: u64 = undefined;
3321 var x17: u1 = undefined;3319 var x17: u1 = undefined;
3322 addcarryxU64(&x16, &x17, x15, 0x0, (~(arg2[1])));3320 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[1]));
3323 var x18: u64 = undefined;3321 var x18: u64 = undefined;
3324 var x19: u1 = undefined;3322 var x19: u1 = undefined;
3325 addcarryxU64(&x18, &x19, x17, 0x0, (~(arg2[2])));3323 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[2]));
3326 var x20: u64 = undefined;3324 var x20: u64 = undefined;
3327 var x21: u1 = undefined;3325 var x21: u1 = undefined;
3328 addcarryxU64(&x20, &x21, x19, 0x0, (~(arg2[3])));3326 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[3]));
3329 var x22: u64 = undefined;3327 var x22: u64 = undefined;
3330 var x23: u1 = undefined;3328 var x23: u1 = undefined;
3331 addcarryxU64(&x22, &x23, x21, 0x0, (~(arg2[4])));3329 addcarryxU64(&x22, &x23, x21, 0x0, (~arg2[4]));
3332 var x24: u64 = undefined;3330 var x24: u64 = undefined;
3333 var x25: u1 = undefined;3331 var x25: u1 = undefined;
3334 addcarryxU64(&x24, &x25, x23, 0x0, (~(arg2[5])));3332 addcarryxU64(&x24, &x25, x23, 0x0, (~arg2[5]));
3335 var x26: u64 = undefined;3333 var x26: u64 = undefined;
3336 var x27: u1 = undefined;3334 var x27: u1 = undefined;
3337 addcarryxU64(&x26, &x27, x25, 0x0, (~(arg2[6])));3335 addcarryxU64(&x26, &x27, x25, 0x0, (~arg2[6]));
3338 var x28: u64 = undefined;3336 var x28: u64 = undefined;
3339 cmovznzU64(&x28, x3, (arg3[0]), x14);3337 const x28_selection_mask = selectionMaskU64(x3);
3338 x28 = arg3[0] ^ ((arg3[0] ^ x14) & x28_selection_mask);
3340 var x29: u64 = undefined;3339 var x29: u64 = undefined;
3341 cmovznzU64(&x29, x3, (arg3[1]), x16);3340 x29 = arg3[1] ^ ((arg3[1] ^ x16) & x28_selection_mask);
3342 var x30: u64 = undefined;3341 var x30: u64 = undefined;
3343 cmovznzU64(&x30, x3, (arg3[2]), x18);3342 x30 = arg3[2] ^ ((arg3[2] ^ x18) & x28_selection_mask);
3344 var x31: u64 = undefined;3343 var x31: u64 = undefined;
3345 cmovznzU64(&x31, x3, (arg3[3]), x20);3344 x31 = arg3[3] ^ ((arg3[3] ^ x20) & x28_selection_mask);
3346 var x32: u64 = undefined;3345 var x32: u64 = undefined;
3347 cmovznzU64(&x32, x3, (arg3[4]), x22);3346 x32 = arg3[4] ^ ((arg3[4] ^ x22) & x28_selection_mask);
3348 var x33: u64 = undefined;3347 var x33: u64 = undefined;
3349 cmovznzU64(&x33, x3, (arg3[5]), x24);3348 x33 = arg3[5] ^ ((arg3[5] ^ x24) & x28_selection_mask);
3350 var x34: u64 = undefined;3349 var x34: u64 = undefined;
3351 cmovznzU64(&x34, x3, (arg3[6]), x26);3350 x34 = arg3[6] ^ ((arg3[6] ^ x26) & x28_selection_mask);
3352 var x35: u64 = undefined;3351 var x35: u64 = undefined;
3353 cmovznzU64(&x35, x3, (arg4[0]), (arg5[0]));3352 x35 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x28_selection_mask);
3354 var x36: u64 = undefined;3353 var x36: u64 = undefined;
3355 cmovznzU64(&x36, x3, (arg4[1]), (arg5[1]));3354 x36 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x28_selection_mask);
3356 var x37: u64 = undefined;3355 var x37: u64 = undefined;
3357 cmovznzU64(&x37, x3, (arg4[2]), (arg5[2]));3356 x37 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x28_selection_mask);
3358 var x38: u64 = undefined;3357 var x38: u64 = undefined;
3359 cmovznzU64(&x38, x3, (arg4[3]), (arg5[3]));3358 x38 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x28_selection_mask);
3360 var x39: u64 = undefined;3359 var x39: u64 = undefined;
3361 cmovznzU64(&x39, x3, (arg4[4]), (arg5[4]));3360 x39 = arg4[4] ^ ((arg4[4] ^ arg5[4]) & x28_selection_mask);
3362 var x40: u64 = undefined;3361 var x40: u64 = undefined;
3363 cmovznzU64(&x40, x3, (arg4[5]), (arg5[5]));3362 x40 = arg4[5] ^ ((arg4[5] ^ arg5[5]) & x28_selection_mask);
3364 var x41: u64 = undefined;3363 var x41: u64 = undefined;
3365 var x42: u1 = undefined;3364 var x42: u1 = undefined;
3366 addcarryxU64(&x41, &x42, 0x0, x35, x35);3365 addcarryxU64(&x41, &x42, 0x0, x35, x35);
...@@ -3399,13 +3398,13 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3399,13 +3398,13 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3399 subborrowxU64(&x63, &x64, x62, x51, 0xffffffffffffffff);3398 subborrowxU64(&x63, &x64, x62, x51, 0xffffffffffffffff);
3400 var x65: u64 = undefined;3399 var x65: u64 = undefined;
3401 var x66: u1 = undefined;3400 var x66: u1 = undefined;
3402 subborrowxU64(&x65, &x66, x64, @as(u64, x52), 0x0);3401 subborrowxU64(&x65, &x66, x64, x52, 0x0);
3403 const x67 = (arg4[5]);3402 const x67: u64 = arg4[5];
3404 const x68 = (arg4[4]);3403 const x68: u64 = arg4[4];
3405 const x69 = (arg4[3]);3404 const x69: u64 = arg4[3];
3406 const x70 = (arg4[2]);3405 const x70: u64 = arg4[2];
3407 const x71 = (arg4[1]);3406 const x71: u64 = arg4[1];
3408 const x72 = (arg4[0]);3407 const x72: u64 = arg4[0];
3409 var x73: u64 = undefined;3408 var x73: u64 = undefined;
3410 var x74: u1 = undefined;3409 var x74: u1 = undefined;
3411 subborrowxU64(&x73, &x74, 0x0, 0x0, x72);3410 subborrowxU64(&x73, &x74, 0x0, 0x0, x72);
...@@ -3425,7 +3424,8 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3425,7 +3424,8 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3425 var x84: u1 = undefined;3424 var x84: u1 = undefined;
3426 subborrowxU64(&x83, &x84, x82, 0x0, x67);3425 subborrowxU64(&x83, &x84, x82, 0x0, x67);
3427 var x85: u64 = undefined;3426 var x85: u64 = undefined;
3428 cmovznzU64(&x85, x84, 0x0, 0xffffffffffffffff);3427 const x85_selection_mask = selectionMaskU64(x84);
3428 x85 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x85_selection_mask);
3429 var x86: u64 = undefined;3429 var x86: u64 = undefined;
3430 var x87: u1 = undefined;3430 var x87: u1 = undefined;
3431 addcarryxU64(&x86, &x87, 0x0, x73, (x85 & 0xecec196accc52973));3431 addcarryxU64(&x86, &x87, 0x0, x73, (x85 & 0xecec196accc52973));
...@@ -3445,32 +3445,34 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3445,32 +3445,34 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3445 var x97: u1 = undefined;3445 var x97: u1 = undefined;
3446 addcarryxU64(&x96, &x97, x95, x83, x85);3446 addcarryxU64(&x96, &x97, x95, x83, x85);
3447 var x98: u64 = undefined;3447 var x98: u64 = undefined;
3448 cmovznzU64(&x98, x3, (arg5[0]), x86);3448 const x98_selection_mask = selectionMaskU64(x3);
3449 x98 = arg5[0] ^ ((arg5[0] ^ x86) & x98_selection_mask);
3449 var x99: u64 = undefined;3450 var x99: u64 = undefined;
3450 cmovznzU64(&x99, x3, (arg5[1]), x88);3451 x99 = arg5[1] ^ ((arg5[1] ^ x88) & x98_selection_mask);
3451 var x100: u64 = undefined;3452 var x100: u64 = undefined;
3452 cmovznzU64(&x100, x3, (arg5[2]), x90);3453 x100 = arg5[2] ^ ((arg5[2] ^ x90) & x98_selection_mask);
3453 var x101: u64 = undefined;3454 var x101: u64 = undefined;
3454 cmovznzU64(&x101, x3, (arg5[3]), x92);3455 x101 = arg5[3] ^ ((arg5[3] ^ x92) & x98_selection_mask);
3455 var x102: u64 = undefined;3456 var x102: u64 = undefined;
3456 cmovznzU64(&x102, x3, (arg5[4]), x94);3457 x102 = arg5[4] ^ ((arg5[4] ^ x94) & x98_selection_mask);
3457 var x103: u64 = undefined;3458 var x103: u64 = undefined;
3458 cmovznzU64(&x103, x3, (arg5[5]), x96);3459 x103 = arg5[5] ^ ((arg5[5] ^ x96) & x98_selection_mask);
3459 const x104 = @as(u1, @truncate((x28 & 0x1)));3460 const x104: u1 = @truncate(x28);
3460 var x105: u64 = undefined;3461 var x105: u64 = undefined;
3461 cmovznzU64(&x105, x104, 0x0, x7);3462 const x105_selection_mask = selectionMaskU64(x104);
3463 x105 = 0x0 ^ ((0x0 ^ x7) & x105_selection_mask);
3462 var x106: u64 = undefined;3464 var x106: u64 = undefined;
3463 cmovznzU64(&x106, x104, 0x0, x8);3465 x106 = 0x0 ^ ((0x0 ^ x8) & x105_selection_mask);
3464 var x107: u64 = undefined;3466 var x107: u64 = undefined;
3465 cmovznzU64(&x107, x104, 0x0, x9);3467 x107 = 0x0 ^ ((0x0 ^ x9) & x105_selection_mask);
3466 var x108: u64 = undefined;3468 var x108: u64 = undefined;
3467 cmovznzU64(&x108, x104, 0x0, x10);3469 x108 = 0x0 ^ ((0x0 ^ x10) & x105_selection_mask);
3468 var x109: u64 = undefined;3470 var x109: u64 = undefined;
3469 cmovznzU64(&x109, x104, 0x0, x11);3471 x109 = 0x0 ^ ((0x0 ^ x11) & x105_selection_mask);
3470 var x110: u64 = undefined;3472 var x110: u64 = undefined;
3471 cmovznzU64(&x110, x104, 0x0, x12);3473 x110 = 0x0 ^ ((0x0 ^ x12) & x105_selection_mask);
3472 var x111: u64 = undefined;3474 var x111: u64 = undefined;
3473 cmovznzU64(&x111, x104, 0x0, x13);3475 x111 = 0x0 ^ ((0x0 ^ x13) & x105_selection_mask);
3474 var x112: u64 = undefined;3476 var x112: u64 = undefined;
3475 var x113: u1 = undefined;3477 var x113: u1 = undefined;
3476 addcarryxU64(&x112, &x113, 0x0, x28, x105);3478 addcarryxU64(&x112, &x113, 0x0, x28, x105);
...@@ -3493,17 +3495,18 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3493,17 +3495,18 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3493 var x125: u1 = undefined;3495 var x125: u1 = undefined;
3494 addcarryxU64(&x124, &x125, x123, x34, x111);3496 addcarryxU64(&x124, &x125, x123, x34, x111);
3495 var x126: u64 = undefined;3497 var x126: u64 = undefined;
3496 cmovznzU64(&x126, x104, 0x0, x35);3498 const x126_selection_mask = selectionMaskU64(x104);
3499 x126 = 0x0 ^ ((0x0 ^ x35) & x126_selection_mask);
3497 var x127: u64 = undefined;3500 var x127: u64 = undefined;
3498 cmovznzU64(&x127, x104, 0x0, x36);3501 x127 = 0x0 ^ ((0x0 ^ x36) & x126_selection_mask);
3499 var x128: u64 = undefined;3502 var x128: u64 = undefined;
3500 cmovznzU64(&x128, x104, 0x0, x37);3503 x128 = 0x0 ^ ((0x0 ^ x37) & x126_selection_mask);
3501 var x129: u64 = undefined;3504 var x129: u64 = undefined;
3502 cmovznzU64(&x129, x104, 0x0, x38);3505 x129 = 0x0 ^ ((0x0 ^ x38) & x126_selection_mask);
3503 var x130: u64 = undefined;3506 var x130: u64 = undefined;
3504 cmovznzU64(&x130, x104, 0x0, x39);3507 x130 = 0x0 ^ ((0x0 ^ x39) & x126_selection_mask);
3505 var x131: u64 = undefined;3508 var x131: u64 = undefined;
3506 cmovznzU64(&x131, x104, 0x0, x40);3509 x131 = 0x0 ^ ((0x0 ^ x40) & x126_selection_mask);
3507 var x132: u64 = undefined;3510 var x132: u64 = undefined;
3508 var x133: u1 = undefined;3511 var x133: u1 = undefined;
3509 addcarryxU64(&x132, &x133, 0x0, x98, x126);3512 addcarryxU64(&x132, &x133, 0x0, x98, x126);
...@@ -3542,41 +3545,43 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[...@@ -3542,41 +3545,43 @@ pub fn divstep(out1: *u64, out2: *[7]u64, out3: *[7]u64, out4: *[6]u64, out5: *[
3542 subborrowxU64(&x154, &x155, x153, x142, 0xffffffffffffffff);3545 subborrowxU64(&x154, &x155, x153, x142, 0xffffffffffffffff);
3543 var x156: u64 = undefined;3546 var x156: u64 = undefined;
3544 var x157: u1 = undefined;3547 var x157: u1 = undefined;
3545 subborrowxU64(&x156, &x157, x155, @as(u64, x143), 0x0);3548 subborrowxU64(&x156, &x157, x155, x143, 0x0);
3546 var x158: u64 = undefined;3549 var x158: u64 = undefined;
3547 var x159: u1 = undefined;3550 var x159: u1 = undefined;
3548 addcarryxU64(&x158, &x159, 0x0, x6, 0x1);3551 addcarryxU64(&x158, &x159, 0x0, x6, 0x1);
3549 const x160 = ((x112 >> 1) | ((x114 << 63) & 0xffffffffffffffff));3552 const x160: u64 = ((x112 >> 1) | ((x114 << 63) & 0xffffffffffffffff));
3550 const x161 = ((x114 >> 1) | ((x116 << 63) & 0xffffffffffffffff));3553 const x161: u64 = ((x114 >> 1) | ((x116 << 63) & 0xffffffffffffffff));
3551 const x162 = ((x116 >> 1) | ((x118 << 63) & 0xffffffffffffffff));3554 const x162: u64 = ((x116 >> 1) | ((x118 << 63) & 0xffffffffffffffff));
3552 const x163 = ((x118 >> 1) | ((x120 << 63) & 0xffffffffffffffff));3555 const x163: u64 = ((x118 >> 1) | ((x120 << 63) & 0xffffffffffffffff));
3553 const x164 = ((x120 >> 1) | ((x122 << 63) & 0xffffffffffffffff));3556 const x164: u64 = ((x120 >> 1) | ((x122 << 63) & 0xffffffffffffffff));
3554 const x165 = ((x122 >> 1) | ((x124 << 63) & 0xffffffffffffffff));3557 const x165: u64 = ((x122 >> 1) | ((x124 << 63) & 0xffffffffffffffff));
3555 const x166 = ((x124 & 0x8000000000000000) | (x124 >> 1));3558 const x166: u64 = ((x124 & 0x8000000000000000) | (x124 >> 1));
3556 var x167: u64 = undefined;3559 var x167: u64 = undefined;
3557 cmovznzU64(&x167, x66, x53, x41);3560 const x167_selection_mask = selectionMaskU64(x66);
3561 x167 = x53 ^ ((x53 ^ x41) & x167_selection_mask);
3558 var x168: u64 = undefined;3562 var x168: u64 = undefined;
3559 cmovznzU64(&x168, x66, x55, x43);3563 x168 = x55 ^ ((x55 ^ x43) & x167_selection_mask);
3560 var x169: u64 = undefined;3564 var x169: u64 = undefined;
3561 cmovznzU64(&x169, x66, x57, x45);3565 x169 = x57 ^ ((x57 ^ x45) & x167_selection_mask);
3562 var x170: u64 = undefined;3566 var x170: u64 = undefined;
3563 cmovznzU64(&x170, x66, x59, x47);3567 x170 = x59 ^ ((x59 ^ x47) & x167_selection_mask);
3564 var x171: u64 = undefined;3568 var x171: u64 = undefined;
3565 cmovznzU64(&x171, x66, x61, x49);3569 x171 = x61 ^ ((x61 ^ x49) & x167_selection_mask);
3566 var x172: u64 = undefined;3570 var x172: u64 = undefined;
3567 cmovznzU64(&x172, x66, x63, x51);3571 x172 = x63 ^ ((x63 ^ x51) & x167_selection_mask);
3568 var x173: u64 = undefined;3572 var x173: u64 = undefined;
3569 cmovznzU64(&x173, x157, x144, x132);3573 const x173_selection_mask = selectionMaskU64(x157);
3574 x173 = x144 ^ ((x144 ^ x132) & x173_selection_mask);
3570 var x174: u64 = undefined;3575 var x174: u64 = undefined;
3571 cmovznzU64(&x174, x157, x146, x134);3576 x174 = x146 ^ ((x146 ^ x134) & x173_selection_mask);
3572 var x175: u64 = undefined;3577 var x175: u64 = undefined;
3573 cmovznzU64(&x175, x157, x148, x136);3578 x175 = x148 ^ ((x148 ^ x136) & x173_selection_mask);
3574 var x176: u64 = undefined;3579 var x176: u64 = undefined;
3575 cmovznzU64(&x176, x157, x150, x138);3580 x176 = x150 ^ ((x150 ^ x138) & x173_selection_mask);
3576 var x177: u64 = undefined;3581 var x177: u64 = undefined;
3577 cmovznzU64(&x177, x157, x152, x140);3582 x177 = x152 ^ ((x152 ^ x140) & x173_selection_mask);
3578 var x178: u64 = undefined;3583 var x178: u64 = undefined;
3579 cmovznzU64(&x178, x157, x154, x142);3584 x178 = x154 ^ ((x154 ^ x142) & x173_selection_mask);
3580 out1.* = x158;3585 out1.* = x158;
3581 out2[0] = x7;3586 out2[0] = x7;
3582 out2[1] = x8;3587 out2[1] = x8;
lib/std/crypto/pcurves/secp256k1/secp256k1_64.zig+367-362
...@@ -17,7 +17,6 @@...@@ -17,7 +17,6 @@
17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in
18// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^25618// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256
1919
20const std = @import("std");
21const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
2221
23// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;
28// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
29pub const NonMontgomeryDomainFieldElement = [4]u64;28pub const NonMontgomeryDomainFieldElement = [4]u64;
3029
31/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
32///
33/// Postconditions:
34/// out1 = (arg1 + arg2 + arg3) mod 2^64
35/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
36///
37/// Input Bounds:
38/// arg1: [0x0 ~> 0x1]
39/// arg2: [0x0 ~> 0xffffffffffffffff]
40/// arg3: [0x0 ~> 0xffffffffffffffff]
41/// Output Bounds:
42/// out1: [0x0 ~> 0xffffffffffffffff]
43/// out2: [0x0 ~> 0x1]
44fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
45 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
46 out1.* = @truncate(x);33
47 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
48}38}
4939
50/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
51///
52/// Postconditions:
53/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
54/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
55///
56/// Input Bounds:
57/// arg1: [0x0 ~> 0x1]
58/// arg2: [0x0 ~> 0xffffffffffffffff]
59/// arg3: [0x0 ~> 0xffffffffffffffff]
60/// Output Bounds:
61/// out1: [0x0 ~> 0xffffffffffffffff]
62/// out2: [0x0 ~> 0x1]
63fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
64 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
65 out1.* = @truncate(x);43
66 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
67}48}
6849
69/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
70///
71/// Postconditions:
72/// out1 = (arg1 * arg2) mod 2^64
73/// out2 = ⌊arg1 * arg2 / 2^64⌋
74///
75/// Input Bounds:
76/// arg1: [0x0 ~> 0xffffffffffffffff]
77/// arg2: [0x0 ~> 0xffffffffffffffff]
78/// Output Bounds:
79/// out1: [0x0 ~> 0xffffffffffffffff]
80/// out2: [0x0 ~> 0xffffffffffffffff]
81fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
82 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
8353
84 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
85 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
86 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
87}57}
8858
89/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
90///60fn selectionMaskU64(arg1: u1) u64 {
91/// Postconditions:61 @setRuntimeSafety(mode == .debug);
92/// out1 = (if arg1 = 0 then arg2 else arg3)62
93///63 const value: u64 = 0 -% @as(u64, arg1);
94/// Input Bounds:64 if (@inComptime()) return value;
95/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
96/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
97/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
98/// Output Bounds:68 }
99/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
100fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
101 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
10291
103 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
104 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
105}94}
10695
107/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -116,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -116,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
116pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
117 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
118107
119 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
120 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
121 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
122 const x4 = (arg1[0]);111 const x4: u64 = arg1[0];
123 var x5: u64 = undefined;112 var x5: u64 = undefined;
124 var x6: u64 = undefined;113 var x6: u64 = undefined;
125 mulxU64(&x5, &x6, x4, (arg2[3]));114 mulxU64(&x5, &x6, x4, arg2[3]);
126 var x7: u64 = undefined;115 var x7: u64 = undefined;
127 var x8: u64 = undefined;116 var x8: u64 = undefined;
128 mulxU64(&x7, &x8, x4, (arg2[2]));117 mulxU64(&x7, &x8, x4, arg2[2]);
129 var x9: u64 = undefined;118 var x9: u64 = undefined;
130 var x10: u64 = undefined;119 var x10: u64 = undefined;
131 mulxU64(&x9, &x10, x4, (arg2[1]));120 mulxU64(&x9, &x10, x4, arg2[1]);
132 var x11: u64 = undefined;121 var x11: u64 = undefined;
133 var x12: u64 = undefined;122 var x12: u64 = undefined;
134 mulxU64(&x11, &x12, x4, (arg2[0]));123 mulxU64(&x11, &x12, x4, arg2[0]);
135 var x13: u64 = undefined;124 var x13: u64 = undefined;
136 var x14: u1 = undefined;125 var x14: u1 = undefined;
137 addcarryxU64(&x13, &x14, 0x0, x12, x9);126 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -141,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -141,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
141 var x17: u64 = undefined;130 var x17: u64 = undefined;
142 var x18: u1 = undefined;131 var x18: u1 = undefined;
143 addcarryxU64(&x17, &x18, x16, x8, x5);132 addcarryxU64(&x17, &x18, x16, x8, x5);
144 const x19 = (@as(u64, x18) + x6);133 const x19: u64 = (x18 + x6);
145 var x20: u64 = undefined;134 var x20: u64 = undefined;
146 var x21: u64 = undefined;135 var x21: u64 = undefined;
147 mulxU64(&x20, &x21, x11, 0xd838091dd2253531);136 mulxU64(&x20, &x21, x11, 0xd838091dd2253531);
...@@ -166,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -166,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
166 var x34: u64 = undefined;155 var x34: u64 = undefined;
167 var x35: u1 = undefined;156 var x35: u1 = undefined;
168 addcarryxU64(&x34, &x35, x33, x25, x22);157 addcarryxU64(&x34, &x35, x33, x25, x22);
169 const x36 = (@as(u64, x35) + x23);158 const x36: u64 = (x35 + x23);
170 var x37: u64 = undefined;159 var x37: u64 = undefined;
171 var x38: u1 = undefined;160 var x38: u1 = undefined;
172 addcarryxU64(&x37, &x38, 0x0, x11, x28);161 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -184,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -184,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
184 addcarryxU64(&x45, &x46, x44, x19, x36);173 addcarryxU64(&x45, &x46, x44, x19, x36);
185 var x47: u64 = undefined;174 var x47: u64 = undefined;
186 var x48: u64 = undefined;175 var x48: u64 = undefined;
187 mulxU64(&x47, &x48, x1, (arg2[3]));176 mulxU64(&x47, &x48, x1, arg2[3]);
188 var x49: u64 = undefined;177 var x49: u64 = undefined;
189 var x50: u64 = undefined;178 var x50: u64 = undefined;
190 mulxU64(&x49, &x50, x1, (arg2[2]));179 mulxU64(&x49, &x50, x1, arg2[2]);
191 var x51: u64 = undefined;180 var x51: u64 = undefined;
192 var x52: u64 = undefined;181 var x52: u64 = undefined;
193 mulxU64(&x51, &x52, x1, (arg2[1]));182 mulxU64(&x51, &x52, x1, arg2[1]);
194 var x53: u64 = undefined;183 var x53: u64 = undefined;
195 var x54: u64 = undefined;184 var x54: u64 = undefined;
196 mulxU64(&x53, &x54, x1, (arg2[0]));185 mulxU64(&x53, &x54, x1, arg2[0]);
197 var x55: u64 = undefined;186 var x55: u64 = undefined;
198 var x56: u1 = undefined;187 var x56: u1 = undefined;
199 addcarryxU64(&x55, &x56, 0x0, x54, x51);188 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -203,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -203,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
203 var x59: u64 = undefined;192 var x59: u64 = undefined;
204 var x60: u1 = undefined;193 var x60: u1 = undefined;
205 addcarryxU64(&x59, &x60, x58, x50, x47);194 addcarryxU64(&x59, &x60, x58, x50, x47);
206 const x61 = (@as(u64, x60) + x48);195 const x61: u64 = (x60 + x48);
207 var x62: u64 = undefined;196 var x62: u64 = undefined;
208 var x63: u1 = undefined;197 var x63: u1 = undefined;
209 addcarryxU64(&x62, &x63, 0x0, x39, x53);198 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -218,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -218,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
218 addcarryxU64(&x68, &x69, x67, x45, x59);207 addcarryxU64(&x68, &x69, x67, x45, x59);
219 var x70: u64 = undefined;208 var x70: u64 = undefined;
220 var x71: u1 = undefined;209 var x71: u1 = undefined;
221 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);210 addcarryxU64(&x70, &x71, x69, x46, x61);
222 var x72: u64 = undefined;211 var x72: u64 = undefined;
223 var x73: u64 = undefined;212 var x73: u64 = undefined;
224 mulxU64(&x72, &x73, x62, 0xd838091dd2253531);213 mulxU64(&x72, &x73, x62, 0xd838091dd2253531);
...@@ -243,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -243,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
243 var x86: u64 = undefined;232 var x86: u64 = undefined;
244 var x87: u1 = undefined;233 var x87: u1 = undefined;
245 addcarryxU64(&x86, &x87, x85, x77, x74);234 addcarryxU64(&x86, &x87, x85, x77, x74);
246 const x88 = (@as(u64, x87) + x75);235 const x88: u64 = (x87 + x75);
247 var x89: u64 = undefined;236 var x89: u64 = undefined;
248 var x90: u1 = undefined;237 var x90: u1 = undefined;
249 addcarryxU64(&x89, &x90, 0x0, x62, x80);238 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -259,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -259,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
259 var x97: u64 = undefined;248 var x97: u64 = undefined;
260 var x98: u1 = undefined;249 var x98: u1 = undefined;
261 addcarryxU64(&x97, &x98, x96, x70, x88);250 addcarryxU64(&x97, &x98, x96, x70, x88);
262 const x99 = (@as(u64, x98) + @as(u64, x71));251 const x99: u64 = (@as(u64, x98) + x71);
263 var x100: u64 = undefined;252 var x100: u64 = undefined;
264 var x101: u64 = undefined;253 var x101: u64 = undefined;
265 mulxU64(&x100, &x101, x2, (arg2[3]));254 mulxU64(&x100, &x101, x2, arg2[3]);
266 var x102: u64 = undefined;255 var x102: u64 = undefined;
267 var x103: u64 = undefined;256 var x103: u64 = undefined;
268 mulxU64(&x102, &x103, x2, (arg2[2]));257 mulxU64(&x102, &x103, x2, arg2[2]);
269 var x104: u64 = undefined;258 var x104: u64 = undefined;
270 var x105: u64 = undefined;259 var x105: u64 = undefined;
271 mulxU64(&x104, &x105, x2, (arg2[1]));260 mulxU64(&x104, &x105, x2, arg2[1]);
272 var x106: u64 = undefined;261 var x106: u64 = undefined;
273 var x107: u64 = undefined;262 var x107: u64 = undefined;
274 mulxU64(&x106, &x107, x2, (arg2[0]));263 mulxU64(&x106, &x107, x2, arg2[0]);
275 var x108: u64 = undefined;264 var x108: u64 = undefined;
276 var x109: u1 = undefined;265 var x109: u1 = undefined;
277 addcarryxU64(&x108, &x109, 0x0, x107, x104);266 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -281,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -281,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
281 var x112: u64 = undefined;270 var x112: u64 = undefined;
282 var x113: u1 = undefined;271 var x113: u1 = undefined;
283 addcarryxU64(&x112, &x113, x111, x103, x100);272 addcarryxU64(&x112, &x113, x111, x103, x100);
284 const x114 = (@as(u64, x113) + x101);273 const x114: u64 = (x113 + x101);
285 var x115: u64 = undefined;274 var x115: u64 = undefined;
286 var x116: u1 = undefined;275 var x116: u1 = undefined;
287 addcarryxU64(&x115, &x116, 0x0, x91, x106);276 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -321,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -321,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
321 var x139: u64 = undefined;310 var x139: u64 = undefined;
322 var x140: u1 = undefined;311 var x140: u1 = undefined;
323 addcarryxU64(&x139, &x140, x138, x130, x127);312 addcarryxU64(&x139, &x140, x138, x130, x127);
324 const x141 = (@as(u64, x140) + x128);313 const x141: u64 = (x140 + x128);
325 var x142: u64 = undefined;314 var x142: u64 = undefined;
326 var x143: u1 = undefined;315 var x143: u1 = undefined;
327 addcarryxU64(&x142, &x143, 0x0, x115, x133);316 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -337,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -337,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
337 var x150: u64 = undefined;326 var x150: u64 = undefined;
338 var x151: u1 = undefined;327 var x151: u1 = undefined;
339 addcarryxU64(&x150, &x151, x149, x123, x141);328 addcarryxU64(&x150, &x151, x149, x123, x141);
340 const x152 = (@as(u64, x151) + @as(u64, x124));329 const x152: u64 = (@as(u64, x151) + x124);
341 var x153: u64 = undefined;330 var x153: u64 = undefined;
342 var x154: u64 = undefined;331 var x154: u64 = undefined;
343 mulxU64(&x153, &x154, x3, (arg2[3]));332 mulxU64(&x153, &x154, x3, arg2[3]);
344 var x155: u64 = undefined;333 var x155: u64 = undefined;
345 var x156: u64 = undefined;334 var x156: u64 = undefined;
346 mulxU64(&x155, &x156, x3, (arg2[2]));335 mulxU64(&x155, &x156, x3, arg2[2]);
347 var x157: u64 = undefined;336 var x157: u64 = undefined;
348 var x158: u64 = undefined;337 var x158: u64 = undefined;
349 mulxU64(&x157, &x158, x3, (arg2[1]));338 mulxU64(&x157, &x158, x3, arg2[1]);
350 var x159: u64 = undefined;339 var x159: u64 = undefined;
351 var x160: u64 = undefined;340 var x160: u64 = undefined;
352 mulxU64(&x159, &x160, x3, (arg2[0]));341 mulxU64(&x159, &x160, x3, arg2[0]);
353 var x161: u64 = undefined;342 var x161: u64 = undefined;
354 var x162: u1 = undefined;343 var x162: u1 = undefined;
355 addcarryxU64(&x161, &x162, 0x0, x160, x157);344 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -359,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -359,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
359 var x165: u64 = undefined;348 var x165: u64 = undefined;
360 var x166: u1 = undefined;349 var x166: u1 = undefined;
361 addcarryxU64(&x165, &x166, x164, x156, x153);350 addcarryxU64(&x165, &x166, x164, x156, x153);
362 const x167 = (@as(u64, x166) + x154);351 const x167: u64 = (x166 + x154);
363 var x168: u64 = undefined;352 var x168: u64 = undefined;
364 var x169: u1 = undefined;353 var x169: u1 = undefined;
365 addcarryxU64(&x168, &x169, 0x0, x144, x159);354 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -399,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -399,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
399 var x192: u64 = undefined;388 var x192: u64 = undefined;
400 var x193: u1 = undefined;389 var x193: u1 = undefined;
401 addcarryxU64(&x192, &x193, x191, x183, x180);390 addcarryxU64(&x192, &x193, x191, x183, x180);
402 const x194 = (@as(u64, x193) + x181);391 const x194: u64 = (x193 + x181);
403 var x195: u64 = undefined;392 var x195: u64 = undefined;
404 var x196: u1 = undefined;393 var x196: u1 = undefined;
405 addcarryxU64(&x195, &x196, 0x0, x168, x186);394 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -415,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -415,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
415 var x203: u64 = undefined;404 var x203: u64 = undefined;
416 var x204: u1 = undefined;405 var x204: u1 = undefined;
417 addcarryxU64(&x203, &x204, x202, x176, x194);406 addcarryxU64(&x203, &x204, x202, x176, x194);
418 const x205 = (@as(u64, x204) + @as(u64, x177));407 const x205: u64 = (@as(u64, x204) + x177);
419 var x206: u64 = undefined;408 var x206: u64 = undefined;
420 var x207: u1 = undefined;409 var x207: u1 = undefined;
421 subborrowxU64(&x206, &x207, 0x0, x197, 0xfffffffefffffc2f);410 subborrowxU64(&x206, &x207, 0x0, x197, 0xfffffffefffffc2f);
...@@ -432,13 +421,14 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -432,13 +421,14 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
432 var x215: u1 = undefined;421 var x215: u1 = undefined;
433 subborrowxU64(&x214, &x215, x213, x205, 0x0);422 subborrowxU64(&x214, &x215, x213, x205, 0x0);
434 var x216: u64 = undefined;423 var x216: u64 = undefined;
435 cmovznzU64(&x216, x215, x206, x197);424 const x216_selection_mask = selectionMaskU64(x215);
425 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
436 var x217: u64 = undefined;426 var x217: u64 = undefined;
437 cmovznzU64(&x217, x215, x208, x199);427 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
438 var x218: u64 = undefined;428 var x218: u64 = undefined;
439 cmovznzU64(&x218, x215, x210, x201);429 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
440 var x219: u64 = undefined;430 var x219: u64 = undefined;
441 cmovznzU64(&x219, x215, x212, x203);431 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
442 out1[0] = x216;432 out1[0] = x216;
443 out1[1] = x217;433 out1[1] = x217;
444 out1[2] = x218;434 out1[2] = x218;
...@@ -456,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -456,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
456pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {446pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
457 @setRuntimeSafety(mode == .debug);447 @setRuntimeSafety(mode == .debug);
458448
459 const x1 = (arg1[1]);449 const x1: u64 = arg1[1];
460 const x2 = (arg1[2]);450 const x2: u64 = arg1[2];
461 const x3 = (arg1[3]);451 const x3: u64 = arg1[3];
462 const x4 = (arg1[0]);452 const x4: u64 = arg1[0];
463 var x5: u64 = undefined;453 var x5: u64 = undefined;
464 var x6: u64 = undefined;454 var x6: u64 = undefined;
465 mulxU64(&x5, &x6, x4, (arg1[3]));455 mulxU64(&x5, &x6, x4, arg1[3]);
466 var x7: u64 = undefined;456 var x7: u64 = undefined;
467 var x8: u64 = undefined;457 var x8: u64 = undefined;
468 mulxU64(&x7, &x8, x4, (arg1[2]));458 mulxU64(&x7, &x8, x4, arg1[2]);
469 var x9: u64 = undefined;459 var x9: u64 = undefined;
470 var x10: u64 = undefined;460 var x10: u64 = undefined;
471 mulxU64(&x9, &x10, x4, (arg1[1]));461 mulxU64(&x9, &x10, x4, arg1[1]);
472 var x11: u64 = undefined;462 var x11: u64 = undefined;
473 var x12: u64 = undefined;463 var x12: u64 = undefined;
474 mulxU64(&x11, &x12, x4, (arg1[0]));464 mulxU64(&x11, &x12, x4, arg1[0]);
475 var x13: u64 = undefined;465 var x13: u64 = undefined;
476 var x14: u1 = undefined;466 var x14: u1 = undefined;
477 addcarryxU64(&x13, &x14, 0x0, x12, x9);467 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -481,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -481,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
481 var x17: u64 = undefined;471 var x17: u64 = undefined;
482 var x18: u1 = undefined;472 var x18: u1 = undefined;
483 addcarryxU64(&x17, &x18, x16, x8, x5);473 addcarryxU64(&x17, &x18, x16, x8, x5);
484 const x19 = (@as(u64, x18) + x6);474 const x19: u64 = (x18 + x6);
485 var x20: u64 = undefined;475 var x20: u64 = undefined;
486 var x21: u64 = undefined;476 var x21: u64 = undefined;
487 mulxU64(&x20, &x21, x11, 0xd838091dd2253531);477 mulxU64(&x20, &x21, x11, 0xd838091dd2253531);
...@@ -506,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -506,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
506 var x34: u64 = undefined;496 var x34: u64 = undefined;
507 var x35: u1 = undefined;497 var x35: u1 = undefined;
508 addcarryxU64(&x34, &x35, x33, x25, x22);498 addcarryxU64(&x34, &x35, x33, x25, x22);
509 const x36 = (@as(u64, x35) + x23);499 const x36: u64 = (x35 + x23);
510 var x37: u64 = undefined;500 var x37: u64 = undefined;
511 var x38: u1 = undefined;501 var x38: u1 = undefined;
512 addcarryxU64(&x37, &x38, 0x0, x11, x28);502 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -524,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -524,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
524 addcarryxU64(&x45, &x46, x44, x19, x36);514 addcarryxU64(&x45, &x46, x44, x19, x36);
525 var x47: u64 = undefined;515 var x47: u64 = undefined;
526 var x48: u64 = undefined;516 var x48: u64 = undefined;
527 mulxU64(&x47, &x48, x1, (arg1[3]));517 mulxU64(&x47, &x48, x1, arg1[3]);
528 var x49: u64 = undefined;518 var x49: u64 = undefined;
529 var x50: u64 = undefined;519 var x50: u64 = undefined;
530 mulxU64(&x49, &x50, x1, (arg1[2]));520 mulxU64(&x49, &x50, x1, arg1[2]);
531 var x51: u64 = undefined;521 var x51: u64 = undefined;
532 var x52: u64 = undefined;522 var x52: u64 = undefined;
533 mulxU64(&x51, &x52, x1, (arg1[1]));523 mulxU64(&x51, &x52, x1, arg1[1]);
534 var x53: u64 = undefined;524 var x53: u64 = undefined;
535 var x54: u64 = undefined;525 var x54: u64 = undefined;
536 mulxU64(&x53, &x54, x1, (arg1[0]));526 mulxU64(&x53, &x54, x1, arg1[0]);
537 var x55: u64 = undefined;527 var x55: u64 = undefined;
538 var x56: u1 = undefined;528 var x56: u1 = undefined;
539 addcarryxU64(&x55, &x56, 0x0, x54, x51);529 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -543,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -543,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
543 var x59: u64 = undefined;533 var x59: u64 = undefined;
544 var x60: u1 = undefined;534 var x60: u1 = undefined;
545 addcarryxU64(&x59, &x60, x58, x50, x47);535 addcarryxU64(&x59, &x60, x58, x50, x47);
546 const x61 = (@as(u64, x60) + x48);536 const x61: u64 = (x60 + x48);
547 var x62: u64 = undefined;537 var x62: u64 = undefined;
548 var x63: u1 = undefined;538 var x63: u1 = undefined;
549 addcarryxU64(&x62, &x63, 0x0, x39, x53);539 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -558,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -558,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
558 addcarryxU64(&x68, &x69, x67, x45, x59);548 addcarryxU64(&x68, &x69, x67, x45, x59);
559 var x70: u64 = undefined;549 var x70: u64 = undefined;
560 var x71: u1 = undefined;550 var x71: u1 = undefined;
561 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);551 addcarryxU64(&x70, &x71, x69, x46, x61);
562 var x72: u64 = undefined;552 var x72: u64 = undefined;
563 var x73: u64 = undefined;553 var x73: u64 = undefined;
564 mulxU64(&x72, &x73, x62, 0xd838091dd2253531);554 mulxU64(&x72, &x73, x62, 0xd838091dd2253531);
...@@ -583,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -583,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
583 var x86: u64 = undefined;573 var x86: u64 = undefined;
584 var x87: u1 = undefined;574 var x87: u1 = undefined;
585 addcarryxU64(&x86, &x87, x85, x77, x74);575 addcarryxU64(&x86, &x87, x85, x77, x74);
586 const x88 = (@as(u64, x87) + x75);576 const x88: u64 = (x87 + x75);
587 var x89: u64 = undefined;577 var x89: u64 = undefined;
588 var x90: u1 = undefined;578 var x90: u1 = undefined;
589 addcarryxU64(&x89, &x90, 0x0, x62, x80);579 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -599,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -599,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
599 var x97: u64 = undefined;589 var x97: u64 = undefined;
600 var x98: u1 = undefined;590 var x98: u1 = undefined;
601 addcarryxU64(&x97, &x98, x96, x70, x88);591 addcarryxU64(&x97, &x98, x96, x70, x88);
602 const x99 = (@as(u64, x98) + @as(u64, x71));592 const x99: u64 = (@as(u64, x98) + x71);
603 var x100: u64 = undefined;593 var x100: u64 = undefined;
604 var x101: u64 = undefined;594 var x101: u64 = undefined;
605 mulxU64(&x100, &x101, x2, (arg1[3]));595 mulxU64(&x100, &x101, x2, arg1[3]);
606 var x102: u64 = undefined;596 var x102: u64 = undefined;
607 var x103: u64 = undefined;597 var x103: u64 = undefined;
608 mulxU64(&x102, &x103, x2, (arg1[2]));598 mulxU64(&x102, &x103, x2, arg1[2]);
609 var x104: u64 = undefined;599 var x104: u64 = undefined;
610 var x105: u64 = undefined;600 var x105: u64 = undefined;
611 mulxU64(&x104, &x105, x2, (arg1[1]));601 mulxU64(&x104, &x105, x2, arg1[1]);
612 var x106: u64 = undefined;602 var x106: u64 = undefined;
613 var x107: u64 = undefined;603 var x107: u64 = undefined;
614 mulxU64(&x106, &x107, x2, (arg1[0]));604 mulxU64(&x106, &x107, x2, arg1[0]);
615 var x108: u64 = undefined;605 var x108: u64 = undefined;
616 var x109: u1 = undefined;606 var x109: u1 = undefined;
617 addcarryxU64(&x108, &x109, 0x0, x107, x104);607 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -621,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -621,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
621 var x112: u64 = undefined;611 var x112: u64 = undefined;
622 var x113: u1 = undefined;612 var x113: u1 = undefined;
623 addcarryxU64(&x112, &x113, x111, x103, x100);613 addcarryxU64(&x112, &x113, x111, x103, x100);
624 const x114 = (@as(u64, x113) + x101);614 const x114: u64 = (x113 + x101);
625 var x115: u64 = undefined;615 var x115: u64 = undefined;
626 var x116: u1 = undefined;616 var x116: u1 = undefined;
627 addcarryxU64(&x115, &x116, 0x0, x91, x106);617 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -661,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -661,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
661 var x139: u64 = undefined;651 var x139: u64 = undefined;
662 var x140: u1 = undefined;652 var x140: u1 = undefined;
663 addcarryxU64(&x139, &x140, x138, x130, x127);653 addcarryxU64(&x139, &x140, x138, x130, x127);
664 const x141 = (@as(u64, x140) + x128);654 const x141: u64 = (x140 + x128);
665 var x142: u64 = undefined;655 var x142: u64 = undefined;
666 var x143: u1 = undefined;656 var x143: u1 = undefined;
667 addcarryxU64(&x142, &x143, 0x0, x115, x133);657 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -677,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -677,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
677 var x150: u64 = undefined;667 var x150: u64 = undefined;
678 var x151: u1 = undefined;668 var x151: u1 = undefined;
679 addcarryxU64(&x150, &x151, x149, x123, x141);669 addcarryxU64(&x150, &x151, x149, x123, x141);
680 const x152 = (@as(u64, x151) + @as(u64, x124));670 const x152: u64 = (@as(u64, x151) + x124);
681 var x153: u64 = undefined;671 var x153: u64 = undefined;
682 var x154: u64 = undefined;672 var x154: u64 = undefined;
683 mulxU64(&x153, &x154, x3, (arg1[3]));673 mulxU64(&x153, &x154, x3, arg1[3]);
684 var x155: u64 = undefined;674 var x155: u64 = undefined;
685 var x156: u64 = undefined;675 var x156: u64 = undefined;
686 mulxU64(&x155, &x156, x3, (arg1[2]));676 mulxU64(&x155, &x156, x3, arg1[2]);
687 var x157: u64 = undefined;677 var x157: u64 = undefined;
688 var x158: u64 = undefined;678 var x158: u64 = undefined;
689 mulxU64(&x157, &x158, x3, (arg1[1]));679 mulxU64(&x157, &x158, x3, arg1[1]);
690 var x159: u64 = undefined;680 var x159: u64 = undefined;
691 var x160: u64 = undefined;681 var x160: u64 = undefined;
692 mulxU64(&x159, &x160, x3, (arg1[0]));682 mulxU64(&x159, &x160, x3, arg1[0]);
693 var x161: u64 = undefined;683 var x161: u64 = undefined;
694 var x162: u1 = undefined;684 var x162: u1 = undefined;
695 addcarryxU64(&x161, &x162, 0x0, x160, x157);685 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -699,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -699,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
699 var x165: u64 = undefined;689 var x165: u64 = undefined;
700 var x166: u1 = undefined;690 var x166: u1 = undefined;
701 addcarryxU64(&x165, &x166, x164, x156, x153);691 addcarryxU64(&x165, &x166, x164, x156, x153);
702 const x167 = (@as(u64, x166) + x154);692 const x167: u64 = (x166 + x154);
703 var x168: u64 = undefined;693 var x168: u64 = undefined;
704 var x169: u1 = undefined;694 var x169: u1 = undefined;
705 addcarryxU64(&x168, &x169, 0x0, x144, x159);695 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -739,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -739,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
739 var x192: u64 = undefined;729 var x192: u64 = undefined;
740 var x193: u1 = undefined;730 var x193: u1 = undefined;
741 addcarryxU64(&x192, &x193, x191, x183, x180);731 addcarryxU64(&x192, &x193, x191, x183, x180);
742 const x194 = (@as(u64, x193) + x181);732 const x194: u64 = (x193 + x181);
743 var x195: u64 = undefined;733 var x195: u64 = undefined;
744 var x196: u1 = undefined;734 var x196: u1 = undefined;
745 addcarryxU64(&x195, &x196, 0x0, x168, x186);735 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -755,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -755,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
755 var x203: u64 = undefined;745 var x203: u64 = undefined;
756 var x204: u1 = undefined;746 var x204: u1 = undefined;
757 addcarryxU64(&x203, &x204, x202, x176, x194);747 addcarryxU64(&x203, &x204, x202, x176, x194);
758 const x205 = (@as(u64, x204) + @as(u64, x177));748 const x205: u64 = (@as(u64, x204) + x177);
759 var x206: u64 = undefined;749 var x206: u64 = undefined;
760 var x207: u1 = undefined;750 var x207: u1 = undefined;
761 subborrowxU64(&x206, &x207, 0x0, x197, 0xfffffffefffffc2f);751 subborrowxU64(&x206, &x207, 0x0, x197, 0xfffffffefffffc2f);
...@@ -772,13 +762,14 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -772,13 +762,14 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
772 var x215: u1 = undefined;762 var x215: u1 = undefined;
773 subborrowxU64(&x214, &x215, x213, x205, 0x0);763 subborrowxU64(&x214, &x215, x213, x205, 0x0);
774 var x216: u64 = undefined;764 var x216: u64 = undefined;
775 cmovznzU64(&x216, x215, x206, x197);765 const x216_selection_mask = selectionMaskU64(x215);
766 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
776 var x217: u64 = undefined;767 var x217: u64 = undefined;
777 cmovznzU64(&x217, x215, x208, x199);768 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
778 var x218: u64 = undefined;769 var x218: u64 = undefined;
779 cmovznzU64(&x218, x215, x210, x201);770 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
780 var x219: u64 = undefined;771 var x219: u64 = undefined;
781 cmovznzU64(&x219, x215, x212, x203);772 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
782 out1[0] = x216;773 out1[0] = x216;
783 out1[1] = x217;774 out1[1] = x217;
784 out1[2] = x218;775 out1[2] = x218;
...@@ -799,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -799,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
799790
800 var x1: u64 = undefined;791 var x1: u64 = undefined;
801 var x2: u1 = undefined;792 var x2: u1 = undefined;
802 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));793 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
803 var x3: u64 = undefined;794 var x3: u64 = undefined;
804 var x4: u1 = undefined;795 var x4: u1 = undefined;
805 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));796 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
806 var x5: u64 = undefined;797 var x5: u64 = undefined;
807 var x6: u1 = undefined;798 var x6: u1 = undefined;
808 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));799 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
809 var x7: u64 = undefined;800 var x7: u64 = undefined;
810 var x8: u1 = undefined;801 var x8: u1 = undefined;
811 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));802 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
812 var x9: u64 = undefined;803 var x9: u64 = undefined;
813 var x10: u1 = undefined;804 var x10: u1 = undefined;
814 subborrowxU64(&x9, &x10, 0x0, x1, 0xfffffffefffffc2f);805 subborrowxU64(&x9, &x10, 0x0, x1, 0xfffffffefffffc2f);
...@@ -823,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -823,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
823 subborrowxU64(&x15, &x16, x14, x7, 0xffffffffffffffff);814 subborrowxU64(&x15, &x16, x14, x7, 0xffffffffffffffff);
824 var x17: u64 = undefined;815 var x17: u64 = undefined;
825 var x18: u1 = undefined;816 var x18: u1 = undefined;
826 subborrowxU64(&x17, &x18, x16, @as(u64, x8), 0x0);817 subborrowxU64(&x17, &x18, x16, x8, 0x0);
827 var x19: u64 = undefined;818 var x19: u64 = undefined;
828 cmovznzU64(&x19, x18, x9, x1);819 const x19_selection_mask = selectionMaskU64(x18);
820 x19 = x9 ^ ((x9 ^ x1) & x19_selection_mask);
829 var x20: u64 = undefined;821 var x20: u64 = undefined;
830 cmovznzU64(&x20, x18, x11, x3);822 x20 = x11 ^ ((x11 ^ x3) & x19_selection_mask);
831 var x21: u64 = undefined;823 var x21: u64 = undefined;
832 cmovznzU64(&x21, x18, x13, x5);824 x21 = x13 ^ ((x13 ^ x5) & x19_selection_mask);
833 var x22: u64 = undefined;825 var x22: u64 = undefined;
834 cmovznzU64(&x22, x18, x15, x7);826 x22 = x15 ^ ((x15 ^ x7) & x19_selection_mask);
835 out1[0] = x19;827 out1[0] = x19;
836 out1[1] = x20;828 out1[1] = x20;
837 out1[2] = x21;829 out1[2] = x21;
...@@ -852,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -852,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
852844
853 var x1: u64 = undefined;845 var x1: u64 = undefined;
854 var x2: u1 = undefined;846 var x2: u1 = undefined;
855 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));847 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
856 var x3: u64 = undefined;848 var x3: u64 = undefined;
857 var x4: u1 = undefined;849 var x4: u1 = undefined;
858 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));850 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
859 var x5: u64 = undefined;851 var x5: u64 = undefined;
860 var x6: u1 = undefined;852 var x6: u1 = undefined;
861 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));853 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
862 var x7: u64 = undefined;854 var x7: u64 = undefined;
863 var x8: u1 = undefined;855 var x8: u1 = undefined;
864 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));856 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
865 var x9: u64 = undefined;857 var x9: u64 = undefined;
866 cmovznzU64(&x9, x8, 0x0, 0xffffffffffffffff);858 const x9_selection_mask = selectionMaskU64(x8);
859 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
867 var x10: u64 = undefined;860 var x10: u64 = undefined;
868 var x11: u1 = undefined;861 var x11: u1 = undefined;
869 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xfffffffefffffc2f));862 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xfffffffefffffc2f));
...@@ -895,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -895,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
895888
896 var x1: u64 = undefined;889 var x1: u64 = undefined;
897 var x2: u1 = undefined;890 var x2: u1 = undefined;
898 subborrowxU64(&x1, &x2, 0x0, 0x0, (arg1[0]));891 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
899 var x3: u64 = undefined;892 var x3: u64 = undefined;
900 var x4: u1 = undefined;893 var x4: u1 = undefined;
901 subborrowxU64(&x3, &x4, x2, 0x0, (arg1[1]));894 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
902 var x5: u64 = undefined;895 var x5: u64 = undefined;
903 var x6: u1 = undefined;896 var x6: u1 = undefined;
904 subborrowxU64(&x5, &x6, x4, 0x0, (arg1[2]));897 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
905 var x7: u64 = undefined;898 var x7: u64 = undefined;
906 var x8: u1 = undefined;899 var x8: u1 = undefined;
907 subborrowxU64(&x7, &x8, x6, 0x0, (arg1[3]));900 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
908 var x9: u64 = undefined;901 var x9: u64 = undefined;
909 cmovznzU64(&x9, x8, 0x0, 0xffffffffffffffff);902 const x9_selection_mask = selectionMaskU64(x8);
903 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
910 var x10: u64 = undefined;904 var x10: u64 = undefined;
911 var x11: u1 = undefined;905 var x11: u1 = undefined;
912 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xfffffffefffffc2f));906 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xfffffffefffffc2f));
...@@ -936,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -936,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
936pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {930pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
937 @setRuntimeSafety(mode == .debug);931 @setRuntimeSafety(mode == .debug);
938932
939 const x1 = (arg1[0]);933 const x1: u64 = arg1[0];
940 var x2: u64 = undefined;934 var x2: u64 = undefined;
941 var x3: u64 = undefined;935 var x3: u64 = undefined;
942 mulxU64(&x2, &x3, x1, 0xd838091dd2253531);936 mulxU64(&x2, &x3, x1, 0xd838091dd2253531);
...@@ -975,10 +969,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -975,10 +969,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
975 addcarryxU64(&x24, &x25, x23, 0x0, x16);969 addcarryxU64(&x24, &x25, x23, 0x0, x16);
976 var x26: u64 = undefined;970 var x26: u64 = undefined;
977 var x27: u1 = undefined;971 var x27: u1 = undefined;
978 addcarryxU64(&x26, &x27, x25, 0x0, (@as(u64, x17) + x5));972 addcarryxU64(&x26, &x27, x25, 0x0, (x17 + x5));
979 var x28: u64 = undefined;973 var x28: u64 = undefined;
980 var x29: u1 = undefined;974 var x29: u1 = undefined;
981 addcarryxU64(&x28, &x29, 0x0, x20, (arg1[1]));975 addcarryxU64(&x28, &x29, 0x0, x20, arg1[1]);
982 var x30: u64 = undefined;976 var x30: u64 = undefined;
983 var x31: u1 = undefined;977 var x31: u1 = undefined;
984 addcarryxU64(&x30, &x31, x29, x22, 0x0);978 addcarryxU64(&x30, &x31, x29, x22, 0x0);
...@@ -1026,10 +1020,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1026,10 +1020,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1026 addcarryxU64(&x58, &x59, x57, x34, x50);1020 addcarryxU64(&x58, &x59, x57, x34, x50);
1027 var x60: u64 = undefined;1021 var x60: u64 = undefined;
1028 var x61: u1 = undefined;1022 var x61: u1 = undefined;
1029 addcarryxU64(&x60, &x61, x59, (@as(u64, x35) + @as(u64, x27)), (@as(u64, x51) + x39));1023 addcarryxU64(&x60, &x61, x59, (@as(u64, x35) + x27), (x51 + x39));
1030 var x62: u64 = undefined;1024 var x62: u64 = undefined;
1031 var x63: u1 = undefined;1025 var x63: u1 = undefined;
1032 addcarryxU64(&x62, &x63, 0x0, x54, (arg1[2]));1026 addcarryxU64(&x62, &x63, 0x0, x54, arg1[2]);
1033 var x64: u64 = undefined;1027 var x64: u64 = undefined;
1034 var x65: u1 = undefined;1028 var x65: u1 = undefined;
1035 addcarryxU64(&x64, &x65, x63, x56, 0x0);1029 addcarryxU64(&x64, &x65, x63, x56, 0x0);
...@@ -1077,10 +1071,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1077,10 +1071,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1077 addcarryxU64(&x92, &x93, x91, x68, x84);1071 addcarryxU64(&x92, &x93, x91, x68, x84);
1078 var x94: u64 = undefined;1072 var x94: u64 = undefined;
1079 var x95: u1 = undefined;1073 var x95: u1 = undefined;
1080 addcarryxU64(&x94, &x95, x93, (@as(u64, x69) + @as(u64, x61)), (@as(u64, x85) + x73));1074 addcarryxU64(&x94, &x95, x93, (@as(u64, x69) + x61), (x85 + x73));
1081 var x96: u64 = undefined;1075 var x96: u64 = undefined;
1082 var x97: u1 = undefined;1076 var x97: u1 = undefined;
1083 addcarryxU64(&x96, &x97, 0x0, x88, (arg1[3]));1077 addcarryxU64(&x96, &x97, 0x0, x88, arg1[3]);
1084 var x98: u64 = undefined;1078 var x98: u64 = undefined;
1085 var x99: u1 = undefined;1079 var x99: u1 = undefined;
1086 addcarryxU64(&x98, &x99, x97, x90, 0x0);1080 addcarryxU64(&x98, &x99, x97, x90, 0x0);
...@@ -1128,7 +1122,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1128,7 +1122,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1128 addcarryxU64(&x126, &x127, x125, x102, x118);1122 addcarryxU64(&x126, &x127, x125, x102, x118);
1129 var x128: u64 = undefined;1123 var x128: u64 = undefined;
1130 var x129: u1 = undefined;1124 var x129: u1 = undefined;
1131 addcarryxU64(&x128, &x129, x127, (@as(u64, x103) + @as(u64, x95)), (@as(u64, x119) + x107));1125 addcarryxU64(&x128, &x129, x127, (@as(u64, x103) + x95), (x119 + x107));
1132 var x130: u64 = undefined;1126 var x130: u64 = undefined;
1133 var x131: u1 = undefined;1127 var x131: u1 = undefined;
1134 subborrowxU64(&x130, &x131, 0x0, x122, 0xfffffffefffffc2f);1128 subborrowxU64(&x130, &x131, 0x0, x122, 0xfffffffefffffc2f);
...@@ -1143,15 +1137,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1143,15 +1137,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1143 subborrowxU64(&x136, &x137, x135, x128, 0xffffffffffffffff);1137 subborrowxU64(&x136, &x137, x135, x128, 0xffffffffffffffff);
1144 var x138: u64 = undefined;1138 var x138: u64 = undefined;
1145 var x139: u1 = undefined;1139 var x139: u1 = undefined;
1146 subborrowxU64(&x138, &x139, x137, @as(u64, x129), 0x0);1140 subborrowxU64(&x138, &x139, x137, x129, 0x0);
1147 var x140: u64 = undefined;1141 var x140: u64 = undefined;
1148 cmovznzU64(&x140, x139, x130, x122);1142 const x140_selection_mask = selectionMaskU64(x139);
1143 x140 = x130 ^ ((x130 ^ x122) & x140_selection_mask);
1149 var x141: u64 = undefined;1144 var x141: u64 = undefined;
1150 cmovznzU64(&x141, x139, x132, x124);1145 x141 = x132 ^ ((x132 ^ x124) & x140_selection_mask);
1151 var x142: u64 = undefined;1146 var x142: u64 = undefined;
1152 cmovznzU64(&x142, x139, x134, x126);1147 x142 = x134 ^ ((x134 ^ x126) & x140_selection_mask);
1153 var x143: u64 = undefined;1148 var x143: u64 = undefined;
1154 cmovznzU64(&x143, x139, x136, x128);1149 x143 = x136 ^ ((x136 ^ x128) & x140_selection_mask);
1155 out1[0] = x140;1150 out1[0] = x140;
1156 out1[1] = x141;1151 out1[1] = x141;
1157 out1[2] = x142;1152 out1[2] = x142;
...@@ -1169,10 +1164,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1169,10 +1164,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1169pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {1164pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
1170 @setRuntimeSafety(mode == .debug);1165 @setRuntimeSafety(mode == .debug);
11711166
1172 const x1 = (arg1[1]);1167 const x1: u64 = arg1[1];
1173 const x2 = (arg1[2]);1168 const x2: u64 = arg1[2];
1174 const x3 = (arg1[3]);1169 const x3: u64 = arg1[3];
1175 const x4 = (arg1[0]);1170 const x4: u64 = arg1[0];
1176 var x5: u64 = undefined;1171 var x5: u64 = undefined;
1177 var x6: u64 = undefined;1172 var x6: u64 = undefined;
1178 mulxU64(&x5, &x6, x4, 0x7a2000e90a1);1173 mulxU64(&x5, &x6, x4, 0x7a2000e90a1);
...@@ -1211,13 +1206,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1211,13 +1206,13 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1211 addcarryxU64(&x27, &x28, x26, x7, x19);1206 addcarryxU64(&x27, &x28, x26, x7, x19);
1212 var x29: u64 = undefined;1207 var x29: u64 = undefined;
1213 var x30: u1 = undefined;1208 var x30: u1 = undefined;
1214 addcarryxU64(&x29, &x30, x28, @as(u64, x8), x21);1209 addcarryxU64(&x29, &x30, x28, x8, x21);
1215 var x31: u64 = undefined;1210 var x31: u64 = undefined;
1216 var x32: u1 = undefined;1211 var x32: u1 = undefined;
1217 addcarryxU64(&x31, &x32, x30, 0x0, x23);1212 addcarryxU64(&x31, &x32, x30, 0x0, x23);
1218 var x33: u64 = undefined;1213 var x33: u64 = undefined;
1219 var x34: u1 = undefined;1214 var x34: u1 = undefined;
1220 addcarryxU64(&x33, &x34, x32, 0x0, (@as(u64, x24) + x12));1215 addcarryxU64(&x33, &x34, x32, 0x0, (x24 + x12));
1221 var x35: u64 = undefined;1216 var x35: u64 = undefined;
1222 var x36: u64 = undefined;1217 var x36: u64 = undefined;
1223 mulxU64(&x35, &x36, x1, 0x7a2000e90a1);1218 mulxU64(&x35, &x36, x1, 0x7a2000e90a1);
...@@ -1232,7 +1227,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1232,7 +1227,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1232 addcarryxU64(&x41, &x42, x40, x29, x37);1227 addcarryxU64(&x41, &x42, x40, x29, x37);
1233 var x43: u64 = undefined;1228 var x43: u64 = undefined;
1234 var x44: u1 = undefined;1229 var x44: u1 = undefined;
1235 addcarryxU64(&x43, &x44, x42, x31, @as(u64, x38));1230 addcarryxU64(&x43, &x44, x42, x31, x38);
1236 var x45: u64 = undefined;1231 var x45: u64 = undefined;
1237 var x46: u1 = undefined;1232 var x46: u1 = undefined;
1238 addcarryxU64(&x45, &x46, x44, x33, 0x0);1233 addcarryxU64(&x45, &x46, x44, x33, 0x0);
...@@ -1274,7 +1269,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1274,7 +1269,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1274 addcarryxU64(&x69, &x70, x68, x45, x61);1269 addcarryxU64(&x69, &x70, x68, x45, x61);
1275 var x71: u64 = undefined;1270 var x71: u64 = undefined;
1276 var x72: u1 = undefined;1271 var x72: u1 = undefined;
1277 addcarryxU64(&x71, &x72, x70, (@as(u64, x46) + @as(u64, x34)), (@as(u64, x62) + x50));1272 addcarryxU64(&x71, &x72, x70, (@as(u64, x46) + x34), (x62 + x50));
1278 var x73: u64 = undefined;1273 var x73: u64 = undefined;
1279 var x74: u64 = undefined;1274 var x74: u64 = undefined;
1280 mulxU64(&x73, &x74, x2, 0x7a2000e90a1);1275 mulxU64(&x73, &x74, x2, 0x7a2000e90a1);
...@@ -1289,7 +1284,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1289,7 +1284,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1289 addcarryxU64(&x79, &x80, x78, x67, x75);1284 addcarryxU64(&x79, &x80, x78, x67, x75);
1290 var x81: u64 = undefined;1285 var x81: u64 = undefined;
1291 var x82: u1 = undefined;1286 var x82: u1 = undefined;
1292 addcarryxU64(&x81, &x82, x80, x69, @as(u64, x76));1287 addcarryxU64(&x81, &x82, x80, x69, x76);
1293 var x83: u64 = undefined;1288 var x83: u64 = undefined;
1294 var x84: u1 = undefined;1289 var x84: u1 = undefined;
1295 addcarryxU64(&x83, &x84, x82, x71, 0x0);1290 addcarryxU64(&x83, &x84, x82, x71, 0x0);
...@@ -1331,7 +1326,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1331,7 +1326,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1331 addcarryxU64(&x107, &x108, x106, x83, x99);1326 addcarryxU64(&x107, &x108, x106, x83, x99);
1332 var x109: u64 = undefined;1327 var x109: u64 = undefined;
1333 var x110: u1 = undefined;1328 var x110: u1 = undefined;
1334 addcarryxU64(&x109, &x110, x108, (@as(u64, x84) + @as(u64, x72)), (@as(u64, x100) + x88));1329 addcarryxU64(&x109, &x110, x108, (@as(u64, x84) + x72), (x100 + x88));
1335 var x111: u64 = undefined;1330 var x111: u64 = undefined;
1336 var x112: u64 = undefined;1331 var x112: u64 = undefined;
1337 mulxU64(&x111, &x112, x3, 0x7a2000e90a1);1332 mulxU64(&x111, &x112, x3, 0x7a2000e90a1);
...@@ -1346,7 +1341,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1346,7 +1341,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1346 addcarryxU64(&x117, &x118, x116, x105, x113);1341 addcarryxU64(&x117, &x118, x116, x105, x113);
1347 var x119: u64 = undefined;1342 var x119: u64 = undefined;
1348 var x120: u1 = undefined;1343 var x120: u1 = undefined;
1349 addcarryxU64(&x119, &x120, x118, x107, @as(u64, x114));1344 addcarryxU64(&x119, &x120, x118, x107, x114);
1350 var x121: u64 = undefined;1345 var x121: u64 = undefined;
1351 var x122: u1 = undefined;1346 var x122: u1 = undefined;
1352 addcarryxU64(&x121, &x122, x120, x109, 0x0);1347 addcarryxU64(&x121, &x122, x120, x109, 0x0);
...@@ -1388,7 +1383,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1388,7 +1383,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1388 addcarryxU64(&x145, &x146, x144, x121, x137);1383 addcarryxU64(&x145, &x146, x144, x121, x137);
1389 var x147: u64 = undefined;1384 var x147: u64 = undefined;
1390 var x148: u1 = undefined;1385 var x148: u1 = undefined;
1391 addcarryxU64(&x147, &x148, x146, (@as(u64, x122) + @as(u64, x110)), (@as(u64, x138) + x126));1386 addcarryxU64(&x147, &x148, x146, (@as(u64, x122) + x110), (x138 + x126));
1392 var x149: u64 = undefined;1387 var x149: u64 = undefined;
1393 var x150: u1 = undefined;1388 var x150: u1 = undefined;
1394 subborrowxU64(&x149, &x150, 0x0, x141, 0xfffffffefffffc2f);1389 subborrowxU64(&x149, &x150, 0x0, x141, 0xfffffffefffffc2f);
...@@ -1403,15 +1398,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1403,15 +1398,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1403 subborrowxU64(&x155, &x156, x154, x147, 0xffffffffffffffff);1398 subborrowxU64(&x155, &x156, x154, x147, 0xffffffffffffffff);
1404 var x157: u64 = undefined;1399 var x157: u64 = undefined;
1405 var x158: u1 = undefined;1400 var x158: u1 = undefined;
1406 subborrowxU64(&x157, &x158, x156, @as(u64, x148), 0x0);1401 subborrowxU64(&x157, &x158, x156, x148, 0x0);
1407 var x159: u64 = undefined;1402 var x159: u64 = undefined;
1408 cmovznzU64(&x159, x158, x149, x141);1403 const x159_selection_mask = selectionMaskU64(x158);
1404 x159 = x149 ^ ((x149 ^ x141) & x159_selection_mask);
1409 var x160: u64 = undefined;1405 var x160: u64 = undefined;
1410 cmovznzU64(&x160, x158, x151, x143);1406 x160 = x151 ^ ((x151 ^ x143) & x159_selection_mask);
1411 var x161: u64 = undefined;1407 var x161: u64 = undefined;
1412 cmovznzU64(&x161, x158, x153, x145);1408 x161 = x153 ^ ((x153 ^ x145) & x159_selection_mask);
1413 var x162: u64 = undefined;1409 var x162: u64 = undefined;
1414 cmovznzU64(&x162, x158, x155, x147);1410 x162 = x155 ^ ((x155 ^ x147) & x159_selection_mask);
1415 out1[0] = x159;1411 out1[0] = x159;
1416 out1[1] = x160;1412 out1[1] = x160;
1417 out1[2] = x161;1413 out1[2] = x161;
...@@ -1432,7 +1428,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1432,7 +1428,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1432pub fn nonzero(out1: *u64, arg1: [4]u64) void {1428pub fn nonzero(out1: *u64, arg1: [4]u64) void {
1433 @setRuntimeSafety(mode == .debug);1429 @setRuntimeSafety(mode == .debug);
14341430
1435 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3]))));1431 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | arg1[3])));
1436 out1.* = x1;1432 out1.* = x1;
1437}1433}
14381434
...@@ -1451,13 +1447,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1451,13 +1447,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1451 @setRuntimeSafety(mode == .debug);1447 @setRuntimeSafety(mode == .debug);
14521448
1453 var x1: u64 = undefined;1449 var x1: u64 = undefined;
1454 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));1450 const x1_selection_mask = selectionMaskU64(arg1);
1451 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
1455 var x2: u64 = undefined;1452 var x2: u64 = undefined;
1456 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));1453 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
1457 var x3: u64 = undefined;1454 var x3: u64 = undefined;
1458 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));1455 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
1459 var x4: u64 = undefined;1456 var x4: u64 = undefined;
1460 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));1457 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
1461 out1[0] = x1;1458 out1[0] = x1;
1462 out1[1] = x2;1459 out1[1] = x2;
1463 out1[2] = x3;1460 out1[2] = x3;
...@@ -1478,66 +1475,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1478,66 +1475,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1478pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {1475pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1479 @setRuntimeSafety(mode == .debug);1476 @setRuntimeSafety(mode == .debug);
14801477
1481 const x1 = (arg1[3]);1478 const x1: u64 = arg1[3];
1482 const x2 = (arg1[2]);1479 const x2: u64 = arg1[2];
1483 const x3 = (arg1[1]);1480 const x3: u64 = arg1[1];
1484 const x4 = (arg1[0]);1481 const x4: u64 = arg1[0];
1485 const x5 = @as(u8, @truncate((x4 & 0xff)));1482 const x5: u8 = @truncate(x4);
1486 const x6 = (x4 >> 8);1483 const x6: u64 = (x4 >> 8);
1487 const x7 = @as(u8, @truncate((x6 & 0xff)));1484 const x7: u8 = @truncate(x6);
1488 const x8 = (x6 >> 8);1485 const x8: u64 = (x6 >> 8);
1489 const x9 = @as(u8, @truncate((x8 & 0xff)));1486 const x9: u8 = @truncate(x8);
1490 const x10 = (x8 >> 8);1487 const x10: u64 = (x8 >> 8);
1491 const x11 = @as(u8, @truncate((x10 & 0xff)));1488 const x11: u8 = @truncate(x10);
1492 const x12 = (x10 >> 8);1489 const x12: u64 = (x10 >> 8);
1493 const x13 = @as(u8, @truncate((x12 & 0xff)));1490 const x13: u8 = @truncate(x12);
1494 const x14 = (x12 >> 8);1491 const x14: u64 = (x12 >> 8);
1495 const x15 = @as(u8, @truncate((x14 & 0xff)));1492 const x15: u8 = @truncate(x14);
1496 const x16 = (x14 >> 8);1493 const x16: u64 = (x14 >> 8);
1497 const x17 = @as(u8, @truncate((x16 & 0xff)));1494 const x17: u8 = @truncate(x16);
1498 const x18 = @as(u8, @truncate((x16 >> 8)));1495 const x18: u8 = @truncate((x16 >> 8));
1499 const x19 = @as(u8, @truncate((x3 & 0xff)));1496 const x19: u8 = @truncate(x3);
1500 const x20 = (x3 >> 8);1497 const x20: u64 = (x3 >> 8);
1501 const x21 = @as(u8, @truncate((x20 & 0xff)));1498 const x21: u8 = @truncate(x20);
1502 const x22 = (x20 >> 8);1499 const x22: u64 = (x20 >> 8);
1503 const x23 = @as(u8, @truncate((x22 & 0xff)));1500 const x23: u8 = @truncate(x22);
1504 const x24 = (x22 >> 8);1501 const x24: u64 = (x22 >> 8);
1505 const x25 = @as(u8, @truncate((x24 & 0xff)));1502 const x25: u8 = @truncate(x24);
1506 const x26 = (x24 >> 8);1503 const x26: u64 = (x24 >> 8);
1507 const x27 = @as(u8, @truncate((x26 & 0xff)));1504 const x27: u8 = @truncate(x26);
1508 const x28 = (x26 >> 8);1505 const x28: u64 = (x26 >> 8);
1509 const x29 = @as(u8, @truncate((x28 & 0xff)));1506 const x29: u8 = @truncate(x28);
1510 const x30 = (x28 >> 8);1507 const x30: u64 = (x28 >> 8);
1511 const x31 = @as(u8, @truncate((x30 & 0xff)));1508 const x31: u8 = @truncate(x30);
1512 const x32 = @as(u8, @truncate((x30 >> 8)));1509 const x32: u8 = @truncate((x30 >> 8));
1513 const x33 = @as(u8, @truncate((x2 & 0xff)));1510 const x33: u8 = @truncate(x2);
1514 const x34 = (x2 >> 8);1511 const x34: u64 = (x2 >> 8);
1515 const x35 = @as(u8, @truncate((x34 & 0xff)));1512 const x35: u8 = @truncate(x34);
1516 const x36 = (x34 >> 8);1513 const x36: u64 = (x34 >> 8);
1517 const x37 = @as(u8, @truncate((x36 & 0xff)));1514 const x37: u8 = @truncate(x36);
1518 const x38 = (x36 >> 8);1515 const x38: u64 = (x36 >> 8);
1519 const x39 = @as(u8, @truncate((x38 & 0xff)));1516 const x39: u8 = @truncate(x38);
1520 const x40 = (x38 >> 8);1517 const x40: u64 = (x38 >> 8);
1521 const x41 = @as(u8, @truncate((x40 & 0xff)));1518 const x41: u8 = @truncate(x40);
1522 const x42 = (x40 >> 8);1519 const x42: u64 = (x40 >> 8);
1523 const x43 = @as(u8, @truncate((x42 & 0xff)));1520 const x43: u8 = @truncate(x42);
1524 const x44 = (x42 >> 8);1521 const x44: u64 = (x42 >> 8);
1525 const x45 = @as(u8, @truncate((x44 & 0xff)));1522 const x45: u8 = @truncate(x44);
1526 const x46 = @as(u8, @truncate((x44 >> 8)));1523 const x46: u8 = @truncate((x44 >> 8));
1527 const x47 = @as(u8, @truncate((x1 & 0xff)));1524 const x47: u8 = @truncate(x1);
1528 const x48 = (x1 >> 8);1525 const x48: u64 = (x1 >> 8);
1529 const x49 = @as(u8, @truncate((x48 & 0xff)));1526 const x49: u8 = @truncate(x48);
1530 const x50 = (x48 >> 8);1527 const x50: u64 = (x48 >> 8);
1531 const x51 = @as(u8, @truncate((x50 & 0xff)));1528 const x51: u8 = @truncate(x50);
1532 const x52 = (x50 >> 8);1529 const x52: u64 = (x50 >> 8);
1533 const x53 = @as(u8, @truncate((x52 & 0xff)));1530 const x53: u8 = @truncate(x52);
1534 const x54 = (x52 >> 8);1531 const x54: u64 = (x52 >> 8);
1535 const x55 = @as(u8, @truncate((x54 & 0xff)));1532 const x55: u8 = @truncate(x54);
1536 const x56 = (x54 >> 8);1533 const x56: u64 = (x54 >> 8);
1537 const x57 = @as(u8, @truncate((x56 & 0xff)));1534 const x57: u8 = @truncate(x56);
1538 const x58 = (x56 >> 8);1535 const x58: u64 = (x56 >> 8);
1539 const x59 = @as(u8, @truncate((x58 & 0xff)));1536 const x59: u8 = @truncate(x58);
1540 const x60 = @as(u8, @truncate((x58 >> 8)));1537 const x60: u8 = @truncate((x58 >> 8));
1541 out1[0] = x5;1538 out1[0] = x5;
1542 out1[1] = x7;1539 out1[1] = x7;
1543 out1[2] = x9;1540 out1[2] = x9;
...@@ -1587,66 +1584,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {...@@ -1587,66 +1584,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1587pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {1584pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {
1588 @setRuntimeSafety(mode == .debug);1585 @setRuntimeSafety(mode == .debug);
15891586
1590 const x1 = (@as(u64, (arg1[31])) << 56);1587 const x1: u64 = (@as(u64, arg1[31]) << 56);
1591 const x2 = (@as(u64, (arg1[30])) << 48);1588 const x2: u64 = (@as(u64, arg1[30]) << 48);
1592 const x3 = (@as(u64, (arg1[29])) << 40);1589 const x3: u64 = (@as(u64, arg1[29]) << 40);
1593 const x4 = (@as(u64, (arg1[28])) << 32);1590 const x4: u64 = (@as(u64, arg1[28]) << 32);
1594 const x5 = (@as(u64, (arg1[27])) << 24);1591 const x5: u64 = (@as(u64, arg1[27]) << 24);
1595 const x6 = (@as(u64, (arg1[26])) << 16);1592 const x6: u64 = (@as(u64, arg1[26]) << 16);
1596 const x7 = (@as(u64, (arg1[25])) << 8);1593 const x7: u64 = (@as(u64, arg1[25]) << 8);
1597 const x8 = (arg1[24]);1594 const x8: u8 = arg1[24];
1598 const x9 = (@as(u64, (arg1[23])) << 56);1595 const x9: u64 = (@as(u64, arg1[23]) << 56);
1599 const x10 = (@as(u64, (arg1[22])) << 48);1596 const x10: u64 = (@as(u64, arg1[22]) << 48);
1600 const x11 = (@as(u64, (arg1[21])) << 40);1597 const x11: u64 = (@as(u64, arg1[21]) << 40);
1601 const x12 = (@as(u64, (arg1[20])) << 32);1598 const x12: u64 = (@as(u64, arg1[20]) << 32);
1602 const x13 = (@as(u64, (arg1[19])) << 24);1599 const x13: u64 = (@as(u64, arg1[19]) << 24);
1603 const x14 = (@as(u64, (arg1[18])) << 16);1600 const x14: u64 = (@as(u64, arg1[18]) << 16);
1604 const x15 = (@as(u64, (arg1[17])) << 8);1601 const x15: u64 = (@as(u64, arg1[17]) << 8);
1605 const x16 = (arg1[16]);1602 const x16: u8 = arg1[16];
1606 const x17 = (@as(u64, (arg1[15])) << 56);1603 const x17: u64 = (@as(u64, arg1[15]) << 56);
1607 const x18 = (@as(u64, (arg1[14])) << 48);1604 const x18: u64 = (@as(u64, arg1[14]) << 48);
1608 const x19 = (@as(u64, (arg1[13])) << 40);1605 const x19: u64 = (@as(u64, arg1[13]) << 40);
1609 const x20 = (@as(u64, (arg1[12])) << 32);1606 const x20: u64 = (@as(u64, arg1[12]) << 32);
1610 const x21 = (@as(u64, (arg1[11])) << 24);1607 const x21: u64 = (@as(u64, arg1[11]) << 24);
1611 const x22 = (@as(u64, (arg1[10])) << 16);1608 const x22: u64 = (@as(u64, arg1[10]) << 16);
1612 const x23 = (@as(u64, (arg1[9])) << 8);1609 const x23: u64 = (@as(u64, arg1[9]) << 8);
1613 const x24 = (arg1[8]);1610 const x24: u8 = arg1[8];
1614 const x25 = (@as(u64, (arg1[7])) << 56);1611 const x25: u64 = (@as(u64, arg1[7]) << 56);
1615 const x26 = (@as(u64, (arg1[6])) << 48);1612 const x26: u64 = (@as(u64, arg1[6]) << 48);
1616 const x27 = (@as(u64, (arg1[5])) << 40);1613 const x27: u64 = (@as(u64, arg1[5]) << 40);
1617 const x28 = (@as(u64, (arg1[4])) << 32);1614 const x28: u64 = (@as(u64, arg1[4]) << 32);
1618 const x29 = (@as(u64, (arg1[3])) << 24);1615 const x29: u64 = (@as(u64, arg1[3]) << 24);
1619 const x30 = (@as(u64, (arg1[2])) << 16);1616 const x30: u64 = (@as(u64, arg1[2]) << 16);
1620 const x31 = (@as(u64, (arg1[1])) << 8);1617 const x31: u64 = (@as(u64, arg1[1]) << 8);
1621 const x32 = (arg1[0]);1618 const x32: u8 = arg1[0];
1622 const x33 = (x31 + @as(u64, x32));1619 const x33: u64 = (x31 + x32);
1623 const x34 = (x30 + x33);1620 const x34: u64 = (x30 + x33);
1624 const x35 = (x29 + x34);1621 const x35: u64 = (x29 + x34);
1625 const x36 = (x28 + x35);1622 const x36: u64 = (x28 + x35);
1626 const x37 = (x27 + x36);1623 const x37: u64 = (x27 + x36);
1627 const x38 = (x26 + x37);1624 const x38: u64 = (x26 + x37);
1628 const x39 = (x25 + x38);1625 const x39: u64 = (x25 + x38);
1629 const x40 = (x23 + @as(u64, x24));1626 const x40: u64 = (x23 + x24);
1630 const x41 = (x22 + x40);1627 const x41: u64 = (x22 + x40);
1631 const x42 = (x21 + x41);1628 const x42: u64 = (x21 + x41);
1632 const x43 = (x20 + x42);1629 const x43: u64 = (x20 + x42);
1633 const x44 = (x19 + x43);1630 const x44: u64 = (x19 + x43);
1634 const x45 = (x18 + x44);1631 const x45: u64 = (x18 + x44);
1635 const x46 = (x17 + x45);1632 const x46: u64 = (x17 + x45);
1636 const x47 = (x15 + @as(u64, x16));1633 const x47: u64 = (x15 + x16);
1637 const x48 = (x14 + x47);1634 const x48: u64 = (x14 + x47);
1638 const x49 = (x13 + x48);1635 const x49: u64 = (x13 + x48);
1639 const x50 = (x12 + x49);1636 const x50: u64 = (x12 + x49);
1640 const x51 = (x11 + x50);1637 const x51: u64 = (x11 + x50);
1641 const x52 = (x10 + x51);1638 const x52: u64 = (x10 + x51);
1642 const x53 = (x9 + x52);1639 const x53: u64 = (x9 + x52);
1643 const x54 = (x7 + @as(u64, x8));1640 const x54: u64 = (x7 + x8);
1644 const x55 = (x6 + x54);1641 const x55: u64 = (x6 + x54);
1645 const x56 = (x5 + x55);1642 const x56: u64 = (x5 + x55);
1646 const x57 = (x4 + x56);1643 const x57: u64 = (x4 + x56);
1647 const x58 = (x3 + x57);1644 const x58: u64 = (x3 + x57);
1648 const x59 = (x2 + x58);1645 const x59: u64 = (x2 + x58);
1649 const x60 = (x1 + x59);1646 const x60: u64 = (x1 + x59);
1650 out1[0] = x39;1647 out1[0] = x39;
1651 out1[1] = x46;1648 out1[1] = x46;
1652 out1[2] = x53;1649 out1[2] = x53;
...@@ -1720,55 +1717,57 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1720,55 +1717,57 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1720 var x1: u64 = undefined;1717 var x1: u64 = undefined;
1721 var x2: u1 = undefined;1718 var x2: u1 = undefined;
1722 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);1719 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
1723 const x3 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & 0x1))));1720 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
1724 var x4: u64 = undefined;1721 var x4: u64 = undefined;
1725 var x5: u1 = undefined;1722 var x5: u1 = undefined;
1726 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);1723 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
1727 var x6: u64 = undefined;1724 var x6: u64 = undefined;
1728 cmovznzU64(&x6, x3, arg1, x4);1725 const x6_selection_mask = selectionMaskU64(x3);
1726 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
1729 var x7: u64 = undefined;1727 var x7: u64 = undefined;
1730 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));1728 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
1731 var x8: u64 = undefined;1729 var x8: u64 = undefined;
1732 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));1730 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
1733 var x9: u64 = undefined;1731 var x9: u64 = undefined;
1734 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));1732 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
1735 var x10: u64 = undefined;1733 var x10: u64 = undefined;
1736 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));1734 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
1737 var x11: u64 = undefined;1735 var x11: u64 = undefined;
1738 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));1736 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
1739 var x12: u64 = undefined;1737 var x12: u64 = undefined;
1740 var x13: u1 = undefined;1738 var x13: u1 = undefined;
1741 addcarryxU64(&x12, &x13, 0x0, 0x1, (~(arg2[0])));1739 addcarryxU64(&x12, &x13, 0x0, 0x1, (~arg2[0]));
1742 var x14: u64 = undefined;1740 var x14: u64 = undefined;
1743 var x15: u1 = undefined;1741 var x15: u1 = undefined;
1744 addcarryxU64(&x14, &x15, x13, 0x0, (~(arg2[1])));1742 addcarryxU64(&x14, &x15, x13, 0x0, (~arg2[1]));
1745 var x16: u64 = undefined;1743 var x16: u64 = undefined;
1746 var x17: u1 = undefined;1744 var x17: u1 = undefined;
1747 addcarryxU64(&x16, &x17, x15, 0x0, (~(arg2[2])));1745 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[2]));
1748 var x18: u64 = undefined;1746 var x18: u64 = undefined;
1749 var x19: u1 = undefined;1747 var x19: u1 = undefined;
1750 addcarryxU64(&x18, &x19, x17, 0x0, (~(arg2[3])));1748 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[3]));
1751 var x20: u64 = undefined;1749 var x20: u64 = undefined;
1752 var x21: u1 = undefined;1750 var x21: u1 = undefined;
1753 addcarryxU64(&x20, &x21, x19, 0x0, (~(arg2[4])));1751 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[4]));
1754 var x22: u64 = undefined;1752 var x22: u64 = undefined;
1755 cmovznzU64(&x22, x3, (arg3[0]), x12);1753 const x22_selection_mask = selectionMaskU64(x3);
1754 x22 = arg3[0] ^ ((arg3[0] ^ x12) & x22_selection_mask);
1756 var x23: u64 = undefined;1755 var x23: u64 = undefined;
1757 cmovznzU64(&x23, x3, (arg3[1]), x14);1756 x23 = arg3[1] ^ ((arg3[1] ^ x14) & x22_selection_mask);
1758 var x24: u64 = undefined;1757 var x24: u64 = undefined;
1759 cmovznzU64(&x24, x3, (arg3[2]), x16);1758 x24 = arg3[2] ^ ((arg3[2] ^ x16) & x22_selection_mask);
1760 var x25: u64 = undefined;1759 var x25: u64 = undefined;
1761 cmovznzU64(&x25, x3, (arg3[3]), x18);1760 x25 = arg3[3] ^ ((arg3[3] ^ x18) & x22_selection_mask);
1762 var x26: u64 = undefined;1761 var x26: u64 = undefined;
1763 cmovznzU64(&x26, x3, (arg3[4]), x20);1762 x26 = arg3[4] ^ ((arg3[4] ^ x20) & x22_selection_mask);
1764 var x27: u64 = undefined;1763 var x27: u64 = undefined;
1765 cmovznzU64(&x27, x3, (arg4[0]), (arg5[0]));1764 x27 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x22_selection_mask);
1766 var x28: u64 = undefined;1765 var x28: u64 = undefined;
1767 cmovznzU64(&x28, x3, (arg4[1]), (arg5[1]));1766 x28 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x22_selection_mask);
1768 var x29: u64 = undefined;1767 var x29: u64 = undefined;
1769 cmovznzU64(&x29, x3, (arg4[2]), (arg5[2]));1768 x29 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x22_selection_mask);
1770 var x30: u64 = undefined;1769 var x30: u64 = undefined;
1771 cmovznzU64(&x30, x3, (arg4[3]), (arg5[3]));1770 x30 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x22_selection_mask);
1772 var x31: u64 = undefined;1771 var x31: u64 = undefined;
1773 var x32: u1 = undefined;1772 var x32: u1 = undefined;
1774 addcarryxU64(&x31, &x32, 0x0, x27, x27);1773 addcarryxU64(&x31, &x32, 0x0, x27, x27);
...@@ -1795,11 +1794,11 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1795,11 +1794,11 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1795 subborrowxU64(&x45, &x46, x44, x37, 0xffffffffffffffff);1794 subborrowxU64(&x45, &x46, x44, x37, 0xffffffffffffffff);
1796 var x47: u64 = undefined;1795 var x47: u64 = undefined;
1797 var x48: u1 = undefined;1796 var x48: u1 = undefined;
1798 subborrowxU64(&x47, &x48, x46, @as(u64, x38), 0x0);1797 subborrowxU64(&x47, &x48, x46, x38, 0x0);
1799 const x49 = (arg4[3]);1798 const x49: u64 = arg4[3];
1800 const x50 = (arg4[2]);1799 const x50: u64 = arg4[2];
1801 const x51 = (arg4[1]);1800 const x51: u64 = arg4[1];
1802 const x52 = (arg4[0]);1801 const x52: u64 = arg4[0];
1803 var x53: u64 = undefined;1802 var x53: u64 = undefined;
1804 var x54: u1 = undefined;1803 var x54: u1 = undefined;
1805 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);1804 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);
...@@ -1813,7 +1812,8 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1813,7 +1812,8 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1813 var x60: u1 = undefined;1812 var x60: u1 = undefined;
1814 subborrowxU64(&x59, &x60, x58, 0x0, x49);1813 subborrowxU64(&x59, &x60, x58, 0x0, x49);
1815 var x61: u64 = undefined;1814 var x61: u64 = undefined;
1816 cmovznzU64(&x61, x60, 0x0, 0xffffffffffffffff);1815 const x61_selection_mask = selectionMaskU64(x60);
1816 x61 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x61_selection_mask);
1817 var x62: u64 = undefined;1817 var x62: u64 = undefined;
1818 var x63: u1 = undefined;1818 var x63: u1 = undefined;
1819 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xfffffffefffffc2f));1819 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xfffffffefffffc2f));
...@@ -1827,24 +1827,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1827,24 +1827,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1827 var x69: u1 = undefined;1827 var x69: u1 = undefined;
1828 addcarryxU64(&x68, &x69, x67, x59, x61);1828 addcarryxU64(&x68, &x69, x67, x59, x61);
1829 var x70: u64 = undefined;1829 var x70: u64 = undefined;
1830 cmovznzU64(&x70, x3, (arg5[0]), x62);1830 const x70_selection_mask = selectionMaskU64(x3);
1831 x70 = arg5[0] ^ ((arg5[0] ^ x62) & x70_selection_mask);
1831 var x71: u64 = undefined;1832 var x71: u64 = undefined;
1832 cmovznzU64(&x71, x3, (arg5[1]), x64);1833 x71 = arg5[1] ^ ((arg5[1] ^ x64) & x70_selection_mask);
1833 var x72: u64 = undefined;1834 var x72: u64 = undefined;
1834 cmovznzU64(&x72, x3, (arg5[2]), x66);1835 x72 = arg5[2] ^ ((arg5[2] ^ x66) & x70_selection_mask);
1835 var x73: u64 = undefined;1836 var x73: u64 = undefined;
1836 cmovznzU64(&x73, x3, (arg5[3]), x68);1837 x73 = arg5[3] ^ ((arg5[3] ^ x68) & x70_selection_mask);
1837 const x74 = @as(u1, @truncate((x22 & 0x1)));1838 const x74: u1 = @truncate(x22);
1838 var x75: u64 = undefined;1839 var x75: u64 = undefined;
1839 cmovznzU64(&x75, x74, 0x0, x7);1840 const x75_selection_mask = selectionMaskU64(x74);
1841 x75 = 0x0 ^ ((0x0 ^ x7) & x75_selection_mask);
1840 var x76: u64 = undefined;1842 var x76: u64 = undefined;
1841 cmovznzU64(&x76, x74, 0x0, x8);1843 x76 = 0x0 ^ ((0x0 ^ x8) & x75_selection_mask);
1842 var x77: u64 = undefined;1844 var x77: u64 = undefined;
1843 cmovznzU64(&x77, x74, 0x0, x9);1845 x77 = 0x0 ^ ((0x0 ^ x9) & x75_selection_mask);
1844 var x78: u64 = undefined;1846 var x78: u64 = undefined;
1845 cmovznzU64(&x78, x74, 0x0, x10);1847 x78 = 0x0 ^ ((0x0 ^ x10) & x75_selection_mask);
1846 var x79: u64 = undefined;1848 var x79: u64 = undefined;
1847 cmovznzU64(&x79, x74, 0x0, x11);1849 x79 = 0x0 ^ ((0x0 ^ x11) & x75_selection_mask);
1848 var x80: u64 = undefined;1850 var x80: u64 = undefined;
1849 var x81: u1 = undefined;1851 var x81: u1 = undefined;
1850 addcarryxU64(&x80, &x81, 0x0, x22, x75);1852 addcarryxU64(&x80, &x81, 0x0, x22, x75);
...@@ -1861,13 +1863,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1861,13 +1863,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1861 var x89: u1 = undefined;1863 var x89: u1 = undefined;
1862 addcarryxU64(&x88, &x89, x87, x26, x79);1864 addcarryxU64(&x88, &x89, x87, x26, x79);
1863 var x90: u64 = undefined;1865 var x90: u64 = undefined;
1864 cmovznzU64(&x90, x74, 0x0, x27);1866 const x90_selection_mask = selectionMaskU64(x74);
1867 x90 = 0x0 ^ ((0x0 ^ x27) & x90_selection_mask);
1865 var x91: u64 = undefined;1868 var x91: u64 = undefined;
1866 cmovznzU64(&x91, x74, 0x0, x28);1869 x91 = 0x0 ^ ((0x0 ^ x28) & x90_selection_mask);
1867 var x92: u64 = undefined;1870 var x92: u64 = undefined;
1868 cmovznzU64(&x92, x74, 0x0, x29);1871 x92 = 0x0 ^ ((0x0 ^ x29) & x90_selection_mask);
1869 var x93: u64 = undefined;1872 var x93: u64 = undefined;
1870 cmovznzU64(&x93, x74, 0x0, x30);1873 x93 = 0x0 ^ ((0x0 ^ x30) & x90_selection_mask);
1871 var x94: u64 = undefined;1874 var x94: u64 = undefined;
1872 var x95: u1 = undefined;1875 var x95: u1 = undefined;
1873 addcarryxU64(&x94, &x95, 0x0, x70, x90);1876 addcarryxU64(&x94, &x95, 0x0, x70, x90);
...@@ -1894,31 +1897,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1894,31 +1897,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1894 subborrowxU64(&x108, &x109, x107, x100, 0xffffffffffffffff);1897 subborrowxU64(&x108, &x109, x107, x100, 0xffffffffffffffff);
1895 var x110: u64 = undefined;1898 var x110: u64 = undefined;
1896 var x111: u1 = undefined;1899 var x111: u1 = undefined;
1897 subborrowxU64(&x110, &x111, x109, @as(u64, x101), 0x0);1900 subborrowxU64(&x110, &x111, x109, x101, 0x0);
1898 var x112: u64 = undefined;1901 var x112: u64 = undefined;
1899 var x113: u1 = undefined;1902 var x113: u1 = undefined;
1900 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);1903 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);
1901 const x114 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));1904 const x114: u64 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));
1902 const x115 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));1905 const x115: u64 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));
1903 const x116 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));1906 const x116: u64 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));
1904 const x117 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));1907 const x117: u64 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));
1905 const x118 = ((x88 & 0x8000000000000000) | (x88 >> 1));1908 const x118: u64 = ((x88 & 0x8000000000000000) | (x88 >> 1));
1906 var x119: u64 = undefined;1909 var x119: u64 = undefined;
1907 cmovznzU64(&x119, x48, x39, x31);1910 const x119_selection_mask = selectionMaskU64(x48);
1911 x119 = x39 ^ ((x39 ^ x31) & x119_selection_mask);
1908 var x120: u64 = undefined;1912 var x120: u64 = undefined;
1909 cmovznzU64(&x120, x48, x41, x33);1913 x120 = x41 ^ ((x41 ^ x33) & x119_selection_mask);
1910 var x121: u64 = undefined;1914 var x121: u64 = undefined;
1911 cmovznzU64(&x121, x48, x43, x35);1915 x121 = x43 ^ ((x43 ^ x35) & x119_selection_mask);
1912 var x122: u64 = undefined;1916 var x122: u64 = undefined;
1913 cmovznzU64(&x122, x48, x45, x37);1917 x122 = x45 ^ ((x45 ^ x37) & x119_selection_mask);
1914 var x123: u64 = undefined;1918 var x123: u64 = undefined;
1915 cmovznzU64(&x123, x111, x102, x94);1919 const x123_selection_mask = selectionMaskU64(x111);
1920 x123 = x102 ^ ((x102 ^ x94) & x123_selection_mask);
1916 var x124: u64 = undefined;1921 var x124: u64 = undefined;
1917 cmovznzU64(&x124, x111, x104, x96);1922 x124 = x104 ^ ((x104 ^ x96) & x123_selection_mask);
1918 var x125: u64 = undefined;1923 var x125: u64 = undefined;
1919 cmovznzU64(&x125, x111, x106, x98);1924 x125 = x106 ^ ((x106 ^ x98) & x123_selection_mask);
1920 var x126: u64 = undefined;1925 var x126: u64 = undefined;
1921 cmovznzU64(&x126, x111, x108, x100);1926 x126 = x108 ^ ((x108 ^ x100) & x123_selection_mask);
1922 out1.* = x112;1927 out1.* = x112;
1923 out2[0] = x7;1928 out2[0] = x7;
1924 out2[1] = x8;1929 out2[1] = x8;
lib/std/crypto/pcurves/secp256k1/secp256k1_scalar_64.zig+363-358
...@@ -17,7 +17,6 @@...@@ -17,7 +17,6 @@
17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in17// twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in
18// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^25618// if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256
1919
20const std = @import("std");
21const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels20const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels
2221
23// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.22// The type MontgomeryDomainFieldElement is a field element in the Montgomery domain.
...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;...@@ -28,80 +27,70 @@ pub const MontgomeryDomainFieldElement = [4]u64;
28// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]27// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
29pub const NonMontgomeryDomainFieldElement = [4]u64;28pub const NonMontgomeryDomainFieldElement = [4]u64;
3029
31/// The function addcarryxU64 is an addition with carry.30/// Add two limbs and a carry bit, returning the sum modulo 2^64 and the carry bit.
32///
33/// Postconditions:
34/// out1 = (arg1 + arg2 + arg3) mod 2^64
35/// out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋
36///
37/// Input Bounds:
38/// arg1: [0x0 ~> 0x1]
39/// arg2: [0x0 ~> 0xffffffffffffffff]
40/// arg3: [0x0 ~> 0xffffffffffffffff]
41/// Output Bounds:
42/// out1: [0x0 ~> 0xffffffffffffffff]
43/// out2: [0x0 ~> 0x1]
44fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {31fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
45 const x = @as(u128, arg2) +% arg3 +% arg1;32 @setRuntimeSafety(mode == .debug);
46 out1.* = @truncate(x);33
47 out2.* = @truncate(x >> 64);34 const x = @addWithOverflow(arg2, arg3);
35 const y = @addWithOverflow(x[0], arg1);
36 out1.* = y[0];
37 out2.* = x[1] | y[1];
48}38}
4939
50/// The function subborrowxU64 is a subtraction with borrow.40/// Subtract two limbs and a borrow bit, returning the difference modulo 2^64 and the borrow bit.
51///
52/// Postconditions:
53/// out1 = (-arg1 + arg2 + -arg3) mod 2^64
54/// out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋
55///
56/// Input Bounds:
57/// arg1: [0x0 ~> 0x1]
58/// arg2: [0x0 ~> 0xffffffffffffffff]
59/// arg3: [0x0 ~> 0xffffffffffffffff]
60/// Output Bounds:
61/// out1: [0x0 ~> 0xffffffffffffffff]
62/// out2: [0x0 ~> 0x1]
63fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {41fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void {
64 const x = @as(u128, arg2) -% arg3 -% arg1;42 @setRuntimeSafety(mode == .debug);
65 out1.* = @truncate(x);43
66 out2.* = @truncate(x >> 64);44 const x = @subWithOverflow(arg2, arg3);
45 const y = @subWithOverflow(x[0], arg1);
46 out1.* = y[0];
47 out2.* = x[1] | y[1];
67}48}
6849
69/// The function mulxU64 is a multiplication, returning the full double-width result.50/// Multiply two limbs, returning the low and high halves of the product.
70///
71/// Postconditions:
72/// out1 = (arg1 * arg2) mod 2^64
73/// out2 = ⌊arg1 * arg2 / 2^64⌋
74///
75/// Input Bounds:
76/// arg1: [0x0 ~> 0xffffffffffffffff]
77/// arg2: [0x0 ~> 0xffffffffffffffff]
78/// Output Bounds:
79/// out1: [0x0 ~> 0xffffffffffffffff]
80/// out2: [0x0 ~> 0xffffffffffffffff]
81fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {51fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void {
82 @setRuntimeSafety(mode == .debug);52 @setRuntimeSafety(mode == .debug);
8353
84 const x = @as(u128, arg1) * @as(u128, arg2);54 const x = @as(u128, arg1) * arg2;
85 out1.* = @as(u64, @truncate(x));55 out1.* = @truncate(x);
86 out2.* = @as(u64, @truncate(x >> 64));56 out2.* = @intCast(x >> 64);
87}57}
8858
89/// The function cmovznzU64 is a single-word conditional move.59/// Keep selection masks opaque to the optimizer without adding instructions.
90///60fn selectionMaskU64(arg1: u1) u64 {
91/// Postconditions:61 @setRuntimeSafety(mode == .debug);
92/// out1 = (if arg1 = 0 then arg2 else arg3)62
93///63 const value: u64 = 0 -% @as(u64, arg1);
94/// Input Bounds:64 if (@inComptime()) return value;
95/// arg1: [0x0 ~> 0x1]65 switch (@import("builtin").zig_backend) {
96/// arg2: [0x0 ~> 0xffffffffffffffff]66 .stage2_c, .stage2_wasm => return value,
97/// arg3: [0x0 ~> 0xffffffffffffffff]67 else => {},
98/// Output Bounds:68 }
99/// out1: [0x0 ~> 0xffffffffffffffff]69 if (@bitSizeOf(u64) <= @bitSizeOf(usize)) {
70 return asm (""
71 : [mask] "=r" (-> u64),
72 : [value] "0" (value),
73 );
74 }
75 var mask: u64 = 0;
76 inline for (0..@divExact(@bitSizeOf(u64), @bitSizeOf(usize))) |i| {
77 const shift = i * @bitSizeOf(usize);
78 const chunk: usize = @truncate(value >> shift);
79 const part = asm (""
80 : [mask] "=r" (-> usize),
81 : [value] "0" (chunk),
82 );
83 mask |= @as(u64, part) << shift;
84 }
85 return mask;
86}
87
88/// Select arg2 when arg1 is zero and arg3 otherwise, using a bit mask.
100fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {89fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
101 @setRuntimeSafety(mode == .debug);90 @setRuntimeSafety(mode == .debug);
10291
103 const mask = 0 -% @as(u64, arg1);92 const mask = selectionMaskU64(arg1);
104 out1.* = (mask & arg3) | ((~mask) & arg2);93 out1.* = arg2 ^ ((arg2 ^ arg3) & mask);
105}94}
10695
107/// The function mul multiplies two field elements in the Montgomery domain.96/// The function mul multiplies two field elements in the Montgomery domain.
...@@ -116,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {...@@ -116,22 +105,22 @@ fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void {
116pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {105pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
117 @setRuntimeSafety(mode == .debug);106 @setRuntimeSafety(mode == .debug);
118107
119 const x1 = (arg1[1]);108 const x1: u64 = arg1[1];
120 const x2 = (arg1[2]);109 const x2: u64 = arg1[2];
121 const x3 = (arg1[3]);110 const x3: u64 = arg1[3];
122 const x4 = (arg1[0]);111 const x4: u64 = arg1[0];
123 var x5: u64 = undefined;112 var x5: u64 = undefined;
124 var x6: u64 = undefined;113 var x6: u64 = undefined;
125 mulxU64(&x5, &x6, x4, (arg2[3]));114 mulxU64(&x5, &x6, x4, arg2[3]);
126 var x7: u64 = undefined;115 var x7: u64 = undefined;
127 var x8: u64 = undefined;116 var x8: u64 = undefined;
128 mulxU64(&x7, &x8, x4, (arg2[2]));117 mulxU64(&x7, &x8, x4, arg2[2]);
129 var x9: u64 = undefined;118 var x9: u64 = undefined;
130 var x10: u64 = undefined;119 var x10: u64 = undefined;
131 mulxU64(&x9, &x10, x4, (arg2[1]));120 mulxU64(&x9, &x10, x4, arg2[1]);
132 var x11: u64 = undefined;121 var x11: u64 = undefined;
133 var x12: u64 = undefined;122 var x12: u64 = undefined;
134 mulxU64(&x11, &x12, x4, (arg2[0]));123 mulxU64(&x11, &x12, x4, arg2[0]);
135 var x13: u64 = undefined;124 var x13: u64 = undefined;
136 var x14: u1 = undefined;125 var x14: u1 = undefined;
137 addcarryxU64(&x13, &x14, 0x0, x12, x9);126 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -141,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -141,7 +130,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
141 var x17: u64 = undefined;130 var x17: u64 = undefined;
142 var x18: u1 = undefined;131 var x18: u1 = undefined;
143 addcarryxU64(&x17, &x18, x16, x8, x5);132 addcarryxU64(&x17, &x18, x16, x8, x5);
144 const x19 = (@as(u64, x18) + x6);133 const x19: u64 = (x18 + x6);
145 var x20: u64 = undefined;134 var x20: u64 = undefined;
146 var x21: u64 = undefined;135 var x21: u64 = undefined;
147 mulxU64(&x20, &x21, x11, 0x4b0dff665588b13f);136 mulxU64(&x20, &x21, x11, 0x4b0dff665588b13f);
...@@ -166,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -166,7 +155,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
166 var x34: u64 = undefined;155 var x34: u64 = undefined;
167 var x35: u1 = undefined;156 var x35: u1 = undefined;
168 addcarryxU64(&x34, &x35, x33, x25, x22);157 addcarryxU64(&x34, &x35, x33, x25, x22);
169 const x36 = (@as(u64, x35) + x23);158 const x36: u64 = (x35 + x23);
170 var x37: u64 = undefined;159 var x37: u64 = undefined;
171 var x38: u1 = undefined;160 var x38: u1 = undefined;
172 addcarryxU64(&x37, &x38, 0x0, x11, x28);161 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -184,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -184,16 +173,16 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
184 addcarryxU64(&x45, &x46, x44, x19, x36);173 addcarryxU64(&x45, &x46, x44, x19, x36);
185 var x47: u64 = undefined;174 var x47: u64 = undefined;
186 var x48: u64 = undefined;175 var x48: u64 = undefined;
187 mulxU64(&x47, &x48, x1, (arg2[3]));176 mulxU64(&x47, &x48, x1, arg2[3]);
188 var x49: u64 = undefined;177 var x49: u64 = undefined;
189 var x50: u64 = undefined;178 var x50: u64 = undefined;
190 mulxU64(&x49, &x50, x1, (arg2[2]));179 mulxU64(&x49, &x50, x1, arg2[2]);
191 var x51: u64 = undefined;180 var x51: u64 = undefined;
192 var x52: u64 = undefined;181 var x52: u64 = undefined;
193 mulxU64(&x51, &x52, x1, (arg2[1]));182 mulxU64(&x51, &x52, x1, arg2[1]);
194 var x53: u64 = undefined;183 var x53: u64 = undefined;
195 var x54: u64 = undefined;184 var x54: u64 = undefined;
196 mulxU64(&x53, &x54, x1, (arg2[0]));185 mulxU64(&x53, &x54, x1, arg2[0]);
197 var x55: u64 = undefined;186 var x55: u64 = undefined;
198 var x56: u1 = undefined;187 var x56: u1 = undefined;
199 addcarryxU64(&x55, &x56, 0x0, x54, x51);188 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -203,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -203,7 +192,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
203 var x59: u64 = undefined;192 var x59: u64 = undefined;
204 var x60: u1 = undefined;193 var x60: u1 = undefined;
205 addcarryxU64(&x59, &x60, x58, x50, x47);194 addcarryxU64(&x59, &x60, x58, x50, x47);
206 const x61 = (@as(u64, x60) + x48);195 const x61: u64 = (x60 + x48);
207 var x62: u64 = undefined;196 var x62: u64 = undefined;
208 var x63: u1 = undefined;197 var x63: u1 = undefined;
209 addcarryxU64(&x62, &x63, 0x0, x39, x53);198 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -218,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -218,7 +207,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
218 addcarryxU64(&x68, &x69, x67, x45, x59);207 addcarryxU64(&x68, &x69, x67, x45, x59);
219 var x70: u64 = undefined;208 var x70: u64 = undefined;
220 var x71: u1 = undefined;209 var x71: u1 = undefined;
221 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);210 addcarryxU64(&x70, &x71, x69, x46, x61);
222 var x72: u64 = undefined;211 var x72: u64 = undefined;
223 var x73: u64 = undefined;212 var x73: u64 = undefined;
224 mulxU64(&x72, &x73, x62, 0x4b0dff665588b13f);213 mulxU64(&x72, &x73, x62, 0x4b0dff665588b13f);
...@@ -243,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -243,7 +232,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
243 var x86: u64 = undefined;232 var x86: u64 = undefined;
244 var x87: u1 = undefined;233 var x87: u1 = undefined;
245 addcarryxU64(&x86, &x87, x85, x77, x74);234 addcarryxU64(&x86, &x87, x85, x77, x74);
246 const x88 = (@as(u64, x87) + x75);235 const x88: u64 = (x87 + x75);
247 var x89: u64 = undefined;236 var x89: u64 = undefined;
248 var x90: u1 = undefined;237 var x90: u1 = undefined;
249 addcarryxU64(&x89, &x90, 0x0, x62, x80);238 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -259,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -259,19 +248,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
259 var x97: u64 = undefined;248 var x97: u64 = undefined;
260 var x98: u1 = undefined;249 var x98: u1 = undefined;
261 addcarryxU64(&x97, &x98, x96, x70, x88);250 addcarryxU64(&x97, &x98, x96, x70, x88);
262 const x99 = (@as(u64, x98) + @as(u64, x71));251 const x99: u64 = (@as(u64, x98) + x71);
263 var x100: u64 = undefined;252 var x100: u64 = undefined;
264 var x101: u64 = undefined;253 var x101: u64 = undefined;
265 mulxU64(&x100, &x101, x2, (arg2[3]));254 mulxU64(&x100, &x101, x2, arg2[3]);
266 var x102: u64 = undefined;255 var x102: u64 = undefined;
267 var x103: u64 = undefined;256 var x103: u64 = undefined;
268 mulxU64(&x102, &x103, x2, (arg2[2]));257 mulxU64(&x102, &x103, x2, arg2[2]);
269 var x104: u64 = undefined;258 var x104: u64 = undefined;
270 var x105: u64 = undefined;259 var x105: u64 = undefined;
271 mulxU64(&x104, &x105, x2, (arg2[1]));260 mulxU64(&x104, &x105, x2, arg2[1]);
272 var x106: u64 = undefined;261 var x106: u64 = undefined;
273 var x107: u64 = undefined;262 var x107: u64 = undefined;
274 mulxU64(&x106, &x107, x2, (arg2[0]));263 mulxU64(&x106, &x107, x2, arg2[0]);
275 var x108: u64 = undefined;264 var x108: u64 = undefined;
276 var x109: u1 = undefined;265 var x109: u1 = undefined;
277 addcarryxU64(&x108, &x109, 0x0, x107, x104);266 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -281,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -281,7 +270,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
281 var x112: u64 = undefined;270 var x112: u64 = undefined;
282 var x113: u1 = undefined;271 var x113: u1 = undefined;
283 addcarryxU64(&x112, &x113, x111, x103, x100);272 addcarryxU64(&x112, &x113, x111, x103, x100);
284 const x114 = (@as(u64, x113) + x101);273 const x114: u64 = (x113 + x101);
285 var x115: u64 = undefined;274 var x115: u64 = undefined;
286 var x116: u1 = undefined;275 var x116: u1 = undefined;
287 addcarryxU64(&x115, &x116, 0x0, x91, x106);276 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -321,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -321,7 +310,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
321 var x139: u64 = undefined;310 var x139: u64 = undefined;
322 var x140: u1 = undefined;311 var x140: u1 = undefined;
323 addcarryxU64(&x139, &x140, x138, x130, x127);312 addcarryxU64(&x139, &x140, x138, x130, x127);
324 const x141 = (@as(u64, x140) + x128);313 const x141: u64 = (x140 + x128);
325 var x142: u64 = undefined;314 var x142: u64 = undefined;
326 var x143: u1 = undefined;315 var x143: u1 = undefined;
327 addcarryxU64(&x142, &x143, 0x0, x115, x133);316 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -337,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -337,19 +326,19 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
337 var x150: u64 = undefined;326 var x150: u64 = undefined;
338 var x151: u1 = undefined;327 var x151: u1 = undefined;
339 addcarryxU64(&x150, &x151, x149, x123, x141);328 addcarryxU64(&x150, &x151, x149, x123, x141);
340 const x152 = (@as(u64, x151) + @as(u64, x124));329 const x152: u64 = (@as(u64, x151) + x124);
341 var x153: u64 = undefined;330 var x153: u64 = undefined;
342 var x154: u64 = undefined;331 var x154: u64 = undefined;
343 mulxU64(&x153, &x154, x3, (arg2[3]));332 mulxU64(&x153, &x154, x3, arg2[3]);
344 var x155: u64 = undefined;333 var x155: u64 = undefined;
345 var x156: u64 = undefined;334 var x156: u64 = undefined;
346 mulxU64(&x155, &x156, x3, (arg2[2]));335 mulxU64(&x155, &x156, x3, arg2[2]);
347 var x157: u64 = undefined;336 var x157: u64 = undefined;
348 var x158: u64 = undefined;337 var x158: u64 = undefined;
349 mulxU64(&x157, &x158, x3, (arg2[1]));338 mulxU64(&x157, &x158, x3, arg2[1]);
350 var x159: u64 = undefined;339 var x159: u64 = undefined;
351 var x160: u64 = undefined;340 var x160: u64 = undefined;
352 mulxU64(&x159, &x160, x3, (arg2[0]));341 mulxU64(&x159, &x160, x3, arg2[0]);
353 var x161: u64 = undefined;342 var x161: u64 = undefined;
354 var x162: u1 = undefined;343 var x162: u1 = undefined;
355 addcarryxU64(&x161, &x162, 0x0, x160, x157);344 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -359,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -359,7 +348,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
359 var x165: u64 = undefined;348 var x165: u64 = undefined;
360 var x166: u1 = undefined;349 var x166: u1 = undefined;
361 addcarryxU64(&x165, &x166, x164, x156, x153);350 addcarryxU64(&x165, &x166, x164, x156, x153);
362 const x167 = (@as(u64, x166) + x154);351 const x167: u64 = (x166 + x154);
363 var x168: u64 = undefined;352 var x168: u64 = undefined;
364 var x169: u1 = undefined;353 var x169: u1 = undefined;
365 addcarryxU64(&x168, &x169, 0x0, x144, x159);354 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -399,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -399,7 +388,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
399 var x192: u64 = undefined;388 var x192: u64 = undefined;
400 var x193: u1 = undefined;389 var x193: u1 = undefined;
401 addcarryxU64(&x192, &x193, x191, x183, x180);390 addcarryxU64(&x192, &x193, x191, x183, x180);
402 const x194 = (@as(u64, x193) + x181);391 const x194: u64 = (x193 + x181);
403 var x195: u64 = undefined;392 var x195: u64 = undefined;
404 var x196: u1 = undefined;393 var x196: u1 = undefined;
405 addcarryxU64(&x195, &x196, 0x0, x168, x186);394 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -415,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -415,7 +404,7 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
415 var x203: u64 = undefined;404 var x203: u64 = undefined;
416 var x204: u1 = undefined;405 var x204: u1 = undefined;
417 addcarryxU64(&x203, &x204, x202, x176, x194);406 addcarryxU64(&x203, &x204, x202, x176, x194);
418 const x205 = (@as(u64, x204) + @as(u64, x177));407 const x205: u64 = (@as(u64, x204) + x177);
419 var x206: u64 = undefined;408 var x206: u64 = undefined;
420 var x207: u1 = undefined;409 var x207: u1 = undefined;
421 subborrowxU64(&x206, &x207, 0x0, x197, 0xbfd25e8cd0364141);410 subborrowxU64(&x206, &x207, 0x0, x197, 0xbfd25e8cd0364141);
...@@ -432,13 +421,14 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -432,13 +421,14 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
432 var x215: u1 = undefined;421 var x215: u1 = undefined;
433 subborrowxU64(&x214, &x215, x213, x205, 0x0);422 subborrowxU64(&x214, &x215, x213, x205, 0x0);
434 var x216: u64 = undefined;423 var x216: u64 = undefined;
435 cmovznzU64(&x216, x215, x206, x197);424 const x216_selection_mask = selectionMaskU64(x215);
425 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
436 var x217: u64 = undefined;426 var x217: u64 = undefined;
437 cmovznzU64(&x217, x215, x208, x199);427 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
438 var x218: u64 = undefined;428 var x218: u64 = undefined;
439 cmovznzU64(&x218, x215, x210, x201);429 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
440 var x219: u64 = undefined;430 var x219: u64 = undefined;
441 cmovznzU64(&x219, x215, x212, x203);431 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
442 out1[0] = x216;432 out1[0] = x216;
443 out1[1] = x217;433 out1[1] = x217;
444 out1[2] = x218;434 out1[2] = x218;
...@@ -456,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -456,22 +446,22 @@ pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
456pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {446pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
457 @setRuntimeSafety(mode == .debug);447 @setRuntimeSafety(mode == .debug);
458448
459 const x1 = (arg1[1]);449 const x1: u64 = arg1[1];
460 const x2 = (arg1[2]);450 const x2: u64 = arg1[2];
461 const x3 = (arg1[3]);451 const x3: u64 = arg1[3];
462 const x4 = (arg1[0]);452 const x4: u64 = arg1[0];
463 var x5: u64 = undefined;453 var x5: u64 = undefined;
464 var x6: u64 = undefined;454 var x6: u64 = undefined;
465 mulxU64(&x5, &x6, x4, (arg1[3]));455 mulxU64(&x5, &x6, x4, arg1[3]);
466 var x7: u64 = undefined;456 var x7: u64 = undefined;
467 var x8: u64 = undefined;457 var x8: u64 = undefined;
468 mulxU64(&x7, &x8, x4, (arg1[2]));458 mulxU64(&x7, &x8, x4, arg1[2]);
469 var x9: u64 = undefined;459 var x9: u64 = undefined;
470 var x10: u64 = undefined;460 var x10: u64 = undefined;
471 mulxU64(&x9, &x10, x4, (arg1[1]));461 mulxU64(&x9, &x10, x4, arg1[1]);
472 var x11: u64 = undefined;462 var x11: u64 = undefined;
473 var x12: u64 = undefined;463 var x12: u64 = undefined;
474 mulxU64(&x11, &x12, x4, (arg1[0]));464 mulxU64(&x11, &x12, x4, arg1[0]);
475 var x13: u64 = undefined;465 var x13: u64 = undefined;
476 var x14: u1 = undefined;466 var x14: u1 = undefined;
477 addcarryxU64(&x13, &x14, 0x0, x12, x9);467 addcarryxU64(&x13, &x14, 0x0, x12, x9);
...@@ -481,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -481,7 +471,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
481 var x17: u64 = undefined;471 var x17: u64 = undefined;
482 var x18: u1 = undefined;472 var x18: u1 = undefined;
483 addcarryxU64(&x17, &x18, x16, x8, x5);473 addcarryxU64(&x17, &x18, x16, x8, x5);
484 const x19 = (@as(u64, x18) + x6);474 const x19: u64 = (x18 + x6);
485 var x20: u64 = undefined;475 var x20: u64 = undefined;
486 var x21: u64 = undefined;476 var x21: u64 = undefined;
487 mulxU64(&x20, &x21, x11, 0x4b0dff665588b13f);477 mulxU64(&x20, &x21, x11, 0x4b0dff665588b13f);
...@@ -506,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -506,7 +496,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
506 var x34: u64 = undefined;496 var x34: u64 = undefined;
507 var x35: u1 = undefined;497 var x35: u1 = undefined;
508 addcarryxU64(&x34, &x35, x33, x25, x22);498 addcarryxU64(&x34, &x35, x33, x25, x22);
509 const x36 = (@as(u64, x35) + x23);499 const x36: u64 = (x35 + x23);
510 var x37: u64 = undefined;500 var x37: u64 = undefined;
511 var x38: u1 = undefined;501 var x38: u1 = undefined;
512 addcarryxU64(&x37, &x38, 0x0, x11, x28);502 addcarryxU64(&x37, &x38, 0x0, x11, x28);
...@@ -524,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -524,16 +514,16 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
524 addcarryxU64(&x45, &x46, x44, x19, x36);514 addcarryxU64(&x45, &x46, x44, x19, x36);
525 var x47: u64 = undefined;515 var x47: u64 = undefined;
526 var x48: u64 = undefined;516 var x48: u64 = undefined;
527 mulxU64(&x47, &x48, x1, (arg1[3]));517 mulxU64(&x47, &x48, x1, arg1[3]);
528 var x49: u64 = undefined;518 var x49: u64 = undefined;
529 var x50: u64 = undefined;519 var x50: u64 = undefined;
530 mulxU64(&x49, &x50, x1, (arg1[2]));520 mulxU64(&x49, &x50, x1, arg1[2]);
531 var x51: u64 = undefined;521 var x51: u64 = undefined;
532 var x52: u64 = undefined;522 var x52: u64 = undefined;
533 mulxU64(&x51, &x52, x1, (arg1[1]));523 mulxU64(&x51, &x52, x1, arg1[1]);
534 var x53: u64 = undefined;524 var x53: u64 = undefined;
535 var x54: u64 = undefined;525 var x54: u64 = undefined;
536 mulxU64(&x53, &x54, x1, (arg1[0]));526 mulxU64(&x53, &x54, x1, arg1[0]);
537 var x55: u64 = undefined;527 var x55: u64 = undefined;
538 var x56: u1 = undefined;528 var x56: u1 = undefined;
539 addcarryxU64(&x55, &x56, 0x0, x54, x51);529 addcarryxU64(&x55, &x56, 0x0, x54, x51);
...@@ -543,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -543,7 +533,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
543 var x59: u64 = undefined;533 var x59: u64 = undefined;
544 var x60: u1 = undefined;534 var x60: u1 = undefined;
545 addcarryxU64(&x59, &x60, x58, x50, x47);535 addcarryxU64(&x59, &x60, x58, x50, x47);
546 const x61 = (@as(u64, x60) + x48);536 const x61: u64 = (x60 + x48);
547 var x62: u64 = undefined;537 var x62: u64 = undefined;
548 var x63: u1 = undefined;538 var x63: u1 = undefined;
549 addcarryxU64(&x62, &x63, 0x0, x39, x53);539 addcarryxU64(&x62, &x63, 0x0, x39, x53);
...@@ -558,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -558,7 +548,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
558 addcarryxU64(&x68, &x69, x67, x45, x59);548 addcarryxU64(&x68, &x69, x67, x45, x59);
559 var x70: u64 = undefined;549 var x70: u64 = undefined;
560 var x71: u1 = undefined;550 var x71: u1 = undefined;
561 addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);551 addcarryxU64(&x70, &x71, x69, x46, x61);
562 var x72: u64 = undefined;552 var x72: u64 = undefined;
563 var x73: u64 = undefined;553 var x73: u64 = undefined;
564 mulxU64(&x72, &x73, x62, 0x4b0dff665588b13f);554 mulxU64(&x72, &x73, x62, 0x4b0dff665588b13f);
...@@ -583,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -583,7 +573,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
583 var x86: u64 = undefined;573 var x86: u64 = undefined;
584 var x87: u1 = undefined;574 var x87: u1 = undefined;
585 addcarryxU64(&x86, &x87, x85, x77, x74);575 addcarryxU64(&x86, &x87, x85, x77, x74);
586 const x88 = (@as(u64, x87) + x75);576 const x88: u64 = (x87 + x75);
587 var x89: u64 = undefined;577 var x89: u64 = undefined;
588 var x90: u1 = undefined;578 var x90: u1 = undefined;
589 addcarryxU64(&x89, &x90, 0x0, x62, x80);579 addcarryxU64(&x89, &x90, 0x0, x62, x80);
...@@ -599,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -599,19 +589,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
599 var x97: u64 = undefined;589 var x97: u64 = undefined;
600 var x98: u1 = undefined;590 var x98: u1 = undefined;
601 addcarryxU64(&x97, &x98, x96, x70, x88);591 addcarryxU64(&x97, &x98, x96, x70, x88);
602 const x99 = (@as(u64, x98) + @as(u64, x71));592 const x99: u64 = (@as(u64, x98) + x71);
603 var x100: u64 = undefined;593 var x100: u64 = undefined;
604 var x101: u64 = undefined;594 var x101: u64 = undefined;
605 mulxU64(&x100, &x101, x2, (arg1[3]));595 mulxU64(&x100, &x101, x2, arg1[3]);
606 var x102: u64 = undefined;596 var x102: u64 = undefined;
607 var x103: u64 = undefined;597 var x103: u64 = undefined;
608 mulxU64(&x102, &x103, x2, (arg1[2]));598 mulxU64(&x102, &x103, x2, arg1[2]);
609 var x104: u64 = undefined;599 var x104: u64 = undefined;
610 var x105: u64 = undefined;600 var x105: u64 = undefined;
611 mulxU64(&x104, &x105, x2, (arg1[1]));601 mulxU64(&x104, &x105, x2, arg1[1]);
612 var x106: u64 = undefined;602 var x106: u64 = undefined;
613 var x107: u64 = undefined;603 var x107: u64 = undefined;
614 mulxU64(&x106, &x107, x2, (arg1[0]));604 mulxU64(&x106, &x107, x2, arg1[0]);
615 var x108: u64 = undefined;605 var x108: u64 = undefined;
616 var x109: u1 = undefined;606 var x109: u1 = undefined;
617 addcarryxU64(&x108, &x109, 0x0, x107, x104);607 addcarryxU64(&x108, &x109, 0x0, x107, x104);
...@@ -621,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -621,7 +611,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
621 var x112: u64 = undefined;611 var x112: u64 = undefined;
622 var x113: u1 = undefined;612 var x113: u1 = undefined;
623 addcarryxU64(&x112, &x113, x111, x103, x100);613 addcarryxU64(&x112, &x113, x111, x103, x100);
624 const x114 = (@as(u64, x113) + x101);614 const x114: u64 = (x113 + x101);
625 var x115: u64 = undefined;615 var x115: u64 = undefined;
626 var x116: u1 = undefined;616 var x116: u1 = undefined;
627 addcarryxU64(&x115, &x116, 0x0, x91, x106);617 addcarryxU64(&x115, &x116, 0x0, x91, x106);
...@@ -661,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -661,7 +651,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
661 var x139: u64 = undefined;651 var x139: u64 = undefined;
662 var x140: u1 = undefined;652 var x140: u1 = undefined;
663 addcarryxU64(&x139, &x140, x138, x130, x127);653 addcarryxU64(&x139, &x140, x138, x130, x127);
664 const x141 = (@as(u64, x140) + x128);654 const x141: u64 = (x140 + x128);
665 var x142: u64 = undefined;655 var x142: u64 = undefined;
666 var x143: u1 = undefined;656 var x143: u1 = undefined;
667 addcarryxU64(&x142, &x143, 0x0, x115, x133);657 addcarryxU64(&x142, &x143, 0x0, x115, x133);
...@@ -677,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -677,19 +667,19 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
677 var x150: u64 = undefined;667 var x150: u64 = undefined;
678 var x151: u1 = undefined;668 var x151: u1 = undefined;
679 addcarryxU64(&x150, &x151, x149, x123, x141);669 addcarryxU64(&x150, &x151, x149, x123, x141);
680 const x152 = (@as(u64, x151) + @as(u64, x124));670 const x152: u64 = (@as(u64, x151) + x124);
681 var x153: u64 = undefined;671 var x153: u64 = undefined;
682 var x154: u64 = undefined;672 var x154: u64 = undefined;
683 mulxU64(&x153, &x154, x3, (arg1[3]));673 mulxU64(&x153, &x154, x3, arg1[3]);
684 var x155: u64 = undefined;674 var x155: u64 = undefined;
685 var x156: u64 = undefined;675 var x156: u64 = undefined;
686 mulxU64(&x155, &x156, x3, (arg1[2]));676 mulxU64(&x155, &x156, x3, arg1[2]);
687 var x157: u64 = undefined;677 var x157: u64 = undefined;
688 var x158: u64 = undefined;678 var x158: u64 = undefined;
689 mulxU64(&x157, &x158, x3, (arg1[1]));679 mulxU64(&x157, &x158, x3, arg1[1]);
690 var x159: u64 = undefined;680 var x159: u64 = undefined;
691 var x160: u64 = undefined;681 var x160: u64 = undefined;
692 mulxU64(&x159, &x160, x3, (arg1[0]));682 mulxU64(&x159, &x160, x3, arg1[0]);
693 var x161: u64 = undefined;683 var x161: u64 = undefined;
694 var x162: u1 = undefined;684 var x162: u1 = undefined;
695 addcarryxU64(&x161, &x162, 0x0, x160, x157);685 addcarryxU64(&x161, &x162, 0x0, x160, x157);
...@@ -699,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -699,7 +689,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
699 var x165: u64 = undefined;689 var x165: u64 = undefined;
700 var x166: u1 = undefined;690 var x166: u1 = undefined;
701 addcarryxU64(&x165, &x166, x164, x156, x153);691 addcarryxU64(&x165, &x166, x164, x156, x153);
702 const x167 = (@as(u64, x166) + x154);692 const x167: u64 = (x166 + x154);
703 var x168: u64 = undefined;693 var x168: u64 = undefined;
704 var x169: u1 = undefined;694 var x169: u1 = undefined;
705 addcarryxU64(&x168, &x169, 0x0, x144, x159);695 addcarryxU64(&x168, &x169, 0x0, x144, x159);
...@@ -739,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -739,7 +729,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
739 var x192: u64 = undefined;729 var x192: u64 = undefined;
740 var x193: u1 = undefined;730 var x193: u1 = undefined;
741 addcarryxU64(&x192, &x193, x191, x183, x180);731 addcarryxU64(&x192, &x193, x191, x183, x180);
742 const x194 = (@as(u64, x193) + x181);732 const x194: u64 = (x193 + x181);
743 var x195: u64 = undefined;733 var x195: u64 = undefined;
744 var x196: u1 = undefined;734 var x196: u1 = undefined;
745 addcarryxU64(&x195, &x196, 0x0, x168, x186);735 addcarryxU64(&x195, &x196, 0x0, x168, x186);
...@@ -755,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -755,7 +745,7 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
755 var x203: u64 = undefined;745 var x203: u64 = undefined;
756 var x204: u1 = undefined;746 var x204: u1 = undefined;
757 addcarryxU64(&x203, &x204, x202, x176, x194);747 addcarryxU64(&x203, &x204, x202, x176, x194);
758 const x205 = (@as(u64, x204) + @as(u64, x177));748 const x205: u64 = (@as(u64, x204) + x177);
759 var x206: u64 = undefined;749 var x206: u64 = undefined;
760 var x207: u1 = undefined;750 var x207: u1 = undefined;
761 subborrowxU64(&x206, &x207, 0x0, x197, 0xbfd25e8cd0364141);751 subborrowxU64(&x206, &x207, 0x0, x197, 0xbfd25e8cd0364141);
...@@ -772,13 +762,14 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl...@@ -772,13 +762,14 @@ pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEl
772 var x215: u1 = undefined;762 var x215: u1 = undefined;
773 subborrowxU64(&x214, &x215, x213, x205, 0x0);763 subborrowxU64(&x214, &x215, x213, x205, 0x0);
774 var x216: u64 = undefined;764 var x216: u64 = undefined;
775 cmovznzU64(&x216, x215, x206, x197);765 const x216_selection_mask = selectionMaskU64(x215);
766 x216 = x206 ^ ((x206 ^ x197) & x216_selection_mask);
776 var x217: u64 = undefined;767 var x217: u64 = undefined;
777 cmovznzU64(&x217, x215, x208, x199);768 x217 = x208 ^ ((x208 ^ x199) & x216_selection_mask);
778 var x218: u64 = undefined;769 var x218: u64 = undefined;
779 cmovznzU64(&x218, x215, x210, x201);770 x218 = x210 ^ ((x210 ^ x201) & x216_selection_mask);
780 var x219: u64 = undefined;771 var x219: u64 = undefined;
781 cmovznzU64(&x219, x215, x212, x203);772 x219 = x212 ^ ((x212 ^ x203) & x216_selection_mask);
782 out1[0] = x216;773 out1[0] = x216;
783 out1[1] = x217;774 out1[1] = x217;
784 out1[2] = x218;775 out1[2] = x218;
...@@ -799,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -799,16 +790,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
799790
800 var x1: u64 = undefined;791 var x1: u64 = undefined;
801 var x2: u1 = undefined;792 var x2: u1 = undefined;
802 addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));793 addcarryxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
803 var x3: u64 = undefined;794 var x3: u64 = undefined;
804 var x4: u1 = undefined;795 var x4: u1 = undefined;
805 addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));796 addcarryxU64(&x3, &x4, x2, arg1[1], arg2[1]);
806 var x5: u64 = undefined;797 var x5: u64 = undefined;
807 var x6: u1 = undefined;798 var x6: u1 = undefined;
808 addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));799 addcarryxU64(&x5, &x6, x4, arg1[2], arg2[2]);
809 var x7: u64 = undefined;800 var x7: u64 = undefined;
810 var x8: u1 = undefined;801 var x8: u1 = undefined;
811 addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));802 addcarryxU64(&x7, &x8, x6, arg1[3], arg2[3]);
812 var x9: u64 = undefined;803 var x9: u64 = undefined;
813 var x10: u1 = undefined;804 var x10: u1 = undefined;
814 subborrowxU64(&x9, &x10, 0x0, x1, 0xbfd25e8cd0364141);805 subborrowxU64(&x9, &x10, 0x0, x1, 0xbfd25e8cd0364141);
...@@ -823,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -823,15 +814,16 @@ pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
823 subborrowxU64(&x15, &x16, x14, x7, 0xffffffffffffffff);814 subborrowxU64(&x15, &x16, x14, x7, 0xffffffffffffffff);
824 var x17: u64 = undefined;815 var x17: u64 = undefined;
825 var x18: u1 = undefined;816 var x18: u1 = undefined;
826 subborrowxU64(&x17, &x18, x16, @as(u64, x8), 0x0);817 subborrowxU64(&x17, &x18, x16, x8, 0x0);
827 var x19: u64 = undefined;818 var x19: u64 = undefined;
828 cmovznzU64(&x19, x18, x9, x1);819 const x19_selection_mask = selectionMaskU64(x18);
820 x19 = x9 ^ ((x9 ^ x1) & x19_selection_mask);
829 var x20: u64 = undefined;821 var x20: u64 = undefined;
830 cmovznzU64(&x20, x18, x11, x3);822 x20 = x11 ^ ((x11 ^ x3) & x19_selection_mask);
831 var x21: u64 = undefined;823 var x21: u64 = undefined;
832 cmovznzU64(&x21, x18, x13, x5);824 x21 = x13 ^ ((x13 ^ x5) & x19_selection_mask);
833 var x22: u64 = undefined;825 var x22: u64 = undefined;
834 cmovznzU64(&x22, x18, x15, x7);826 x22 = x15 ^ ((x15 ^ x7) & x19_selection_mask);
835 out1[0] = x19;827 out1[0] = x19;
836 out1[1] = x20;828 out1[1] = x20;
837 out1[2] = x21;829 out1[2] = x21;
...@@ -852,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -852,18 +844,19 @@ pub fn sub(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
852844
853 var x1: u64 = undefined;845 var x1: u64 = undefined;
854 var x2: u1 = undefined;846 var x2: u1 = undefined;
855 subborrowxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));847 subborrowxU64(&x1, &x2, 0x0, arg1[0], arg2[0]);
856 var x3: u64 = undefined;848 var x3: u64 = undefined;
857 var x4: u1 = undefined;849 var x4: u1 = undefined;
858 subborrowxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));850 subborrowxU64(&x3, &x4, x2, arg1[1], arg2[1]);
859 var x5: u64 = undefined;851 var x5: u64 = undefined;
860 var x6: u1 = undefined;852 var x6: u1 = undefined;
861 subborrowxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));853 subborrowxU64(&x5, &x6, x4, arg1[2], arg2[2]);
862 var x7: u64 = undefined;854 var x7: u64 = undefined;
863 var x8: u1 = undefined;855 var x8: u1 = undefined;
864 subborrowxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));856 subborrowxU64(&x7, &x8, x6, arg1[3], arg2[3]);
865 var x9: u64 = undefined;857 var x9: u64 = undefined;
866 cmovznzU64(&x9, x8, 0x0, 0xffffffffffffffff);858 const x9_selection_mask = selectionMaskU64(x8);
859 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
867 var x10: u64 = undefined;860 var x10: u64 = undefined;
868 var x11: u1 = undefined;861 var x11: u1 = undefined;
869 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xbfd25e8cd0364141));862 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xbfd25e8cd0364141));
...@@ -895,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -895,18 +888,19 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
895888
896 var x1: u64 = undefined;889 var x1: u64 = undefined;
897 var x2: u1 = undefined;890 var x2: u1 = undefined;
898 subborrowxU64(&x1, &x2, 0x0, 0x0, (arg1[0]));891 subborrowxU64(&x1, &x2, 0x0, 0x0, arg1[0]);
899 var x3: u64 = undefined;892 var x3: u64 = undefined;
900 var x4: u1 = undefined;893 var x4: u1 = undefined;
901 subborrowxU64(&x3, &x4, x2, 0x0, (arg1[1]));894 subborrowxU64(&x3, &x4, x2, 0x0, arg1[1]);
902 var x5: u64 = undefined;895 var x5: u64 = undefined;
903 var x6: u1 = undefined;896 var x6: u1 = undefined;
904 subborrowxU64(&x5, &x6, x4, 0x0, (arg1[2]));897 subborrowxU64(&x5, &x6, x4, 0x0, arg1[2]);
905 var x7: u64 = undefined;898 var x7: u64 = undefined;
906 var x8: u1 = undefined;899 var x8: u1 = undefined;
907 subborrowxU64(&x7, &x8, x6, 0x0, (arg1[3]));900 subborrowxU64(&x7, &x8, x6, 0x0, arg1[3]);
908 var x9: u64 = undefined;901 var x9: u64 = undefined;
909 cmovznzU64(&x9, x8, 0x0, 0xffffffffffffffff);902 const x9_selection_mask = selectionMaskU64(x8);
903 x9 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x9_selection_mask);
910 var x10: u64 = undefined;904 var x10: u64 = undefined;
911 var x11: u1 = undefined;905 var x11: u1 = undefined;
912 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xbfd25e8cd0364141));906 addcarryxU64(&x10, &x11, 0x0, x1, (x9 & 0xbfd25e8cd0364141));
...@@ -936,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme...@@ -936,7 +930,7 @@ pub fn opp(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldEleme
936pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {930pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void {
937 @setRuntimeSafety(mode == .debug);931 @setRuntimeSafety(mode == .debug);
938932
939 const x1 = (arg1[0]);933 const x1: u64 = arg1[0];
940 var x2: u64 = undefined;934 var x2: u64 = undefined;
941 var x3: u64 = undefined;935 var x3: u64 = undefined;
942 mulxU64(&x2, &x3, x1, 0x4b0dff665588b13f);936 mulxU64(&x2, &x3, x1, 0x4b0dff665588b13f);
...@@ -975,10 +969,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -975,10 +969,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
975 addcarryxU64(&x24, &x25, x23, 0x0, x16);969 addcarryxU64(&x24, &x25, x23, 0x0, x16);
976 var x26: u64 = undefined;970 var x26: u64 = undefined;
977 var x27: u1 = undefined;971 var x27: u1 = undefined;
978 addcarryxU64(&x26, &x27, x25, 0x0, (@as(u64, x17) + x5));972 addcarryxU64(&x26, &x27, x25, 0x0, (x17 + x5));
979 var x28: u64 = undefined;973 var x28: u64 = undefined;
980 var x29: u1 = undefined;974 var x29: u1 = undefined;
981 addcarryxU64(&x28, &x29, 0x0, x20, (arg1[1]));975 addcarryxU64(&x28, &x29, 0x0, x20, arg1[1]);
982 var x30: u64 = undefined;976 var x30: u64 = undefined;
983 var x31: u1 = undefined;977 var x31: u1 = undefined;
984 addcarryxU64(&x30, &x31, x29, x22, 0x0);978 addcarryxU64(&x30, &x31, x29, x22, 0x0);
...@@ -1026,10 +1020,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1026,10 +1020,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1026 addcarryxU64(&x58, &x59, x57, x34, x50);1020 addcarryxU64(&x58, &x59, x57, x34, x50);
1027 var x60: u64 = undefined;1021 var x60: u64 = undefined;
1028 var x61: u1 = undefined;1022 var x61: u1 = undefined;
1029 addcarryxU64(&x60, &x61, x59, (@as(u64, x35) + @as(u64, x27)), (@as(u64, x51) + x39));1023 addcarryxU64(&x60, &x61, x59, (@as(u64, x35) + x27), (x51 + x39));
1030 var x62: u64 = undefined;1024 var x62: u64 = undefined;
1031 var x63: u1 = undefined;1025 var x63: u1 = undefined;
1032 addcarryxU64(&x62, &x63, 0x0, x54, (arg1[2]));1026 addcarryxU64(&x62, &x63, 0x0, x54, arg1[2]);
1033 var x64: u64 = undefined;1027 var x64: u64 = undefined;
1034 var x65: u1 = undefined;1028 var x65: u1 = undefined;
1035 addcarryxU64(&x64, &x65, x63, x56, 0x0);1029 addcarryxU64(&x64, &x65, x63, x56, 0x0);
...@@ -1077,10 +1071,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1077,10 +1071,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1077 addcarryxU64(&x92, &x93, x91, x68, x84);1071 addcarryxU64(&x92, &x93, x91, x68, x84);
1078 var x94: u64 = undefined;1072 var x94: u64 = undefined;
1079 var x95: u1 = undefined;1073 var x95: u1 = undefined;
1080 addcarryxU64(&x94, &x95, x93, (@as(u64, x69) + @as(u64, x61)), (@as(u64, x85) + x73));1074 addcarryxU64(&x94, &x95, x93, (@as(u64, x69) + x61), (x85 + x73));
1081 var x96: u64 = undefined;1075 var x96: u64 = undefined;
1082 var x97: u1 = undefined;1076 var x97: u1 = undefined;
1083 addcarryxU64(&x96, &x97, 0x0, x88, (arg1[3]));1077 addcarryxU64(&x96, &x97, 0x0, x88, arg1[3]);
1084 var x98: u64 = undefined;1078 var x98: u64 = undefined;
1085 var x99: u1 = undefined;1079 var x99: u1 = undefined;
1086 addcarryxU64(&x98, &x99, x97, x90, 0x0);1080 addcarryxU64(&x98, &x99, x97, x90, 0x0);
...@@ -1128,7 +1122,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1128,7 +1122,7 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1128 addcarryxU64(&x126, &x127, x125, x102, x118);1122 addcarryxU64(&x126, &x127, x125, x102, x118);
1129 var x128: u64 = undefined;1123 var x128: u64 = undefined;
1130 var x129: u1 = undefined;1124 var x129: u1 = undefined;
1131 addcarryxU64(&x128, &x129, x127, (@as(u64, x103) + @as(u64, x95)), (@as(u64, x119) + x107));1125 addcarryxU64(&x128, &x129, x127, (@as(u64, x103) + x95), (x119 + x107));
1132 var x130: u64 = undefined;1126 var x130: u64 = undefined;
1133 var x131: u1 = undefined;1127 var x131: u1 = undefined;
1134 subborrowxU64(&x130, &x131, 0x0, x122, 0xbfd25e8cd0364141);1128 subborrowxU64(&x130, &x131, 0x0, x122, 0xbfd25e8cd0364141);
...@@ -1143,15 +1137,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1143,15 +1137,16 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1143 subborrowxU64(&x136, &x137, x135, x128, 0xffffffffffffffff);1137 subborrowxU64(&x136, &x137, x135, x128, 0xffffffffffffffff);
1144 var x138: u64 = undefined;1138 var x138: u64 = undefined;
1145 var x139: u1 = undefined;1139 var x139: u1 = undefined;
1146 subborrowxU64(&x138, &x139, x137, @as(u64, x129), 0x0);1140 subborrowxU64(&x138, &x139, x137, x129, 0x0);
1147 var x140: u64 = undefined;1141 var x140: u64 = undefined;
1148 cmovznzU64(&x140, x139, x130, x122);1142 const x140_selection_mask = selectionMaskU64(x139);
1143 x140 = x130 ^ ((x130 ^ x122) & x140_selection_mask);
1149 var x141: u64 = undefined;1144 var x141: u64 = undefined;
1150 cmovznzU64(&x141, x139, x132, x124);1145 x141 = x132 ^ ((x132 ^ x124) & x140_selection_mask);
1151 var x142: u64 = undefined;1146 var x142: u64 = undefined;
1152 cmovznzU64(&x142, x139, x134, x126);1147 x142 = x134 ^ ((x134 ^ x126) & x140_selection_mask);
1153 var x143: u64 = undefined;1148 var x143: u64 = undefined;
1154 cmovznzU64(&x143, x139, x136, x128);1149 x143 = x136 ^ ((x136 ^ x128) & x140_selection_mask);
1155 out1[0] = x140;1150 out1[0] = x140;
1156 out1[1] = x141;1151 out1[1] = x141;
1157 out1[2] = x142;1152 out1[2] = x142;
...@@ -1169,10 +1164,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo...@@ -1169,10 +1164,10 @@ pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDo
1169pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {1164pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void {
1170 @setRuntimeSafety(mode == .debug);1165 @setRuntimeSafety(mode == .debug);
11711166
1172 const x1 = (arg1[1]);1167 const x1: u64 = arg1[1];
1173 const x2 = (arg1[2]);1168 const x2: u64 = arg1[2];
1174 const x3 = (arg1[3]);1169 const x3: u64 = arg1[3];
1175 const x4 = (arg1[0]);1170 const x4: u64 = arg1[0];
1176 var x5: u64 = undefined;1171 var x5: u64 = undefined;
1177 var x6: u64 = undefined;1172 var x6: u64 = undefined;
1178 mulxU64(&x5, &x6, x4, 0x9d671cd581c69bc5);1173 mulxU64(&x5, &x6, x4, 0x9d671cd581c69bc5);
...@@ -1232,7 +1227,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1232,7 +1227,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1232 addcarryxU64(&x41, &x42, x40, x17, x33);1227 addcarryxU64(&x41, &x42, x40, x17, x33);
1233 var x43: u64 = undefined;1228 var x43: u64 = undefined;
1234 var x44: u1 = undefined;1229 var x44: u1 = undefined;
1235 addcarryxU64(&x43, &x44, x42, (@as(u64, x18) + x6), (@as(u64, x34) + x22));1230 addcarryxU64(&x43, &x44, x42, (x18 + x6), (x34 + x22));
1236 var x45: u64 = undefined;1231 var x45: u64 = undefined;
1237 var x46: u64 = undefined;1232 var x46: u64 = undefined;
1238 mulxU64(&x45, &x46, x1, 0x9d671cd581c69bc5);1233 mulxU64(&x45, &x46, x1, 0x9d671cd581c69bc5);
...@@ -1304,7 +1299,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1304,7 +1299,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1304 addcarryxU64(&x89, &x90, x88, x65, x81);1299 addcarryxU64(&x89, &x90, x88, x65, x81);
1305 var x91: u64 = undefined;1300 var x91: u64 = undefined;
1306 var x92: u1 = undefined;1301 var x92: u1 = undefined;
1307 addcarryxU64(&x91, &x92, x90, ((@as(u64, x66) + @as(u64, x44)) + (@as(u64, x58) + x46)), (@as(u64, x82) + x70));1302 addcarryxU64(&x91, &x92, x90, ((@as(u64, x66) + x44) + (x58 + x46)), (x82 + x70));
1308 var x93: u64 = undefined;1303 var x93: u64 = undefined;
1309 var x94: u64 = undefined;1304 var x94: u64 = undefined;
1310 mulxU64(&x93, &x94, x2, 0x9d671cd581c69bc5);1305 mulxU64(&x93, &x94, x2, 0x9d671cd581c69bc5);
...@@ -1376,7 +1371,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1376,7 +1371,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1376 addcarryxU64(&x137, &x138, x136, x113, x129);1371 addcarryxU64(&x137, &x138, x136, x113, x129);
1377 var x139: u64 = undefined;1372 var x139: u64 = undefined;
1378 var x140: u1 = undefined;1373 var x140: u1 = undefined;
1379 addcarryxU64(&x139, &x140, x138, ((@as(u64, x114) + @as(u64, x92)) + (@as(u64, x106) + x94)), (@as(u64, x130) + x118));1374 addcarryxU64(&x139, &x140, x138, ((@as(u64, x114) + x92) + (x106 + x94)), (x130 + x118));
1380 var x141: u64 = undefined;1375 var x141: u64 = undefined;
1381 var x142: u64 = undefined;1376 var x142: u64 = undefined;
1382 mulxU64(&x141, &x142, x3, 0x9d671cd581c69bc5);1377 mulxU64(&x141, &x142, x3, 0x9d671cd581c69bc5);
...@@ -1448,7 +1443,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1448,7 +1443,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1448 addcarryxU64(&x185, &x186, x184, x161, x177);1443 addcarryxU64(&x185, &x186, x184, x161, x177);
1449 var x187: u64 = undefined;1444 var x187: u64 = undefined;
1450 var x188: u1 = undefined;1445 var x188: u1 = undefined;
1451 addcarryxU64(&x187, &x188, x186, ((@as(u64, x162) + @as(u64, x140)) + (@as(u64, x154) + x142)), (@as(u64, x178) + x166));1446 addcarryxU64(&x187, &x188, x186, ((@as(u64, x162) + x140) + (x154 + x142)), (x178 + x166));
1452 var x189: u64 = undefined;1447 var x189: u64 = undefined;
1453 var x190: u1 = undefined;1448 var x190: u1 = undefined;
1454 subborrowxU64(&x189, &x190, 0x0, x181, 0xbfd25e8cd0364141);1449 subborrowxU64(&x189, &x190, 0x0, x181, 0xbfd25e8cd0364141);
...@@ -1463,15 +1458,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1463,15 +1458,16 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1463 subborrowxU64(&x195, &x196, x194, x187, 0xffffffffffffffff);1458 subborrowxU64(&x195, &x196, x194, x187, 0xffffffffffffffff);
1464 var x197: u64 = undefined;1459 var x197: u64 = undefined;
1465 var x198: u1 = undefined;1460 var x198: u1 = undefined;
1466 subborrowxU64(&x197, &x198, x196, @as(u64, x188), 0x0);1461 subborrowxU64(&x197, &x198, x196, x188, 0x0);
1467 var x199: u64 = undefined;1462 var x199: u64 = undefined;
1468 cmovznzU64(&x199, x198, x189, x181);1463 const x199_selection_mask = selectionMaskU64(x198);
1464 x199 = x189 ^ ((x189 ^ x181) & x199_selection_mask);
1469 var x200: u64 = undefined;1465 var x200: u64 = undefined;
1470 cmovznzU64(&x200, x198, x191, x183);1466 x200 = x191 ^ ((x191 ^ x183) & x199_selection_mask);
1471 var x201: u64 = undefined;1467 var x201: u64 = undefined;
1472 cmovznzU64(&x201, x198, x193, x185);1468 x201 = x193 ^ ((x193 ^ x185) & x199_selection_mask);
1473 var x202: u64 = undefined;1469 var x202: u64 = undefined;
1474 cmovznzU64(&x202, x198, x195, x187);1470 x202 = x195 ^ ((x195 ^ x187) & x199_selection_mask);
1475 out1[0] = x199;1471 out1[0] = x199;
1476 out1[1] = x200;1472 out1[1] = x200;
1477 out1[2] = x201;1473 out1[2] = x201;
...@@ -1492,7 +1488,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma...@@ -1492,7 +1488,7 @@ pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDoma
1492pub fn nonzero(out1: *u64, arg1: [4]u64) void {1488pub fn nonzero(out1: *u64, arg1: [4]u64) void {
1493 @setRuntimeSafety(mode == .debug);1489 @setRuntimeSafety(mode == .debug);
14941490
1495 const x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3]))));1491 const x1: u64 = (arg1[0] | (arg1[1] | (arg1[2] | arg1[3])));
1496 out1.* = x1;1492 out1.* = x1;
1497}1493}
14981494
...@@ -1511,13 +1507,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1511,13 +1507,14 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1511 @setRuntimeSafety(mode == .debug);1507 @setRuntimeSafety(mode == .debug);
15121508
1513 var x1: u64 = undefined;1509 var x1: u64 = undefined;
1514 cmovznzU64(&x1, arg1, (arg2[0]), (arg3[0]));1510 const x1_selection_mask = selectionMaskU64(arg1);
1511 x1 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x1_selection_mask);
1515 var x2: u64 = undefined;1512 var x2: u64 = undefined;
1516 cmovznzU64(&x2, arg1, (arg2[1]), (arg3[1]));1513 x2 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x1_selection_mask);
1517 var x3: u64 = undefined;1514 var x3: u64 = undefined;
1518 cmovznzU64(&x3, arg1, (arg2[2]), (arg3[2]));1515 x3 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x1_selection_mask);
1519 var x4: u64 = undefined;1516 var x4: u64 = undefined;
1520 cmovznzU64(&x4, arg1, (arg2[3]), (arg3[3]));1517 x4 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x1_selection_mask);
1521 out1[0] = x1;1518 out1[0] = x1;
1522 out1[1] = x2;1519 out1[1] = x2;
1523 out1[2] = x3;1520 out1[2] = x3;
...@@ -1538,66 +1535,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {...@@ -1538,66 +1535,66 @@ pub fn selectznz(out1: *[4]u64, arg1: u1, arg2: [4]u64, arg3: [4]u64) void {
1538pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {1535pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1539 @setRuntimeSafety(mode == .debug);1536 @setRuntimeSafety(mode == .debug);
15401537
1541 const x1 = (arg1[3]);1538 const x1: u64 = arg1[3];
1542 const x2 = (arg1[2]);1539 const x2: u64 = arg1[2];
1543 const x3 = (arg1[1]);1540 const x3: u64 = arg1[1];
1544 const x4 = (arg1[0]);1541 const x4: u64 = arg1[0];
1545 const x5 = @as(u8, @truncate((x4 & 0xff)));1542 const x5: u8 = @truncate(x4);
1546 const x6 = (x4 >> 8);1543 const x6: u64 = (x4 >> 8);
1547 const x7 = @as(u8, @truncate((x6 & 0xff)));1544 const x7: u8 = @truncate(x6);
1548 const x8 = (x6 >> 8);1545 const x8: u64 = (x6 >> 8);
1549 const x9 = @as(u8, @truncate((x8 & 0xff)));1546 const x9: u8 = @truncate(x8);
1550 const x10 = (x8 >> 8);1547 const x10: u64 = (x8 >> 8);
1551 const x11 = @as(u8, @truncate((x10 & 0xff)));1548 const x11: u8 = @truncate(x10);
1552 const x12 = (x10 >> 8);1549 const x12: u64 = (x10 >> 8);
1553 const x13 = @as(u8, @truncate((x12 & 0xff)));1550 const x13: u8 = @truncate(x12);
1554 const x14 = (x12 >> 8);1551 const x14: u64 = (x12 >> 8);
1555 const x15 = @as(u8, @truncate((x14 & 0xff)));1552 const x15: u8 = @truncate(x14);
1556 const x16 = (x14 >> 8);1553 const x16: u64 = (x14 >> 8);
1557 const x17 = @as(u8, @truncate((x16 & 0xff)));1554 const x17: u8 = @truncate(x16);
1558 const x18 = @as(u8, @truncate((x16 >> 8)));1555 const x18: u8 = @truncate((x16 >> 8));
1559 const x19 = @as(u8, @truncate((x3 & 0xff)));1556 const x19: u8 = @truncate(x3);
1560 const x20 = (x3 >> 8);1557 const x20: u64 = (x3 >> 8);
1561 const x21 = @as(u8, @truncate((x20 & 0xff)));1558 const x21: u8 = @truncate(x20);
1562 const x22 = (x20 >> 8);1559 const x22: u64 = (x20 >> 8);
1563 const x23 = @as(u8, @truncate((x22 & 0xff)));1560 const x23: u8 = @truncate(x22);
1564 const x24 = (x22 >> 8);1561 const x24: u64 = (x22 >> 8);
1565 const x25 = @as(u8, @truncate((x24 & 0xff)));1562 const x25: u8 = @truncate(x24);
1566 const x26 = (x24 >> 8);1563 const x26: u64 = (x24 >> 8);
1567 const x27 = @as(u8, @truncate((x26 & 0xff)));1564 const x27: u8 = @truncate(x26);
1568 const x28 = (x26 >> 8);1565 const x28: u64 = (x26 >> 8);
1569 const x29 = @as(u8, @truncate((x28 & 0xff)));1566 const x29: u8 = @truncate(x28);
1570 const x30 = (x28 >> 8);1567 const x30: u64 = (x28 >> 8);
1571 const x31 = @as(u8, @truncate((x30 & 0xff)));1568 const x31: u8 = @truncate(x30);
1572 const x32 = @as(u8, @truncate((x30 >> 8)));1569 const x32: u8 = @truncate((x30 >> 8));
1573 const x33 = @as(u8, @truncate((x2 & 0xff)));1570 const x33: u8 = @truncate(x2);
1574 const x34 = (x2 >> 8);1571 const x34: u64 = (x2 >> 8);
1575 const x35 = @as(u8, @truncate((x34 & 0xff)));1572 const x35: u8 = @truncate(x34);
1576 const x36 = (x34 >> 8);1573 const x36: u64 = (x34 >> 8);
1577 const x37 = @as(u8, @truncate((x36 & 0xff)));1574 const x37: u8 = @truncate(x36);
1578 const x38 = (x36 >> 8);1575 const x38: u64 = (x36 >> 8);
1579 const x39 = @as(u8, @truncate((x38 & 0xff)));1576 const x39: u8 = @truncate(x38);
1580 const x40 = (x38 >> 8);1577 const x40: u64 = (x38 >> 8);
1581 const x41 = @as(u8, @truncate((x40 & 0xff)));1578 const x41: u8 = @truncate(x40);
1582 const x42 = (x40 >> 8);1579 const x42: u64 = (x40 >> 8);
1583 const x43 = @as(u8, @truncate((x42 & 0xff)));1580 const x43: u8 = @truncate(x42);
1584 const x44 = (x42 >> 8);1581 const x44: u64 = (x42 >> 8);
1585 const x45 = @as(u8, @truncate((x44 & 0xff)));1582 const x45: u8 = @truncate(x44);
1586 const x46 = @as(u8, @truncate((x44 >> 8)));1583 const x46: u8 = @truncate((x44 >> 8));
1587 const x47 = @as(u8, @truncate((x1 & 0xff)));1584 const x47: u8 = @truncate(x1);
1588 const x48 = (x1 >> 8);1585 const x48: u64 = (x1 >> 8);
1589 const x49 = @as(u8, @truncate((x48 & 0xff)));1586 const x49: u8 = @truncate(x48);
1590 const x50 = (x48 >> 8);1587 const x50: u64 = (x48 >> 8);
1591 const x51 = @as(u8, @truncate((x50 & 0xff)));1588 const x51: u8 = @truncate(x50);
1592 const x52 = (x50 >> 8);1589 const x52: u64 = (x50 >> 8);
1593 const x53 = @as(u8, @truncate((x52 & 0xff)));1590 const x53: u8 = @truncate(x52);
1594 const x54 = (x52 >> 8);1591 const x54: u64 = (x52 >> 8);
1595 const x55 = @as(u8, @truncate((x54 & 0xff)));1592 const x55: u8 = @truncate(x54);
1596 const x56 = (x54 >> 8);1593 const x56: u64 = (x54 >> 8);
1597 const x57 = @as(u8, @truncate((x56 & 0xff)));1594 const x57: u8 = @truncate(x56);
1598 const x58 = (x56 >> 8);1595 const x58: u64 = (x56 >> 8);
1599 const x59 = @as(u8, @truncate((x58 & 0xff)));1596 const x59: u8 = @truncate(x58);
1600 const x60 = @as(u8, @truncate((x58 >> 8)));1597 const x60: u8 = @truncate((x58 >> 8));
1601 out1[0] = x5;1598 out1[0] = x5;
1602 out1[1] = x7;1599 out1[1] = x7;
1603 out1[2] = x9;1600 out1[2] = x9;
...@@ -1647,66 +1644,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {...@@ -1647,66 +1644,66 @@ pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void {
1647pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {1644pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void {
1648 @setRuntimeSafety(mode == .debug);1645 @setRuntimeSafety(mode == .debug);
16491646
1650 const x1 = (@as(u64, (arg1[31])) << 56);1647 const x1: u64 = (@as(u64, arg1[31]) << 56);
1651 const x2 = (@as(u64, (arg1[30])) << 48);1648 const x2: u64 = (@as(u64, arg1[30]) << 48);
1652 const x3 = (@as(u64, (arg1[29])) << 40);1649 const x3: u64 = (@as(u64, arg1[29]) << 40);
1653 const x4 = (@as(u64, (arg1[28])) << 32);1650 const x4: u64 = (@as(u64, arg1[28]) << 32);
1654 const x5 = (@as(u64, (arg1[27])) << 24);1651 const x5: u64 = (@as(u64, arg1[27]) << 24);
1655 const x6 = (@as(u64, (arg1[26])) << 16);1652 const x6: u64 = (@as(u64, arg1[26]) << 16);
1656 const x7 = (@as(u64, (arg1[25])) << 8);1653 const x7: u64 = (@as(u64, arg1[25]) << 8);
1657 const x8 = (arg1[24]);1654 const x8: u8 = arg1[24];
1658 const x9 = (@as(u64, (arg1[23])) << 56);1655 const x9: u64 = (@as(u64, arg1[23]) << 56);
1659 const x10 = (@as(u64, (arg1[22])) << 48);1656 const x10: u64 = (@as(u64, arg1[22]) << 48);
1660 const x11 = (@as(u64, (arg1[21])) << 40);1657 const x11: u64 = (@as(u64, arg1[21]) << 40);
1661 const x12 = (@as(u64, (arg1[20])) << 32);1658 const x12: u64 = (@as(u64, arg1[20]) << 32);
1662 const x13 = (@as(u64, (arg1[19])) << 24);1659 const x13: u64 = (@as(u64, arg1[19]) << 24);
1663 const x14 = (@as(u64, (arg1[18])) << 16);1660 const x14: u64 = (@as(u64, arg1[18]) << 16);
1664 const x15 = (@as(u64, (arg1[17])) << 8);1661 const x15: u64 = (@as(u64, arg1[17]) << 8);
1665 const x16 = (arg1[16]);1662 const x16: u8 = arg1[16];
1666 const x17 = (@as(u64, (arg1[15])) << 56);1663 const x17: u64 = (@as(u64, arg1[15]) << 56);
1667 const x18 = (@as(u64, (arg1[14])) << 48);1664 const x18: u64 = (@as(u64, arg1[14]) << 48);
1668 const x19 = (@as(u64, (arg1[13])) << 40);1665 const x19: u64 = (@as(u64, arg1[13]) << 40);
1669 const x20 = (@as(u64, (arg1[12])) << 32);1666 const x20: u64 = (@as(u64, arg1[12]) << 32);
1670 const x21 = (@as(u64, (arg1[11])) << 24);1667 const x21: u64 = (@as(u64, arg1[11]) << 24);
1671 const x22 = (@as(u64, (arg1[10])) << 16);1668 const x22: u64 = (@as(u64, arg1[10]) << 16);
1672 const x23 = (@as(u64, (arg1[9])) << 8);1669 const x23: u64 = (@as(u64, arg1[9]) << 8);
1673 const x24 = (arg1[8]);1670 const x24: u8 = arg1[8];
1674 const x25 = (@as(u64, (arg1[7])) << 56);1671 const x25: u64 = (@as(u64, arg1[7]) << 56);
1675 const x26 = (@as(u64, (arg1[6])) << 48);1672 const x26: u64 = (@as(u64, arg1[6]) << 48);
1676 const x27 = (@as(u64, (arg1[5])) << 40);1673 const x27: u64 = (@as(u64, arg1[5]) << 40);
1677 const x28 = (@as(u64, (arg1[4])) << 32);1674 const x28: u64 = (@as(u64, arg1[4]) << 32);
1678 const x29 = (@as(u64, (arg1[3])) << 24);1675 const x29: u64 = (@as(u64, arg1[3]) << 24);
1679 const x30 = (@as(u64, (arg1[2])) << 16);1676 const x30: u64 = (@as(u64, arg1[2]) << 16);
1680 const x31 = (@as(u64, (arg1[1])) << 8);1677 const x31: u64 = (@as(u64, arg1[1]) << 8);
1681 const x32 = (arg1[0]);1678 const x32: u8 = arg1[0];
1682 const x33 = (x31 + @as(u64, x32));1679 const x33: u64 = (x31 + x32);
1683 const x34 = (x30 + x33);1680 const x34: u64 = (x30 + x33);
1684 const x35 = (x29 + x34);1681 const x35: u64 = (x29 + x34);
1685 const x36 = (x28 + x35);1682 const x36: u64 = (x28 + x35);
1686 const x37 = (x27 + x36);1683 const x37: u64 = (x27 + x36);
1687 const x38 = (x26 + x37);1684 const x38: u64 = (x26 + x37);
1688 const x39 = (x25 + x38);1685 const x39: u64 = (x25 + x38);
1689 const x40 = (x23 + @as(u64, x24));1686 const x40: u64 = (x23 + x24);
1690 const x41 = (x22 + x40);1687 const x41: u64 = (x22 + x40);
1691 const x42 = (x21 + x41);1688 const x42: u64 = (x21 + x41);
1692 const x43 = (x20 + x42);1689 const x43: u64 = (x20 + x42);
1693 const x44 = (x19 + x43);1690 const x44: u64 = (x19 + x43);
1694 const x45 = (x18 + x44);1691 const x45: u64 = (x18 + x44);
1695 const x46 = (x17 + x45);1692 const x46: u64 = (x17 + x45);
1696 const x47 = (x15 + @as(u64, x16));1693 const x47: u64 = (x15 + x16);
1697 const x48 = (x14 + x47);1694 const x48: u64 = (x14 + x47);
1698 const x49 = (x13 + x48);1695 const x49: u64 = (x13 + x48);
1699 const x50 = (x12 + x49);1696 const x50: u64 = (x12 + x49);
1700 const x51 = (x11 + x50);1697 const x51: u64 = (x11 + x50);
1701 const x52 = (x10 + x51);1698 const x52: u64 = (x10 + x51);
1702 const x53 = (x9 + x52);1699 const x53: u64 = (x9 + x52);
1703 const x54 = (x7 + @as(u64, x8));1700 const x54: u64 = (x7 + x8);
1704 const x55 = (x6 + x54);1701 const x55: u64 = (x6 + x54);
1705 const x56 = (x5 + x55);1702 const x56: u64 = (x5 + x55);
1706 const x57 = (x4 + x56);1703 const x57: u64 = (x4 + x56);
1707 const x58 = (x3 + x57);1704 const x58: u64 = (x3 + x57);
1708 const x59 = (x2 + x58);1705 const x59: u64 = (x2 + x58);
1709 const x60 = (x1 + x59);1706 const x60: u64 = (x1 + x59);
1710 out1[0] = x39;1707 out1[0] = x39;
1711 out1[1] = x46;1708 out1[1] = x46;
1712 out1[2] = x53;1709 out1[2] = x53;
...@@ -1780,55 +1777,57 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1780,55 +1777,57 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1780 var x1: u64 = undefined;1777 var x1: u64 = undefined;
1781 var x2: u1 = undefined;1778 var x2: u1 = undefined;
1782 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);1779 addcarryxU64(&x1, &x2, 0x0, (~arg1), 0x1);
1783 const x3 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(((arg3[0]) & 0x1))));1780 const x3: u1 = (@as(u1, @truncate((x1 >> 63))) & @as(u1, @truncate(arg3[0])));
1784 var x4: u64 = undefined;1781 var x4: u64 = undefined;
1785 var x5: u1 = undefined;1782 var x5: u1 = undefined;
1786 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);1783 addcarryxU64(&x4, &x5, 0x0, (~arg1), 0x1);
1787 var x6: u64 = undefined;1784 var x6: u64 = undefined;
1788 cmovznzU64(&x6, x3, arg1, x4);1785 const x6_selection_mask = selectionMaskU64(x3);
1786 x6 = arg1 ^ ((arg1 ^ x4) & x6_selection_mask);
1789 var x7: u64 = undefined;1787 var x7: u64 = undefined;
1790 cmovznzU64(&x7, x3, (arg2[0]), (arg3[0]));1788 x7 = arg2[0] ^ ((arg2[0] ^ arg3[0]) & x6_selection_mask);
1791 var x8: u64 = undefined;1789 var x8: u64 = undefined;
1792 cmovznzU64(&x8, x3, (arg2[1]), (arg3[1]));1790 x8 = arg2[1] ^ ((arg2[1] ^ arg3[1]) & x6_selection_mask);
1793 var x9: u64 = undefined;1791 var x9: u64 = undefined;
1794 cmovznzU64(&x9, x3, (arg2[2]), (arg3[2]));1792 x9 = arg2[2] ^ ((arg2[2] ^ arg3[2]) & x6_selection_mask);
1795 var x10: u64 = undefined;1793 var x10: u64 = undefined;
1796 cmovznzU64(&x10, x3, (arg2[3]), (arg3[3]));1794 x10 = arg2[3] ^ ((arg2[3] ^ arg3[3]) & x6_selection_mask);
1797 var x11: u64 = undefined;1795 var x11: u64 = undefined;
1798 cmovznzU64(&x11, x3, (arg2[4]), (arg3[4]));1796 x11 = arg2[4] ^ ((arg2[4] ^ arg3[4]) & x6_selection_mask);
1799 var x12: u64 = undefined;1797 var x12: u64 = undefined;
1800 var x13: u1 = undefined;1798 var x13: u1 = undefined;
1801 addcarryxU64(&x12, &x13, 0x0, 0x1, (~(arg2[0])));1799 addcarryxU64(&x12, &x13, 0x0, 0x1, (~arg2[0]));
1802 var x14: u64 = undefined;1800 var x14: u64 = undefined;
1803 var x15: u1 = undefined;1801 var x15: u1 = undefined;
1804 addcarryxU64(&x14, &x15, x13, 0x0, (~(arg2[1])));1802 addcarryxU64(&x14, &x15, x13, 0x0, (~arg2[1]));
1805 var x16: u64 = undefined;1803 var x16: u64 = undefined;
1806 var x17: u1 = undefined;1804 var x17: u1 = undefined;
1807 addcarryxU64(&x16, &x17, x15, 0x0, (~(arg2[2])));1805 addcarryxU64(&x16, &x17, x15, 0x0, (~arg2[2]));
1808 var x18: u64 = undefined;1806 var x18: u64 = undefined;
1809 var x19: u1 = undefined;1807 var x19: u1 = undefined;
1810 addcarryxU64(&x18, &x19, x17, 0x0, (~(arg2[3])));1808 addcarryxU64(&x18, &x19, x17, 0x0, (~arg2[3]));
1811 var x20: u64 = undefined;1809 var x20: u64 = undefined;
1812 var x21: u1 = undefined;1810 var x21: u1 = undefined;
1813 addcarryxU64(&x20, &x21, x19, 0x0, (~(arg2[4])));1811 addcarryxU64(&x20, &x21, x19, 0x0, (~arg2[4]));
1814 var x22: u64 = undefined;1812 var x22: u64 = undefined;
1815 cmovznzU64(&x22, x3, (arg3[0]), x12);1813 const x22_selection_mask = selectionMaskU64(x3);
1814 x22 = arg3[0] ^ ((arg3[0] ^ x12) & x22_selection_mask);
1816 var x23: u64 = undefined;1815 var x23: u64 = undefined;
1817 cmovznzU64(&x23, x3, (arg3[1]), x14);1816 x23 = arg3[1] ^ ((arg3[1] ^ x14) & x22_selection_mask);
1818 var x24: u64 = undefined;1817 var x24: u64 = undefined;
1819 cmovznzU64(&x24, x3, (arg3[2]), x16);1818 x24 = arg3[2] ^ ((arg3[2] ^ x16) & x22_selection_mask);
1820 var x25: u64 = undefined;1819 var x25: u64 = undefined;
1821 cmovznzU64(&x25, x3, (arg3[3]), x18);1820 x25 = arg3[3] ^ ((arg3[3] ^ x18) & x22_selection_mask);
1822 var x26: u64 = undefined;1821 var x26: u64 = undefined;
1823 cmovznzU64(&x26, x3, (arg3[4]), x20);1822 x26 = arg3[4] ^ ((arg3[4] ^ x20) & x22_selection_mask);
1824 var x27: u64 = undefined;1823 var x27: u64 = undefined;
1825 cmovznzU64(&x27, x3, (arg4[0]), (arg5[0]));1824 x27 = arg4[0] ^ ((arg4[0] ^ arg5[0]) & x22_selection_mask);
1826 var x28: u64 = undefined;1825 var x28: u64 = undefined;
1827 cmovznzU64(&x28, x3, (arg4[1]), (arg5[1]));1826 x28 = arg4[1] ^ ((arg4[1] ^ arg5[1]) & x22_selection_mask);
1828 var x29: u64 = undefined;1827 var x29: u64 = undefined;
1829 cmovznzU64(&x29, x3, (arg4[2]), (arg5[2]));1828 x29 = arg4[2] ^ ((arg4[2] ^ arg5[2]) & x22_selection_mask);
1830 var x30: u64 = undefined;1829 var x30: u64 = undefined;
1831 cmovznzU64(&x30, x3, (arg4[3]), (arg5[3]));1830 x30 = arg4[3] ^ ((arg4[3] ^ arg5[3]) & x22_selection_mask);
1832 var x31: u64 = undefined;1831 var x31: u64 = undefined;
1833 var x32: u1 = undefined;1832 var x32: u1 = undefined;
1834 addcarryxU64(&x31, &x32, 0x0, x27, x27);1833 addcarryxU64(&x31, &x32, 0x0, x27, x27);
...@@ -1855,11 +1854,11 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1855,11 +1854,11 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1855 subborrowxU64(&x45, &x46, x44, x37, 0xffffffffffffffff);1854 subborrowxU64(&x45, &x46, x44, x37, 0xffffffffffffffff);
1856 var x47: u64 = undefined;1855 var x47: u64 = undefined;
1857 var x48: u1 = undefined;1856 var x48: u1 = undefined;
1858 subborrowxU64(&x47, &x48, x46, @as(u64, x38), 0x0);1857 subborrowxU64(&x47, &x48, x46, x38, 0x0);
1859 const x49 = (arg4[3]);1858 const x49: u64 = arg4[3];
1860 const x50 = (arg4[2]);1859 const x50: u64 = arg4[2];
1861 const x51 = (arg4[1]);1860 const x51: u64 = arg4[1];
1862 const x52 = (arg4[0]);1861 const x52: u64 = arg4[0];
1863 var x53: u64 = undefined;1862 var x53: u64 = undefined;
1864 var x54: u1 = undefined;1863 var x54: u1 = undefined;
1865 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);1864 subborrowxU64(&x53, &x54, 0x0, 0x0, x52);
...@@ -1873,7 +1872,8 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1873,7 +1872,8 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1873 var x60: u1 = undefined;1872 var x60: u1 = undefined;
1874 subborrowxU64(&x59, &x60, x58, 0x0, x49);1873 subborrowxU64(&x59, &x60, x58, 0x0, x49);
1875 var x61: u64 = undefined;1874 var x61: u64 = undefined;
1876 cmovznzU64(&x61, x60, 0x0, 0xffffffffffffffff);1875 const x61_selection_mask = selectionMaskU64(x60);
1876 x61 = 0x0 ^ ((0x0 ^ 0xffffffffffffffff) & x61_selection_mask);
1877 var x62: u64 = undefined;1877 var x62: u64 = undefined;
1878 var x63: u1 = undefined;1878 var x63: u1 = undefined;
1879 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xbfd25e8cd0364141));1879 addcarryxU64(&x62, &x63, 0x0, x53, (x61 & 0xbfd25e8cd0364141));
...@@ -1887,24 +1887,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1887,24 +1887,26 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1887 var x69: u1 = undefined;1887 var x69: u1 = undefined;
1888 addcarryxU64(&x68, &x69, x67, x59, x61);1888 addcarryxU64(&x68, &x69, x67, x59, x61);
1889 var x70: u64 = undefined;1889 var x70: u64 = undefined;
1890 cmovznzU64(&x70, x3, (arg5[0]), x62);1890 const x70_selection_mask = selectionMaskU64(x3);
1891 x70 = arg5[0] ^ ((arg5[0] ^ x62) & x70_selection_mask);
1891 var x71: u64 = undefined;1892 var x71: u64 = undefined;
1892 cmovznzU64(&x71, x3, (arg5[1]), x64);1893 x71 = arg5[1] ^ ((arg5[1] ^ x64) & x70_selection_mask);
1893 var x72: u64 = undefined;1894 var x72: u64 = undefined;
1894 cmovznzU64(&x72, x3, (arg5[2]), x66);1895 x72 = arg5[2] ^ ((arg5[2] ^ x66) & x70_selection_mask);
1895 var x73: u64 = undefined;1896 var x73: u64 = undefined;
1896 cmovznzU64(&x73, x3, (arg5[3]), x68);1897 x73 = arg5[3] ^ ((arg5[3] ^ x68) & x70_selection_mask);
1897 const x74 = @as(u1, @truncate((x22 & 0x1)));1898 const x74: u1 = @truncate(x22);
1898 var x75: u64 = undefined;1899 var x75: u64 = undefined;
1899 cmovznzU64(&x75, x74, 0x0, x7);1900 const x75_selection_mask = selectionMaskU64(x74);
1901 x75 = 0x0 ^ ((0x0 ^ x7) & x75_selection_mask);
1900 var x76: u64 = undefined;1902 var x76: u64 = undefined;
1901 cmovznzU64(&x76, x74, 0x0, x8);1903 x76 = 0x0 ^ ((0x0 ^ x8) & x75_selection_mask);
1902 var x77: u64 = undefined;1904 var x77: u64 = undefined;
1903 cmovznzU64(&x77, x74, 0x0, x9);1905 x77 = 0x0 ^ ((0x0 ^ x9) & x75_selection_mask);
1904 var x78: u64 = undefined;1906 var x78: u64 = undefined;
1905 cmovznzU64(&x78, x74, 0x0, x10);1907 x78 = 0x0 ^ ((0x0 ^ x10) & x75_selection_mask);
1906 var x79: u64 = undefined;1908 var x79: u64 = undefined;
1907 cmovznzU64(&x79, x74, 0x0, x11);1909 x79 = 0x0 ^ ((0x0 ^ x11) & x75_selection_mask);
1908 var x80: u64 = undefined;1910 var x80: u64 = undefined;
1909 var x81: u1 = undefined;1911 var x81: u1 = undefined;
1910 addcarryxU64(&x80, &x81, 0x0, x22, x75);1912 addcarryxU64(&x80, &x81, 0x0, x22, x75);
...@@ -1921,13 +1923,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1921,13 +1923,14 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1921 var x89: u1 = undefined;1923 var x89: u1 = undefined;
1922 addcarryxU64(&x88, &x89, x87, x26, x79);1924 addcarryxU64(&x88, &x89, x87, x26, x79);
1923 var x90: u64 = undefined;1925 var x90: u64 = undefined;
1924 cmovznzU64(&x90, x74, 0x0, x27);1926 const x90_selection_mask = selectionMaskU64(x74);
1927 x90 = 0x0 ^ ((0x0 ^ x27) & x90_selection_mask);
1925 var x91: u64 = undefined;1928 var x91: u64 = undefined;
1926 cmovznzU64(&x91, x74, 0x0, x28);1929 x91 = 0x0 ^ ((0x0 ^ x28) & x90_selection_mask);
1927 var x92: u64 = undefined;1930 var x92: u64 = undefined;
1928 cmovznzU64(&x92, x74, 0x0, x29);1931 x92 = 0x0 ^ ((0x0 ^ x29) & x90_selection_mask);
1929 var x93: u64 = undefined;1932 var x93: u64 = undefined;
1930 cmovznzU64(&x93, x74, 0x0, x30);1933 x93 = 0x0 ^ ((0x0 ^ x30) & x90_selection_mask);
1931 var x94: u64 = undefined;1934 var x94: u64 = undefined;
1932 var x95: u1 = undefined;1935 var x95: u1 = undefined;
1933 addcarryxU64(&x94, &x95, 0x0, x70, x90);1936 addcarryxU64(&x94, &x95, 0x0, x70, x90);
...@@ -1954,31 +1957,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[...@@ -1954,31 +1957,33 @@ pub fn divstep(out1: *u64, out2: *[5]u64, out3: *[5]u64, out4: *[4]u64, out5: *[
1954 subborrowxU64(&x108, &x109, x107, x100, 0xffffffffffffffff);1957 subborrowxU64(&x108, &x109, x107, x100, 0xffffffffffffffff);
1955 var x110: u64 = undefined;1958 var x110: u64 = undefined;
1956 var x111: u1 = undefined;1959 var x111: u1 = undefined;
1957 subborrowxU64(&x110, &x111, x109, @as(u64, x101), 0x0);1960 subborrowxU64(&x110, &x111, x109, x101, 0x0);
1958 var x112: u64 = undefined;1961 var x112: u64 = undefined;
1959 var x113: u1 = undefined;1962 var x113: u1 = undefined;
1960 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);1963 addcarryxU64(&x112, &x113, 0x0, x6, 0x1);
1961 const x114 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));1964 const x114: u64 = ((x80 >> 1) | ((x82 << 63) & 0xffffffffffffffff));
1962 const x115 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));1965 const x115: u64 = ((x82 >> 1) | ((x84 << 63) & 0xffffffffffffffff));
1963 const x116 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));1966 const x116: u64 = ((x84 >> 1) | ((x86 << 63) & 0xffffffffffffffff));
1964 const x117 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));1967 const x117: u64 = ((x86 >> 1) | ((x88 << 63) & 0xffffffffffffffff));
1965 const x118 = ((x88 & 0x8000000000000000) | (x88 >> 1));1968 const x118: u64 = ((x88 & 0x8000000000000000) | (x88 >> 1));
1966 var x119: u64 = undefined;1969 var x119: u64 = undefined;
1967 cmovznzU64(&x119, x48, x39, x31);1970 const x119_selection_mask = selectionMaskU64(x48);
1971 x119 = x39 ^ ((x39 ^ x31) & x119_selection_mask);
1968 var x120: u64 = undefined;1972 var x120: u64 = undefined;
1969 cmovznzU64(&x120, x48, x41, x33);1973 x120 = x41 ^ ((x41 ^ x33) & x119_selection_mask);
1970 var x121: u64 = undefined;1974 var x121: u64 = undefined;
1971 cmovznzU64(&x121, x48, x43, x35);1975 x121 = x43 ^ ((x43 ^ x35) & x119_selection_mask);
1972 var x122: u64 = undefined;1976 var x122: u64 = undefined;
1973 cmovznzU64(&x122, x48, x45, x37);1977 x122 = x45 ^ ((x45 ^ x37) & x119_selection_mask);
1974 var x123: u64 = undefined;1978 var x123: u64 = undefined;
1975 cmovznzU64(&x123, x111, x102, x94);1979 const x123_selection_mask = selectionMaskU64(x111);
1980 x123 = x102 ^ ((x102 ^ x94) & x123_selection_mask);
1976 var x124: u64 = undefined;1981 var x124: u64 = undefined;
1977 cmovznzU64(&x124, x111, x104, x96);1982 x124 = x104 ^ ((x104 ^ x96) & x123_selection_mask);
1978 var x125: u64 = undefined;1983 var x125: u64 = undefined;
1979 cmovznzU64(&x125, x111, x106, x98);1984 x125 = x106 ^ ((x106 ^ x98) & x123_selection_mask);
1980 var x126: u64 = undefined;1985 var x126: u64 = undefined;
1981 cmovznzU64(&x126, x111, x108, x100);1986 x126 = x108 ^ ((x108 ^ x100) & x123_selection_mask);
1982 out1.* = x112;1987 out1.* = x112;
1983 out2[0] = x7;1988 out2[0] = x7;
1984 out2[1] = x8;1989 out2[1] = x8;