sig
  type 'a asm
  type text = [ `text ] Mips.asm
  type data = [ `data ] Mips.asm
  type program = { text : Mips.text; data : Mips.data; }
  val print_program : Stdlib.Format.formatter -> Mips.program -> unit
  val print_in_file : file:string -> Mips.program -> unit
  type register = string
  val v0 : Mips.register
  val v1 : Mips.register
  val a0 : Mips.register
  val a1 : Mips.register
  val a2 : Mips.register
  val a3 : Mips.register
  val t0 : Mips.register
  val t1 : Mips.register
  val t2 : Mips.register
  val t3 : Mips.register
  val s0 : Mips.register
  val s1 : Mips.register
  val ra : Mips.register
  val sp : Mips.register
  val fp : Mips.register
  val gp : Mips.register
  val zero : Mips.register
  type label = string
  type 'a operand
  val oreg : Mips.register Mips.operand
  val oi : int Mips.operand
  val oi32 : int32 Mips.operand
  val li : Mips.register -> int -> Mips.text
  val li32 : Mips.register -> int32 -> Mips.text
  val abs : Mips.register -> Mips.register -> Mips.text
  val neg : Mips.register -> Mips.register -> Mips.text
  val add :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val sub :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val mul :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val rem :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val div :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val and_ : Mips.register -> Mips.register -> Mips.register -> Mips.text
  val or_ : Mips.register -> Mips.register -> Mips.register -> Mips.text
  val not_ : Mips.register -> Mips.register -> Mips.text
  val clz : Mips.register -> Mips.register -> Mips.text
  val seq :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val sne :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val sge :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val sgt :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val sle :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val slt :
    Mips.register -> Mips.register -> 'Mips.operand -> '-> Mips.text
  val b : Mips.label -> Mips.text
  val beq : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val bne : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val bge : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val bgt : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val ble : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val blt : Mips.register -> Mips.register -> Mips.label -> Mips.text
  val beqz : Mips.register -> Mips.label -> Mips.text
  val bnez : Mips.register -> Mips.label -> Mips.text
  val bgez : Mips.register -> Mips.label -> Mips.text
  val bgtz : Mips.register -> Mips.label -> Mips.text
  val blez : Mips.register -> Mips.label -> Mips.text
  val bltz : Mips.register -> Mips.label -> Mips.text
  val jr : Mips.register -> Mips.text
  val jal : Mips.label -> Mips.text
  val jalr : Mips.register -> Mips.text
  type 'a address
  val alab : Mips.label Mips.address
  val areg : (int * Mips.register) Mips.address
  val la : Mips.register -> 'Mips.address -> '-> Mips.text
  val lbu : Mips.register -> 'Mips.address -> '-> Mips.text
  val lw : Mips.register -> 'Mips.address -> '-> Mips.text
  val sb : Mips.register -> 'Mips.address -> '-> Mips.text
  val sw : Mips.register -> 'Mips.address -> '-> Mips.text
  val move : Mips.register -> Mips.register -> Mips.text
  val nop : [>  ] Mips.asm
  val label : Mips.label -> [>  ] Mips.asm
  val syscall : Mips.text
  val comment : string -> [>  ] Mips.asm
  val align : int -> [>  ] Mips.asm
  val asciiz : string -> Mips.data
  val dword : int list -> Mips.data
  val address : Mips.label list -> Mips.data
  val space : int -> Mips.data
  val inline : string -> [>  ] Mips.asm
  val ( ++ ) :
    ([< `data | `text ] as 'a) Mips.asm -> 'Mips.asm -> 'Mips.asm
  val push : Mips.register -> Mips.text
  val pop : Mips.register -> Mips.text
  val popn : int -> Mips.text
  val peek : Mips.register -> Mips.text
end