On 31.05.2011, at 16:56, Nathan Whitehorn wrote:

> The mtmsr instruction is required not to modify the upper 32-bits of the 
> machine state register, but checks the current value of MSR[SF] to decide 
> whether to do this. This has the effect of zeroing the upper 32 bits of the 
> MSR whenever mtmsr is executed in 64-bit mode. Unconditionally preserve the 
> upper 32-bits in mtmsr for TARGET_PPC64.

This patch is missing a Signed-off-by line. Without, I unfortunately can't take 
the code upstream yet. See http://wiki.qemu.org/Contribute/SubmitAPatch for 
details.

> 
> ---
> target-ppc/translate.c |    5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/target-ppc/translate.c b/target-ppc/translate.c
> index 9b3f90c..a60dbe9 100644
> --- a/target-ppc/translate.c
> +++ b/target-ppc/translate.c
> @@ -3886,7 +3886,6 @@ static void gen_mtmsr(DisasContext *ctx)
>          */
>         gen_update_nip(ctx, ctx->nip);
> #if defined(TARGET_PPC64)
> -        if (!ctx->sf_mode) {
>             TCGv t0 = tcg_temp_new();

This code needs reindenting.

>             TCGv t1 = tcg_temp_new();
>             tcg_gen_andi_tl(t0, cpu_msr, 0xFFFFFFFF00000000ULL);
> @@ -3895,9 +3894,9 @@ static void gen_mtmsr(DisasContext *ctx)
>             tcg_temp_free(t1);
>             gen_helper_store_msr(t0);
>             tcg_temp_free(t0);
> -        } else
> -#endif
> +#else
>             gen_helper_store_msr(cpu_gpr[rS(ctx->opcode)]);

This does too

Functionality-wise it looks good to me.


Alex

Reply via email to