target-alpha: Inline hw_ret
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
		
							parent
							
								
									2f458b7c31
								
							
						
					
					
						commit
						6c05d3ded7
					
				| @ -91,8 +91,6 @@ DEF_HELPER_FLAGS_2(ieee_input_cmp, TCG_CALL_NO_WG, void, env, i64) | ||||
| DEF_HELPER_FLAGS_2(ieee_input_s, TCG_CALL_NO_WG, void, env, i64) | ||||
| 
 | ||||
| #if !defined (CONFIG_USER_ONLY) | ||||
| DEF_HELPER_2(hw_ret, void, env, i64) | ||||
| 
 | ||||
| DEF_HELPER_2(ldl_phys, i64, env, i64) | ||||
| DEF_HELPER_2(ldq_phys, i64, env, i64) | ||||
| DEF_HELPER_2(ldl_l_phys, i64, env, i64) | ||||
|  | ||||
| @ -40,14 +40,6 @@ uint64_t helper_load_pcc(CPUAlphaState *env) | ||||
| 
 | ||||
| /* PALcode support special instructions */ | ||||
| #ifndef CONFIG_USER_ONLY | ||||
| void helper_hw_ret(CPUAlphaState *env, uint64_t a) | ||||
| { | ||||
|     env->pc = a & ~3; | ||||
|     env->intr_flag = 0; | ||||
|     env->lock_addr = -1; | ||||
|     env->pal_mode = a & 1; | ||||
| } | ||||
| 
 | ||||
| void helper_tbia(CPUAlphaState *env) | ||||
| { | ||||
|     tlb_flush(CPU(alpha_env_get_cpu(env)), 1); | ||||
|  | ||||
| @ -2635,13 +2635,18 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) | ||||
|             /* Pre-EV6 CPUs interpreted this as HW_REI, loading the return
 | ||||
|                address from EXC_ADDR.  This turns out to be useful for our | ||||
|                emulation PALcode, so continue to accept it.  */ | ||||
|             tmp = tcg_temp_new(); | ||||
|             tcg_gen_ld_i64(tmp, cpu_env, offsetof(CPUAlphaState, exc_addr)); | ||||
|             gen_helper_hw_ret(cpu_env, tmp); | ||||
|             tcg_temp_free(tmp); | ||||
|             ctx->lit = vb = tcg_temp_new(); | ||||
|             tcg_gen_ld_i64(vb, cpu_env, offsetof(CPUAlphaState, exc_addr)); | ||||
|         } else { | ||||
|             gen_helper_hw_ret(cpu_env, load_gpr(ctx, rb)); | ||||
|             vb = load_gpr(ctx, rb); | ||||
|         } | ||||
|         tmp = tcg_temp_new(); | ||||
|         tcg_gen_movi_i64(tmp, 0); | ||||
|         tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, intr_flag)); | ||||
|         tcg_gen_movi_i64(cpu_lock_addr, -1); | ||||
|         tcg_gen_andi_i64(tmp, vb, 1); | ||||
|         tcg_gen_st8_i64(tmp, cpu_env, offsetof(CPUAlphaState, pal_mode)); | ||||
|         tcg_gen_andi_i64(cpu_pc, vb, ~3); | ||||
|         ret = EXIT_PC_UPDATED; | ||||
|         break; | ||||
| #else | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Richard Henderson
						Richard Henderson