tcg: Initialize cpu_env generically
This is identical for each target.  So, move the initialization to
common code.  Move the variable itself out of tcg_ctx and name it
cpu_env to minimize changes within targets.
This also means we can remove tcg_global_reg_new_{ptr,i32,i64},
since there are no longer global-register temps created by targets.
Reviewed-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
			
			
This commit is contained in:
		
							parent
							
								
									3468b59e18
								
							
						
					
					
						commit
						1c2adb958f
					
				| 
						 | 
				
			
			@ -18,7 +18,7 @@ static inline void gen_tb_start(TranslationBlock *tb)
 | 
			
		|||
        count = tcg_temp_new_i32();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tcg_gen_ld_i32(count, tcg_ctx->tcg_env,
 | 
			
		||||
    tcg_gen_ld_i32(count, cpu_env,
 | 
			
		||||
                   -ENV_OFFSET + offsetof(CPUState, icount_decr.u32));
 | 
			
		||||
 | 
			
		||||
    if (tb_cflags(tb) & CF_USE_ICOUNT) {
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ static inline void gen_tb_start(TranslationBlock *tb)
 | 
			
		|||
    tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, tcg_ctx->exitreq_label);
 | 
			
		||||
 | 
			
		||||
    if (tb_cflags(tb) & CF_USE_ICOUNT) {
 | 
			
		||||
        tcg_gen_st16_i32(count, tcg_ctx->tcg_env,
 | 
			
		||||
        tcg_gen_st16_i32(count, cpu_env,
 | 
			
		||||
                         -ENV_OFFSET + offsetof(CPUState, icount_decr.u16.low));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,16 +61,14 @@ static inline void gen_tb_end(TranslationBlock *tb, int num_insns)
 | 
			
		|||
static inline void gen_io_start(void)
 | 
			
		||||
{
 | 
			
		||||
    TCGv_i32 tmp = tcg_const_i32(1);
 | 
			
		||||
    tcg_gen_st_i32(tmp, tcg_ctx->tcg_env,
 | 
			
		||||
                   -ENV_OFFSET + offsetof(CPUState, can_do_io));
 | 
			
		||||
    tcg_gen_st_i32(tmp, cpu_env, -ENV_OFFSET + offsetof(CPUState, can_do_io));
 | 
			
		||||
    tcg_temp_free_i32(tmp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void gen_io_end(void)
 | 
			
		||||
{
 | 
			
		||||
    TCGv_i32 tmp = tcg_const_i32(0);
 | 
			
		||||
    tcg_gen_st_i32(tmp, tcg_ctx->tcg_env,
 | 
			
		||||
                   -ENV_OFFSET + offsetof(CPUState, can_do_io));
 | 
			
		||||
    tcg_gen_st_i32(tmp, cpu_env, -ENV_OFFSET + offsetof(CPUState, can_do_io));
 | 
			
		||||
    tcg_temp_free_i32(tmp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,6 @@ struct DisasContext {
 | 
			
		|||
#define DISAS_PC_STALE            DISAS_TARGET_2
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_std_ir[31];
 | 
			
		||||
static TCGv cpu_fir[31];
 | 
			
		||||
static TCGv cpu_pc;
 | 
			
		||||
| 
						 | 
				
			
			@ -126,9 +125,6 @@ void alpha_translate_init(void)
 | 
			
		|||
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 31; i++) {
 | 
			
		||||
        cpu_std_ir[i] = tcg_global_mem_new_i64(cpu_env,
 | 
			
		||||
                                               offsetof(CPUAlphaState, ir[i]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,6 @@
 | 
			
		|||
#define IS_USER(s) (s->user)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
TCGv_env cpu_env;
 | 
			
		||||
/* We reuse the same 64-bit temporaries for efficiency.  */
 | 
			
		||||
static TCGv_i64 cpu_V0, cpu_V1, cpu_M0;
 | 
			
		||||
static TCGv_i32 cpu_R[16];
 | 
			
		||||
| 
						 | 
				
			
			@ -81,9 +80,6 @@ void arm_translate_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 16; i++) {
 | 
			
		||||
        cpu_R[i] = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
                                          offsetof(CPUARMState, regs[i]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,6 @@ typedef struct DisasCompare {
 | 
			
		|||
} DisasCompare;
 | 
			
		||||
 | 
			
		||||
/* Share the TCG temporaries common between 32 and 64 bit modes.  */
 | 
			
		||||
extern TCGv_env cpu_env;
 | 
			
		||||
extern TCGv_i32 cpu_NF, cpu_ZF, cpu_CF, cpu_VF;
 | 
			
		||||
extern TCGv_i64 cpu_exclusive_addr;
 | 
			
		||||
extern TCGv_i64 cpu_exclusive_val;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,6 @@
 | 
			
		|||
#define CC_MASK_NZVC 0xf
 | 
			
		||||
#define CC_MASK_RNZV 0x10e
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_R[16];
 | 
			
		||||
static TCGv cpu_PR[16];
 | 
			
		||||
static TCGv cc_x;
 | 
			
		||||
| 
						 | 
				
			
			@ -3368,8 +3367,6 @@ void cris_initialize_tcg(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cc_x = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                              offsetof(CPUCRISState, cc_x), "cc_x");
 | 
			
		||||
    cc_src = tcg_global_mem_new(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1272,8 +1272,6 @@ void cris_initialize_crisv10_tcg(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cc_x = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                              offsetof(CPUCRISState, cc_x), "cc_x");
 | 
			
		||||
    cc_src = tcg_global_mem_new(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,6 @@ typedef struct DisasInsn {
 | 
			
		|||
} DisasInsn;
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_gr[32];
 | 
			
		||||
static TCGv cpu_iaoq_f;
 | 
			
		||||
static TCGv cpu_iaoq_b;
 | 
			
		||||
| 
						 | 
				
			
			@ -126,9 +125,6 @@ void hppa_translate_init(void)
 | 
			
		|||
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    TCGV_UNUSED(cpu_gr[0]);
 | 
			
		||||
    for (i = 1; i < 32; i++) {
 | 
			
		||||
        cpu_gr[i] = tcg_global_mem_new(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,6 @@
 | 
			
		|||
//#define MACRO_TEST   1
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_A0;
 | 
			
		||||
static TCGv cpu_cc_dst, cpu_cc_src, cpu_cc_src2, cpu_cc_srcT;
 | 
			
		||||
static TCGv_i32 cpu_cc_op;
 | 
			
		||||
| 
						 | 
				
			
			@ -8367,8 +8366,6 @@ void tcg_x86_init(void)
 | 
			
		|||
    };
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cpu_cc_op = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
                                       offsetof(CPUX86State, cc_op), "cc_op");
 | 
			
		||||
    cpu_cc_dst = tcg_global_mem_new(cpu_env, offsetof(CPUX86State, cc_dst),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,6 @@
 | 
			
		|||
#define DISAS_UPDATE  DISAS_TARGET_1 /* cpu state was modified dynamically */
 | 
			
		||||
#define DISAS_TB_JUMP DISAS_TARGET_2 /* only pc was modified statically */
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_R[32];
 | 
			
		||||
static TCGv cpu_pc;
 | 
			
		||||
static TCGv cpu_ie;
 | 
			
		||||
| 
						 | 
				
			
			@ -1208,9 +1207,6 @@ void lm32_translate_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < ARRAY_SIZE(cpu_R); i++) {
 | 
			
		||||
        cpu_R[i] = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                          offsetof(CPULM32State, regs[i]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,8 +44,6 @@
 | 
			
		|||
static TCGv_i32 cpu_halted;
 | 
			
		||||
static TCGv_i32 cpu_exception_index;
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
 | 
			
		||||
static char cpu_reg_names[2 * 8 * 3 + 5 * 4];
 | 
			
		||||
static TCGv cpu_dregs[8];
 | 
			
		||||
static TCGv cpu_aregs[8];
 | 
			
		||||
| 
						 | 
				
			
			@ -69,9 +67,6 @@ void m68k_tcg_init(void)
 | 
			
		|||
    char *p;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
#define DEFO32(name, offset) \
 | 
			
		||||
    QREG_##name = tcg_global_mem_new_i32(cpu_env, \
 | 
			
		||||
        offsetof(CPUM68KState, offset), #name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,6 @@
 | 
			
		|||
#define DISAS_TB_JUMP DISAS_TARGET_2 /* only pc was modified statically */
 | 
			
		||||
 | 
			
		||||
static TCGv env_debug;
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_R[32];
 | 
			
		||||
static TCGv cpu_SR[18];
 | 
			
		||||
static TCGv env_imm;
 | 
			
		||||
| 
						 | 
				
			
			@ -1855,9 +1854,6 @@ void mb_tcg_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    env_debug = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                    offsetof(CPUMBState, debug),
 | 
			
		||||
                    "debug0");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1376,7 +1376,6 @@ enum {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
/* global register indices */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_gpr[32], cpu_PC;
 | 
			
		||||
static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC];
 | 
			
		||||
static TCGv cpu_dspctrl, btarget, bcond;
 | 
			
		||||
| 
						 | 
				
			
			@ -20454,9 +20453,6 @@ void mips_tcg_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    TCGV_UNUSED(cpu_gpr[0]);
 | 
			
		||||
    for (i = 1; i < 32; i++)
 | 
			
		||||
        cpu_gpr[i] = tcg_global_mem_new(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,6 @@ enum {
 | 
			
		|||
 | 
			
		||||
static TCGv cpu_pc;
 | 
			
		||||
static TCGv cpu_gregs[16];
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cc_a, cc_b;
 | 
			
		||||
 | 
			
		||||
#include "exec/gen-icount.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -101,8 +100,6 @@ void moxie_translate_init(void)
 | 
			
		|||
        "$r10", "$r11", "$r12", "$r13"
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cpu_pc = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
                                    offsetof(CPUMoxieState, pc), "$pc");
 | 
			
		||||
    for (i = 0; i < 16; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -789,7 +789,6 @@ static const char * const regnames[] = {
 | 
			
		|||
    "rpc"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static TCGv_ptr cpu_env;
 | 
			
		||||
static TCGv cpu_R[NUM_CORE_REGS];
 | 
			
		||||
 | 
			
		||||
#include "exec/gen-icount.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -947,9 +946,6 @@ void nios2_tcg_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < NUM_CORE_REGS; i++) {
 | 
			
		||||
        cpu_R[i] = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                                      offsetof(CPUNios2State, regs[i]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,6 @@ typedef struct DisasContext {
 | 
			
		|||
    bool singlestep_enabled;
 | 
			
		||||
} DisasContext;
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_sr;
 | 
			
		||||
static TCGv cpu_R[32];
 | 
			
		||||
static TCGv cpu_R0;
 | 
			
		||||
| 
						 | 
				
			
			@ -80,8 +79,6 @@ void openrisc_translate_init(void)
 | 
			
		|||
    };
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cpu_sr = tcg_global_mem_new(cpu_env,
 | 
			
		||||
                                offsetof(CPUOpenRISCState, sr), "sr");
 | 
			
		||||
    cpu_dflag = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,6 @@
 | 
			
		|||
/* Code translation helpers                                                  */
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static char cpu_reg_names[10*3 + 22*4 /* GPR */
 | 
			
		||||
    + 10*4 + 22*5 /* SPE GPRh */
 | 
			
		||||
    + 10*4 + 22*5 /* FPR */
 | 
			
		||||
| 
						 | 
				
			
			@ -85,9 +84,6 @@ void ppc_translate_init(void)
 | 
			
		|||
    char* p;
 | 
			
		||||
    size_t cpu_reg_names_size;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    p = cpu_reg_names;
 | 
			
		||||
    cpu_reg_names_size = sizeof(cpu_reg_names);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,10 +37,6 @@
 | 
			
		|||
#include "qemu/log.h"
 | 
			
		||||
#include "qemu/host-utils.h"
 | 
			
		||||
#include "exec/cpu_ldst.h"
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
 | 
			
		||||
#include "exec/gen-icount.h"
 | 
			
		||||
#include "exec/helper-proto.h"
 | 
			
		||||
#include "exec/helper-gen.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -112,8 +108,6 @@ void s390x_translate_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    psw_addr = tcg_global_mem_new_i64(cpu_env,
 | 
			
		||||
                                      offsetof(CPUS390XState, psw.addr),
 | 
			
		||||
                                      "psw_addr");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,6 @@ enum {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_gregs[32];
 | 
			
		||||
static TCGv cpu_sr, cpu_sr_m, cpu_sr_q, cpu_sr_t;
 | 
			
		||||
static TCGv cpu_pc, cpu_ssr, cpu_spc, cpu_gbr;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,9 +98,6 @@ void sh4_translate_init(void)
 | 
			
		|||
        "FPR12_BANK1", "FPR13_BANK1", "FPR14_BANK1", "FPR15_BANK1",
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 24; i++) {
 | 
			
		||||
        cpu_gregs[i] = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
                                              offsetof(CPUSH4State, gregs[i]),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,6 @@
 | 
			
		|||
                         according to jump_pc[T2] */
 | 
			
		||||
 | 
			
		||||
/* global register indexes */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv_ptr cpu_regwptr;
 | 
			
		||||
static TCGv cpu_cc_src, cpu_cc_src2, cpu_cc_dst;
 | 
			
		||||
static TCGv_i32 cpu_cc_op;
 | 
			
		||||
| 
						 | 
				
			
			@ -5911,9 +5910,6 @@ void sparc_tcg_init(void)
 | 
			
		|||
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    cpu_regwptr = tcg_global_mem_new_ptr(cpu_env,
 | 
			
		||||
                                         offsetof(CPUSPARCState, regwptr),
 | 
			
		||||
                                         "regwptr");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,6 @@
 | 
			
		|||
 | 
			
		||||
#define FMT64X                          "%016" PRIx64
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv cpu_pc;
 | 
			
		||||
static TCGv cpu_regs[TILEGX_R_COUNT];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2445,8 +2444,6 @@ void tilegx_tcg_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cpu_pc = tcg_global_mem_new_i64(cpu_env, offsetof(CPUTLGState, pc), "pc");
 | 
			
		||||
    for (i = 0; i < TILEGX_R_COUNT; i++) {
 | 
			
		||||
        cpu_regs[i] = tcg_global_mem_new_i64(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,8 +47,6 @@ static TCGv cpu_PSW_V;
 | 
			
		|||
static TCGv cpu_PSW_SV;
 | 
			
		||||
static TCGv cpu_PSW_AV;
 | 
			
		||||
static TCGv cpu_PSW_SAV;
 | 
			
		||||
/* CPU env */
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
 | 
			
		||||
#include "exec/gen-icount.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -8881,8 +8879,6 @@ void tricore_tcg_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    /* reg init */
 | 
			
		||||
    for (i = 0 ; i < 16 ; i++) {
 | 
			
		||||
        cpu_gpr_a[i] = tcg_global_mem_new(cpu_env,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,6 @@ typedef struct DisasContext {
 | 
			
		|||
   conditional executions state has been updated.  */
 | 
			
		||||
#define DISAS_SYSCALL DISAS_TARGET_3
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv_i32 cpu_R[32];
 | 
			
		||||
 | 
			
		||||
/* FIXME:  These should be removed.  */
 | 
			
		||||
| 
						 | 
				
			
			@ -74,9 +73,6 @@ void uc32_translate_init(void)
 | 
			
		|||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 32; i++) {
 | 
			
		||||
        cpu_R[i] = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
                                offsetof(CPUUniCore32State, regs[i]), regnames[i]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,7 +77,6 @@ typedef struct DisasContext {
 | 
			
		|||
    unsigned cpenable;
 | 
			
		||||
} DisasContext;
 | 
			
		||||
 | 
			
		||||
static TCGv_env cpu_env;
 | 
			
		||||
static TCGv_i32 cpu_pc;
 | 
			
		||||
static TCGv_i32 cpu_R[16];
 | 
			
		||||
static TCGv_i32 cpu_FR[16];
 | 
			
		||||
| 
						 | 
				
			
			@ -221,8 +220,6 @@ void xtensa_translate_init(void)
 | 
			
		|||
    };
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
 | 
			
		||||
    tcg_ctx->tcg_env = cpu_env;
 | 
			
		||||
    cpu_pc = tcg_global_mem_new_i32(cpu_env,
 | 
			
		||||
            offsetof(CPUXtensaState, pc), "pc");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								tcg/tcg-op.c
								
								
								
								
							
							
						
						
									
										30
									
								
								tcg/tcg-op.c
								
								
								
								
							| 
						 | 
				
			
			@ -2562,7 +2562,7 @@ void tcg_gen_lookup_and_goto_ptr(void)
 | 
			
		|||
{
 | 
			
		||||
    if (TCG_TARGET_HAS_goto_ptr && !qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
 | 
			
		||||
        TCGv_ptr ptr = tcg_temp_new_ptr();
 | 
			
		||||
        gen_helper_lookup_tb_ptr(ptr, tcg_ctx->tcg_env);
 | 
			
		||||
        gen_helper_lookup_tb_ptr(ptr, cpu_env);
 | 
			
		||||
        tcg_gen_op1i(INDEX_op_goto_ptr, tcgv_ptr_arg(ptr));
 | 
			
		||||
        tcg_temp_free_ptr(ptr);
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -2648,7 +2648,7 @@ void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
 | 
			
		|||
{
 | 
			
		||||
    tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
 | 
			
		||||
    memop = tcg_canonicalize_memop(memop, 0, 0);
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, tcg_ctx->tcg_env,
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, cpu_env,
 | 
			
		||||
                               addr, trace_mem_get_info(memop, 0));
 | 
			
		||||
    gen_ldst_i32(INDEX_op_qemu_ld_i32, val, addr, memop, idx);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2657,7 +2657,7 @@ void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, TCGMemOp memop)
 | 
			
		|||
{
 | 
			
		||||
    tcg_gen_req_mo(TCG_MO_LD_ST | TCG_MO_ST_ST);
 | 
			
		||||
    memop = tcg_canonicalize_memop(memop, 0, 1);
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, tcg_ctx->tcg_env,
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, cpu_env,
 | 
			
		||||
                               addr, trace_mem_get_info(memop, 1));
 | 
			
		||||
    gen_ldst_i32(INDEX_op_qemu_st_i32, val, addr, memop, idx);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2676,7 +2676,7 @@ void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    memop = tcg_canonicalize_memop(memop, 1, 0);
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, tcg_ctx->tcg_env,
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, cpu_env,
 | 
			
		||||
                               addr, trace_mem_get_info(memop, 0));
 | 
			
		||||
    gen_ldst_i64(INDEX_op_qemu_ld_i64, val, addr, memop, idx);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2690,7 +2690,7 @@ void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, TCGMemOp memop)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    memop = tcg_canonicalize_memop(memop, 1, 1);
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, tcg_ctx->tcg_env,
 | 
			
		||||
    trace_guest_mem_before_tcg(tcg_ctx->cpu, cpu_env,
 | 
			
		||||
                               addr, trace_mem_get_info(memop, 1));
 | 
			
		||||
    gen_ldst_i64(INDEX_op_qemu_st_i64, val, addr, memop, idx);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2806,11 +2806,11 @@ void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv addr, TCGv_i32 cmpv,
 | 
			
		|||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
        {
 | 
			
		||||
            TCGv_i32 oi = tcg_const_i32(make_memop_idx(memop & ~MO_SIGN, idx));
 | 
			
		||||
            gen(retv, tcg_ctx->tcg_env, addr, cmpv, newv, oi);
 | 
			
		||||
            gen(retv, cpu_env, addr, cmpv, newv, oi);
 | 
			
		||||
            tcg_temp_free_i32(oi);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        gen(retv, tcg_ctx->tcg_env, addr, cmpv, newv);
 | 
			
		||||
        gen(retv, cpu_env, addr, cmpv, newv);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        if (memop & MO_SIGN) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2851,14 +2851,14 @@ void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv addr, TCGv_i64 cmpv,
 | 
			
		|||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
        {
 | 
			
		||||
            TCGv_i32 oi = tcg_const_i32(make_memop_idx(memop, idx));
 | 
			
		||||
            gen(retv, tcg_ctx->tcg_env, addr, cmpv, newv, oi);
 | 
			
		||||
            gen(retv, cpu_env, addr, cmpv, newv, oi);
 | 
			
		||||
            tcg_temp_free_i32(oi);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        gen(retv, tcg_ctx->tcg_env, addr, cmpv, newv);
 | 
			
		||||
        gen(retv, cpu_env, addr, cmpv, newv);
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
        gen_helper_exit_atomic(tcg_ctx->tcg_env);
 | 
			
		||||
        gen_helper_exit_atomic(cpu_env);
 | 
			
		||||
        /* Produce a result, so that we have a well-formed opcode stream
 | 
			
		||||
           with respect to uses of the result in the (dead) code following.  */
 | 
			
		||||
        tcg_gen_movi_i64(retv, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -2914,11 +2914,11 @@ static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr, TCGv_i32 val,
 | 
			
		|||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
    {
 | 
			
		||||
        TCGv_i32 oi = tcg_const_i32(make_memop_idx(memop & ~MO_SIGN, idx));
 | 
			
		||||
        gen(ret, tcg_ctx->tcg_env, addr, val, oi);
 | 
			
		||||
        gen(ret, cpu_env, addr, val, oi);
 | 
			
		||||
        tcg_temp_free_i32(oi);
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    gen(ret, tcg_ctx->tcg_env, addr, val);
 | 
			
		||||
    gen(ret, cpu_env, addr, val);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (memop & MO_SIGN) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2959,14 +2959,14 @@ static void do_atomic_op_i64(TCGv_i64 ret, TCGv addr, TCGv_i64 val,
 | 
			
		|||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
        {
 | 
			
		||||
            TCGv_i32 oi = tcg_const_i32(make_memop_idx(memop & ~MO_SIGN, idx));
 | 
			
		||||
            gen(ret, tcg_ctx->tcg_env, addr, val, oi);
 | 
			
		||||
            gen(ret, cpu_env, addr, val, oi);
 | 
			
		||||
            tcg_temp_free_i32(oi);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        gen(ret, tcg_ctx->tcg_env, addr, val);
 | 
			
		||||
        gen(ret, cpu_env, addr, val);
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
        gen_helper_exit_atomic(tcg_ctx->tcg_env);
 | 
			
		||||
        gen_helper_exit_atomic(cpu_env);
 | 
			
		||||
        /* Produce a result, so that we have a well-formed opcode stream
 | 
			
		||||
           with respect to uses of the result in the (dead) code following.  */
 | 
			
		||||
        tcg_gen_movi_i64(ret, 0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										32
									
								
								tcg/tcg.c
								
								
								
								
							
							
						
						
									
										32
									
								
								tcg/tcg.c
								
								
								
								
							| 
						 | 
				
			
			@ -121,6 +121,7 @@ static bool tcg_out_ldst_finalize(TCGContext *s);
 | 
			
		|||
 | 
			
		||||
static TCGContext **tcg_ctxs;
 | 
			
		||||
static unsigned int n_tcg_ctxs;
 | 
			
		||||
TCGv_env cpu_env = 0;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * We divide code_gen_buffer into equally-sized "regions" that TCG threads
 | 
			
		||||
| 
						 | 
				
			
			@ -657,6 +658,8 @@ static GHashTable *helper_table;
 | 
			
		|||
 | 
			
		||||
static int indirect_reg_alloc_order[ARRAY_SIZE(tcg_target_reg_alloc_order)];
 | 
			
		||||
static void process_op_defs(TCGContext *s);
 | 
			
		||||
static TCGTemp *tcg_global_reg_new_internal(TCGContext *s, TCGType type,
 | 
			
		||||
                                            TCGReg reg, const char *name);
 | 
			
		||||
 | 
			
		||||
void tcg_context_init(TCGContext *s)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -664,6 +667,7 @@ void tcg_context_init(TCGContext *s)
 | 
			
		|||
    TCGOpDef *def;
 | 
			
		||||
    TCGArgConstraint *args_ct;
 | 
			
		||||
    int *sorted_args;
 | 
			
		||||
    TCGTemp *ts;
 | 
			
		||||
 | 
			
		||||
    memset(s, 0, sizeof(*s));
 | 
			
		||||
    s->nb_globals = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -729,6 +733,10 @@ void tcg_context_init(TCGContext *s)
 | 
			
		|||
#else
 | 
			
		||||
    tcg_ctxs = g_new(TCGContext *, max_cpus);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    tcg_debug_assert(!tcg_regset_test_reg(s->reserved_regs, TCG_AREG0));
 | 
			
		||||
    ts = tcg_global_reg_new_internal(s, TCG_TYPE_PTR, TCG_AREG0, "env");
 | 
			
		||||
    cpu_env = temp_tcgv_ptr(ts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -871,30 +879,6 @@ void tcg_set_frame(TCGContext *s, TCGReg reg, intptr_t start, intptr_t size)
 | 
			
		|||
        = tcg_global_reg_new_internal(s, TCG_TYPE_PTR, reg, "_frame");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCGv_i32 tcg_global_reg_new_i32(TCGReg reg, const char *name)
 | 
			
		||||
{
 | 
			
		||||
    TCGContext *s = tcg_ctx;
 | 
			
		||||
    TCGTemp *t;
 | 
			
		||||
 | 
			
		||||
    if (tcg_regset_test_reg(s->reserved_regs, reg)) {
 | 
			
		||||
        tcg_abort();
 | 
			
		||||
    }
 | 
			
		||||
    t = tcg_global_reg_new_internal(s, TCG_TYPE_I32, reg, name);
 | 
			
		||||
    return temp_tcgv_i32(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCGv_i64 tcg_global_reg_new_i64(TCGReg reg, const char *name)
 | 
			
		||||
{
 | 
			
		||||
    TCGContext *s = tcg_ctx;
 | 
			
		||||
    TCGTemp *t;
 | 
			
		||||
 | 
			
		||||
    if (tcg_regset_test_reg(s->reserved_regs, reg)) {
 | 
			
		||||
        tcg_abort();
 | 
			
		||||
    }
 | 
			
		||||
    t = tcg_global_reg_new_internal(s, TCG_TYPE_I64, reg, name);
 | 
			
		||||
    return temp_tcgv_i64(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCGTemp *tcg_global_mem_new_internal(TCGType type, TCGv_ptr base,
 | 
			
		||||
                                     intptr_t offset, const char *name)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -669,7 +669,6 @@ struct TCGContext {
 | 
			
		|||
 | 
			
		||||
    /* Track which vCPU triggers events */
 | 
			
		||||
    CPUState *cpu;                      /* *_trans */
 | 
			
		||||
    TCGv_env tcg_env;                   /* *_exec  */
 | 
			
		||||
 | 
			
		||||
    /* These structures are private to tcg-target.inc.c.  */
 | 
			
		||||
#ifdef TCG_TARGET_NEED_LDST_LABELS
 | 
			
		||||
| 
						 | 
				
			
			@ -696,6 +695,7 @@ struct TCGContext {
 | 
			
		|||
 | 
			
		||||
extern TCGContext tcg_init_ctx;
 | 
			
		||||
extern __thread TCGContext *tcg_ctx;
 | 
			
		||||
extern TCGv_env cpu_env;
 | 
			
		||||
 | 
			
		||||
static inline size_t temp_idx(TCGTemp *ts)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -839,9 +839,6 @@ void tcg_set_frame(TCGContext *s, TCGReg reg, intptr_t start, intptr_t size);
 | 
			
		|||
TCGTemp *tcg_global_mem_new_internal(TCGType, TCGv_ptr,
 | 
			
		||||
                                     intptr_t, const char *);
 | 
			
		||||
 | 
			
		||||
TCGv_i32 tcg_global_reg_new_i32(TCGReg reg, const char *name);
 | 
			
		||||
TCGv_i64 tcg_global_reg_new_i64(TCGReg reg, const char *name);
 | 
			
		||||
 | 
			
		||||
TCGv_i32 tcg_temp_new_internal_i32(int temp_local);
 | 
			
		||||
TCGv_i64 tcg_temp_new_internal_i64(int temp_local);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -960,8 +957,6 @@ static inline TCGv_ptr TCGV_NAT_TO_PTR(TCGv_i32 n) { return (TCGv_ptr)n; }
 | 
			
		|||
static inline TCGv_i32 TCGV_PTR_TO_NAT(TCGv_ptr n) { return (TCGv_i32)n; }
 | 
			
		||||
 | 
			
		||||
#define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i32((intptr_t)(V)))
 | 
			
		||||
#define tcg_global_reg_new_ptr(R, N) \
 | 
			
		||||
    TCGV_NAT_TO_PTR(tcg_global_reg_new_i32((R), (N)))
 | 
			
		||||
#define tcg_global_mem_new_ptr(R, O, N) \
 | 
			
		||||
    TCGV_NAT_TO_PTR(tcg_global_mem_new_i32((R), (O), (N)))
 | 
			
		||||
#define tcg_temp_new_ptr() TCGV_NAT_TO_PTR(tcg_temp_new_i32())
 | 
			
		||||
| 
						 | 
				
			
			@ -971,8 +966,6 @@ static inline TCGv_ptr TCGV_NAT_TO_PTR(TCGv_i64 n) { return (TCGv_ptr)n; }
 | 
			
		|||
static inline TCGv_i64 TCGV_PTR_TO_NAT(TCGv_ptr n) { return (TCGv_i64)n; }
 | 
			
		||||
 | 
			
		||||
#define tcg_const_ptr(V) TCGV_NAT_TO_PTR(tcg_const_i64((intptr_t)(V)))
 | 
			
		||||
#define tcg_global_reg_new_ptr(R, N) \
 | 
			
		||||
    TCGV_NAT_TO_PTR(tcg_global_reg_new_i64((R), (N)))
 | 
			
		||||
#define tcg_global_mem_new_ptr(R, O, N) \
 | 
			
		||||
    TCGV_NAT_TO_PTR(tcg_global_mem_new_i64((R), (O), (N)))
 | 
			
		||||
#define tcg_temp_new_ptr() TCGV_NAT_TO_PTR(tcg_temp_new_i64())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue