Module I386_echec


module I386_echec: sig  end
i386 backend.

In 3-addresses codes, the first one is not used and the second will contain the result. %edi is reserved for locally needed registers.

Push_o needs %ecx, %esi and %edi.
Author(s): Samuel Mimram


val string_of_char : char -> string
val list_assoc_id : Asm_ir.variable_def -> (Asm_ir.variable_def * 'a) list -> 'a
val list_mem_assoc_id : Asm_ir.variable_def -> (Asm_ir.variable_def * 'a) list -> bool
val list_assoc' : 'a -> ('b * 'a) list -> 'b
val list_mem_assoc' : 'a -> ('b * 'a) list -> bool
val list_itern : (int -> 'a -> 'b) -> 'a list -> unit
val esp : Asm_ir.register
val ebp : Asm_ir.register
val eax : Asm_ir.register
val ebx : Asm_ir.register
val ecx : Asm_ir.register
val edx : Asm_ir.register
val esi : Asm_ir.register
val edi : Asm_ir.register
val string_of_register : Asm_ir.register -> string
Get a as-like string representation of a register.
val get_reg_var : Asm_ir.register -> Asm_ir.variable
Get a variable allocated in a specific register.
val get_stack_pos_var : unit -> Asm_ir.variable
Get a variable containing the address of the top of the stack.
val nb_registers : int
Total number of available registers (warning: register numbers are zero-based).
val allocate_registers : Asm_ir.base_block -> int -> unit
Do the registers allocation. This is done base block by base block (all registers should be available at the beginning of each base block and all variables needed again should be spilled at the end of each base block). %edx is reserved for loading values passed by reference.
val local_opt_base_block : Asm_ir.base_block -> unit
Do some local opimizations on a base block.
val generate_code : Asm_ir.program -> string
Generate the target asm.