参照元†
返り値†
/* 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 のように、引数の数だけアルファベットが並んでいる文字列。
switch (format_ptr[idx])
{
const char *str;
case 'T':
str = XTMPL (in_rtx, idx);
goto string;
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;
case '0':
print_rtx_operand_code_0 (in_rtx, idx);
break;
case 'e':
print_rtx_operand_code_e (in_rtx, idx);
break;
case 'E':
case 'V':
print_rtx_operand_codes_E_and_V (in_rtx, idx);
break;
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;
case 'i':
print_rtx_operand_code_i (in_rtx, idx);
break;
case 'p':
fprintf (m_outfile, " ");
print_poly_int (m_outfile, SUBREG_BYTE (in_rtx));
break;
case 'r':
print_rtx_operand_code_r (in_rtx);
break;
/* 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;
case 'u':
print_rtx_operand_code_u (in_rtx, idx);
break;
- in_rtx.code が LABEL_REF でなければ、UID を表示するだけ。
- LABEL_REF のときはやや複雑そう。
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;
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;
default:
gcc_unreachable ();
}
}
コメント†