diff mbox series

[for-5.1?] target/i386: Save cc_op before loop insns

Message ID 20200720154028.477457-1-richard.henderson@linaro.org
State New
Headers show
Series [for-5.1?] target/i386: Save cc_op before loop insns | expand

Commit Message

Richard Henderson July 20, 2020, 3:40 p.m. UTC
We forgot to update cc_op before these branch insns,
which lead to losing track of the current eflags.

Buglink: https://bugs.launchpad.net/qemu/+bug/1888165
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/i386/translate.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Richard Henderson July 24, 2020, 6:34 p.m. UTC | #1
Ping?

On 7/20/20 8:40 AM, Richard Henderson wrote:
> We forgot to update cc_op before these branch insns,
> which lead to losing track of the current eflags.
> 
> Buglink: https://bugs.launchpad.net/qemu/+bug/1888165
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  target/i386/translate.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/target/i386/translate.c b/target/i386/translate.c
> index a1d31f09c1..caea6f5fb1 100644
> --- a/target/i386/translate.c
> +++ b/target/i386/translate.c
> @@ -7148,6 +7148,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
>              l1 = gen_new_label();
>              l2 = gen_new_label();
>              l3 = gen_new_label();
> +            gen_update_cc_op(s);
>              b &= 3;
>              switch(b) {
>              case 0: /* loopnz */
>
Paolo Bonzini July 24, 2020, 6:53 p.m. UTC | #2
Looks good, will queue when I am back---or just send a pull request
yourself if you prefer.

Paolo

Il ven 24 lug 2020, 20:35 Richard Henderson <richard.henderson@linaro.org>
ha scritto:

> Ping?
>
> On 7/20/20 8:40 AM, Richard Henderson wrote:
> > We forgot to update cc_op before these branch insns,
> > which lead to losing track of the current eflags.
> >
> > Buglink: https://bugs.launchpad.net/qemu/+bug/1888165
> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> > ---
> >  target/i386/translate.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/target/i386/translate.c b/target/i386/translate.c
> > index a1d31f09c1..caea6f5fb1 100644
> > --- a/target/i386/translate.c
> > +++ b/target/i386/translate.c
> > @@ -7148,6 +7148,7 @@ static target_ulong disas_insn(DisasContext *s,
> CPUState *cpu)
> >              l1 = gen_new_label();
> >              l2 = gen_new_label();
> >              l3 = gen_new_label();
> > +            gen_update_cc_op(s);
> >              b &= 3;
> >              switch(b) {
> >              case 0: /* loopnz */
> >
>
>
Alex Bennée July 24, 2020, 7:23 p.m. UTC | #3
Richard Henderson <richard.henderson@linaro.org> writes:

> We forgot to update cc_op before these branch insns,
> which lead to losing track of the current eflags.
>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1888165
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  target/i386/translate.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/target/i386/translate.c b/target/i386/translate.c
> index a1d31f09c1..caea6f5fb1 100644
> --- a/target/i386/translate.c
> +++ b/target/i386/translate.c
> @@ -7148,6 +7148,7 @@ static target_ulong disas_insn(DisasContext *s,
> CPUState *cpu)

At first I thought that was too broad to go in disas_insn and then I
realised it was one of those mega functions....

>              l1 = gen_new_label();
>              l2 = gen_new_label();
>              l3 = gen_new_label();
> +            gen_update_cc_op(s);


Seems legit:

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
<snip>
Richard Henderson July 24, 2020, 9:47 p.m. UTC | #4
On 7/24/20 11:53 AM, Paolo Bonzini wrote:
> Looks good, will queue when I am back---or just send a pull request yourself if
> you prefer.

Ok, will do.  Thanks.


r~

> 
> Paolo
> 
> Il ven 24 lug 2020, 20:35 Richard Henderson <richard.henderson@linaro.org
> <mailto:richard.henderson@linaro.org>> ha scritto:
> 
>     Ping?
> 
>     On 7/20/20 8:40 AM, Richard Henderson wrote:
>     > We forgot to update cc_op before these branch insns,
>     > which lead to losing track of the current eflags.
>     >
>     > Buglink: https://bugs.launchpad.net/qemu/+bug/1888165
>     > Signed-off-by: Richard Henderson <richard.henderson@linaro.org
>     <mailto:richard.henderson@linaro.org>>
>     > ---
>     >  target/i386/translate.c | 1 +
>     >  1 file changed, 1 insertion(+)
>     >
>     > diff --git a/target/i386/translate.c b/target/i386/translate.c
>     > index a1d31f09c1..caea6f5fb1 100644
>     > --- a/target/i386/translate.c
>     > +++ b/target/i386/translate.c
>     > @@ -7148,6 +7148,7 @@ static target_ulong disas_insn(DisasContext *s,
>     CPUState *cpu)
>     >              l1 = gen_new_label();
>     >              l2 = gen_new_label();
>     >              l3 = gen_new_label();
>     > +            gen_update_cc_op(s);
>     >              b &= 3;
>     >              switch(b) {
>     >              case 0: /* loopnz */
>     >
>
diff mbox series

Patch

diff --git a/target/i386/translate.c b/target/i386/translate.c
index a1d31f09c1..caea6f5fb1 100644
--- a/target/i386/translate.c
+++ b/target/i386/translate.c
@@ -7148,6 +7148,7 @@  static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
             l1 = gen_new_label();
             l2 = gen_new_label();
             l3 = gen_new_label();
+            gen_update_cc_op(s);
             b &= 3;
             switch(b) {
             case 0: /* loopnz */