From 253dd75b62eb37e2baecce9747af8365b6a13ef2 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 21 Aug 2026 13:25:47 -0700 Subject: [PATCH] Reduce down to one scratch object for base point arithmetic. --- src/assembly/ge.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/assembly/ge.ts b/src/assembly/ge.ts index d48c3ee..ca953a9 100644 --- a/src/assembly/ge.ts +++ b/src/assembly/ge.ts @@ -31,28 +31,26 @@ function ge_cmov (t: ge_precomp, u: ge_precomp, b: u8): void { fe_cmov(t.xy2d, u.xy2d, b) } -const ge_cmov8_minust: ge_precomp = new ge_precomp() -const ge_cmov8_precomp: ge_precomp = new ge_precomp() +const base_precomp: ge_precomp = new ge_precomp() //@ts-expect-error @inline function ge_cmov8_base (t: ge_precomp, offset: i32, b: i8): void { - const minust = ge_cmov8_minust const bnegative: u8 = negative(b) const babs: u8 = b - (((-bnegative) & b) * (i8(1) << 1)) ge_precomp_0(t) for (let i = 0; i < 8; i++) { - const ptr = base + offset + (i * 144) // 4 bytes * 12 values * 3 fields - memory.copy(changetype(ge_cmov8_precomp.yplusx), ptr, 48) - memory.copy(changetype(ge_cmov8_precomp.yminusx), ptr + 48, 48) - memory.copy(changetype(ge_cmov8_precomp.xy2d), ptr + 96, 48) - ge_cmov(t, ge_cmov8_precomp, equal(babs, i8(i + 1))) + const baseptr = base + offset + (i * 144) // 4 bytes * 12 values * 3 fields + memory.copy(changetype(base_precomp.yplusx), baseptr, 48) + memory.copy(changetype(base_precomp.yminusx), baseptr + 48, 48) + memory.copy(changetype(base_precomp.xy2d), baseptr + 96, 48) + ge_cmov(t, base_precomp, equal(babs, i8(i + 1))) } - fe_copy(minust.yplusx, t.yminusx) - fe_copy(minust.yminusx, t.yplusx) - fe_neg(minust.xy2d, t.xy2d) - ge_cmov(t, minust, bnegative) + fe_copy(base_precomp.yplusx, t.yminusx) + fe_copy(base_precomp.yminusx, t.yplusx) + fe_neg(base_precomp.xy2d, t.xy2d) + ge_cmov(t, base_precomp, bnegative) } const u: FieldElement = fe() -- 2.52.0