diff options
Diffstat (limited to 'gen-icount.h')
-rw-r--r-- | gen-icount.h | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/gen-icount.h b/gen-icount.h deleted file mode 100644 index 61545f1..0000000 --- a/gen-icount.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Helpers for instruction counting code generation. */ - -static TCGArg *icount_arg; -static int icount_label; - -static inline void gen_icount_start(void) -{ - TCGv count; - - if (!use_icount) - return; - - icount_label = gen_new_label(); - /* FIXME: This generates lousy code. We can't use tcg_new_temp because - count needs to live over the conditional branch. To workaround this - we allow the target to supply a convenient register temporary. */ -#ifndef ICOUNT_TEMP - count = tcg_temp_local_new(TCG_TYPE_I32); -#else - count = ICOUNT_TEMP; -#endif - tcg_gen_ld_i32(count, cpu_env, offsetof(CPUState, icount_decr.u32)); - /* This is a horrid hack to allow fixing up the value later. */ - icount_arg = gen_opparam_ptr + 1; - tcg_gen_subi_i32(count, count, 0xdeadbeef); - - tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, icount_label); - tcg_gen_st16_i32(count, cpu_env, offsetof(CPUState, icount_decr.u16.low)); -#ifndef ICOUNT_TEMP - tcg_temp_free(count); -#endif -} - -static void gen_icount_end(TranslationBlock *tb, int num_insns) -{ - if (use_icount) { - *icount_arg = num_insns; - gen_set_label(icount_label); - tcg_gen_exit_tb((long)tb + 2); - } -} - -static void inline gen_io_start(void) -{ - TCGv tmp = tcg_const_i32(1); - tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io)); - tcg_temp_free(tmp); -} - -static inline void gen_io_end(void) -{ - TCGv tmp = tcg_const_i32(0); - tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io)); - tcg_temp_free(tmp); -} - |