[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
- Re: [PATCH 64/77] target/microblaze: Convert mbar to decodetree, (continued)
[PATCH 65/77] target/microblaze: Reorganize branching, Richard Henderson, 2020/08/25
[PATCH 66/77] target/microblaze: Use tcg_gen_lookup_and_goto_ptr, Richard Henderson, 2020/08/25
[PATCH 67/77] target/microblaze: Convert dec_br to decodetree, Richard Henderson, 2020/08/25
[PATCH 69/77] target/microblaze: Convert dec_rts to decodetree, Richard Henderson, 2020/08/25
[PATCH 68/77] target/microblaze: Convert dec_bcc to decodetree, Richard Henderson, 2020/08/25
[PATCH 73/77] target/microblaze: Convert dec_stream to decodetree, Richard Henderson, 2020/08/25
- Re: [PATCH 73/77] target/microblaze: Convert dec_stream to decodetree,
Edgar E. Iglesias <=
[PATCH 72/77] target/microblaze: Convert dec_msr to decodetree, Richard Henderson, 2020/08/25
[PATCH 76/77] target/microblaze: Add flags markup to some helpers, Richard Henderson, 2020/08/25
[PATCH 70/77] target/microblaze: Tidy do_rti, do_rtb, do_rte, Richard Henderson, 2020/08/25
[PATCH 75/77] target/microblaze: Remove cpu_R[0], Richard Henderson, 2020/08/25
[PATCH 71/77] target/microblaze: Convert msrclr, msrset to decodetree, Richard Henderson, 2020/08/25
[PATCH 74/77] target/microblaze: Remove last of old decoder, Richard Henderson, 2020/08/25
[PATCH 77/77] target/microblaze: Reduce linux-user address space to 32-bit, Richard Henderson, 2020/08/25
Re: [PATCH 00/77] target/microblaze improvements, Edgar E. Iglesias, 2020/08/26
Re: [PATCH 00/77] target/microblaze improvements, Edgar E. Iglesias, 2020/08/26