TCG: Use gen_opc_instr_start from context instead of global variable.
Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									c9c99c22d5
								
							
						
					
					
						commit
						ab1103def4
					
				| @ -3410,10 +3410,10 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = ctx.pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) | ||||
| @ -3468,7 +3468,7 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = ctx.pc - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -9838,11 +9838,11 @@ static inline void gen_intermediate_code_internal(CPUARMState *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             gen_opc_condexec_bits[lj] = (dc->condexec_cond << 4) | (dc->condexec_mask >> 1); | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -9977,7 +9977,7 @@ done_generating: | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -3301,7 +3301,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) { | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             if (dc->delayed_branch == 1) { | ||||
| @ -3309,7 +3309,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb, | ||||
|             } else { | ||||
|                 tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             } | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -3439,7 +3439,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) { | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|         } | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|  | ||||
| @ -7988,11 +7988,11 @@ static inline void gen_intermediate_code_internal(CPUX86State *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = pc_ptr; | ||||
|             gen_opc_cc_op[lj] = dc->cc_op; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) | ||||
| @ -8037,7 +8037,7 @@ static inline void gen_intermediate_code_internal(CPUX86State *env, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } | ||||
| 
 | ||||
| #ifdef DEBUG_DISAS | ||||
| @ -8080,7 +8080,7 @@ void restore_state_to_opc(CPUX86State *env, TranslationBlock *tb, int pc_pos) | ||||
|         int i; | ||||
|         qemu_log("RESTORE:\n"); | ||||
|         for(i = 0;i <= pc_pos; i++) { | ||||
|             if (gen_opc_instr_start[i]) { | ||||
|             if (tcg_ctx.gen_opc_instr_start[i]) { | ||||
|                 qemu_log("0x%04x: " TARGET_FMT_lx "\n", i, | ||||
|                         tcg_ctx.gen_opc_pc[i]); | ||||
|             } | ||||
|  | ||||
| @ -1051,11 +1051,11 @@ static void gen_intermediate_code_internal(CPULM32State *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) { | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -1110,7 +1110,7 @@ static void gen_intermediate_code_internal(CPULM32State *env, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) { | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|         } | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|  | ||||
| @ -3019,10 +3019,10 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) | ||||
| @ -3078,7 +3078,7 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -1788,10 +1788,10 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|                         tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -1902,7 +1902,7 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|                 tb->icount = num_insns; | ||||
|  | ||||
| @ -15579,12 +15579,12 @@ gen_intermediate_code_internal (CPUMIPSState *env, TranslationBlock *tb, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = ctx.pc; | ||||
|             gen_opc_hflags[lj] = ctx.hflags & MIPS_HFLAG_BMASK; | ||||
|             gen_opc_btarget[lj] = ctx.btarget; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) | ||||
| @ -15662,7 +15662,7 @@ done_generating: | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = ctx.pc - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -1707,11 +1707,11 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu, | ||||
|             if (k < j) { | ||||
|                 k++; | ||||
|                 while (k < j) { | ||||
|                     gen_opc_instr_start[k++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[k++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[k] = dc->pc; | ||||
|             gen_opc_instr_start[k] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[k] = 1; | ||||
|             tcg_ctx.gen_opc_icount[k] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -1787,7 +1787,7 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         k++; | ||||
|         while (k <= j) { | ||||
|             gen_opc_instr_start[k++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[k++] = 0; | ||||
|         } | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|  | ||||
| @ -9680,10 +9680,10 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = ctx.nip; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         LOG_DISAS("----------------\n"); | ||||
| @ -9781,7 +9781,7 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|     } else { | ||||
|         tb->size = ctx.nip - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -5160,12 +5160,12 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) { | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc.pc; | ||||
|             gen_opc_cc_op[lj] = dc.cc_op; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) { | ||||
| @ -5212,7 +5212,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) { | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|         } | ||||
|     } else { | ||||
|         tb->size = dc.pc - pc_start; | ||||
|  | ||||
| @ -2003,11 +2003,11 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb, | ||||
|             if (ii < i) { | ||||
|                 ii++; | ||||
|                 while (ii < i) | ||||
|                     gen_opc_instr_start[ii++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[ii++] = 0; | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[ii] = ctx.pc; | ||||
|             gen_opc_hflags[ii] = ctx.flags; | ||||
|             gen_opc_instr_start[ii] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[ii] = 1; | ||||
|             tcg_ctx.gen_opc_icount[ii] = num_insns; | ||||
|         } | ||||
|         if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) | ||||
| @ -2061,7 +2061,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb, | ||||
|         i = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         ii++; | ||||
|         while (ii <= i) | ||||
|             gen_opc_instr_start[ii++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[ii++] = 0; | ||||
|     } else { | ||||
|         tb->size = ctx.pc - pc_start; | ||||
|         tb->icount = num_insns; | ||||
|  | ||||
| @ -5283,10 +5283,10 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|                 gen_opc_npc[lj] = dc->npc; | ||||
|                 gen_opc_instr_start[lj] = 1; | ||||
|                 tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|                 tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|             } | ||||
|         } | ||||
| @ -5339,7 +5339,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb, | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
| #if 0 | ||||
|         log_page_dump(); | ||||
| #endif | ||||
|  | ||||
| @ -2003,11 +2003,11 @@ static inline void gen_intermediate_code_internal(CPUUniCore32State *env, | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) { | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc->pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = num_insns; | ||||
|         } | ||||
| 
 | ||||
| @ -2117,7 +2117,7 @@ done_generating: | ||||
|         j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; | ||||
|         lj++; | ||||
|         while (lj <= j) { | ||||
|             gen_opc_instr_start[lj++] = 0; | ||||
|             tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|         } | ||||
|     } else { | ||||
|         tb->size = dc->pc - pc_start; | ||||
|  | ||||
| @ -2897,11 +2897,11 @@ static void gen_intermediate_code_internal( | ||||
|             if (lj < j) { | ||||
|                 lj++; | ||||
|                 while (lj < j) { | ||||
|                     gen_opc_instr_start[lj++] = 0; | ||||
|                     tcg_ctx.gen_opc_instr_start[lj++] = 0; | ||||
|                 } | ||||
|             } | ||||
|             tcg_ctx.gen_opc_pc[lj] = dc.pc; | ||||
|             gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_instr_start[lj] = 1; | ||||
|             tcg_ctx.gen_opc_icount[lj] = insn_count; | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -146,8 +146,9 @@ int cpu_restore_state(TranslationBlock *tb, | ||||
|     if (j < 0) | ||||
|         return -1; | ||||
|     /* now find start of instruction before */ | ||||
|     while (gen_opc_instr_start[j] == 0) | ||||
|     while (s->gen_opc_instr_start[j] == 0) { | ||||
|         j--; | ||||
|     } | ||||
|     env->icount_decr.u16.low -= s->gen_opc_icount[j]; | ||||
| 
 | ||||
|     restore_state_to_opc(env, tb, j); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Evgeny Voevodin
						Evgeny Voevodin