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 <ag...@suse.de> > --- > 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 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel