Module Generator__.Pushout
val functor_of : (string * Corelang.c_link list) -> string * int
val push_atom_of : Generator__.Register_table.reg_tbl -> ('a * (string * Corelang.c_link list)) -> Generator__.Register_table.reg_tbl * (('a * int) * Generator__.Instruction.rhs_inst)
アトムを生成する命令を生成する
val push_atoms_of : Generator__.Register_table.reg_tbl -> (int * (string * Corelang.c_link list)) list -> Generator__.Register_table.reg_tbl * ((int * int) list * Generator__.Instruction.rhs_inst list)
アトムを生成する命令のリストを生成する
- 戻り値は
reg_tbl, (local2reg_i, push_atoms)
- ただし,
local2reg_i
は局所リンク名とレジスタ番号の連想リスト push_atoms
は PushAtom 命令のリスト
- 戻り値は
val set_link_of_link : Generator__.Register_table.reg_tbl -> (int * Generator__.Instruction.reg_i) list -> Generator__.Instruction.reg_i -> int -> Analyze.local_port_map -> Corelang.c_link -> Analyze.local_port_map * Generator__.Instruction.rhs_inst
リンクが参照するアドレスが格納されたレジスタ番号を取得する
free2reg_i
はマッチング終了後のreg_tbl.free2reg_i
local2reg_i
はpush_local_atoms
によって得られた連想リストreg_tbl.local2reg_i
ではない
val set_links_of_atom : Generator__.Register_table.reg_tbl -> (int * Generator__.Instruction.reg_i) list -> Analyze.local_port_map -> (int * ('a * Corelang.c_link list)) -> Analyze.local_port_map * Generator__.Instruction.rhs_inst list
局所リンク・自由リンクに参照される(シンボル)アトムのリンクをセットする命令のリストを生成する
link2reg_i
は局所リンクに参照されるアトムを生成する場合はlocal2reg_i
, 自由リンクに参照されるアトムを生成する場合はfree2reg_i
val set_links_of_atoms : Generator__.Register_table.reg_tbl -> (int * Generator__.Instruction.reg_i) list -> Analyze.local_port_map -> (int * ('a * Corelang.c_link list)) list -> Analyze.local_port_map * Generator__.Instruction.rhs_inst list
val free_atom_of : Generator__.Instruction.reg_i -> Generator__.Instruction.rhs_inst
ルール左辺のアトムを消去する命令を生成する
val free_atoms_of : Generator__.Instruction.reg_i list -> Generator__.Instruction.rhs_inst list
ルール左辺のアトムを消去する命令のリストを生成する
val connect_of : ('a * (Generator__.Instruction.reg_i * int)) list -> ('a * 'a) -> Generator__.Instruction.rhs_inst
自由リンク同士の再接続を行う命令を生成する
val connects_of : (string * (Generator__.Instruction.reg_i * int)) list -> (string * string) list -> Generator__.Instruction.rhs_inst list
リダイレクトを行う命令のリストを生成する
val push_atoms : Generator__.Register_table.reg_tbl -> ((Analyze.local_port_map * (int * (string * Corelang.c_link list)) list) * (string * string) list) -> int * Generator__.Instruction.rhs_inst list
確保すべきレジスタのサイズと生成した命令列を返す