]> git.codecow.com Git - nano25519.git/commitdiff
Eliminate base buffer pointer computation entirely and use loop counter to avoid...
authorChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 19:29:01 +0000 (12:29 -0700)
committerChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 19:29:01 +0000 (12:29 -0700)
src/assembly/ge.ts

index 3093e069b1fcc1121097265b6620a77be23f467d..b44881b45774020113043419b192074a034570d9 100644 (file)
@@ -45,11 +45,10 @@ const ge_cmov8_precomp: StaticArray<ge_precomp> = StaticArray.fromArray<ge_preco
 ])
 //@ts-expect-error
 @inline
-function ge_cmov8_base (t: ge_precomp, pos: i32, b: i8): void {
+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))
-       const offset = pos * 1152 // 4 bytes * 12 values * 3 fe * 8 ge
        memory.copy(ge_cmov8_precomp_buffer, changetype<usize>(base) + offset, 1152)
 
        ge_precomp_0(t)
@@ -231,8 +230,9 @@ function ge_scalarmult_base (h: ge_p3, a: StaticArray<u8>): void {
 
        ge_p3_0(h)
 
-       for (let i = 1; i < 64; i += 2) {
-               ge_cmov8_base(t, i / 2, e[i])
+       // base pointer = 4 bytes * 12 values * 3 fe * 8 ge = 1152 bytes
+       for (let i = 1, bp = 0; i < 64; i += 2, bp += 1152) {
+               ge_cmov8_base(t, bp, e[i])
                ge_add_precomp(r, h, t)
                ge_p1p1_to_p3(h, r)
        }
@@ -246,8 +246,9 @@ function ge_scalarmult_base (h: ge_p3, a: StaticArray<u8>): void {
        ge_p2_dbl(r, s)
        ge_p1p1_to_p3(h, r)
 
-       for (let i = 0; i < 64; i += 2) {
-               ge_cmov8_base(t, i / 2, e[i])
+       // base pointer = 4 bytes * 12 values * 3 fe * 8 ge = 1152 bytes
+       for (let i = 0, bp = 0; i < 64; i += 2, bp += 1152) {
+               ge_cmov8_base(t, bp, e[i])
                ge_add_precomp(r, h, t)
                ge_p1p1_to_p3(h, r)
        }