const bias25 = v128.splat<i64>((<i64>1 << 25) + (<i64>1 << 62))
const unbias25 = v128.splat<i64>(<i64>1 << 37)
const unbias26 = v128.splat<i64>(<i64>1 << 36)
- let carry: v128
+ let carryA: v128
+ let carryB: v128
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h04_sum, bias25), 26), unbias26)
- h04_sum = v128.sub<i64>(h04_sum, v128.shl<i64>(carry, 26))
- h15_sum = v128.add<i64>(h15_sum, carry)
+ carryA = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h04_sum, bias25), 26), unbias26)
+ h04_sum = v128.sub<i64>(h04_sum, v128.shl<i64>(carryA, 26))
+ h15_sum = v128.add<i64>(h15_sum, carryA)
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h15_sum, bias24), 25), unbias25)
- h15_sum = v128.sub<i64>(h15_sum, v128.shl<i64>(carry, 25))
- h26_sum = v128.add<i64>(h26_sum, carry)
+ carryB = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h15_sum, bias24), 25), unbias25)
+ h15_sum = v128.sub<i64>(h15_sum, v128.shl<i64>(carryB, 25))
+ h26_sum = v128.add<i64>(h26_sum, carryB)
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h26_sum, bias25), 26), unbias26)
- h26_sum = v128.sub<i64>(h26_sum, v128.shl<i64>(carry, 26))
- h37_sum = v128.add<i64>(h37_sum, carry)
+ carryA = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h26_sum, bias25), 26), unbias26)
+ h26_sum = v128.sub<i64>(h26_sum, v128.shl<i64>(carryA, 26))
+ h37_sum = v128.add<i64>(h37_sum, carryA)
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h37_sum, bias24), 25), unbias25)
- h37_sum = v128.sub<i64>(h37_sum, v128.shl<i64>(carry, 25))
- let h48_sum = v128.add<i64>(v128.shuffle<i64>(h04_sum, h89_sum, 1, 2), carry)
+ carryB = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h37_sum, bias24), 25), unbias25)
+ h37_sum = v128.sub<i64>(h37_sum, v128.shl<i64>(carryB, 25))
+ let h48_sum = v128.add<i64>(v128.shuffle<i64>(h04_sum, h89_sum, 1, 2), carryB)
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h48_sum, bias25), 26), unbias26)
- h48_sum = v128.sub<i64>(h48_sum, v128.shl<i64>(carry, 26))
- let h59_sum = v128.add<i64>(v128.shuffle<i64>(h15_sum, h89_sum, 1, 3), carry)
+ carryA = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h48_sum, bias25), 26), unbias26)
+ h48_sum = v128.sub<i64>(h48_sum, v128.shl<i64>(carryA, 26))
+ let h59_sum = v128.add<i64>(v128.shuffle<i64>(h15_sum, h89_sum, 1, 3), carryA)
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h59_sum, bias24), 25), unbias25)
- h59_sum = v128.sub<i64>(h59_sum, v128.shl<i64>(carry, 25))
+ carryB = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h59_sum, bias24), 25), unbias25)
+ h59_sum = v128.sub<i64>(h59_sum, v128.shl<i64>(carryB, 25))
// wrap requires multiplying carry from h9 by 19
- let h60_sum = v128.add<i64>(v128.shuffle<i64>(h26_sum, h04_sum, 1, 2), v128.mul<i64>(carry, i64x2(1, 19)))
+ let h60_sum = v128.add<i64>(v128.shuffle<i64>(h26_sum, h04_sum, 1, 2), v128.mul<i64>(carryB, i64x2(1, 19)))
- carry = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h60_sum, bias25), 26), unbias26)
- h60_sum = v128.sub<i64>(h60_sum, v128.shl<i64>(carry, 26))
- let h71_sum = v128.add<i64>(v128.shuffle<i64>(h37_sum, h15_sum, 1, 2), carry)
+ carryA = v128.sub<i64>(v128.shr<u64>(v128.add<i64>(h60_sum, bias25), 26), unbias26)
+ h60_sum = v128.sub<i64>(h60_sum, v128.shl<i64>(carryA, 26))
+ let h71_sum = v128.add<i64>(v128.shuffle<i64>(h37_sum, h15_sum, 1, 2), carryA)
// assign scalar results to output
v128.store_lane<i32>(h_ptr, h60_sum, 2, 0)