mirror of https://github.com/xemu-project/xemu.git
tcg/mips: Simplify constraints on qemu_ld/st
The softmmu tlb uses TCG_REG_TMP[0-3], not any of the normally available registers. Now that we handle overlap betwen inputs and helper arguments, and have eliminated use of A0, we can allow any allocatable reg. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
2f2a3d1d0b
commit
f48cc9020b
|
@ -12,15 +12,13 @@
|
|||
C_O0_I1(r)
|
||||
C_O0_I2(rZ, r)
|
||||
C_O0_I2(rZ, rZ)
|
||||
C_O0_I2(SZ, S)
|
||||
C_O0_I3(SZ, S, S)
|
||||
C_O0_I3(SZ, SZ, S)
|
||||
C_O0_I3(rZ, r, r)
|
||||
C_O0_I3(rZ, rZ, r)
|
||||
C_O0_I4(rZ, rZ, rZ, rZ)
|
||||
C_O0_I4(SZ, SZ, S, S)
|
||||
C_O1_I1(r, L)
|
||||
C_O0_I4(rZ, rZ, r, r)
|
||||
C_O1_I1(r, r)
|
||||
C_O1_I2(r, 0, rZ)
|
||||
C_O1_I2(r, L, L)
|
||||
C_O1_I2(r, r, r)
|
||||
C_O1_I2(r, r, ri)
|
||||
C_O1_I2(r, r, rI)
|
||||
C_O1_I2(r, r, rIK)
|
||||
|
@ -30,7 +28,6 @@ C_O1_I2(r, rZ, rN)
|
|||
C_O1_I2(r, rZ, rZ)
|
||||
C_O1_I4(r, rZ, rZ, rZ, 0)
|
||||
C_O1_I4(r, rZ, rZ, rZ, rZ)
|
||||
C_O2_I1(r, r, L)
|
||||
C_O2_I2(r, r, L, L)
|
||||
C_O2_I1(r, r, r)
|
||||
C_O2_I2(r, r, r, r)
|
||||
C_O2_I4(r, r, rZ, rZ, rN, rN)
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
* REGS(letter, register_mask)
|
||||
*/
|
||||
REGS('r', ALL_GENERAL_REGS)
|
||||
REGS('L', ALL_QLOAD_REGS)
|
||||
REGS('S', ALL_QSTORE_REGS)
|
||||
|
||||
/*
|
||||
* Define constraint letters for constants:
|
||||
|
|
|
@ -176,20 +176,6 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
|
|||
#define TCG_CT_CONST_WSZ 0x2000 /* word size */
|
||||
|
||||
#define ALL_GENERAL_REGS 0xffffffffu
|
||||
#define NOA0_REGS (ALL_GENERAL_REGS & ~(1 << TCG_REG_A0))
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
#define ALL_QLOAD_REGS \
|
||||
(NOA0_REGS & ~((TCG_TARGET_REG_BITS < TARGET_LONG_BITS) << TCG_REG_A2))
|
||||
#define ALL_QSTORE_REGS \
|
||||
(NOA0_REGS & ~(TCG_TARGET_REG_BITS < TARGET_LONG_BITS \
|
||||
? (1 << TCG_REG_A2) | (1 << TCG_REG_A3) \
|
||||
: (1 << TCG_REG_A1)))
|
||||
#else
|
||||
#define ALL_QLOAD_REGS NOA0_REGS
|
||||
#define ALL_QSTORE_REGS NOA0_REGS
|
||||
#endif
|
||||
|
||||
|
||||
static bool is_p2m1(tcg_target_long val)
|
||||
{
|
||||
|
@ -2232,18 +2218,18 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
|
|||
|
||||
case INDEX_op_qemu_ld_i32:
|
||||
return (TCG_TARGET_REG_BITS == 64 || TARGET_LONG_BITS == 32
|
||||
? C_O1_I1(r, L) : C_O1_I2(r, L, L));
|
||||
? C_O1_I1(r, r) : C_O1_I2(r, r, r));
|
||||
case INDEX_op_qemu_st_i32:
|
||||
return (TCG_TARGET_REG_BITS == 64 || TARGET_LONG_BITS == 32
|
||||
? C_O0_I2(SZ, S) : C_O0_I3(SZ, S, S));
|
||||
? C_O0_I2(rZ, r) : C_O0_I3(rZ, r, r));
|
||||
case INDEX_op_qemu_ld_i64:
|
||||
return (TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, L)
|
||||
: TARGET_LONG_BITS == 32 ? C_O2_I1(r, r, L)
|
||||
: C_O2_I2(r, r, L, L));
|
||||
return (TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r)
|
||||
: TARGET_LONG_BITS == 32 ? C_O2_I1(r, r, r)
|
||||
: C_O2_I2(r, r, r, r));
|
||||
case INDEX_op_qemu_st_i64:
|
||||
return (TCG_TARGET_REG_BITS == 64 ? C_O0_I2(SZ, S)
|
||||
: TARGET_LONG_BITS == 32 ? C_O0_I3(SZ, SZ, S)
|
||||
: C_O0_I4(SZ, SZ, S, S));
|
||||
return (TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rZ, r)
|
||||
: TARGET_LONG_BITS == 32 ? C_O0_I3(rZ, rZ, r)
|
||||
: C_O0_I4(rZ, rZ, r, r));
|
||||
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
|
|
Loading…
Reference in New Issue