Commit 6a8d7b763772691053d1971f29e64b1e296962cf

Authored by bellard
1 parent ec95da6c

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
Showing 2 changed files with 41 additions and 0 deletions
tcg/tcg.c
... ... @@ -308,6 +308,45 @@ TCGv tcg_global_reg_new(TCGType type, int reg, const char *name)
308 308 return MAKE_TCGV(idx);
309 309 }
310 310  
  311 +#if TCG_TARGET_REG_BITS == 32
  312 +/* temporary hack to avoid register shortage for tcg_qemu_st64() */
  313 +TCGv tcg_global_reg2_new_hack(TCGType type, int reg1, int reg2,
  314 + const char *name)
  315 +{
  316 + TCGContext *s = &tcg_ctx;
  317 + TCGTemp *ts;
  318 + int idx;
  319 + char buf[64];
  320 +
  321 + if (type != TCG_TYPE_I64)
  322 + tcg_abort();
  323 + idx = s->nb_globals;
  324 + tcg_temp_alloc(s, s->nb_globals + 2);
  325 + ts = &s->temps[s->nb_globals];
  326 + ts->base_type = type;
  327 + ts->type = TCG_TYPE_I32;
  328 + ts->fixed_reg = 1;
  329 + ts->reg = reg1;
  330 + ts->val_type = TEMP_VAL_REG;
  331 + pstrcpy(buf, sizeof(buf), name);
  332 + pstrcat(buf, sizeof(buf), "_0");
  333 + ts->name = strdup(buf);
  334 +
  335 + ts++;
  336 + ts->base_type = type;
  337 + ts->type = TCG_TYPE_I32;
  338 + ts->fixed_reg = 1;
  339 + ts->reg = reg2;
  340 + ts->val_type = TEMP_VAL_REG;
  341 + pstrcpy(buf, sizeof(buf), name);
  342 + pstrcat(buf, sizeof(buf), "_1");
  343 + ts->name = strdup(buf);
  344 +
  345 + s->nb_globals += 2;
  346 + return MAKE_TCGV(idx);
  347 +}
  348 +#endif
  349 +
311 350 TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
312 351 const char *name)
313 352 {
... ...
tcg/tcg.h
... ... @@ -267,6 +267,8 @@ void tcg_set_frame(TCGContext *s, int reg,
267 267 tcg_target_long start, tcg_target_long size);
268 268 void tcg_set_macro_func(TCGContext *s, TCGMacroFunc *func);
269 269 TCGv tcg_global_reg_new(TCGType type, int reg, const char *name);
  270 +TCGv tcg_global_reg2_new_hack(TCGType type, int reg1, int reg2,
  271 + const char *name);
270 272 TCGv tcg_global_mem_new(TCGType type, int reg, tcg_target_long offset,
271 273 const char *name);
272 274 TCGv tcg_temp_new(TCGType type);
... ...