qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 73/77] target/microblaze: Convert dec_stream to decodetree


From: Edgar E. Iglesias
Subject: Re: [PATCH 73/77] target/microblaze: Convert dec_stream to decodetree
Date: Thu, 27 Aug 2020 23:10:37 +0200

On Tue, Aug 25, 2020 at 01:59:46PM -0700, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  target/microblaze/insns.decode |  6 ++++
>  target/microblaze/translate.c  | 64 ++++++++++++++++++++++++++--------
>  2 files changed, 55 insertions(+), 15 deletions(-)
> 
> diff --git a/target/microblaze/insns.decode b/target/microblaze/insns.decode
> index 48c60082e0..79d32c826c 100644
> --- a/target/microblaze/insns.decode
> +++ b/target/microblaze/insns.decode
> @@ -156,6 +156,9 @@ flt             010110 ..... ..... ----- 0101 000 0000  
> @typea0
>  fint            010110 ..... ..... ----- 0110 000 0000  @typea0
>  fsqrt           010110 ..... ..... 00000 0111 000 0000  @typea0
>  
> +get             011011 rd:5  00000 0 ctrl:5 000000 imm:4
> +getd            010011 rd:5  00000 rb:5  0 ctrl:5  00000
> +
>  idiv            010010 ..... ..... ..... 000 0000 0000  @typea
>  idivu           010010 ..... ..... ..... 000 0000 0010  @typea
>  
> @@ -198,6 +201,9 @@ pcmpbf          100000 ..... ..... ..... 100 0000 0000  
> @typea
>  pcmpeq          100010 ..... ..... ..... 100 0000 0000  @typea
>  pcmpne          100011 ..... ..... ..... 100 0000 0000  @typea
>  
> +put             011011 00000 ra:5  1 ctrl:5 000000 imm:4
> +putd            010011 00000 ra:5  rb:5  1 ctrl:5  00000
> +
>  rsub            000001 ..... ..... ..... 000 0000 0000  @typea
>  rsubc           000011 ..... ..... ..... 000 0000 0000  @typea
>  rsubk           000101 ..... ..... ..... 000 0000 0000  @typea
> diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
> index e9e4a0e1db..0a05b49f8e 100644
> --- a/target/microblaze/translate.c
> +++ b/target/microblaze/translate.c
> @@ -1587,33 +1587,68 @@ static void dec_null(DisasContext *dc)
>  }
>  
>  /* Insns connected to FSL or AXI stream attached devices.  */
> -static void dec_stream(DisasContext *dc)
> +static bool do_get(DisasContext *dc, int rd, int rb, int imm, int ctrl)
>  {
>      TCGv_i32 t_id, t_ctrl;
> -    int ctrl;
>  
>      if (trap_userspace(dc, true)) {
> -        return;
> +        return true;
>      }
>  
>      t_id = tcg_temp_new_i32();
> -    if (dc->type_b) {
> -        tcg_gen_movi_i32(t_id, dc->imm & 0xf);
> -        ctrl = dc->imm >> 10;
> +    if (rb) {
> +        tcg_gen_andi_i32(t_id, cpu_R[rb], 0xf);
>      } else {
> -        tcg_gen_andi_i32(t_id, cpu_R[dc->rb], 0xf);
> -        ctrl = dc->imm >> 5;
> +        tcg_gen_movi_i32(t_id, imm);
>      }
>  
>      t_ctrl = tcg_const_i32(ctrl);
> -
> -    if (dc->rd == 0) {
> -        gen_helper_put(t_id, t_ctrl, cpu_R[dc->ra]);
> -    } else {
> -        gen_helper_get(cpu_R[dc->rd], t_id, t_ctrl);
> -    }
> +    gen_helper_get(reg_for_write(dc, rd), t_id, t_ctrl);
>      tcg_temp_free_i32(t_id);
>      tcg_temp_free_i32(t_ctrl);
> +    return true;
> +}
> +
> +static bool trans_get(DisasContext *dc, arg_get *arg)
> +{
> +    return do_get(dc, arg->rd, 0, arg->imm, arg->ctrl);
> +}
> +
> +static bool trans_getd(DisasContext *dc, arg_getd *arg)
> +{
> +    return do_get(dc, arg->rd, arg->rb, 0, arg->ctrl);
> +}
> +
> +static bool do_put(DisasContext *dc, int ra, int rb, int imm, int ctrl)
> +{
> +    TCGv_i32 t_id, t_ctrl;
> +
> +    if (trap_userspace(dc, true)) {
> +        return true;
> +    }
> +
> +    t_id = tcg_temp_new_i32();
> +    if (rb) {
> +        tcg_gen_andi_i32(t_id, cpu_R[rb], 0xf);
> +    } else {
> +        tcg_gen_movi_i32(t_id, imm);
> +    }
> +
> +    t_ctrl = tcg_const_i32(ctrl);
> +    gen_helper_get(t_id, t_ctrl, reg_for_read(dc, ra));


I think you've got a typo here, get -> put.

Cheers,
Edgar



reply via email to

[Prev in Thread] Current Thread [Next in Thread]