On 9/11/24 16:16, Fabiano Rosas wrote: > The XT check for the lxvx/stxvx instructions is currently > inverted. This was introduced during the move to decodetree. > > From the ISA: > Chapter 7. Vector-Scalar Extension Facility > Load VSX Vector Indexed X-form > > lxvx XT,RA,RB > if TX=0 & MSR.VSX=0 then VSX_Unavailable() > if TX=1 & MSR.VEC=0 then Vector_Unavailable() > ... > Let XT be the value 32×TX + T. > > The code currently does the opposite: > > if (paired || a->rt >= 32) { > REQUIRE_VSX(ctx); > } else { > REQUIRE_VECTOR(ctx); > } > > This was already fixed for lxv/stxv at commit "2cc0e449d1 (target/ppc: > Fix lxv/stxv MSR facility check)", but the indexed forms were missed. > > Cc: qemu-sta...@nongnu.org > Fixes: 70426b5bb7 ("target/ppc: moved stxvx and lxvx from legacy to > decodtree") > Signed-off-by: Fabiano Rosas <faro...@suse.de> > --- > target/ppc/translate/vsx-impl.c.inc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/ppc/translate/vsx-impl.c.inc > b/target/ppc/translate/vsx-impl.c.inc > index 40a87ddc4a..a869f30e86 100644 > --- a/target/ppc/translate/vsx-impl.c.inc > +++ b/target/ppc/translate/vsx-impl.c.inc > @@ -2244,7 +2244,7 @@ static bool do_lstxv_PLS_D(DisasContext *ctx, arg_PLS_D > *a, > > static bool do_lstxv_X(DisasContext *ctx, arg_X *a, bool store, bool paired) > { > - if (paired || a->rt >= 32) { > + if (paired || a->rt < 32) { > REQUIRE_VSX(ctx); > } else { > REQUIRE_VECTOR(ctx);
Reviewed-by: Claudio Fontana <cfont...@suse.de>