* [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline @ 2019-12-11 20:36 Richard Henderson 2019-12-11 20:36 ` [PATCH 1/2] target/s390x: Split out helper_per_store_real Richard Henderson ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Richard Henderson @ 2019-12-11 20:36 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-s390x, david Found while working on other parts of cputlb, this cleanup can be split out independently. r~ Richard Henderson (2): target/s390x: Split out helper_per_store_real target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline target/s390x/helper.h | 5 +---- target/s390x/mem_helper.c | 38 -------------------------------------- target/s390x/misc_helper.c | 10 ++++++++++ target/s390x/translate.c | 21 ++++++++------------- target/s390x/insn-data.def | 8 ++++---- 5 files changed, 23 insertions(+), 59 deletions(-) -- 2.20.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] target/s390x: Split out helper_per_store_real 2019-12-11 20:36 [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson @ 2019-12-11 20:36 ` Richard Henderson 2019-12-12 10:29 ` David Hildenbrand 2019-12-11 20:36 ` [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson ` (2 subsequent siblings) 3 siblings, 1 reply; 8+ messages in thread From: Richard Henderson @ 2019-12-11 20:36 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-s390x, david Split the PER handling for store-to-real-address into its own helper function, conditionally called when PER is enabled, just as we do for per_branch and per_ifetch. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/s390x/helper.h | 1 + target/s390x/mem_helper.c | 16 ---------------- target/s390x/misc_helper.c | 10 ++++++++++ target/s390x/translate.c | 8 ++++++++ 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/target/s390x/helper.h b/target/s390x/helper.h index 56e8149866..f5b4bb6a31 100644 --- a/target/s390x/helper.h +++ b/target/s390x/helper.h @@ -331,6 +331,7 @@ DEF_HELPER_FLAGS_3(sturg, TCG_CALL_NO_WG, void, env, i64, i64) DEF_HELPER_1(per_check_exception, void, env) DEF_HELPER_FLAGS_3(per_branch, TCG_CALL_NO_RWG, void, env, i64, i64) DEF_HELPER_FLAGS_2(per_ifetch, TCG_CALL_NO_RWG, void, env, i64) +DEF_HELPER_FLAGS_1(per_store_real, TCG_CALL_NO_RWG, void, env) DEF_HELPER_FLAGS_1(stfl, TCG_CALL_NO_RWG, void, env) DEF_HELPER_2(xsch, void, env, i64) diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index 2325767f17..b1b3f406c9 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -2344,27 +2344,11 @@ uint64_t HELPER(lurag)(CPUS390XState *env, uint64_t addr) void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1) { cpu_stl_real_ra(env, wrap_address(env, addr), (uint32_t)v1, GETPC()); - - if ((env->psw.mask & PSW_MASK_PER) && - (env->cregs[9] & PER_CR9_EVENT_STORE) && - (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { - /* PSW is saved just before calling the helper. */ - env->per_address = env->psw.addr; - env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); - } } void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) { cpu_stq_real_ra(env, wrap_address(env, addr), v1, GETPC()); - - if ((env->psw.mask & PSW_MASK_PER) && - (env->cregs[9] & PER_CR9_EVENT_STORE) && - (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { - /* PSW is saved just before calling the helper. */ - env->per_address = env->psw.addr; - env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); - } } /* load real address */ diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c index bfb457fb63..58dbc023eb 100644 --- a/target/s390x/misc_helper.c +++ b/target/s390x/misc_helper.c @@ -620,6 +620,16 @@ void HELPER(per_ifetch)(CPUS390XState *env, uint64_t addr) } } } + +void HELPER(per_store_real)(CPUS390XState *env) +{ + if ((env->cregs[9] & PER_CR9_EVENT_STORE) && + (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { + /* PSW is saved just before calling the helper. */ + env->per_address = env->psw.addr; + env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); + } +} #endif static uint8_t stfl_bytes[2048]; diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 151dfa91fb..ef751fefa4 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -4507,12 +4507,20 @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o) static DisasJumpType op_stura(DisasContext *s, DisasOps *o) { gen_helper_stura(cpu_env, o->in2, o->in1); + if (s->base.tb->flags & FLAG_MASK_PER) { + update_psw_addr(s); + gen_helper_per_store_real(cpu_env); + } return DISAS_NEXT; } static DisasJumpType op_sturg(DisasContext *s, DisasOps *o) { gen_helper_sturg(cpu_env, o->in2, o->in1); + if (s->base.tb->flags & FLAG_MASK_PER) { + update_psw_addr(s); + gen_helper_per_store_real(cpu_env); + } return DISAS_NEXT; } #endif -- 2.20.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] target/s390x: Split out helper_per_store_real 2019-12-11 20:36 ` [PATCH 1/2] target/s390x: Split out helper_per_store_real Richard Henderson @ 2019-12-12 10:29 ` David Hildenbrand 0 siblings, 0 replies; 8+ messages in thread From: David Hildenbrand @ 2019-12-12 10:29 UTC (permalink / raw) To: Richard Henderson, qemu-devel; +Cc: qemu-s390x On 11.12.19 21:36, Richard Henderson wrote: > Split the PER handling for store-to-real-address into its > own helper function, conditionally called when PER is > enabled, just as we do for per_branch and per_ifetch. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/s390x/helper.h | 1 + > target/s390x/mem_helper.c | 16 ---------------- > target/s390x/misc_helper.c | 10 ++++++++++ > target/s390x/translate.c | 8 ++++++++ > 4 files changed, 19 insertions(+), 16 deletions(-) > > diff --git a/target/s390x/helper.h b/target/s390x/helper.h > index 56e8149866..f5b4bb6a31 100644 > --- a/target/s390x/helper.h > +++ b/target/s390x/helper.h > @@ -331,6 +331,7 @@ DEF_HELPER_FLAGS_3(sturg, TCG_CALL_NO_WG, void, env, i64, i64) > DEF_HELPER_1(per_check_exception, void, env) > DEF_HELPER_FLAGS_3(per_branch, TCG_CALL_NO_RWG, void, env, i64, i64) > DEF_HELPER_FLAGS_2(per_ifetch, TCG_CALL_NO_RWG, void, env, i64) > +DEF_HELPER_FLAGS_1(per_store_real, TCG_CALL_NO_RWG, void, env) > DEF_HELPER_FLAGS_1(stfl, TCG_CALL_NO_RWG, void, env) > > DEF_HELPER_2(xsch, void, env, i64) > diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c > index 2325767f17..b1b3f406c9 100644 > --- a/target/s390x/mem_helper.c > +++ b/target/s390x/mem_helper.c > @@ -2344,27 +2344,11 @@ uint64_t HELPER(lurag)(CPUS390XState *env, uint64_t addr) > void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1) > { > cpu_stl_real_ra(env, wrap_address(env, addr), (uint32_t)v1, GETPC()); > - > - if ((env->psw.mask & PSW_MASK_PER) && > - (env->cregs[9] & PER_CR9_EVENT_STORE) && > - (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { > - /* PSW is saved just before calling the helper. */ > - env->per_address = env->psw.addr; > - env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); > - } > } > > void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) > { > cpu_stq_real_ra(env, wrap_address(env, addr), v1, GETPC()); > - > - if ((env->psw.mask & PSW_MASK_PER) && > - (env->cregs[9] & PER_CR9_EVENT_STORE) && > - (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { > - /* PSW is saved just before calling the helper. */ > - env->per_address = env->psw.addr; > - env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); > - } > } > > /* load real address */ > diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c > index bfb457fb63..58dbc023eb 100644 > --- a/target/s390x/misc_helper.c > +++ b/target/s390x/misc_helper.c > @@ -620,6 +620,16 @@ void HELPER(per_ifetch)(CPUS390XState *env, uint64_t addr) > } > } > } > + > +void HELPER(per_store_real)(CPUS390XState *env) > +{ > + if ((env->cregs[9] & PER_CR9_EVENT_STORE) && > + (env->cregs[9] & PER_CR9_EVENT_STORE_REAL)) { > + /* PSW is saved just before calling the helper. */ > + env->per_address = env->psw.addr; > + env->per_perc_atmid = PER_CODE_EVENT_STORE_REAL | get_per_atmid(env); > + } > +} > #endif > > static uint8_t stfl_bytes[2048]; > diff --git a/target/s390x/translate.c b/target/s390x/translate.c > index 151dfa91fb..ef751fefa4 100644 > --- a/target/s390x/translate.c > +++ b/target/s390x/translate.c > @@ -4507,12 +4507,20 @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o) > static DisasJumpType op_stura(DisasContext *s, DisasOps *o) > { > gen_helper_stura(cpu_env, o->in2, o->in1); > + if (s->base.tb->flags & FLAG_MASK_PER) { > + update_psw_addr(s); > + gen_helper_per_store_real(cpu_env); > + } > return DISAS_NEXT; > } > > static DisasJumpType op_sturg(DisasContext *s, DisasOps *o) > { > gen_helper_sturg(cpu_env, o->in2, o->in1); > + if (s->base.tb->flags & FLAG_MASK_PER) { > + update_psw_addr(s); > + gen_helper_per_store_real(cpu_env); > + } > return DISAS_NEXT; > } > #endif > Reviewed-by: David Hildenbrand <david@redhat.com> -- Thanks, David / dhildenb ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline 2019-12-11 20:36 [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson 2019-12-11 20:36 ` [PATCH 1/2] target/s390x: Split out helper_per_store_real Richard Henderson @ 2019-12-11 20:36 ` Richard Henderson 2019-12-12 10:35 ` David Hildenbrand 2019-12-16 17:04 ` [PATCH 0/2] " Cornelia Huck 2019-12-17 10:01 ` Cornelia Huck 3 siblings, 1 reply; 8+ messages in thread From: Richard Henderson @ 2019-12-11 20:36 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-s390x, david These are trivially done by performing a memory operation with the correct mmu_idx. The only tricky part is using get_address directly in order to get the address wrapped; we cannot use la2 because of the format. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/s390x/helper.h | 4 ---- target/s390x/mem_helper.c | 22 ---------------------- target/s390x/translate.c | 21 ++++----------------- target/s390x/insn-data.def | 8 ++++---- 4 files changed, 8 insertions(+), 47 deletions(-) diff --git a/target/s390x/helper.h b/target/s390x/helper.h index f5b4bb6a31..b5813c2ac2 100644 --- a/target/s390x/helper.h +++ b/target/s390x/helper.h @@ -324,10 +324,6 @@ DEF_HELPER_FLAGS_4(ipte, TCG_CALL_NO_RWG, void, env, i64, i64, i32) DEF_HELPER_FLAGS_1(ptlb, TCG_CALL_NO_RWG, void, env) DEF_HELPER_FLAGS_1(purge, TCG_CALL_NO_RWG, void, env) DEF_HELPER_2(lra, i64, env, i64) -DEF_HELPER_FLAGS_2(lura, TCG_CALL_NO_WG, i64, env, i64) -DEF_HELPER_FLAGS_2(lurag, TCG_CALL_NO_WG, i64, env, i64) -DEF_HELPER_FLAGS_3(stura, TCG_CALL_NO_WG, void, env, i64, i64) -DEF_HELPER_FLAGS_3(sturg, TCG_CALL_NO_WG, void, env, i64, i64) DEF_HELPER_1(per_check_exception, void, env) DEF_HELPER_FLAGS_3(per_branch, TCG_CALL_NO_RWG, void, env, i64, i64) DEF_HELPER_FLAGS_2(per_ifetch, TCG_CALL_NO_RWG, void, env, i64) diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index b1b3f406c9..2921419c27 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -2329,28 +2329,6 @@ void HELPER(purge)(CPUS390XState *env) tlb_flush_all_cpus_synced(env_cpu(env)); } -/* load using real address */ -uint64_t HELPER(lura)(CPUS390XState *env, uint64_t addr) -{ - return cpu_ldl_real_ra(env, wrap_address(env, addr), GETPC()); -} - -uint64_t HELPER(lurag)(CPUS390XState *env, uint64_t addr) -{ - return cpu_ldq_real_ra(env, wrap_address(env, addr), GETPC()); -} - -/* store using real address */ -void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1) -{ - cpu_stl_real_ra(env, wrap_address(env, addr), (uint32_t)v1, GETPC()); -} - -void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) -{ - cpu_stq_real_ra(env, wrap_address(env, addr), v1, GETPC()); -} - /* load real address */ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr) { diff --git a/target/s390x/translate.c b/target/s390x/translate.c index ef751fefa4..4292bb0dd0 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -3272,13 +3272,8 @@ static DisasJumpType op_lpq(DisasContext *s, DisasOps *o) #ifndef CONFIG_USER_ONLY static DisasJumpType op_lura(DisasContext *s, DisasOps *o) { - gen_helper_lura(o->out, cpu_env, o->in2); - return DISAS_NEXT; -} - -static DisasJumpType op_lurag(DisasContext *s, DisasOps *o) -{ - gen_helper_lurag(o->out, cpu_env, o->in2); + o->addr1 = get_address(s, 0, get_field(s->fields, r2), 0); + tcg_gen_qemu_ld_tl(o->out, o->addr1, MMU_REAL_IDX, s->insn->data); return DISAS_NEXT; } #endif @@ -4506,17 +4501,9 @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o) static DisasJumpType op_stura(DisasContext *s, DisasOps *o) { - gen_helper_stura(cpu_env, o->in2, o->in1); - if (s->base.tb->flags & FLAG_MASK_PER) { - update_psw_addr(s); - gen_helper_per_store_real(cpu_env); - } - return DISAS_NEXT; -} + o->addr1 = get_address(s, 0, get_field(s->fields, r2), 0); + tcg_gen_qemu_st_tl(o->in1, o->addr1, MMU_REAL_IDX, s->insn->data); -static DisasJumpType op_sturg(DisasContext *s, DisasOps *o) -{ - gen_helper_sturg(cpu_env, o->in2, o->in1); if (s->base.tb->flags & FLAG_MASK_PER) { update_psw_addr(s); gen_helper_per_store_real(cpu_env); diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def index 449eee1662..2bc77f0871 100644 --- a/target/s390x/insn-data.def +++ b/target/s390x/insn-data.def @@ -1275,8 +1275,8 @@ F(0xe313, LRAY, RXY_a, LD, 0, a2, r1, 0, lra, 0, IF_PRIV) F(0xe303, LRAG, RXY_a, Z, 0, a2, r1, 0, lra, 0, IF_PRIV) /* LOAD USING REAL ADDRESS */ - F(0xb24b, LURA, RRE, Z, 0, r2, new, r1_32, lura, 0, IF_PRIV) - F(0xb905, LURAG, RRE, Z, 0, r2, r1, 0, lurag, 0, IF_PRIV) + E(0xb24b, LURA, RRE, Z, 0, 0, new, r1_32, lura, 0, MO_TEUL, IF_PRIV) + E(0xb905, LURAG, RRE, Z, 0, 0, r1, 0, lura, 0, MO_TEQ, IF_PRIV) /* MOVE TO PRIMARY */ F(0xda00, MVCP, SS_d, Z, la1, a2, 0, 0, mvcp, 0, IF_PRIV) /* MOVE TO SECONDARY */ @@ -1329,8 +1329,8 @@ /* STORE THEN OR SYSTEM MASK */ F(0xad00, STOSM, SI, Z, la1, 0, 0, 0, stnosm, 0, IF_PRIV) /* STORE USING REAL ADDRESS */ - F(0xb246, STURA, RRE, Z, r1_o, r2_o, 0, 0, stura, 0, IF_PRIV) - F(0xb925, STURG, RRE, Z, r1_o, r2_o, 0, 0, sturg, 0, IF_PRIV) + E(0xb246, STURA, RRE, Z, r1_o, 0, 0, 0, stura, 0, MO_TEUL, IF_PRIV) + E(0xb925, STURG, RRE, Z, r1_o, 0, 0, 0, stura, 0, MO_TEQ, IF_PRIV) /* TEST BLOCK */ F(0xb22c, TB, RRE, Z, 0, r2_o, 0, 0, testblock, 0, IF_PRIV) /* TEST PROTECTION */ -- 2.20.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline 2019-12-11 20:36 ` [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson @ 2019-12-12 10:35 ` David Hildenbrand 0 siblings, 0 replies; 8+ messages in thread From: David Hildenbrand @ 2019-12-12 10:35 UTC (permalink / raw) To: Richard Henderson, qemu-devel; +Cc: qemu-s390x On 11.12.19 21:36, Richard Henderson wrote: > These are trivially done by performing a memory operation > with the correct mmu_idx. The only tricky part is using > get_address directly in order to get the address wrapped; > we cannot use la2 because of the format. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/s390x/helper.h | 4 ---- > target/s390x/mem_helper.c | 22 ---------------------- > target/s390x/translate.c | 21 ++++----------------- > target/s390x/insn-data.def | 8 ++++---- > 4 files changed, 8 insertions(+), 47 deletions(-) > > diff --git a/target/s390x/helper.h b/target/s390x/helper.h > index f5b4bb6a31..b5813c2ac2 100644 > --- a/target/s390x/helper.h > +++ b/target/s390x/helper.h > @@ -324,10 +324,6 @@ DEF_HELPER_FLAGS_4(ipte, TCG_CALL_NO_RWG, void, env, i64, i64, i32) > DEF_HELPER_FLAGS_1(ptlb, TCG_CALL_NO_RWG, void, env) > DEF_HELPER_FLAGS_1(purge, TCG_CALL_NO_RWG, void, env) > DEF_HELPER_2(lra, i64, env, i64) > -DEF_HELPER_FLAGS_2(lura, TCG_CALL_NO_WG, i64, env, i64) > -DEF_HELPER_FLAGS_2(lurag, TCG_CALL_NO_WG, i64, env, i64) > -DEF_HELPER_FLAGS_3(stura, TCG_CALL_NO_WG, void, env, i64, i64) > -DEF_HELPER_FLAGS_3(sturg, TCG_CALL_NO_WG, void, env, i64, i64) > DEF_HELPER_1(per_check_exception, void, env) > DEF_HELPER_FLAGS_3(per_branch, TCG_CALL_NO_RWG, void, env, i64, i64) > DEF_HELPER_FLAGS_2(per_ifetch, TCG_CALL_NO_RWG, void, env, i64) > diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c > index b1b3f406c9..2921419c27 100644 > --- a/target/s390x/mem_helper.c > +++ b/target/s390x/mem_helper.c > @@ -2329,28 +2329,6 @@ void HELPER(purge)(CPUS390XState *env) > tlb_flush_all_cpus_synced(env_cpu(env)); > } > > -/* load using real address */ > -uint64_t HELPER(lura)(CPUS390XState *env, uint64_t addr) > -{ > - return cpu_ldl_real_ra(env, wrap_address(env, addr), GETPC()); > -} > - > -uint64_t HELPER(lurag)(CPUS390XState *env, uint64_t addr) > -{ > - return cpu_ldq_real_ra(env, wrap_address(env, addr), GETPC()); > -} > - > -/* store using real address */ > -void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1) > -{ > - cpu_stl_real_ra(env, wrap_address(env, addr), (uint32_t)v1, GETPC()); > -} > - > -void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1) > -{ > - cpu_stq_real_ra(env, wrap_address(env, addr), v1, GETPC()); > -} > - > /* load real address */ > uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr) > { > diff --git a/target/s390x/translate.c b/target/s390x/translate.c > index ef751fefa4..4292bb0dd0 100644 > --- a/target/s390x/translate.c > +++ b/target/s390x/translate.c > @@ -3272,13 +3272,8 @@ static DisasJumpType op_lpq(DisasContext *s, DisasOps *o) > #ifndef CONFIG_USER_ONLY > static DisasJumpType op_lura(DisasContext *s, DisasOps *o) > { > - gen_helper_lura(o->out, cpu_env, o->in2); > - return DISAS_NEXT; > -} > - > -static DisasJumpType op_lurag(DisasContext *s, DisasOps *o) > -{ > - gen_helper_lurag(o->out, cpu_env, o->in2); > + o->addr1 = get_address(s, 0, get_field(s->fields, r2), 0); > + tcg_gen_qemu_ld_tl(o->out, o->addr1, MMU_REAL_IDX, s->insn->data); > return DISAS_NEXT; > } > #endif > @@ -4506,17 +4501,9 @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o) > > static DisasJumpType op_stura(DisasContext *s, DisasOps *o) > { > - gen_helper_stura(cpu_env, o->in2, o->in1); > - if (s->base.tb->flags & FLAG_MASK_PER) { > - update_psw_addr(s); > - gen_helper_per_store_real(cpu_env); > - } > - return DISAS_NEXT; > -} > + o->addr1 = get_address(s, 0, get_field(s->fields, r2), 0); > + tcg_gen_qemu_st_tl(o->in1, o->addr1, MMU_REAL_IDX, s->insn->data); > > -static DisasJumpType op_sturg(DisasContext *s, DisasOps *o) > -{ > - gen_helper_sturg(cpu_env, o->in2, o->in1); > if (s->base.tb->flags & FLAG_MASK_PER) { > update_psw_addr(s); > gen_helper_per_store_real(cpu_env); > diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def > index 449eee1662..2bc77f0871 100644 > --- a/target/s390x/insn-data.def > +++ b/target/s390x/insn-data.def > @@ -1275,8 +1275,8 @@ > F(0xe313, LRAY, RXY_a, LD, 0, a2, r1, 0, lra, 0, IF_PRIV) > F(0xe303, LRAG, RXY_a, Z, 0, a2, r1, 0, lra, 0, IF_PRIV) > /* LOAD USING REAL ADDRESS */ > - F(0xb24b, LURA, RRE, Z, 0, r2, new, r1_32, lura, 0, IF_PRIV) > - F(0xb905, LURAG, RRE, Z, 0, r2, r1, 0, lurag, 0, IF_PRIV) > + E(0xb24b, LURA, RRE, Z, 0, 0, new, r1_32, lura, 0, MO_TEUL, IF_PRIV) > + E(0xb905, LURAG, RRE, Z, 0, 0, r1, 0, lura, 0, MO_TEQ, IF_PRIV) > /* MOVE TO PRIMARY */ > F(0xda00, MVCP, SS_d, Z, la1, a2, 0, 0, mvcp, 0, IF_PRIV) > /* MOVE TO SECONDARY */ > @@ -1329,8 +1329,8 @@ > /* STORE THEN OR SYSTEM MASK */ > F(0xad00, STOSM, SI, Z, la1, 0, 0, 0, stnosm, 0, IF_PRIV) > /* STORE USING REAL ADDRESS */ > - F(0xb246, STURA, RRE, Z, r1_o, r2_o, 0, 0, stura, 0, IF_PRIV) > - F(0xb925, STURG, RRE, Z, r1_o, r2_o, 0, 0, sturg, 0, IF_PRIV) > + E(0xb246, STURA, RRE, Z, r1_o, 0, 0, 0, stura, 0, MO_TEUL, IF_PRIV) > + E(0xb925, STURG, RRE, Z, r1_o, 0, 0, 0, stura, 0, MO_TEQ, IF_PRIV) > /* TEST BLOCK */ > F(0xb22c, TB, RRE, Z, 0, r2_o, 0, 0, testblock, 0, IF_PRIV) > /* TEST PROTECTION */ > So the MMU_REAL indeed does pay off in various ways ;) Thanks! Reviewed-by: David Hildenbrand <david@redhat.com> -- Thanks, David / dhildenb ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline 2019-12-11 20:36 [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson 2019-12-11 20:36 ` [PATCH 1/2] target/s390x: Split out helper_per_store_real Richard Henderson 2019-12-11 20:36 ` [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson @ 2019-12-16 17:04 ` Cornelia Huck 2019-12-16 20:23 ` Richard Henderson 2019-12-17 10:01 ` Cornelia Huck 3 siblings, 1 reply; 8+ messages in thread From: Cornelia Huck @ 2019-12-16 17:04 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-s390x, qemu-devel, david On Wed, 11 Dec 2019 12:36:12 -0800 Richard Henderson <richard.henderson@linaro.org> wrote: > Found while working on other parts of cputlb, > this cleanup can be split out independently. > > > r~ > > > Richard Henderson (2): > target/s390x: Split out helper_per_store_real > target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline > > target/s390x/helper.h | 5 +---- > target/s390x/mem_helper.c | 38 -------------------------------------- > target/s390x/misc_helper.c | 10 ++++++++++ > target/s390x/translate.c | 21 ++++++++------------- > target/s390x/insn-data.def | 8 ++++---- > 5 files changed, 23 insertions(+), 59 deletions(-) > Should I take these via the s390 tree, or do you plan to merge them via another path? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline 2019-12-16 17:04 ` [PATCH 0/2] " Cornelia Huck @ 2019-12-16 20:23 ` Richard Henderson 0 siblings, 0 replies; 8+ messages in thread From: Richard Henderson @ 2019-12-16 20:23 UTC (permalink / raw) To: Cornelia Huck; +Cc: qemu-s390x, qemu-devel, david On 12/16/19 7:04 AM, Cornelia Huck wrote: > On Wed, 11 Dec 2019 12:36:12 -0800 > Richard Henderson <richard.henderson@linaro.org> wrote: > >> Found while working on other parts of cputlb, >> this cleanup can be split out independently. ... > Should I take these via the s390 tree, or do you plan to merge them via > another path? > Please take them via s390. r~ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline 2019-12-11 20:36 [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson ` (2 preceding siblings ...) 2019-12-16 17:04 ` [PATCH 0/2] " Cornelia Huck @ 2019-12-17 10:01 ` Cornelia Huck 3 siblings, 0 replies; 8+ messages in thread From: Cornelia Huck @ 2019-12-17 10:01 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-s390x, qemu-devel, david On Wed, 11 Dec 2019 12:36:12 -0800 Richard Henderson <richard.henderson@linaro.org> wrote: > Found while working on other parts of cputlb, > this cleanup can be split out independently. > > > r~ > > > Richard Henderson (2): > target/s390x: Split out helper_per_store_real > target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline > > target/s390x/helper.h | 5 +---- > target/s390x/mem_helper.c | 38 -------------------------------------- > target/s390x/misc_helper.c | 10 ++++++++++ > target/s390x/translate.c | 21 ++++++++------------- > target/s390x/insn-data.def | 8 ++++---- > 5 files changed, 23 insertions(+), 59 deletions(-) > Thanks, applied. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-12-17 10:02 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-12-11 20:36 [PATCH 0/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson 2019-12-11 20:36 ` [PATCH 1/2] target/s390x: Split out helper_per_store_real Richard Henderson 2019-12-12 10:29 ` David Hildenbrand 2019-12-11 20:36 ` [PATCH 2/2] target/s390x: Implement LOAD/STORE TO REAL ADDRESS inline Richard Henderson 2019-12-12 10:35 ` David Hildenbrand 2019-12-16 17:04 ` [PATCH 0/2] " Cornelia Huck 2019-12-16 20:23 ` Richard Henderson 2019-12-17 10:01 ` Cornelia Huck
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.