On Tue, Apr 27, 2021 at 12:45 AM Andrew Waterman <and...@sifive.com> wrote:

> > signed addition (SImode with RV64):
> >         add     t0, t1, t2
> >     sext.w  t3, t0
> >     bne     t0, t3, overflow
>
> The following version has the same instruction count but offers more ILP:
>
>   add t0, t1, t2
>   addw t3, t1, t2
>   bne t0, t3, overflow
>

This is a good suggestion, but in the interests of making forward progress
here, I'd like to accept the patch and then file these as bugzillas as ways
to further improve the patch.

> > unsigned addition (SImode with RV64):
> >     sext.w  t3, t1
> >     addw        t0, t1, t2
> >     bltu        t0, t3, overflow
>
> I think you can do this in two instructions, similar to the previous
> pattern:
>
>   addw t0, t1, t2
>   bltu t0, t1, overflow
>

Likewise.

> > signed subtraction (SImode with RV64):
> >         sub     t0, t1, t2
> >     sext.w  t3, t0
> >     bne     t0, t3, overflow
>
> See analogous addition comment.
>

Likewise.

>
> > unsigned subtraction (SImode with RV64):
> >     sext.w  t3, t1
> >     subw        t0, t1, t2
> >     bltu    t0, t3, overflow
>
> See analogous addition comment.
>

Likewise.

> > unsigned multiplication (SImode with RV64):
> >     slli    t0,t0,32
> >         slli    t1,t1,32
> >         srli    t0,t0,32
> >         srli    t1,t1,32
> >         mul         t0,t0,t1
> >         srai    t5,t0,32
> >         bne         t5, 0, overflow
>
> I think you can eliminate the first two right shifts by replacing mul
> with mulhu... something like:
>
>   slli rx, rx, 32
>   slli ry, ry, 32
>   mulhu rz, rx, ry
>   srli rt, rz, 32
>   bnez rt, overflow
>

Likewise, except this should be a separate bugzilla.

Jim

Reply via email to