[prev in list] [next in list] [prev in thread] [next in thread] 

List:       qemu-devel
Subject:    Re: [PATCH v2 2/3] target/hppa: Move diag argument handling to decodetree
From:       Helge Deller <deller () gmx ! de>
Date:       2024-03-26 20:27:37
Message-ID: 63212915-764c-47d0-81d7-f1479e3df3d9 () gmx ! de
[Download RAW message or body]

On 3/26/24 19:10, Richard Henderson wrote:
> Split trans_diag into per-operation functions.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Reviewed-by: Helge Deller <deller@gmx.de>

Helge

> ---
>   target/hppa/insns.decode |  8 +++++++-
>   target/hppa/translate.c  | 34 +++++++++++++++++++++-------------
>   2 files changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/target/hppa/insns.decode b/target/hppa/insns.decode
> index 6a74cf23cd..9f6ffd8e2c 100644
> --- a/target/hppa/insns.decode
> +++ b/target/hppa/insns.decode
> @@ -634,4 +634,10 @@ fdiv_d          001110 ..... ..... 011 ..... ... .....  @f0e_d_3
>   xmpyu           001110 ..... ..... 010 .0111 .00 t:5    r1=%ra64 r2=%rb64
>
>   # diag
> -diag            000101 i:26
> +{
> +  [
> +    diag_btlb               000101 00 0000 0000 0000 0001 0000 0000
> +    diag_cout               000101 00 0000 0000 0000 0001 0000 0001
> +  ]
> +  diag_unimp                000101 i:26
> +}
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index 29e4a64e40..42dd3f2c8d 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -4572,23 +4572,31 @@ static bool trans_fmpyfadd_d(DisasContext *ctx, arg_fmpyfadd_d *a)
>       return nullify_end(ctx);
>   }
>
> -static bool trans_diag(DisasContext *ctx, arg_diag *a)
> +/* Emulate PDC BTLB, called by SeaBIOS-hppa */
> +static bool trans_diag_btlb(DisasContext *ctx, arg_diag_btlb *a)
>   {
>       CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
>   #ifndef CONFIG_USER_ONLY
> -    if (a->i == 0x100) {
> -        /* emulate PDC BTLB, called by SeaBIOS-hppa */
> -        nullify_over(ctx);
> -        gen_helper_diag_btlb(tcg_env);
> -        return nullify_end(ctx);
> -    }
> -    if (a->i == 0x101) {
> -        /* print char in %r26 to first serial console, used by SeaBIOS-hppa */
> -        nullify_over(ctx);
> -        gen_helper_diag_console_output(tcg_env);
> -        return nullify_end(ctx);
> -    }
> +    nullify_over(ctx);
> +    gen_helper_diag_btlb(tcg_env);
> +    return nullify_end(ctx);
>   #endif
> +}
> +
> +/* Print char in %r26 to first serial console, used by SeaBIOS-hppa */
> +static bool trans_diag_cout(DisasContext *ctx, arg_diag_cout *a)
> +{
> +    CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
> +#ifndef CONFIG_USER_ONLY
> +    nullify_over(ctx);
> +    gen_helper_diag_console_output(tcg_env);
> +    return nullify_end(ctx);
> +#endif
> +}
> +
> +static bool trans_diag_unimp(DisasContext *ctx, arg_diag_unimp *a)
> +{
> +    CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
>       qemu_log_mask(LOG_UNIMP, "DIAG opcode 0x%04x ignored\n", a->i);
>       return true;
>   }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic