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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue