sig
  type assembly
  type index
  type label = string
  type reg =
      R0
    | R1
    | R2
    | R3
    | R4
    | R5
    | R6
    | R7
    | R8
    | R9
    | R10
    | R11
    | R12
    | SP
    | LR
    | PC
  type operand = Imm of int | Reg of Arm.reg
  type cond = EQ | NE | GE | GT | LE | LT
  val ix : Arm.operand -> Arm.index
  val ix_lsl : Arm.operand -> int -> Arm.index
  val noop : Arm.assembly
  val seq : Arm.assembly -> Arm.assembly -> Arm.assembly
  val concat : Arm.assembly list -> Arm.assembly
  val comment : string -> Arm.assembly
  val label : string -> Arm.assembly
  val mov : ?cond:Arm.cond -> Arm.reg -> Arm.operand -> Arm.assembly
  val ldr :
    ?cond:Arm.cond -> ?index:Arm.index -> Arm.reg -> Arm.reg -> Arm.assembly
  val str :
    ?cond:Arm.cond ->
    ?index:Arm.index -> Arm.operand -> Arm.reg -> Arm.assembly
  val cmp : ?cond:Arm.cond -> Arm.operand -> Arm.operand -> Arm.assembly
  val sub :
    ?cond:Arm.cond -> Arm.reg -> Arm.operand -> Arm.operand -> Arm.assembly
  val add :
    ?cond:Arm.cond -> Arm.reg -> Arm.operand -> Arm.operand -> Arm.assembly
  val mul :
    ?cond:Arm.cond -> Arm.reg -> Arm.operand -> Arm.operand -> Arm.assembly
  val adr : ?cond:Arm.cond -> Arm.reg -> Arm.label -> Arm.assembly
  val push : Arm.operand -> Arm.assembly
  val pop : Arm.reg -> Arm.assembly
  val bl : ?cond:Arm.cond -> Arm.label -> Arm.assembly
  val b : ?cond:Arm.cond -> Arm.label -> Arm.assembly
  val bx : ?cond:Arm.cond -> Arm.reg -> Arm.assembly
  val string_to_reg : string -> Arm.reg
  val reg_index : Arm.reg -> int
  val string_of_assembly : Arm.assembly -> string
end