[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
[PATCH v6 04/11] RISC-V: Add setjmp implementation, Alexander Graf, 2019/02/12
[PATCH v6 01/11] efi: Rename armxx to arch, Alexander Graf, 2019/02/12
[PATCH v6 06/11] RISC-V: Add Linux load logic, Alexander Graf, 2019/02/12
[PATCH v6 07/11] RISC-V: Add awareness for RISC-V reloations, Alexander Graf, 2019/02/12