target/s390x: Use unwind data for helper_unpk

Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
Richard Henderson 2017-05-19 11:37:55 -07:00
parent 498644e99f
commit 84e1b98ba6
2 changed files with 5 additions and 5 deletions

View File

@ -679,6 +679,7 @@ uint64_t HELPER(cksm)(CPUS390XState *env, uint64_t r1,
void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest, void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint64_t src) uint64_t src)
{ {
uintptr_t ra = GETPC();
int len_dest = len >> 4; int len_dest = len >> 4;
int len_src = len & 0xf; int len_src = len & 0xf;
uint8_t b; uint8_t b;
@ -688,8 +689,8 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
src += len_src; src += len_src;
/* last byte is special, it only flips the nibbles */ /* last byte is special, it only flips the nibbles */
b = cpu_ldub_data(env, src); b = cpu_ldub_data_ra(env, src, ra);
cpu_stb_data(env, dest, (b << 4) | (b >> 4)); cpu_stb_data_ra(env, dest, (b << 4) | (b >> 4), ra);
src--; src--;
len_src--; len_src--;
@ -699,7 +700,7 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint8_t cur_byte = 0; uint8_t cur_byte = 0;
if (len_src > 0) { if (len_src > 0) {
cur_byte = cpu_ldub_data(env, src); cur_byte = cpu_ldub_data_ra(env, src, ra);
} }
len_dest--; len_dest--;
@ -718,7 +719,7 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
/* zone bits */ /* zone bits */
cur_byte |= 0xf0; cur_byte |= 0xf0;
cpu_stb_data(env, dest, cur_byte); cpu_stb_data_ra(env, dest, cur_byte, ra);
} }
} }

View File

@ -4099,7 +4099,6 @@ static ExitStatus op_trt(DisasContext *s, DisasOps *o)
static ExitStatus op_unpk(DisasContext *s, DisasOps *o) static ExitStatus op_unpk(DisasContext *s, DisasOps *o)
{ {
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1)); TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
potential_page_fault(s);
gen_helper_unpk(cpu_env, l, o->addr1, o->in2); gen_helper_unpk(cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l); tcg_temp_free_i32(l);
return NO_EXIT; return NO_EXIT;