提交 4e9cf840 编写于 作者: R Richard Henderson

tcg-sparc: Create tcg_out_call

Rename the existing tcg_out_calli to tcg_out_call_nodelay.
Signed-off-by: NRichard Henderson <rth@twiddle.net>
上级 fdd8ec71
...@@ -735,7 +735,7 @@ static void tcg_out_addsub2(TCGContext *s, TCGReg rl, TCGReg rh, ...@@ -735,7 +735,7 @@ static void tcg_out_addsub2(TCGContext *s, TCGReg rl, TCGReg rh,
tcg_out_mov(s, TCG_TYPE_I32, rl, tmp); tcg_out_mov(s, TCG_TYPE_I32, rl, tmp);
} }
static void tcg_out_calli(TCGContext *s, tcg_insn_unit *dest) static void tcg_out_call_nodelay(TCGContext *s, tcg_insn_unit *dest)
{ {
ptrdiff_t disp = tcg_pcrel_diff(s, dest); ptrdiff_t disp = tcg_pcrel_diff(s, dest);
...@@ -748,6 +748,12 @@ static void tcg_out_calli(TCGContext *s, tcg_insn_unit *dest) ...@@ -748,6 +748,12 @@ static void tcg_out_calli(TCGContext *s, tcg_insn_unit *dest)
} }
} }
static void tcg_out_call(TCGContext *s, tcg_insn_unit *dest)
{
tcg_out_call_nodelay(s, dest);
tcg_out_nop(s);
}
#ifdef CONFIG_SOFTMMU #ifdef CONFIG_SOFTMMU
static tcg_insn_unit *qemu_ld_trampoline[16]; static tcg_insn_unit *qemu_ld_trampoline[16];
static tcg_insn_unit *qemu_st_trampoline[16]; static tcg_insn_unit *qemu_st_trampoline[16];
...@@ -803,7 +809,7 @@ static void build_trampolines(TCGContext *s) ...@@ -803,7 +809,7 @@ static void build_trampolines(TCGContext *s)
/* Set the env operand. */ /* Set the env operand. */
tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O0, TCG_AREG0); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O0, TCG_AREG0);
/* Tail call. */ /* Tail call. */
tcg_out_calli(s, qemu_ld_helpers[i]); tcg_out_call_nodelay(s, qemu_ld_helpers[i]);
tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O7, ra); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O7, ra);
} }
...@@ -850,7 +856,7 @@ static void build_trampolines(TCGContext *s) ...@@ -850,7 +856,7 @@ static void build_trampolines(TCGContext *s)
/* Set the env operand. */ /* Set the env operand. */
tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O0, TCG_AREG0); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O0, TCG_AREG0);
/* Tail call. */ /* Tail call. */
tcg_out_calli(s, qemu_st_helpers[i]); tcg_out_call_nodelay(s, qemu_st_helpers[i]);
tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O7, ra); tcg_out_mov(s, TCG_TYPE_PTR, TCG_REG_O7, ra);
} }
} }
...@@ -1030,7 +1036,7 @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr, ...@@ -1030,7 +1036,7 @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg data, TCGReg addr,
func = qemu_ld_trampoline[memop]; func = qemu_ld_trampoline[memop];
} }
assert(func != NULL); assert(func != NULL);
tcg_out_calli(s, func); tcg_out_call_nodelay(s, func);
/* delay slot */ /* delay slot */
tcg_out_movi(s, TCG_TYPE_I32, param, memi); tcg_out_movi(s, TCG_TYPE_I32, param, memi);
...@@ -1107,7 +1113,7 @@ static void tcg_out_qemu_st(TCGContext *s, TCGReg data, TCGReg addr, ...@@ -1107,7 +1113,7 @@ static void tcg_out_qemu_st(TCGContext *s, TCGReg data, TCGReg addr,
func = qemu_st_trampoline[memop]; func = qemu_st_trampoline[memop];
assert(func != NULL); assert(func != NULL);
tcg_out_calli(s, func); tcg_out_call_nodelay(s, func);
/* delay slot */ /* delay slot */
tcg_out_movi(s, TCG_TYPE_REG, param, memi); tcg_out_movi(s, TCG_TYPE_REG, param, memi);
...@@ -1163,12 +1169,12 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, ...@@ -1163,12 +1169,12 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_call: case INDEX_op_call:
if (const_args[0]) { if (const_args[0]) {
tcg_out_calli(s, (void *)(uintptr_t)a0); tcg_out_call(s, (void *)(uintptr_t)a0);
} else { } else {
tcg_out_arithi(s, TCG_REG_O7, a0, 0, JMPL); tcg_out_arithi(s, TCG_REG_O7, a0, 0, JMPL);
/* delay slot */
tcg_out_nop(s);
} }
/* delay slot */
tcg_out_nop(s);
break; break;
case INDEX_op_br: case INDEX_op_br:
tcg_out_bpcc(s, COND_A, BPCC_PT, a0); tcg_out_bpcc(s, COND_A, BPCC_PT, a0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册