[PATCH] RISC-V: Fix memcpy() for GCC 13

Sebastian Huber sebastian.huber@embedded-brains.de
Wed Jul 2 00:40:56 GMT 2025


GCC 13 does not define the __riscv_misaligned_* builtin defines.  They are
supported by GCC 14 or later.  Test for __riscv_misaligned_fast to select an
always correct memcpy() implementation for GCC 13.

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
 newlib/libc/machine/riscv/memcpy.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/machine/riscv/memcpy.c b/newlib/libc/machine/riscv/memcpy.c
index 5d6b2f301..a27e0ecb1 100644
--- a/newlib/libc/machine/riscv/memcpy.c
+++ b/newlib/libc/machine/riscv/memcpy.c
@@ -30,7 +30,7 @@ __libc_memcpy_bytewise (unsigned char *dst, const unsigned char *src,
     *dst++ = *src++;
 }
 
-#if defined(__riscv_misaligned_slow) || defined(__riscv_misaligned_avoid)
+#ifndef __riscv_misaligned_fast
 static uintxlen_t
 __libc_load_xlen (const void *src)
 {
@@ -75,7 +75,7 @@ memcpy (void *__restrict aa, const void *__restrict bb, size_t n)
  * This uses only one aligned store for every four (or eight for XLEN == 64)
  * bytes of data.
  */
-#if defined(__riscv_misaligned_slow) || defined(__riscv_misaligned_avoid)
+#ifndef __riscv_misaligned_fast
   if (unlikely ((((uintptr_t)a & msk) != ((uintptr_t)b & msk))))
     {
       size_t dst_pad = (uintptr_t)a & msk;
-- 
2.43.0



More information about the Newlib mailing list