| author | |
| committer | |
| log | 23e2b25ca29604c93ef1b3cba1a6be041dcaad1f |
| tree | c93345fc7cd8ed2ee881e84d2cb2ec3d10363b2d |
| parent | f5f4063029f1cbedb1cde0048138c9b1a56fc114 |
Zig was the first programming language to ship with field arithmetic
generated by fiat-crypto.
This is great! But since then, two things happened:
- We manually modified the generated code to deal with changes in Zig
- Fiat-crypto evolved, including its Zig backend
- Barriers turned out to be necessary to avoid memory loads depending
on a secret selector. What we ship in Zig didn't had them.
So, reconciliate everything and update the code we ship with what
fiat now produces.
As a bonus, point multiplication on NIST curves gets ~10% faster.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) in | 17 | // 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^256 | 18 | // if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 |
| 50 | 19 | ||
| 51 | const std = @import("std"); | ||
| 52 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 53 | 21 | ||
| 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]] |
| 60 | pub const NonMontgomeryDomainFieldElement = [4]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [4]u64; |
| 61 | 29 | ||
| 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] | ||
| 75 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 80 | 39 | ||
| 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] | ||
| 94 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 99 | 49 | ||
| 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] | ||
| 112 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 113 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 114 | 53 | ||
| 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 | } |
| 119 | 58 | ||
| 120 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 121 | /// | 60 | fn 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. | ||
| 131 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 132 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 133 | 91 | ||
| 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 | } |
| 137 | 95 | ||
| 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 { |
| 147 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 148 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 149 | 107 | ||
| 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 |
| 439 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 398 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 440 | @setRuntimeSafety(mode == .debug); | 399 | @setRuntimeSafety(mode == .debug); |
| 441 | 400 | ||
| 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 |
| 734 | 694 | ||
| 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 |
| 787 | 748 | ||
| 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 |
| 830 | 792 | ||
| 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 |
| 871 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 834 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 872 | @setRuntimeSafety(mode == .debug); | 835 | @setRuntimeSafety(mode == .debug); |
| 873 | 836 | ||
| 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 |
| 1024 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 988 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 1025 | @setRuntimeSafety(mode == .debug); | 989 | @setRuntimeSafety(mode == .debug); |
| 1026 | 990 | ||
| 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 |
| 1299 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { | 1264 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { |
| 1300 | @setRuntimeSafety(mode == .debug); | 1265 | @setRuntimeSafety(mode == .debug); |
| 1301 | 1266 | ||
| 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 | } |
| 1305 | 1270 | ||
| 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); |
| 1319 | 1284 | ||
| 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 { |
| 1345 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { | 1311 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { |
| 1346 | @setRuntimeSafety(mode == .debug); | 1312 | @setRuntimeSafety(mode == .debug); |
| 1347 | 1313 | ||
| 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 { |
| 1454 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { | 1420 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { |
| 1455 | @setRuntimeSafety(mode == .debug); | 1421 | @setRuntimeSafety(mode == .debug); |
| 1456 | 1422 | ||
| 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 { |
| 1529 | pub fn setOne(out1: *MontgomeryDomainFieldElement) void { | 1495 | pub fn setOne(out1: *MontgomeryDomainFieldElement) void { |
| 1530 | @setRuntimeSafety(mode == .debug); | 1496 | @setRuntimeSafety(mode == .debug); |
| 1531 | 1497 | ||
| 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 { |
| 1548 | 1514 | ||
| 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 | } |
| 1555 | 1521 | ||
| 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: *[ |
| 1586 | 1552 | ||
| 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) in | 17 | // 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^256 | 18 | // if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 |
| 50 | 19 | ||
| 51 | const std = @import("std"); | ||
| 52 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 53 | 21 | ||
| 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]] |
| 60 | pub const NonMontgomeryDomainFieldElement = [4]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [4]u64; |
| 61 | 29 | ||
| 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] | ||
| 75 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 80 | 39 | ||
| 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] | ||
| 94 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 99 | 49 | ||
| 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] | ||
| 112 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 113 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 114 | 53 | ||
| 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 | } |
| 119 | 58 | ||
| 120 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 121 | /// | 60 | fn 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. | ||
| 131 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 132 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 133 | 91 | ||
| 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 | } |
| 137 | 95 | ||
| 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 { |
| 147 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 148 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 149 | 107 | ||
| 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 |
| 487 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 446 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 488 | @setRuntimeSafety(mode == .debug); | 447 | @setRuntimeSafety(mode == .debug); |
| 489 | 448 | ||
| 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 |
| 830 | 790 | ||
| 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 |
| 883 | 844 | ||
| 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 |
| 926 | 888 | ||
| 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 |
| 967 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 930 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 968 | @setRuntimeSafety(mode == .debug); | 931 | @setRuntimeSafety(mode == .debug); |
| 969 | 932 | ||
| 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 |
| 1180 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 1144 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 1181 | @setRuntimeSafety(mode == .debug); | 1145 | @setRuntimeSafety(mode == .debug); |
| 1182 | 1146 | ||
| 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 |
| 1503 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { | 1468 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { |
| 1504 | @setRuntimeSafety(mode == .debug); | 1469 | @setRuntimeSafety(mode == .debug); |
| 1505 | 1470 | ||
| 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 | } |
| 1509 | 1474 | ||
| 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); |
| 1523 | 1488 | ||
| 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 { |
| 1549 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { | 1515 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { |
| 1550 | @setRuntimeSafety(mode == .debug); | 1516 | @setRuntimeSafety(mode == .debug); |
| 1551 | 1517 | ||
| 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 { |
| 1658 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { | 1624 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { |
| 1659 | @setRuntimeSafety(mode == .debug); | 1625 | @setRuntimeSafety(mode == .debug); |
| 1660 | 1626 | ||
| 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 { |
| 1735 | 1701 | ||
| 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 | } |
| 1741 | 1707 | ||
| ... | @@ -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 | } |
| 1759 | 1725 | ||
| 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: *[ |
| 1790 | 1756 | ||
| 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) in | 17 | // 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^384 | 18 | // if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^384 |
| 19 | 19 | ||
| 20 | const std = @import("std"); | ||
| 21 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 22 | 21 | ||
| 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]] |
| 29 | pub const NonMontgomeryDomainFieldElement = [6]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [6]u64; |
| 30 | 29 | ||
| 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] | ||
| 44 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 49 | 39 | ||
| 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] | ||
| 63 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 68 | 49 | ||
| 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] | ||
| 81 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 82 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 83 | 53 | ||
| 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 | } |
| 88 | 58 | ||
| 89 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 90 | /// | 60 | fn 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. | ||
| 100 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 101 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 102 | 91 | ||
| 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 | } |
| 106 | 95 | ||
| 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 { |
| 116 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 117 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 118 | 107 | ||
| 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 |
| 836 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 826 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 837 | @setRuntimeSafety(mode == .debug); | 827 | @setRuntimeSafety(mode == .debug); |
| 838 | 828 | ||
| 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 |
| 1559 | 1550 | ||
| 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 |
| 1630 | 1622 | ||
| 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 |
| 1687 | 1680 | ||
| 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 |
| 1742 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 1736 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 1743 | @setRuntimeSafety(mode == .debug); | 1737 | @setRuntimeSafety(mode == .debug); |
| 1744 | 1738 | ||
| 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 |
| 2227 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 2222 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 2228 | @setRuntimeSafety(mode == .debug); | 2223 | @setRuntimeSafety(mode == .debug); |
| 2229 | 2224 | ||
| 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 |
| 2864 | pub fn nonzero(out1: *u64, arg1: [6]u64) void { | 2860 | pub fn nonzero(out1: *u64, arg1: [6]u64) void { |
| 2865 | @setRuntimeSafety(mode == .debug); | 2861 | @setRuntimeSafety(mode == .debug); |
| 2866 | 2862 | ||
| 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 | } |
| 2870 | 2866 | ||
| ... | @@ -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); |
| 2884 | 2880 | ||
| 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 { |
| 2916 | pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void { | 2913 | pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void { |
| 2917 | @setRuntimeSafety(mode == .debug); | 2914 | @setRuntimeSafety(mode == .debug); |
| 2918 | 2915 | ||
| 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 { |
| 3071 | pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void { | 3068 | pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void { |
| 3072 | @setRuntimeSafety(mode == .debug); | 3069 | @setRuntimeSafety(mode == .debug); |
| 3073 | 3070 | ||
| 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) in | 17 | // 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^384 | 18 | // if x1 & (2^384-1) < 2^383 then x1 & (2^384-1) else (x1 & (2^384-1)) - 2^384 |
| 19 | 19 | ||
| 20 | const std = @import("std"); | ||
| 21 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 22 | 21 | ||
| 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]] |
| 29 | pub const NonMontgomeryDomainFieldElement = [6]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [6]u64; |
| 30 | 29 | ||
| 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] | ||
| 44 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 49 | 39 | ||
| 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] | ||
| 63 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 68 | 49 | ||
| 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] | ||
| 81 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 82 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 83 | 53 | ||
| 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 | } |
| 88 | 58 | ||
| 89 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 90 | /// | 60 | fn 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. | ||
| 100 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 101 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 102 | 91 | ||
| 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 | } |
| 106 | 95 | ||
| 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 { |
| 116 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 117 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 118 | 107 | ||
| 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 |
| 836 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 826 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 837 | @setRuntimeSafety(mode == .debug); | 827 | @setRuntimeSafety(mode == .debug); |
| 838 | 828 | ||
| 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 |
| 1559 | 1550 | ||
| 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 |
| 1630 | 1622 | ||
| 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 |
| 1687 | 1680 | ||
| 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 |
| 1742 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 1736 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 1743 | @setRuntimeSafety(mode == .debug); | 1737 | @setRuntimeSafety(mode == .debug); |
| 1744 | 1738 | ||
| 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 |
| 2227 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 2222 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 2228 | @setRuntimeSafety(mode == .debug); | 2223 | @setRuntimeSafety(mode == .debug); |
| 2229 | 2224 | ||
| 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 |
| 2918 | pub fn nonzero(out1: *u64, arg1: [6]u64) void { | 2914 | pub fn nonzero(out1: *u64, arg1: [6]u64) void { |
| 2919 | @setRuntimeSafety(mode == .debug); | 2915 | @setRuntimeSafety(mode == .debug); |
| 2920 | 2916 | ||
| 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 | } |
| 2924 | 2920 | ||
| ... | @@ -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); |
| 2938 | 2934 | ||
| 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 { |
| 2970 | pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void { | 2967 | pub fn toBytes(out1: *[48]u8, arg1: [6]u64) void { |
| 2971 | @setRuntimeSafety(mode == .debug); | 2968 | @setRuntimeSafety(mode == .debug); |
| 2972 | 2969 | ||
| 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 { |
| 3125 | pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void { | 3122 | pub fn fromBytes(out1: *[6]u64, arg1: [48]u8) void { |
| 3126 | @setRuntimeSafety(mode == .debug); | 3123 | @setRuntimeSafety(mode == .debug); |
| 3127 | 3124 | ||
| 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) in | 17 | // 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^256 | 18 | // if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 |
| 19 | 19 | ||
| 20 | const std = @import("std"); | ||
| 21 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 22 | 21 | ||
| 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]] |
| 29 | pub const NonMontgomeryDomainFieldElement = [4]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [4]u64; |
| 30 | 29 | ||
| 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] | ||
| 44 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 49 | 39 | ||
| 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] | ||
| 63 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 68 | 49 | ||
| 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] | ||
| 81 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 82 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 83 | 53 | ||
| 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 | } |
| 88 | 58 | ||
| 89 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 90 | /// | 60 | fn 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. | ||
| 100 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 101 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 102 | 91 | ||
| 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 | } |
| 106 | 95 | ||
| 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 { |
| 116 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 117 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 118 | 107 | ||
| 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 |
| 456 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 446 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 457 | @setRuntimeSafety(mode == .debug); | 447 | @setRuntimeSafety(mode == .debug); |
| 458 | 448 | ||
| 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 |
| 799 | 790 | ||
| 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 |
| 852 | 844 | ||
| 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 |
| 895 | 888 | ||
| 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 |
| 936 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 930 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 937 | @setRuntimeSafety(mode == .debug); | 931 | @setRuntimeSafety(mode == .debug); |
| 938 | 932 | ||
| 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 |
| 1169 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 1164 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 1170 | @setRuntimeSafety(mode == .debug); | 1165 | @setRuntimeSafety(mode == .debug); |
| 1171 | 1166 | ||
| 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 |
| 1432 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { | 1428 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { |
| 1433 | @setRuntimeSafety(mode == .debug); | 1429 | @setRuntimeSafety(mode == .debug); |
| 1434 | 1430 | ||
| 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 | } |
| 1438 | 1434 | ||
| ... | @@ -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); |
| 1452 | 1448 | ||
| 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 { |
| 1478 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { | 1475 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { |
| 1479 | @setRuntimeSafety(mode == .debug); | 1476 | @setRuntimeSafety(mode == .debug); |
| 1480 | 1477 | ||
| 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 { |
| 1587 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { | 1584 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { |
| 1588 | @setRuntimeSafety(mode == .debug); | 1585 | @setRuntimeSafety(mode == .debug); |
| 1589 | 1586 | ||
| 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) in | 17 | // 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^256 | 18 | // if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 |
| 19 | 19 | ||
| 20 | const std = @import("std"); | ||
| 21 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels | 20 | const mode = @import("builtin").mode; // Checked arithmetic is disabled in non-debug modes to avoid side channels |
| 22 | 21 | ||
| 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]] |
| 29 | pub const NonMontgomeryDomainFieldElement = [4]u64; | 28 | pub const NonMontgomeryDomainFieldElement = [4]u64; |
| 30 | 29 | ||
| 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] | ||
| 44 | fn addcarryxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 31 | fn 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 | } |
| 49 | 39 | ||
| 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] | ||
| 63 | fn subborrowxU64(out1: *u64, out2: *u1, arg1: u1, arg2: u64, arg3: u64) void { | 41 | fn 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 | } |
| 68 | 49 | ||
| 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] | ||
| 81 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { | 51 | fn mulxU64(out1: *u64, out2: *u64, arg1: u64, arg2: u64) void { |
| 82 | @setRuntimeSafety(mode == .debug); | 52 | @setRuntimeSafety(mode == .debug); |
| 83 | 53 | ||
| 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 | } |
| 88 | 58 | ||
| 89 | /// The function cmovznzU64 is a single-word conditional move. | 59 | /// Keep selection masks opaque to the optimizer without adding instructions. |
| 90 | /// | 60 | fn 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. | ||
| 100 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { | 89 | fn cmovznzU64(out1: *u64, arg1: u1, arg2: u64, arg3: u64) void { |
| 101 | @setRuntimeSafety(mode == .debug); | 90 | @setRuntimeSafety(mode == .debug); |
| 102 | 91 | ||
| 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 | } |
| 106 | 95 | ||
| 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 { |
| 116 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { | 105 | pub fn mul(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void { |
| 117 | @setRuntimeSafety(mode == .debug); | 106 | @setRuntimeSafety(mode == .debug); |
| 118 | 107 | ||
| 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 |
| 456 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 446 | pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 457 | @setRuntimeSafety(mode == .debug); | 447 | @setRuntimeSafety(mode == .debug); |
| 458 | 448 | ||
| 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 |
| 799 | 790 | ||
| 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 |
| 852 | 844 | ||
| 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 |
| 895 | 888 | ||
| 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 |
| 936 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { | 930 | pub fn fromMontgomery(out1: *NonMontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void { |
| 937 | @setRuntimeSafety(mode == .debug); | 931 | @setRuntimeSafety(mode == .debug); |
| 938 | 932 | ||
| 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 |
| 1169 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { | 1164 | pub fn toMontgomery(out1: *MontgomeryDomainFieldElement, arg1: NonMontgomeryDomainFieldElement) void { |
| 1170 | @setRuntimeSafety(mode == .debug); | 1165 | @setRuntimeSafety(mode == .debug); |
| 1171 | 1166 | ||
| 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 |
| 1492 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { | 1488 | pub fn nonzero(out1: *u64, arg1: [4]u64) void { |
| 1493 | @setRuntimeSafety(mode == .debug); | 1489 | @setRuntimeSafety(mode == .debug); |
| 1494 | 1490 | ||
| 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 | } |
| 1498 | 1494 | ||
| ... | @@ -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); |
| 1512 | 1508 | ||
| 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 { |
| 1538 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { | 1535 | pub fn toBytes(out1: *[32]u8, arg1: [4]u64) void { |
| 1539 | @setRuntimeSafety(mode == .debug); | 1536 | @setRuntimeSafety(mode == .debug); |
| 1540 | 1537 | ||
| 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 { |
| 1647 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { | 1644 | pub fn fromBytes(out1: *[4]u64, arg1: [32]u8) void { |
| 1648 | @setRuntimeSafety(mode == .debug); | 1645 | @setRuntimeSafety(mode == .debug); |
| 1649 | 1646 | ||
| 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; |