open Gen open Ass val callee_saved_registers : temp list (* la liste des callee_saved_registers *) val special_registers : temp list (* la liste de tous les registres utilisés *) val registers : temp list (* la liste de tous les registres utilisés *) val load_sp_offset : int -> temp -> instr (* "load_sp_offset bytes d0" génère une instruction qui "load" l'addresse "bytes" (en bytes) du frame (i.e. au dessus de sp) dans le registre destination d0. *) val store_sp_offset : int -> temp -> instr (* "store_sp_offset bytes s0" génère une instruction qui "store" le registre source "s0" à l'addresse "bytes" (en bytes) du frame (i.e. au dessus de sp) *) val move : temp -> temp -> instr (* "move u v" génère une instruction move qui copie u dans v *) val mmove : temp -> temp list -> instr (* "mmove u v" génère une instruction mmove qui copie u dans v *) val namer : temp -> string (* fourni un namer pour les temporaires avec les vrais noms des registres (lorsque ceux-ci sont des vrais registres) *) val print : out_channel -> instr list -> unit (* imprime le code dans chan avec le namer précédent *) type procedure = Frame.frame * string list * instr list (* le second argument est la liste des instructions que l'on peut supprimer si le frame est vide *) type program = { prelude : instr; main : procedure; procedures : procedure list; } val program : Code.code Trans.program -> program;;