您的位置:首页 > 编程语言

gcc源代码分析,insn_extract()函数和recog_operand[]数组的关系

2014-01-17 12:08 441 查看
关于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));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc 源代码 分析