This PR builds on top of #1951 (following the observation in #1951 (comment)). Only the last two commits are new.
In secp256k1_scalar_reduce_512, all limb multiplications involve either SECP256K1_N_C_0 (0x402da1732fc9bebf, ~0.251 * 2^64) or SECP256K1_N_C_1 (0x4551231950b75fc4, ~0.271 * 2^64). Because both constants have bit 63 cleared and their sum is ~0.522 * 2^64, the accumulator across both reduction phases peaks at a little over 0.52 * 2^128 (0x857ec48c80811e84ffffffffffffffff) under worst-case 512-bit inputs. It never overflows 128 bits, so the carry into c2 is always zero.
Switching reduce_512 to use muladd_fast, sumadd_fast, and extract_fast allows eliminating c2 there entirely. The 128-bit macros (init, muladd_fast, sumadd_fast, extract_fast) are decoupled from c2 to operate solely on acc, leaving c2 strictly for the 192-bit accumulator in mul_512. The now-unused sumadd macro is also dropped.
Additionally, the branchless 258-to-256 tail from #453 is integrated into reduce_512 using secp256k1_uint128 primitives, shared across both the portable C and x86_64 assembly paths. This eliminates the duplicate assembly Phase 3 and the conditional branch in secp256k1_scalar_reduce, reducing total lines by 21 while maintaining a single 128-bit accumulator across the entire function.