rocq/backend/AsmTerm.v
Asm.v's lines from the terms asm.pl prints them from: the decoder of what nanofilasm − termsFILE writes, one line term each. It is how the printer is checked against asm.pl before any pass that builds lines exists, and how a later pass's lines are compared with the Prolog compiler's, term by term.
A term that asm.pl would refuse (bad_asm_line) decodes to nothing.
Option binding: let* x ≔ e in b is b with x the value of e, or nothing when e has none.
f of every element, or nothing if any has none.
A literal: an integer or an atom.
The name of an atom.
String equality, written as Prolog's ==. The decoders compare names with it rather than match string patterns, which extract to a decision tree over the bits of every character.
An expression: A + B or a literal.
One byte of an ascii list: a one-character atom of a code below 256.
The instruction ins(Op, Suffix, Operands), if t is one.
A line. The cases are disjoint: no directive is named label, asm_fixed or ins.