We can use cpu_restore_state (and via *_ra memory helpers) to avoid storing cpu state in expectation of the unlikely case of page fault or specification error.
There are more that can be fixed, but this is all of mem_helper.c, and this patch set is large enough. r~ Richard Henderson (31): target/s390: Use cpu_loop_exit_restore for tlb_fill target/s390x: Implement EXECUTE via new TranslationBlock target/s390x: Use unwind data for helper_nc target/s390x: Use unwind data for helper_xc target/s390x: Use unwind data for helper_oc target/s390x: Use unwind data for helper_mvc target/s390x: Use unwind data for helper_clc target/s390x: Use unwind data for helper_clm target/s390x: Use unwind data for helper_srst target/s390x: Use unwind data for helper_clst target/s390x: Use unwind data for helper_mvpg target/s390x: Use unwind data for helper_mvst target/s390x: Use unwind data for helper_lam target/s390x: Use unwind data for helper_stam target/s390x: Use unwind data for helper_mvcl target/s390x: Use unwind data for helper_mvcle target/s390x: Use unwind data for helper_clcle target/s390x: Use unwind data for helper_cksm target/s390x: Use unwind data for helper_unpk target/s390x: Use unwind data for helper_tr target/s390x: Use unwind data for helper_tre target/s390x: Use unwind data for helper_trt target/s390x: Use unwind data for helper_lctlg target/s390x: Use unwind data for helper_lctl target/s390x: Use unwind data for helper_stctl target/s390x: Use unwind data for helper_testblock target/s390x: Use unwind data for helper_tprot target/s390x: Use unwind data for helper_lra target/s390x: Use atomic operations for COMPARE SWAP PURGE target/s390x: Implement CSPG target/s390x: Use unwind data for helper_mvcs/mvcp target/s390x/cpu.h | 4 +- target/s390x/helper.h | 6 +- target/s390x/insn-data.def | 7 +- target/s390x/machine.c | 19 ++ target/s390x/mem_helper.c | 428 +++++++++++++++++++-------------------------- target/s390x/translate.c | 197 ++++++++++++--------- 6 files changed, 321 insertions(+), 340 deletions(-) -- 2.9.4