关于PATTERN (insn),在emit_call_insn()函数里面的make_insn_raw ()函数里就被赋值了。
/* The body of an insn. */
#define PATTERN(INSN) ((INSN)->fld[3].rtx)。
(call_insn 7 6 9 (set (reg:SI 0)
(call (mem:QI (symbol_ref/v:SI ("printf")))
(const_int 4))) -1 (nil)
(nil))
recog_operand[0]意思是reg,
recog_operand[1]意思是mem
recog_operand[2]意思是const_int。
Insn-recog.c:23
rtx *recog_operand_loc[MAX_RECOG_OPERANDS];
VOID
extract_140 (insn)
rtx insn;
{
recog_operand[0] = *(recog_operand_loc[0]
= &XEXP (insn, 0));
recog_operand[1] = *(recog_operand_loc[1]
= &XEXP (XEXP (insn, 1), 0));
recog_operand[2] = *(recog_operand_loc[2]
= &XEXP (XEXP (insn, 1), 1));
}
VOID (*insn_extract_fn[]) () =
{ extract_0, extract_1, extract_2, extract_3,
extract_4, extract_5, extract_6, extract_7,
extract_8, extract_9, extract_10, extract_11,
extract_12, extract_13, extract_14, extract_15,
extract_16, extract_17, extract_18, extract_19,
extract_20, extract_21, extract_22, extract_23,
extract_24, extract_25, extract_26, extract_27,
extract_28, extract_29, extract_30, extract_31,
extract_32, extract_33, extract_34, extract_35,
extract_36, extract_37, extract_38, extract_39,
extract_40, extract_41, extract_42, extract_43,
extract_44, extract_45, extract_46, extract_47,
extract_48, extract_49, extract_50, extract_51,
extract_52, extract_53, extract_54, extract_55,
extract_56, extract_57, extract_58, extract_59,
extract_60, extract_61, extract_62, extract_63,
extract_64, extract_65, extract_66, extract_67,
extract_68, extract_69, extract_70, extract_71,
extract_72, extract_73, extract_74, extract_75,
extract_76, extract_77, extract_78, extract_79,
extract_80, extract_81, extract_82, extract_83,
extract_84, extract_85, extract_86, extract_87,
extract_88, extract_89, extract_90, extract_91,
extract_92, extract_93, extract_94, extract_95,
extract_96, extract_97, extract_98, extract_99,
extract_100, extract_101, extract_102, extract_103,
extract_104, extract_105, extract_106, extract_107,
extract_108, extract_109, extract_110, extract_111,
extract_112, extract_113, extract_114, extract_115,
extract_116, extract_117, extract_118, extract_119,
extract_120, extract_121, extract_122, extract_123,
extract_124, extract_125, extract_126, extract_127,
extract_128, extract_129, extract_130, extract_131,
extract_132, extract_133, extract_134, extract_135,
extract_136, extract_137, extract_138, extract_139,
extract_140, extract_141
};
void fatal_insn_not_found ();
void
insn_extract (insn)
rtx insn;
{
if (INSN_CODE (insn) == -1) fatal_insn_not_found (insn);
(*insn_extract_fn[INSN_CODE (insn)]) (
PATTERN (insn));
}