grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v6 09/11] RISC-V: Add libgcc helpers for clz


From: Daniel Kiper
Subject: Re: [PATCH v6 09/11] RISC-V: Add libgcc helpers for clz
Date: Wed, 20 Feb 2019 21:34:32 +0100
User-agent: NeoMutt/20170113 (1.7.2)

On Tue, Feb 19, 2019 at 02:26:04PM +0100, Alexander Graf wrote:
> On 02/18/2019 08:55 PM, Daniel Kiper wrote:
> > On Tue, Feb 12, 2019 at 11:31:06AM +0100, Alexander Graf wrote:
> > > Gcc may decide it wants to call helper functions to execute clz. Provide
> > Do we know when it happens? Could we add that to the commit message?
>
> Uh, on bitfield operations? I don't know - gcc just does it.

OK, let's ignore it.

> > > them in our own copy of libgcc.
> > >
> > > Signed-off-by: Alexander Graf <address@hidden>
> > > ---
> > >   grub-core/kern/compiler-rt.c | 42 
> > > ++++++++++++++++++++++++++++++++++++++++++
> > >   include/grub/compiler-rt.h   |  7 +++++++
> > >   2 files changed, 49 insertions(+)
> > >
> > > diff --git a/grub-core/kern/compiler-rt.c b/grub-core/kern/compiler-rt.c
> > > index 5cfcb3907..404902119 100644
> > > --- a/grub-core/kern/compiler-rt.c
> > > +++ b/grub-core/kern/compiler-rt.c
> > > @@ -417,3 +417,45 @@ __aeabi_llsl (grub_uint64_t u, int b)
> > >     __attribute__ ((alias ("__ashldi3")));
> > >
> > >   #endif
> > > +
> > > +#ifdef __riscv
> > > +
> > > +/* Based on libgcc from gcc suite.  */
> > > +int
> > > +__clzsi2 (grub_uint32_t val)
> > > +{
> > > +  int i = 32;
> > > +  int j = 16;
> > > +  int temp;
> > > +
> > > +  for (; j; j >>= 1)
> > > +    {
> > > +      if ((temp = val) >> j)
> > > +        {
> > > +          if (j == 1)
> > > +            {
> > > +              return (i - 2);
> > > +            }
> > > +          else
> > > +            {
> > > +              i -= j;
> > > +              val = temp;
> > > +            }
> > > +        }
> > > +    }
> > > +  return (i - val);
> > > +}
> > > +
> > > +int
> > > +__clzdi2 (grub_uint64_t val)
> > > +{
> > > +  if (val >> 32)
> > > +    {
> > > +      return __clzsi2 (val >> 32);
> > > +    }
> > > +  else
> > > +    {
> > > +      return __clzsi2 (val) + 32;
> > > +    }
> > > +}
> > I assume that __clzsi2() and __clzdi2() are exact copies from libgcc.
> > If no then I have an itching to drop redundant curly braces.
>
> Yes, copied from libgcc.

Then Reviewed-by: Daniel Kiper <address@hidden>

Daniel



reply via email to

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