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 -> 'a Mips.operand -> 'a -> Mips.text
val sub :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val mul :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val rem :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val div :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> 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 -> 'a Mips.operand -> 'a -> Mips.text
val sne :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val sge :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val sgt :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val sle :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> Mips.text
val slt :
Mips.register -> Mips.register -> 'a Mips.operand -> 'a -> 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 -> 'a Mips.address -> 'a -> Mips.text
val lbu : Mips.register -> 'a Mips.address -> 'a -> Mips.text
val lw : Mips.register -> 'a Mips.address -> 'a -> Mips.text
val sb : Mips.register -> 'a Mips.address -> 'a -> Mips.text
val sw : Mips.register -> 'a Mips.address -> 'a -> 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 -> 'a Mips.asm -> 'a 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