// ASM stream Phase A.1 — `asm { … }` PARSES into an AsmExpr: template, named // value outputs (`[quot] "={rax}" -> u64`), register-pinned inputs, and a // `clobbers(.…)` clause are all accepted with no parse error. Codegen is not // implemented yet (the IR op + LLVM emit land in Phases C–E), so lowering bails // LOUD + named. This example pins that intermediate diagnostic; a later phase // turns it into a running multi-return example. Called from `main` so lowering // actually 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); }