*参照元 [#w1805567] #backlinks *説明 [#y80cf89b] FIXME: なにをするもの? -とぴっく --解説 いろいろあるので、わかったことは随時追加。 命令定義 (define_insn "*movdi_64bit" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r, m, *f,*f,*r,*f,*m") (match_operand:DI 1 "move_operand" " r,T,m,rJ,*r*J,*m,*f,*f,*f"))] ★1 "TARGET_64BIT ★1 && (register_operand (operands[0], DImode) ★1 || reg_or_0_operand (operands[1], DImode))" ★2 { return riscv_output_move (operands[0], operands[1]); } [(set_attr "move_type" "move,const,load,store,mtc,fpload,mfc,fmove,fpstore") (set_attr "mode" "DI")]) -★1 の部分は自動生成される recog_xxx() の実装に使われる。 これらの関数は recog() から呼び出される。 --[[gcc-8.3/gcc/recog()]] -recog は色々な箇所から使われるようだが、最初に命令を決めるのは vregs パスだと思われる。 --[[gcc-8.3/gcc/pass_instantiate_virtual_regs/execute()]] --recog は色々な箇所から使われるようだが、最初に命令を決めるのは vregs パスだと思われる。 ---[[gcc-8.3/gcc/pass_instantiate_virtual_regs/execute()]] -★2 の部分は自動生成される output_xxx() の実装に使われる。 これらの関数ポインタ(insn_output_fn 型)は insn_data の function メンバーに格納される。 --[[gcc-8.3/gcc/insn_data(global)]] --[[gcc-8.3/gcc/insn_output_fn]] **参考 [#r3cd4a3b] **関連モジュール [#z9a25074] - --[[gcc-8.3/]] *コメント [#l195eed7]