Hi everyone, these patches provide a speedup around 20% when running PPC softmmu emulation on x86 machines (10% for user-mode emulation). There are actually two separate speedups here:
* avoiding TLB flushing on every kernel<->user transition (patches 1-2) * rewriting CR handling to use 32 1-bit registers instead of 8 4-bit registers (patches 3-16) They must not be too shoddy; they boot a Linux guest fine. :) And the speedup is very interesting of course. The three problems with it are: * I don't have a good testsuite. So floating-point, decimal and SPE are mostly untested * I don't have much time to work on them (they are about a year old and I have just rebased them). * Patch 15 is a monster and hard to review, but I have no idea how to split it. Please take a look and if you are interested help in any way you can. :) I think patches 1-13 can be separated, as the two optimizations are independent and patches 3-13 are mostly bug fixes and cleanups. Paolo Paolo Bonzini (17): ppc: do not look at the MMU index ppc: avoid excessive TLB flushing ppc: fix monitor access to CR ppc: use ARRAY_SIZE in gdbstub.c ppc: use CRF_* in fpu_helper.c ppc: use CRF_* in int_helper.c ppc: fix result of DLMZB when no zero bytes are found ppc: introduce helpers for mfocrf/mtocrf ppc: reorganize gen_compute_fprf ppc: introduce gen_op_mfcr/gen_op_mtcr ppc: rename gen_set_cr6_from_fpscr ppc: use movcond for isel ppc: compute mask from BI using right shift ppc: introduce ppc_get_crf and ppc_set_crf ppc: store CR registers in 32 1-bit registers ppc: inline ppc_get_crf/ppc_set_crf when clearer ppc: dump all 32 CR bits cputlb.c | 19 ++ hw/ppc/spapr_hcall.c | 6 +- include/exec/exec-all.h | 5 + linux-user/elfload.c | 4 +- linux-user/main.c | 9 +- linux-user/signal.c | 8 +- monitor.c | 2 +- target-ppc/cpu.h | 43 +++- target-ppc/excp_helper.c | 8 +- target-ppc/fpu_helper.c | 73 +++---- target-ppc/gdbstub.c | 8 +- target-ppc/helper.h | 9 +- target-ppc/helper_regs.h | 52 +++-- target-ppc/int_helper.c | 64 ++++-- target-ppc/kvm.c | 10 +- target-ppc/machine.c | 9 + target-ppc/translate.c | 470 ++++++++++++++++++++++---------------------- target-ppc/translate_init.c | 5 + 18 files changed, 461 insertions(+), 343 deletions(-) -- 1.8.3.1