]> git.codecow.com Git - nano25519.git/commitdiff
Reuse one ge for base point arithmetic.
authorChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 20:17:51 +0000 (13:17 -0700)
committerChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 20:17:51 +0000 (13:17 -0700)
src/assembly/ge.ts

index 32dd7c5da0dc7ec04b18eed41672abf0a411959b..d48c3ee4e8fcb8a2716757f174ee4eed4095092f 100644 (file)
@@ -32,16 +32,7 @@ function ge_cmov (t: ge_precomp, u: ge_precomp, b: u8): void {
 }
 
 const ge_cmov8_minust: ge_precomp = new ge_precomp()
-const ge_cmov8_precomp: StaticArray<ge_precomp> = StaticArray.fromArray<ge_precomp>([
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-       new ge_precomp(),
-])
+const ge_cmov8_precomp: ge_precomp = new ge_precomp()
 //@ts-expect-error
 @inline
 function ge_cmov8_base (t: ge_precomp, offset: i32, b: i8): void {
@@ -52,10 +43,10 @@ function ge_cmov8_base (t: ge_precomp, offset: i32, b: i8): void {
        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[i].yplusx), ptr, 48)
-               memory.copy(changetype<usize>(ge_cmov8_precomp[i].yminusx), ptr + 48, 48)
-               memory.copy(changetype<usize>(ge_cmov8_precomp[i].xy2d), ptr + 96, 48)
-               ge_cmov(t, ge_cmov8_precomp[i], equal(babs, i8(i + 1)))
+               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)))
        }
 
        fe_copy(minust.yplusx, t.yminusx)