]> git.codecow.com Git - nano25519.git/commitdiff
Reduce down to one scratch object for base point arithmetic.
authorChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 20:25:47 +0000 (13:25 -0700)
committerChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 20:25:47 +0000 (13:25 -0700)
src/assembly/ge.ts

index d48c3ee4e8fcb8a2716757f174ee4eed4095092f..ca953a917d1b6b09a43da4396d6ea2d983d9a3d0 100644 (file)
@@ -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<usize>(ge_cmov8_precomp.yplusx), ptr, 48)
-               memory.copy(changetype<usize>(ge_cmov8_precomp.yminusx), ptr + 48, 48)
-               memory.copy(changetype<usize>(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<usize>(base_precomp.yplusx), baseptr, 48)
+               memory.copy(changetype<usize>(base_precomp.yminusx), baseptr + 48, 48)
+               memory.copy(changetype<usize>(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()