// ASM stream — `asm { … }` parses + validates the full rich shape: named value // outputs (`[quot] "={rax}" -> u64`), register-pinned inputs, and a // `clobbers(.…)` clause, all accepted. This is a MULTI-output (tuple-returning) // asm, which is deferred to Phase E — so lowering bails LOUD + named with the // specific "Phase E" diagnostic (single-output asm already runs; see 1645). // Called from `main` so lowering reaches the asm body (lazy lowering skips // uncalled functions). divmod :: (n: u64, d: u64) -> (quot: u64, rem: u64) { return asm { "divq %[d]", [quot] "={rax}" -> u64, [rem] "={rdx}" -> u64, "{rax}" = n, "{rdx}" = 0, [d] "r" = d, clobbers(.cc), }; } main :: () { q, r := divmod(17, 5); }