CoqToLeanAsm: x86 Macro Assembler in Lean 4

2.4. Multiplication by Constant (Paper Section 4.1)

The paper presents add_mulc, a macro that generates shift-and-add sequences for constant multiplication. Given add_mulcFast EDI EDX #160, it produces:

SHL EDX, 5;;
ADD EDI, EDX;;
LEA EDI, [EDI + EDX * 4 + 0]

Crucially, this macro has a proved specification:

Lemma add_mulcCorrect nbits : forall (r1 r2: Reg) m,
  m < 2^nbits ->
  basic
    (r1 |-> v ** r2 |-> w ** OSZCP_Any)
    (add_mulc nbits r1 r2 m)
    (r1 |-> addB v (mulB w (fromNat m)) ** r2? ** OSZCP_Any).