#lang racket (provide Label Var Reg Imm LMov Add Sub RetDefault Svc Bl) (require racket/struct) (struct AArch64VarProgram (info labeled-seq) #:transparent) (struct Label (label) #:transparent) (struct Var (var-name) #:transparent) (struct Reg (reg-name) #:transparent) (struct Imm (immediate) #:transparent) (struct LMov (src dest) #:transparent) (struct Add (op1 op2 dest) #:transparent) (struct Sub (op1 op2 dest) #:transparent) (struct RetDefault () #:transparent) (struct Svc (i) #:transparent) (struct Bl (label) #:transparent) (define valid-reg-names '(x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 sp pc xzr))