@@ -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
@@ -108,6 +108,13 @@ EXPORT_FUNC (__aeabi_llsr) (grub_uint64_t u, int b);
#endif
+#ifdef __riscv
+int
+EXPORT_FUNC (__clzsi2) (grub_uint32_t val);
+
+int
+EXPORT_FUNC (__clzdi2) (grub_uint64_t val);
+#endif
#if defined (__powerpc__)
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> --- grub-core/kern/compiler-rt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ include/grub/compiler-rt.h | 7 +++++++ 2 files changed, 49 insertions(+) -- 2.12.3 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel