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: Alexander Graf
Subject: Re: [PATCH v6 09/11] RISC-V: Add libgcc helpers for clz
Date: Tue, 19 Feb 2019 14:26:04 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

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

Yes, copied from libgcc.


Alex




reply via email to

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