RISC-V: Add libgcc helpers for clz

Gcc may decide it wants to call helper functions to execute clz. Provide
them in our own copy of libgcc.

Signed-off-by: Alexander Graf <agraf@suse.de>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Alexander Graf authored and Daniel Kiper committed 2019-02-25 14:02:05 +01:00
1 parent 861212333e
commit e795b9011f
2 files changed
+49

No files matched your search

+42
View File
@@ -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;
}
}
#endif