(call_insn 7 6 9 (set (reg:SI 0)
(call (mem:QI (symbol_ref/v:SI ("printf")))
(const_int 4))) -1 (nil)
(nil))
(reg:SI 0) 就是 operand0
(mem:QI (symbol_ref/v:SI ("printf"))) 就是 operand1
(const_int 4) 就是 operand2
rtx
gen_call_value (operand0, operand1, operand2)
rtx operand0;
rtx operand1;
rtx operand2;
{
return gen_rtx (SET, VOIDmode, operand0, gen_rtx (CALL, VOIDmode, operand1, operand2));
}
gen_call_value
emit_call_1
expand_call
expand_expr
static void
emit_call_1 (funexp, funtype, stack_size, next_arg_reg, valreg, old_inhibit_defer_pop, use_insns)
rtx funexp;
tree funtype;
int stack_size;
rtx next_arg_reg;
rtx valreg;
int old_inhibit_defer_pop;
rtx use_insns;
{
rtx stack_size_rtx = gen_rtx (CONST_INT, VOIDmode, stack_size);
rtx call_insn;
if (valreg)
emit_call_insn (gen_call_value (valreg,
gen_rtx (MEM, FUNCTION_MODE, funexp),
stack_size_rtx, next_arg_reg));
emit_call_1()函数 通过 调用 emit_call_insn()函数来调用 gen_call_value()函数!
在gen_call_value()函数和gen_rtx()函数下断点的输出,保留以后看。
emit_call_1()函数下断点 emit_call_insn()函数下断点
说明了上面的: emit_call_1()函数 通过 调用 emit_call_insn()函数来调用 gen_call_value()函数!
expand_call
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt s
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt e
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt u
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt u
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt E
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt i
gen_rtx
gen_rtx arg 4
emit_call_1 funexp symbol_ref
emit_call_1 reg
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt e
gen_call_value
gen_call_value operand0 reg
gen_call_value operand1 mem
gen_call_value operand2 const_int
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt e
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt e
gen_rtx fmt e
emit_call_insn
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 2
gen_rtx fmt e
gen_rtx fmt e
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 1
gen_rtx fmt e
gen_jump
gen_jump operand0 code_label
gen_rtx
gen_rtx GET_RTX_LENGTH (code) 3
gen_rtx fmt u
gen_rtx fmt 0
gen_rtx fmt 0
#define XEXP(RTX, N) ((RTX)->fld[N].rtx)