inline fn mulX(comptime T: type, a: T, b: T) T
inline fn mulX(comptime T: type, a: T, b: T) T { const word_t = compiler_rt.HalveInt(T, false); const x = word_t{ .all = a }; const y = word_t{ .all = b }; var r = switch (T) { i64, i128 => word_t{ .all = muldXi(word_t.HalfT, x.s.low, y.s.low) }, else => unreachable, }; r.s.high +%= x.s.high *% y.s.low +% x.s.low *% y.s.high; return r.all; }