silicon_sse: patch-in-place isPointInsideBounds 6cy->5cy (1.2x), naked vucomiss

This commit is contained in:
MarcelineVQ
2026-03-17 01:26:55 -07:00
parent 16f1a073ae
commit 662c854376
2 changed files with 74 additions and 12 deletions
+21 -5
View File
@@ -267,11 +267,27 @@ export fn si_quatSlerp(out: u32, a_ptr: u32, t_bits: u32, b_ptr: u32) u32 {
}
// --- 0x699330: isPointInsideBounds (1.7M/7.5s) ---
export fn si_isPointInsideBounds(a: u32, b: u32) u32 {
const va: [*]const f32 = @ptrFromInt(a);
const vb: [*]const f32 = @ptrFromInt(b);
if (vb[0] <= va[0] and vb[1] <= va[1] and vb[2] <= va[2]) return 1;
return 0;
// Original: __fastcall(ECX=a, EDX=b), RET. 46 bytes, 6cy.
// Naked SSE: comiss replaces x87 FCOMP+FNSTSW+TEST (3 insns -> 1 insn per compare).
// Binary patch candidate: fits in 46 bytes.
export fn si_isPointInsideBounds() callconv(.naked) void {
// ECX = a, EDX = b. Return EAX = 1 if b[0..2] <= a[0..2], else 0.
asm volatile (
\\vmovss (%%edx), %%xmm0
\\vucomiss (%%ecx), %%xmm0
\\ja 1f
\\vmovss 4(%%edx), %%xmm0
\\vucomiss 4(%%ecx), %%xmm0
\\ja 1f
\\vmovss 8(%%edx), %%xmm0
\\vucomiss 8(%%ecx), %%xmm0
\\ja 1f
\\mov $1, %%eax
\\ret
\\1:
\\xor %%eax, %%eax
\\ret
);
}
// --- 0x749280: calculateSinCos ---