On 2026/08/26 04:58 PM, Amit Machhiwal wrote:
> On 2026/08/26 10:38 AM, Chinmay Rath wrote:
> > From: "Mukesh Kumar Chaurasiya (IBM)" <[email protected]>
> > 
> > Instructions converted:
> > 
> > - slw
> > - srw

Also, the commit log could be improved:

  Move slw and srw to decodetree specification using the @X_rc
  format. The existing shift-masking logic from gen_slw/gen_srw is
  preserved verbatim in the new trans_SLW/trans_SRW handlers.

> > 
> > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
> > Reviewed-by: Glenn Miles <[email protected]>
> > Signed-off-by: Chinmay Rath <[email protected]>
> > ---
> >  target/ppc/insn32.decode                   |  6 +++
> >  target/ppc/translate.c                     | 49 ----------------------
> >  target/ppc/translate/fixedpoint-impl.c.inc | 48 +++++++++++++++++++++
> >  3 files changed, 54 insertions(+), 49 deletions(-)
> > 
> > diff --git a/target/ppc/insn32.decode b/target/ppc/insn32.decode
> > index 701c66b347..66d2f455a9 100644
> > --- a/target/ppc/insn32.decode
> > +++ b/target/ppc/insn32.decode
> > @@ -505,6 +505,12 @@ HASHCHK         011111 ..... ..... ..... 1011110010 .  
> >  @X_DW
> >  HASHSTP         011111 ..... ..... ..... 1010010010 .   @X_DW
> >  HASHCHKP        011111 ..... ..... ..... 1010110010 .   @X_DW
> >  
> > +# Fixed-Point Shift Instructions
> > +
> > +SLW                011111 ..... ..... ..... 0000011000 .   @X_rc
> > +SRW                011111 ..... ..... ..... 1000011000 .   @X_rc
> > +
> > +
> 
> Nit: this looks like an extra blank line - can be removed. Otherwise,
> 
> Reviewed-by: Amit Machhiwal <[email protected]>
> 
> >  ## BCD Assist
> >  
> >  ADDG6S          011111 ..... ..... ..... - 001001010 -  @X
> > diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> > index ee14fbfd96..f2b7505634 100644
> > --- a/target/ppc/translate.c
> > +++ b/target/ppc/translate.c
> > @@ -2315,29 +2315,6 @@ GEN_PPC64_R4(rldimi, 0x1E, 0x06);
> >  
> >  /***                             Integer shift                             
> > ***/
> >  
> > -/* slw & slw. */
> > -static void gen_slw(DisasContext *ctx)
> > -{
> > -    TCGv t0, t1;
> > -
> > -    t0 = tcg_temp_new();
> > -    /* AND rS with a mask that is 0 when rB >= 0x20 */
> > -#if defined(TARGET_PPC64)
> > -    tcg_gen_shli_tl(t0, cpu_gpr[rB(ctx->opcode)], 0x3a);
> > -    tcg_gen_sari_tl(t0, t0, 0x3f);
> > -#else
> > -    tcg_gen_shli_tl(t0, cpu_gpr[rB(ctx->opcode)], 0x1a);
> > -    tcg_gen_sari_tl(t0, t0, 0x1f);
> > -#endif
> > -    tcg_gen_andc_tl(t0, cpu_gpr[rS(ctx->opcode)], t0);
> > -    t1 = tcg_temp_new();
> > -    tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x1f);
> > -    tcg_gen_shl_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
> > -    tcg_gen_ext32u_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
> > -    if (unlikely(Rc(ctx->opcode) != 0)) {
> > -        gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
> > -    }
> > -}
> >  
> >  /* sraw & sraw. */
> >  static void gen_sraw(DisasContext *ctx)
> > @@ -2379,30 +2356,6 @@ static void gen_srawi(DisasContext *ctx)
> >      }
> >  }
> >  
> > -/* srw & srw. */
> > -static void gen_srw(DisasContext *ctx)
> > -{
> > -    TCGv t0, t1;
> > -
> > -    t0 = tcg_temp_new();
> > -    /* AND rS with a mask that is 0 when rB >= 0x20 */
> > -#if defined(TARGET_PPC64)
> > -    tcg_gen_shli_tl(t0, cpu_gpr[rB(ctx->opcode)], 0x3a);
> > -    tcg_gen_sari_tl(t0, t0, 0x3f);
> > -#else
> > -    tcg_gen_shli_tl(t0, cpu_gpr[rB(ctx->opcode)], 0x1a);
> > -    tcg_gen_sari_tl(t0, t0, 0x1f);
> > -#endif
> > -    tcg_gen_andc_tl(t0, cpu_gpr[rS(ctx->opcode)], t0);
> > -    tcg_gen_ext32u_tl(t0, t0);
> > -    t1 = tcg_temp_new();
> > -    tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x1f);
> > -    tcg_gen_shr_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
> > -    if (unlikely(Rc(ctx->opcode) != 0)) {
> > -        gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
> > -    }
> > -}
> > -
> >  #if defined(TARGET_PPC64)
> >  /* sld & sld. */
> >  static void gen_sld(DisasContext *ctx)
> > @@ -5777,10 +5730,8 @@ GEN_HANDLER_E(paste, 0x1F, 0x06, 0x1C, 0x03C00000, 
> > PPC_NONE, PPC2_ISA300),
> >  GEN_HANDLER(rlwimi, 0x14, 0xFF, 0xFF, 0x00000000, PPC_INTEGER),
> >  GEN_HANDLER(rlwinm, 0x15, 0xFF, 0xFF, 0x00000000, PPC_INTEGER),
> >  GEN_HANDLER(rlwnm, 0x17, 0xFF, 0xFF, 0x00000000, PPC_INTEGER),
> > -GEN_HANDLER(slw, 0x1F, 0x18, 0x00, 0x00000000, PPC_INTEGER),
> >  GEN_HANDLER(sraw, 0x1F, 0x18, 0x18, 0x00000000, PPC_INTEGER),
> >  GEN_HANDLER(srawi, 0x1F, 0x18, 0x19, 0x00000000, PPC_INTEGER),
> > -GEN_HANDLER(srw, 0x1F, 0x18, 0x10, 0x00000000, PPC_INTEGER),
> >  #if defined(TARGET_PPC64)
> >  GEN_HANDLER(sld, 0x1F, 0x1B, 0x00, 0x00000000, PPC_64B),
> >  GEN_HANDLER(srad, 0x1F, 0x1A, 0x18, 0x00000000, PPC_64B),
> > diff --git a/target/ppc/translate/fixedpoint-impl.c.inc 
> > b/target/ppc/translate/fixedpoint-impl.c.inc
> > index 91f9c6c391..9d04b96316 100644
> > --- a/target/ppc/translate/fixedpoint-impl.c.inc
> > +++ b/target/ppc/translate/fixedpoint-impl.c.inc
> > @@ -1406,3 +1406,51 @@ TRANS(HASHST, do_hash, false, gen_helper_HASHST)
> >  TRANS(HASHCHK, do_hash, false, gen_helper_HASHCHK)
> >  TRANS(HASHSTP, do_hash, true, gen_helper_HASHSTP)
> >  TRANS(HASHCHKP, do_hash, true, gen_helper_HASHCHKP)
> > +
> > +static bool trans_SLW(DisasContext *ctx, arg_SLW *a)
> > +{
> > +    TCGv t0, t1;
> > +
> > +    t0 = tcg_temp_new();
> > +    /* AND rt with a mask that is 0 when rB >= 0x20 */
> > +#if defined(TARGET_PPC64)
> > +    tcg_gen_shli_tl(t0, cpu_gpr[a->rb], 0x3a);
> > +    tcg_gen_sari_tl(t0, t0, 0x3f);
> > +#else
> > +    tcg_gen_shli_tl(t0, cpu_gpr[a->rb], 0x1a);
> > +    tcg_gen_sari_tl(t0, t0, 0x1f);
> > +#endif
> > +    tcg_gen_andc_tl(t0, cpu_gpr[a->rt], t0);
> > +    t1 = tcg_temp_new();
> > +    tcg_gen_andi_tl(t1, cpu_gpr[a->rb], 0x1f);
> > +    tcg_gen_shl_tl(cpu_gpr[a->ra], t0, t1);
> > +    tcg_gen_ext32u_tl(cpu_gpr[a->ra], cpu_gpr[a->ra]);
> > +    if (unlikely(a->rc)) {
> > +        gen_set_Rc0(ctx, cpu_gpr[a->ra]);
> > +    }
> > +    return true;
> > +}
> > +
> > +static bool trans_SRW(DisasContext *ctx, arg_SRW *a)
> > +{
> > +    TCGv t0, t1;
> > +
> > +    t0 = tcg_temp_new();
> > +    /* AND rt with a mask that is 0 when rB >= 0x20 */
> > +#if defined(TARGET_PPC64)
> > +    tcg_gen_shli_tl(t0, cpu_gpr[a->rb], 0x3a);
> > +    tcg_gen_sari_tl(t0, t0, 0x3f);
> > +#else
> > +    tcg_gen_shli_tl(t0, cpu_gpr[a->rb], 0x1a);
> > +    tcg_gen_sari_tl(t0, t0, 0x1f);
> > +#endif
> > +    tcg_gen_andc_tl(t0, cpu_gpr[a->rt], t0);
> > +    tcg_gen_ext32u_tl(t0, t0);
> > +    t1 = tcg_temp_new();
> > +    tcg_gen_andi_tl(t1, cpu_gpr[a->rb], 0x1f);
> > +    tcg_gen_shr_tl(cpu_gpr[a->ra], t0, t1);
> > +    if (unlikely(a->rc)) {
> > +        gen_set_Rc0(ctx, cpu_gpr[a->ra]);
> > +    }
> > +    return true;
> > +}
> > -- 
> > 2.55.0
> > 

Reply via email to