In contrast to Daniel's version, the code stays in power8-pmu.c, but is better organized to not take so much overhead.
Before: 32.97% qemu-system-ppc qemu-system-ppc64 [.] pmc_get_event 20.22% qemu-system-ppc qemu-system-ppc64 [.] helper_insns_inc 4.52% qemu-system-ppc qemu-system-ppc64 [.] hreg_compute_hflags_value 3.30% qemu-system-ppc qemu-system-ppc64 [.] helper_lookup_tb_ptr 2.68% qemu-system-ppc qemu-system-ppc64 [.] tcg_gen_code 2.28% qemu-system-ppc qemu-system-ppc64 [.] cpu_exec 1.84% qemu-system-ppc qemu-system-ppc64 [.] pmu_insn_cnt_enabled After: 8.42% qemu-system-ppc qemu-system-ppc64 [.] hreg_compute_hflags_value 6.65% qemu-system-ppc qemu-system-ppc64 [.] cpu_exec 6.63% qemu-system-ppc qemu-system-ppc64 [.] helper_insns_inc r~ Richard Henderson (3): target/ppc: Cache per-pmc insn and cycle count settings target/ppc: Rewrite pmu_increment_insns target/ppc: Use env->pnc_cyc_cnt target/ppc/cpu.h | 3 + target/ppc/power8-pmu.h | 14 +-- target/ppc/cpu_init.c | 1 + target/ppc/helper_regs.c | 2 +- target/ppc/machine.c | 2 + target/ppc/power8-pmu.c | 230 ++++++++++++++++----------------------- 6 files changed, 108 insertions(+), 144 deletions(-) -- 2.25.1