Message ID | 20191117090621.32425-2-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | target/arm: two fixes for ldrex/strex | expand |
On Sun, 17 Nov 2019 at 09:06, Richard Henderson <richard.henderson@linaro.org> wrote: > > There was too much cut and paste between ldrexd and strexd, > as ldrexd does prohibit two output registers the same. > > Fixes: af288228995 > Reported-by: Michael Goffioul <michael.goffioul@gmail.com> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/translate.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/arm/translate.c b/target/arm/translate.c > index 2ea9da7637..b285b23858 100644 > --- a/target/arm/translate.c > +++ b/target/arm/translate.c > @@ -8934,7 +8934,7 @@ static bool op_strex(DisasContext *s, arg_STREX *a, MemOp mop, bool rel) > || (s->thumb && (a->rd == 13 || a->rt == 13)) > || (mop == MO_64 > && (a->rt2 == 15 > - || a->rd == a->rt2 || a->rt == a->rt2 > + || a->rd == a->rt2 > || (s->thumb && a->rt2 == 13)))) { > unallocated_encoding(s); > return true; > -- > 2.17.1 Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/target/arm/translate.c b/target/arm/translate.c index 2ea9da7637..b285b23858 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -8934,7 +8934,7 @@ static bool op_strex(DisasContext *s, arg_STREX *a, MemOp mop, bool rel) || (s->thumb && (a->rd == 13 || a->rt == 13)) || (mop == MO_64 && (a->rt2 == 15 - || a->rd == a->rt2 || a->rt == a->rt2 + || a->rd == a->rt2 || (s->thumb && a->rt2 == 13)))) { unallocated_encoding(s); return true;
There was too much cut and paste between ldrexd and strexd, as ldrexd does prohibit two output registers the same. Fixes: af288228995 Reported-by: Michael Goffioul <michael.goffioul@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.17.1