From 6a8d7b763772691053d1971f29e64b1e296962cf Mon Sep 17 00:00:00 2001 From: bellard Date: Mon, 12 May 2008 13:49:14 +0000 Subject: [PATCH] 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 --- tcg/tcg.c | 39 +++++++++++++++++++++++++++++++++++++++ tcg/tcg.h | 2 ++ 2 files changed, 41 insertions(+) diff --git a/tcg/tcg.c b/tcg/tcg.c index c5a8daf..aa46bcf 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -308,6 +308,45 @@ TCGv tcg_global_reg_new(TCGType type, int reg, const char *name) 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, const char *name) { diff --git a/tcg/tcg.h b/tcg/tcg.h index 68d8d44..66bbe73 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -267,6 +267,8 @@ void tcg_set_frame(TCGContext *s, int reg, tcg_target_long start, tcg_target_long size); void tcg_set_macro_func(TCGContext *s, TCGMacroFunc *func); 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, const char *name); TCGv tcg_temp_new(TCGType type); -- 2.7.4