mirror of
				https://git.proxmox.com/git/qemu
				synced 2025-10-31 07:39:44 +00:00 
			
		
		
		
	target-sparc: Cleanup "global" temporary allocation
There are 6 temporaries that disas_sparc_insn relies on having been allocated. Now that they are no longer referenced across branches, they need not be allocated as local temps. Move the allocation/free of these temporaries to make it clear that they are local to the translation of a single insn. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									690995a615
								
							
						
					
					
						commit
						b09b2fd30c
					
				| @ -5177,16 +5177,6 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb, | ||||
|     dc->singlestep = (env->singlestep_enabled || singlestep); | ||||
|     gen_opc_end = gen_opc_buf + OPC_MAX_SIZE; | ||||
| 
 | ||||
|     cpu_tmp0 = tcg_temp_new(); | ||||
|     cpu_tmp32 = tcg_temp_new_i32(); | ||||
|     cpu_tmp64 = tcg_temp_new_i64(); | ||||
| 
 | ||||
|     cpu_dst = tcg_temp_local_new(); | ||||
| 
 | ||||
|     // loads and stores
 | ||||
|     cpu_val = tcg_temp_local_new(); | ||||
|     cpu_addr = tcg_temp_local_new(); | ||||
| 
 | ||||
|     num_insns = 0; | ||||
|     max_insns = tb->cflags & CF_COUNT_MASK; | ||||
|     if (max_insns == 0) | ||||
| @ -5222,9 +5212,24 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb, | ||||
|             gen_io_start(); | ||||
|         last_pc = dc->pc; | ||||
|         insn = cpu_ldl_code(env, dc->pc); | ||||
| 
 | ||||
|         cpu_tmp0 = tcg_temp_new(); | ||||
|         cpu_tmp32 = tcg_temp_new_i32(); | ||||
|         cpu_tmp64 = tcg_temp_new_i64(); | ||||
|         cpu_dst = tcg_temp_new(); | ||||
|         cpu_val = tcg_temp_new(); | ||||
|         cpu_addr = tcg_temp_new(); | ||||
| 
 | ||||
|         disas_sparc_insn(dc, insn); | ||||
|         num_insns++; | ||||
| 
 | ||||
|         tcg_temp_free(cpu_addr); | ||||
|         tcg_temp_free(cpu_val); | ||||
|         tcg_temp_free(cpu_dst); | ||||
|         tcg_temp_free_i64(cpu_tmp64); | ||||
|         tcg_temp_free_i32(cpu_tmp32); | ||||
|         tcg_temp_free(cpu_tmp0); | ||||
| 
 | ||||
|         if (dc->is_br) | ||||
|             break; | ||||
|         /* if the next PC is different, we abort now */ | ||||
| @ -5244,23 +5249,18 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb, | ||||
|              num_insns < max_insns); | ||||
| 
 | ||||
|  exit_gen_loop: | ||||
|     tcg_temp_free(cpu_addr); | ||||
|     tcg_temp_free(cpu_val); | ||||
|     tcg_temp_free(cpu_dst); | ||||
|     tcg_temp_free_i64(cpu_tmp64); | ||||
|     tcg_temp_free_i32(cpu_tmp32); | ||||
|     tcg_temp_free(cpu_tmp0); | ||||
| 
 | ||||
|     if (tb->cflags & CF_LAST_IO) | ||||
|     if (tb->cflags & CF_LAST_IO) { | ||||
|         gen_io_end(); | ||||
|     } | ||||
|     if (!dc->is_br) { | ||||
|         if (dc->pc != DYNAMIC_PC && | ||||
|             (dc->npc != DYNAMIC_PC && dc->npc != JUMP_PC)) { | ||||
|             /* static PC and NPC: we can use direct chaining */ | ||||
|             gen_goto_tb(dc, 0, dc->pc, dc->npc); | ||||
|         } else { | ||||
|             if (dc->pc != DYNAMIC_PC) | ||||
|             if (dc->pc != DYNAMIC_PC) { | ||||
|                 tcg_gen_movi_tl(cpu_pc, dc->pc); | ||||
|             } | ||||
|             save_npc(dc); | ||||
|             tcg_gen_exit_tb(0); | ||||
|         } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Richard Henderson
						Richard Henderson