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: Mon, 18 Feb 2019 20:55:28 +0100
User-agent: NeoMutt/20170113 (1.7.2)

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?

> 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.

Daniel



reply via email to

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