diff mbox

[fix,for-2.9] target/ppc: fix cpu_ov setting for 32-bit

Message ID 20170313093104.1280-1-nikunj@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nikunj A. Dadhania March 13, 2017, 9:31 a.m. UTC
A bug was introduced in following commit:

    dc0ad84 target/ppc: update overflow flags for add/sub

As for 32-bit ppc target extracting bit 63 for overflow is not correct.
Made it dependent on TARGET_LOG_BITS. This had broken booting MacOS
9.2.1 image

Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
---
 target/ppc/translate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Mark Cave-Ayland March 13, 2017, 12:54 p.m. UTC | #1
On 13/03/17 09:31, Nikunj A Dadhania wrote:

> A bug was introduced in following commit:
> 
>     dc0ad84 target/ppc: update overflow flags for add/sub
> 
> As for 32-bit ppc target extracting bit 63 for overflow is not correct.
> Made it dependent on TARGET_LOG_BITS. This had broken booting MacOS
> 9.2.1 image
> 
> Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> ---
>  target/ppc/translate.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index b6abc60..f40b5a1 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -818,7 +818,7 @@ static inline void gen_op_arith_compute_ov(DisasContext *ctx, TCGv arg0,
>          if (is_isa300(ctx)) {
>              tcg_gen_extract_tl(cpu_ov32, cpu_ov, 31, 1);
>          }
> -        tcg_gen_extract_tl(cpu_ov, cpu_ov, 63, 1);
> +        tcg_gen_extract_tl(cpu_ov, cpu_ov, TARGET_LONG_BITS - 1, 1);
>      }
>      tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
>  }
> 

Hi Nikunj,

I can confirm that this patch fixes the segfault for me - thanks!

Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

However even with this fix in place, I'm still seeing strange horizontal
artifacts on the screen as demonstrated here:

https://www.ilande.co.uk/tmp/qemu/macos9-stripe.png

With the patch above I'll try bisecting again later today to try and
understand where these lines are coming from. So far I've spotted them
in MacOS 9 and OS X during tests...


ATB,

Mark.
Mark Cave-Ayland March 13, 2017, 9:01 p.m. UTC | #2
On 13/03/17 12:54, Mark Cave-Ayland wrote:

> With the patch above I'll try bisecting again later today to try and
> understand where these lines are coming from. So far I've spotted them
> in MacOS 9 and OS X during tests...

Okay - I've completed the bisection, and the artifacts I'm seeing aren't
related to any of the PPC patches. Thanks once again for looking into this.


ATB,

Mark.
David Gibson March 14, 2017, 12:21 a.m. UTC | #3
On Mon, Mar 13, 2017 at 03:01:04PM +0530, Nikunj A Dadhania wrote:
> A bug was introduced in following commit:
> 
>     dc0ad84 target/ppc: update overflow flags for add/sub
> 
> As for 32-bit ppc target extracting bit 63 for overflow is not correct.
> Made it dependent on TARGET_LOG_BITS. This had broken booting MacOS
> 9.2.1 image
> 
> Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>

Applied to ppc-for-2.9, thanks.

> ---
>  target/ppc/translate.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index b6abc60..f40b5a1 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -818,7 +818,7 @@ static inline void gen_op_arith_compute_ov(DisasContext *ctx, TCGv arg0,
>          if (is_isa300(ctx)) {
>              tcg_gen_extract_tl(cpu_ov32, cpu_ov, 31, 1);
>          }
> -        tcg_gen_extract_tl(cpu_ov, cpu_ov, 63, 1);
> +        tcg_gen_extract_tl(cpu_ov, cpu_ov, TARGET_LONG_BITS - 1, 1);
>      }
>      tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
>  }
diff mbox

Patch

diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index b6abc60..f40b5a1 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -818,7 +818,7 @@  static inline void gen_op_arith_compute_ov(DisasContext *ctx, TCGv arg0,
         if (is_isa300(ctx)) {
             tcg_gen_extract_tl(cpu_ov32, cpu_ov, 31, 1);
         }
-        tcg_gen_extract_tl(cpu_ov, cpu_ov, 63, 1);
+        tcg_gen_extract_tl(cpu_ov, cpu_ov, TARGET_LONG_BITS - 1, 1);
     }
     tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
 }