On 10.01.24 00:22, Ilya Leoshkevich wrote:
> LAE should set the access register corresponding to the first operand,
> instead, it always modifies access register 1.
>
> Co-developed-by: Ido Plat <Ido.Plat@ibm.com>
> Cc: qemu-stable@nongnu.org
> Fixes: a1c7610a6879 ("target-s390x: implement LAY and LAEY instructions")
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> target/s390x/tcg/translate.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
> index 62ab2be8b12..8df00b7df9f 100644
> --- a/target/s390x/tcg/translate.c
> +++ b/target/s390x/tcg/translate.c
> @@ -3221,6 +3221,7 @@ static DisasJumpType op_mov2e(DisasContext *s, DisasOps *o)
> {
> int b2 = get_field(s, b2);
> TCGv ar1 = tcg_temp_new_i64();
> + int r1 = get_field(s, r1);
>
> o->out = o->in2;
> o->in2 = NULL;
> @@ -3244,7 +3245,7 @@ static DisasJumpType op_mov2e(DisasContext *s, DisasOps *o)
> break;
> }
>
> - tcg_gen_st32_i64(ar1, tcg_env, offsetof(CPUS390XState, aregs[1]));
> + tcg_gen_st32_i64(ar1, tcg_env, offsetof(CPUS390XState, aregs[r1]));
> return DISAS_NEXT;
> }
>
Reviewed-by: David Hildenbrand <david@redhat.com>
--
Cheers,
David / dhildenb