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.
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.
Yes, copied from libgcc.
Alex
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel