temporary hack to handle register shortage with dyngen for qemu_st64()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4438 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
ec95da6cfb
commit
6a8d7b7637
39
tcg/tcg.c
39
tcg/tcg.c
@ -308,6 +308,45 @@ TCGv tcg_global_reg_new(TCGType type, int reg, const char *name)
|
|||||||
return MAKE_TCGV(idx);
|
return MAKE_TCGV(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TCG_TARGET_REG_BITS == 32
|
||||||
|
/* temporary hack to avoid register shortage for tcg_qemu_st64() */
|
||||||
|
TCGv tcg_global_reg2_new_hack(TCGType type, int reg1, int reg2,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
TCGContext *s = &tcg_ctx;
|
||||||
|
TCGTemp *ts;
|
||||||
|
int idx;
|
||||||
|
char buf[64];
|
||||||
|
|
||||||
|
if (type != TCG_TYPE_I64)
|
||||||
|
tcg_abort();
|
||||||
|
idx = s->nb_globals;
|
||||||
|
tcg_temp_alloc(s, s->nb_globals + 2);
|
||||||
|
ts = &s->temps[s->nb_globals];
|
||||||
|
ts->base_type = type;
|
||||||
|
ts->type = TCG_TYPE_I32;
|
||||||
|
ts->fixed_reg = 1;
|
||||||
|
ts->reg = reg1;
|
||||||
|
ts->val_type = TEMP_VAL_REG;
|
||||||
|
pstrcpy(buf, sizeof(buf), name);
|
||||||
|
pstrcat(buf, sizeof(buf), "_0");
|
||||||
|
ts->name = strdup(buf);
|
||||||
|
|
||||||
|
ts++;
|
||||||
|
ts->base_type = type;
|
||||||
|
ts->type = TCG_TYPE_I32;
|
||||||
|
ts->fixed_reg = 1;
|
||||||
|
ts->reg = reg2;
|
||||||
|
ts->val_type = TEMP_VAL_REG;
|
||||||
|
pstrcpy(buf, sizeof(buf), name);
|
||||||
|
pstrcat(buf, sizeof(buf), "_1");
|
||||||
|
ts->name = strdup(buf);
|
||||||
|
|
||||||
|
s->nb_globals += 2;
|
||||||
|
return MAKE_TCGV(idx);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
|
TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
|
@ -267,6 +267,8 @@ void tcg_set_frame(TCGContext *s, int reg,
|
|||||||
tcg_target_long start, tcg_target_long size);
|
tcg_target_long start, tcg_target_long size);
|
||||||
void tcg_set_macro_func(TCGContext *s, TCGMacroFunc *func);
|
void tcg_set_macro_func(TCGContext *s, TCGMacroFunc *func);
|
||||||
TCGv tcg_global_reg_new(TCGType type, int reg, const char *name);
|
TCGv tcg_global_reg_new(TCGType type, int reg, const char *name);
|
||||||
|
TCGv tcg_global_reg2_new_hack(TCGType type, int reg1, int reg2,
|
||||||
|
const char *name);
|
||||||
TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
|
TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
|
||||||
const char *name);
|
const char *name);
|
||||||
TCGv tcg_temp_new(TCGType type);
|
TCGv tcg_temp_new(TCGType type);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user