20bab17440
Eliminates ~80 LongArray allocations per mul/mulDoubleG call by pre-allocating the P-side Jacobian and affine tables, the doubling temp, and the batch inversion scratch buffers in PointScratch (thread-local, allocated once per thread, reused across calls). Before: mul() allocated 8 MutablePoint (24 LongArray) + 8 MutablePoint (24 LongArray) + 16 AffinePoint (32 LongArray) + batch temps = ~92 LongArray per call. After: 0 allocations in the table construction path. Also fixes minor allocation in addMixed degenerate case (use t[5] scratch instead of new LongArray(4)). https://claude.ai/code/session_01BhU63WUe9AhikZxRdw3Lpg