]> git.codecow.com Git - nano25519.git/commitdiff
Unroll hot path again.
authorChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 21:59:44 +0000 (14:59 -0700)
committerChris Duncan <chris@codecow.com>
Fri, 21 Aug 2026 21:59:44 +0000 (14:59 -0700)
src/assembly/ge.ts

index e7f5fc8722f93dd517b35b80d070d1e09d46fb8b..8924cbd1d2b9a98012d75fdfd2756081f244fd16 100644 (file)
@@ -39,10 +39,17 @@ function ge_cmov8_base (t: ge_precomp, offset: i32, b: i8): void {
        const babs: u8 = b - (((-bnegative) & b) * (i8(1) << 1))
 
        ge_precomp_0(t)
-       for (let i = 0; i < 8; i++) {
-               const baseptr = base + offset + (i * 144) // 4 bytes * 12 values * 3 fields
-               ge_cmov(t, baseptr, equal(babs, i8(i + 1)))
-       }
+       const base_ptr = base + offset
+
+       // base pointer offset = 144n = (4 bytes * 12 values * 3 fields) * n
+       ge_cmov(t, base_ptr, equal(babs, 1))
+       ge_cmov(t, base_ptr + 144, equal(babs, 2))
+       ge_cmov(t, base_ptr + 288, equal(babs, 3))
+       ge_cmov(t, base_ptr + 432, equal(babs, 4))
+       ge_cmov(t, base_ptr + 576, equal(babs, 5))
+       ge_cmov(t, base_ptr + 720, equal(babs, 6))
+       ge_cmov(t, base_ptr + 864, equal(babs, 7))
+       ge_cmov(t, base_ptr + 1008, equal(babs, 8))
 
        fe_memcopy(minust, changetype<usize>(t.yminusx))
        fe_memcopy(minust + 48, changetype<usize>(t.yplusx))