mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-21 17:11:57 -06:00
tcg-mips: Rearrange register allocation
Use FP (also known as S8) as a normal call-saved register. Include T0 in the allocation order and call-clobbered list even though it's currently used as a TCG temporary. Put the argument registers at the end of the allocation order. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
fbef2cc80f
commit
418839044e
2 changed files with 19 additions and 11 deletions
|
@ -67,13 +67,14 @@ static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = {
|
||||||
"k1",
|
"k1",
|
||||||
"gp",
|
"gp",
|
||||||
"sp",
|
"sp",
|
||||||
"fp",
|
"s8",
|
||||||
"ra",
|
"ra",
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* check if we really need so many registers :P */
|
/* check if we really need so many registers :P */
|
||||||
static const TCGReg tcg_target_reg_alloc_order[] = {
|
static const TCGReg tcg_target_reg_alloc_order[] = {
|
||||||
|
/* Call saved registers. */
|
||||||
TCG_REG_S0,
|
TCG_REG_S0,
|
||||||
TCG_REG_S1,
|
TCG_REG_S1,
|
||||||
TCG_REG_S2,
|
TCG_REG_S2,
|
||||||
|
@ -82,6 +83,10 @@ static const TCGReg tcg_target_reg_alloc_order[] = {
|
||||||
TCG_REG_S5,
|
TCG_REG_S5,
|
||||||
TCG_REG_S6,
|
TCG_REG_S6,
|
||||||
TCG_REG_S7,
|
TCG_REG_S7,
|
||||||
|
TCG_REG_S8,
|
||||||
|
|
||||||
|
/* Call clobbered registers. */
|
||||||
|
TCG_REG_T0,
|
||||||
TCG_REG_T1,
|
TCG_REG_T1,
|
||||||
TCG_REG_T2,
|
TCG_REG_T2,
|
||||||
TCG_REG_T3,
|
TCG_REG_T3,
|
||||||
|
@ -91,12 +96,14 @@ static const TCGReg tcg_target_reg_alloc_order[] = {
|
||||||
TCG_REG_T7,
|
TCG_REG_T7,
|
||||||
TCG_REG_T8,
|
TCG_REG_T8,
|
||||||
TCG_REG_T9,
|
TCG_REG_T9,
|
||||||
TCG_REG_A0,
|
TCG_REG_V1,
|
||||||
TCG_REG_A1,
|
|
||||||
TCG_REG_A2,
|
|
||||||
TCG_REG_A3,
|
|
||||||
TCG_REG_V0,
|
TCG_REG_V0,
|
||||||
TCG_REG_V1
|
|
||||||
|
/* Argument registers, opposite order of allocation. */
|
||||||
|
TCG_REG_A3,
|
||||||
|
TCG_REG_A2,
|
||||||
|
TCG_REG_A1,
|
||||||
|
TCG_REG_A0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const TCGReg tcg_target_call_iarg_regs[4] = {
|
static const TCGReg tcg_target_call_iarg_regs[4] = {
|
||||||
|
@ -1646,7 +1653,7 @@ static int tcg_target_callee_save_regs[] = {
|
||||||
TCG_REG_S5,
|
TCG_REG_S5,
|
||||||
TCG_REG_S6,
|
TCG_REG_S6,
|
||||||
TCG_REG_S7,
|
TCG_REG_S7,
|
||||||
TCG_REG_FP,
|
TCG_REG_S8,
|
||||||
TCG_REG_RA, /* should be last for ABI compliance */
|
TCG_REG_RA, /* should be last for ABI compliance */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1778,6 +1785,7 @@ static void tcg_target_init(TCGContext *s)
|
||||||
(1 << TCG_REG_A1) |
|
(1 << TCG_REG_A1) |
|
||||||
(1 << TCG_REG_A2) |
|
(1 << TCG_REG_A2) |
|
||||||
(1 << TCG_REG_A3) |
|
(1 << TCG_REG_A3) |
|
||||||
|
(1 << TCG_REG_T0) |
|
||||||
(1 << TCG_REG_T1) |
|
(1 << TCG_REG_T1) |
|
||||||
(1 << TCG_REG_T2) |
|
(1 << TCG_REG_T2) |
|
||||||
(1 << TCG_REG_T3) |
|
(1 << TCG_REG_T3) |
|
||||||
|
|
|
@ -60,8 +60,11 @@ typedef enum {
|
||||||
TCG_REG_K1,
|
TCG_REG_K1,
|
||||||
TCG_REG_GP,
|
TCG_REG_GP,
|
||||||
TCG_REG_SP,
|
TCG_REG_SP,
|
||||||
TCG_REG_FP,
|
TCG_REG_S8,
|
||||||
TCG_REG_RA,
|
TCG_REG_RA,
|
||||||
|
|
||||||
|
TCG_REG_CALL_STACK = TCG_REG_SP,
|
||||||
|
TCG_AREG0 = TCG_REG_S0,
|
||||||
} TCGReg;
|
} TCGReg;
|
||||||
|
|
||||||
#define TCG_CT_CONST_ZERO 0x100
|
#define TCG_CT_CONST_ZERO 0x100
|
||||||
|
@ -69,7 +72,6 @@ typedef enum {
|
||||||
#define TCG_CT_CONST_S16 0x400
|
#define TCG_CT_CONST_S16 0x400
|
||||||
|
|
||||||
/* used for function call generation */
|
/* used for function call generation */
|
||||||
#define TCG_REG_CALL_STACK TCG_REG_SP
|
|
||||||
#define TCG_TARGET_STACK_ALIGN 8
|
#define TCG_TARGET_STACK_ALIGN 8
|
||||||
#define TCG_TARGET_CALL_STACK_OFFSET 16
|
#define TCG_TARGET_CALL_STACK_OFFSET 16
|
||||||
#define TCG_TARGET_CALL_ALIGN_ARGS 1
|
#define TCG_TARGET_CALL_ALIGN_ARGS 1
|
||||||
|
@ -127,8 +129,6 @@ extern bool use_mips32r2_instructions;
|
||||||
#define TCG_TARGET_HAS_ext8u_i32 0 /* andi rt, rs, 0xff */
|
#define TCG_TARGET_HAS_ext8u_i32 0 /* andi rt, rs, 0xff */
|
||||||
#define TCG_TARGET_HAS_ext16u_i32 0 /* andi rt, rs, 0xffff */
|
#define TCG_TARGET_HAS_ext16u_i32 0 /* andi rt, rs, 0xffff */
|
||||||
|
|
||||||
#define TCG_AREG0 TCG_REG_S0
|
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
#include <machine/sysarch.h>
|
#include <machine/sysarch.h>
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue