mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
tcg/tci: Split out tcg_out_op_{rrm,rrrm,rrrrm}
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
6dbf78c17a
commit
6f00d7af75
@ -328,6 +328,19 @@ static void tcg_out_op_rr(TCGContext *s, TCGOpcode op, TCGReg r0, TCGReg r1)
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
static void tcg_out_op_rrm(TCGContext *s, TCGOpcode op,
|
||||
TCGReg r0, TCGReg r1, TCGArg m2)
|
||||
{
|
||||
uint8_t *old_code_ptr = s->code_ptr;
|
||||
|
||||
tcg_out_op_t(s, op);
|
||||
tcg_out_r(s, r0);
|
||||
tcg_out_r(s, r1);
|
||||
tcg_out32(s, m2);
|
||||
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
static void tcg_out_op_rrr(TCGContext *s, TCGOpcode op,
|
||||
TCGReg r0, TCGReg r1, TCGReg r2)
|
||||
{
|
||||
@ -383,6 +396,20 @@ static void tcg_out_op_rrrc(TCGContext *s, TCGOpcode op,
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
static void tcg_out_op_rrrm(TCGContext *s, TCGOpcode op,
|
||||
TCGReg r0, TCGReg r1, TCGReg r2, TCGArg m3)
|
||||
{
|
||||
uint8_t *old_code_ptr = s->code_ptr;
|
||||
|
||||
tcg_out_op_t(s, op);
|
||||
tcg_out_r(s, r0);
|
||||
tcg_out_r(s, r1);
|
||||
tcg_out_r(s, r2);
|
||||
tcg_out32(s, m3);
|
||||
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
static void tcg_out_op_rrrbb(TCGContext *s, TCGOpcode op, TCGReg r0,
|
||||
TCGReg r1, TCGReg r2, uint8_t b3, uint8_t b4)
|
||||
{
|
||||
@ -398,6 +425,21 @@ static void tcg_out_op_rrrbb(TCGContext *s, TCGOpcode op, TCGReg r0,
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
static void tcg_out_op_rrrrm(TCGContext *s, TCGOpcode op, TCGReg r0,
|
||||
TCGReg r1, TCGReg r2, TCGReg r3, TCGArg m4)
|
||||
{
|
||||
uint8_t *old_code_ptr = s->code_ptr;
|
||||
|
||||
tcg_out_op_t(s, op);
|
||||
tcg_out_r(s, r0);
|
||||
tcg_out_r(s, r1);
|
||||
tcg_out_r(s, r2);
|
||||
tcg_out_r(s, r3);
|
||||
tcg_out32(s, m4);
|
||||
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
}
|
||||
|
||||
#if TCG_TARGET_REG_BITS == 32
|
||||
static void tcg_out_op_rrrr(TCGContext *s, TCGOpcode op,
|
||||
TCGReg r0, TCGReg r1, TCGReg r2, TCGReg r3)
|
||||
@ -663,29 +705,23 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
|
||||
|
||||
case INDEX_op_qemu_ld_i32:
|
||||
case INDEX_op_qemu_st_i32:
|
||||
tcg_out_op_t(s, opc);
|
||||
tcg_out_r(s, *args++);
|
||||
tcg_out_r(s, *args++);
|
||||
if (TARGET_LONG_BITS > TCG_TARGET_REG_BITS) {
|
||||
tcg_out_r(s, *args++);
|
||||
if (TARGET_LONG_BITS <= TCG_TARGET_REG_BITS) {
|
||||
tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
|
||||
} else {
|
||||
tcg_out_op_rrrm(s, opc, args[0], args[1], args[2], args[3]);
|
||||
}
|
||||
tcg_out32(s, *args++);
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
break;
|
||||
|
||||
case INDEX_op_qemu_ld_i64:
|
||||
case INDEX_op_qemu_st_i64:
|
||||
tcg_out_op_t(s, opc);
|
||||
tcg_out_r(s, *args++);
|
||||
if (TCG_TARGET_REG_BITS == 32) {
|
||||
tcg_out_r(s, *args++);
|
||||
if (TCG_TARGET_REG_BITS == 64) {
|
||||
tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
|
||||
} else if (TARGET_LONG_BITS <= TCG_TARGET_REG_BITS) {
|
||||
tcg_out_op_rrrm(s, opc, args[0], args[1], args[2], args[3]);
|
||||
} else {
|
||||
tcg_out_op_rrrrm(s, opc, args[0], args[1],
|
||||
args[2], args[3], args[4]);
|
||||
}
|
||||
tcg_out_r(s, *args++);
|
||||
if (TARGET_LONG_BITS > TCG_TARGET_REG_BITS) {
|
||||
tcg_out_r(s, *args++);
|
||||
}
|
||||
tcg_out32(s, *args++);
|
||||
old_code_ptr[1] = s->code_ptr - old_code_ptr;
|
||||
break;
|
||||
|
||||
case INDEX_op_mb:
|
||||
|
Loading…
Reference in New Issue
Block a user