v128.store_lane<u64>(rT_ptr, rT2, 0, 32)
}
-const ge_add_precomp_t0: FieldElement = fe()
/**
* r = p + q
*/
const pX0 = v128.load(pX_ptr), pX1 = v128.load(pX_ptr, 16), pX2 = v128.load(pX_ptr, 32)
const pY0 = v128.load(pY_ptr), pY1 = v128.load(pY_ptr, 16), pY2 = v128.load(pY_ptr, 32)
- const pZ0 = v128.load(pZ_ptr), pZ1 = v128.load(pZ_ptr, 16), pZ2 = v128.load(pZ_ptr, 32)
// fe_add(r.X, p.Y, p.X)
let rX0 = v128.add<i32>(pY0, pX0)
let rT0 = v128.load(rT_ptr), rT1 = v128.load(rT_ptr, 16), rT2 = v128.load(rT_ptr, 32)
// fe_dbl(t, p.Z)
- const t0 = v128.shl<i32>(pZ0, 1)
- const t1 = v128.shl<i32>(pZ1, 1)
- const t2 = v128.shl<i32>(pZ2, 1)
+ const pZ0 = v128.shl<i32>(v128.load(pZ_ptr), 1)
+ const pZ1 = v128.shl<i32>(v128.load(pZ_ptr, 16), 1)
+ const pZ2 = v128.shl<i32>(v128.load(pZ_ptr, 32), 1)
// fe_sub(r.X, r.Z, r.Y)
rX0 = v128.sub<i32>(rZ0, rY0)
rY2 = v128.add<i32>(rZ2, rY2)
// fe_add(r.Z, t, r.T)
- rZ0 = v128.add<i32>(t0, rT0)
- rZ1 = v128.add<i32>(t1, rT1)
- rZ2 = v128.add<i32>(t2, rT2)
+ rZ0 = v128.add<i32>(pZ0, rT0)
+ rZ1 = v128.add<i32>(pZ1, rT1)
+ rZ2 = v128.add<i32>(pZ2, rT2)
// fe_sub(r.T, t, r.T)
- rT0 = v128.sub<i32>(t0, rT0)
- rT1 = v128.sub<i32>(t1, rT1)
- rT2 = v128.sub<i32>(t2, rT2)
+ rT0 = v128.sub<i32>(pZ0, rT0)
+ rT1 = v128.sub<i32>(pZ1, rT1)
+ rT2 = v128.sub<i32>(pZ2, rT2)
// store r.X
v128.store(rX_ptr, rX0)