diff --git a/newlib/libc/machine/riscv/rv_string.h b/newlib/libc/machine/riscv/rv_string.h
index dc2a26daf..9f5eb4099 100644
--- a/newlib/libc/machine/riscv/rv_string.h
+++ b/newlib/libc/machine/riscv/rv_string.h
@@ -112,6 +112,8 @@ static __inline char *__libc_strcpy(char *dst, const char *src, bool ret_start)
     }
 #endif /* not PREFER_SIZE_OVER_SPEED */
 
+#if !(!defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) &&
+      !(__riscv_misaligned_slow || __riscv_misaligned_fast))
   char ch;
   do
     {
@@ -122,6 +124,7 @@ static __inline char *__libc_strcpy(char *dst, const char *src, bool ret_start)
     } while (ch);
 
   return ret_start ? dst0 : dst - 1;
+#endif
 }
 
 
