From 6910cb7b82849318f839b2871104312e2bee2bc6 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 21 Aug 2026 14:59:44 -0700 Subject: [PATCH] Unroll hot path again. --- src/assembly/ge.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/assembly/ge.ts b/src/assembly/ge.ts index e7f5fc8..8924cbd 100644 --- a/src/assembly/ge.ts +++ b/src/assembly/ge.ts @@ -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(t.yminusx)) fe_memcopy(minust + 48, changetype(t.yplusx)) -- 2.52.0