*参照元 [#c2ffbf82] #backlinks *説明 [#u91ac480] -パス: [[gcc-8.3/gcc/print-rtl.c]] -FIXME: これは何? --説明 **引数 [#j9fe2d3a] -const_rtx in_rtx -- --[[gcc-8.3/gcc/const_rtx]] -int idx -- **返り値 [#acb9f51f] -なし **参考 [#f0ef1a4f] *実装 [#od1915fd] /* Subroutine of print_rtx. Print operand IDX of IN_RTX. */ void rtx_writer::print_rtx_operand (const_rtx in_rtx, int idx) { const char *format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)); -format は uuBni のように、引数の数だけアルファベットが並んでいる文字列。 --[[gcc-8.3/gcc/GET_CODE()]] --[[gcc-8.3/gcc/GET_RTX_FORMAT()]] switch (format_ptr[idx]) { const char *str; case 'T': str = XTMPL (in_rtx, idx); goto string; - --[[gcc-8.3/gcc/XTMPL()]] case 'S': case 's': str = XSTR (in_rtx, idx); string: if (str == 0) fputs (" (nil)", m_outfile); else fprintf (m_outfile, " (\"%s\")", str); m_sawclose = 1; break; - --[[gcc-8.3/gcc/XSTR()]] case '0': print_rtx_operand_code_0 (in_rtx, idx); break; - --[[gcc-8.3/gcc/print_rtx_operand_code_0()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_code_0()]] case 'e': print_rtx_operand_code_e (in_rtx, idx); break; - --[[gcc-8.3/gcc/print_rtx_operand_code_e()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_code_e()]] case 'E': case 'V': print_rtx_operand_codes_E_and_V (in_rtx, idx); break; - --[[gcc-8.3/gcc/print_rtx_operand_codes_E_and_V()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_codes_E_and_V()]] case 'w': if (! m_simple) fprintf (m_outfile, " "); fprintf (m_outfile, HOST_WIDE_INT_PRINT_DEC, XWINT (in_rtx, idx)); if (! m_simple && !m_compact) fprintf (m_outfile, " [" HOST_WIDE_INT_PRINT_HEX "]", (unsigned HOST_WIDE_INT) XWINT (in_rtx, idx)); break; - --[[gcc-8.3/gcc/XWINT()]] --[[gcc-8.3/gcc/HOST_WIDE_INT_PRINT_DEC]] --[[gcc-8.3/gcc/HOST_WIDE_INT_PRINT_HEX]] --[[gcc-8.3/gcc/HOST_WIDE_INT]] case 'i': print_rtx_operand_code_i (in_rtx, idx); break; - --[[gcc-8.3/gcc/print_rtx_operand_code_i()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_code_i()]] case 'p': fprintf (m_outfile, " "); print_poly_int (m_outfile, SUBREG_BYTE (in_rtx)); break; - --[[gcc-8.3/gcc/print_poly_int()]] --[[gcc-8.3/gcc/SUBREG_BYTE()]] case 'r': print_rtx_operand_code_r (in_rtx); break; - --[[gcc-8.3/gcc/print_rtx_operand_code_r()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_code_r()]] /* Print NOTE_INSN names rather than integer codes. */ case 'n': fprintf (m_outfile, " %s", GET_NOTE_INSN_NAME (XINT (in_rtx, idx))); m_sawclose = 0; break; - --[[gcc-8.3/gcc/XINT()]] --[[gcc-8.3/gcc/GET_NOTE_INSN_NAME()]] case 'u': print_rtx_operand_code_u (in_rtx, idx); break; -in_rtx.code が LABEL_REF でなければ、UID を表示するだけ。 -LABEL_REF のときはやや複雑そう。 --[[gcc-8.3/gcc/print_rtx_operand_code_u()]] --[[gcc-8.3/gcc/rtx_writer/print_rtx_operand_code_u()]] case 't': #ifndef GENERATOR_FILE if (idx == 0 && GET_CODE (in_rtx) == DEBUG_IMPLICIT_PTR) print_mem_expr (m_outfile, DEBUG_IMPLICIT_PTR_DECL (in_rtx)); else if (idx == 0 && GET_CODE (in_rtx) == DEBUG_PARAMETER_REF) print_mem_expr (m_outfile, DEBUG_PARAMETER_REF_DECL (in_rtx)); else dump_addr (m_outfile, " ", XTREE (in_rtx, idx)); #endif break; - --[[gcc-8.3/gcc/GET_CODE()]] --[[gcc-8.3/gcc/DEBUG_IMPLICIT_PTR_DECL()]] --[[gcc-8.3/gcc/DEBUG_IMPLICIT_REF_DECL()]] --[[gcc-8.3/gcc/print_mem_expr()]] --[[gcc-8.3/gcc/dump_addr()]] --[[gcc-8.3/gcc/XTREE()]] case '*': fputs (" Unknown", m_outfile); m_sawclose = 0; break; case 'B': /* Don't print basic block ids in compact mode. */ if (m_compact) break; #ifndef GENERATOR_FILE if (XBBDEF (in_rtx, idx)) fprintf (m_outfile, " %i", XBBDEF (in_rtx, idx)->index); #endif break; - --XBBDEF() は basic_block 型を返す。 --[[gcc-8.3/gcc/XBBDEF()]] --[[gcc-8.3/gcc/basic_block]] default: gcc_unreachable (); } - --[[gcc-8.3/gcc/gcc_unreachable()]] } *コメント [#m462a97a]