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 命令のリスト

リンクが参照するアドレスが格納されたレジスタ番号を取得する

  • free2reg_i はマッチング終了後の reg_tbl.free2reg_i
  • local2reg_ipush_local_atoms によって得られた連想リスト
  • reg_tbl.local2reg_i ではない

局所リンク・自由リンクに参照される(シンボル)アトムのリンクをセットする命令のリストを生成する

  • link2reg_i は局所リンクに参照されるアトムを生成する場合は local2reg_i, 自由リンクに参照されるアトムを生成する場合は free2reg_i
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

確保すべきレジスタのサイズと生成した命令列を返す