[PATCH 3/4] RISC-V: strcmp [speed optimized]: optimize null detect logic for targets with Zb* extension support

puranikvinit kvp933.vinit@gmail.com
Wed May 28 05:47:35 GMT 2025


Introduces conditional use of the orc.b instruction from the Zbb
extension for null byte detection, falling back to the original logic
for non-Zbb targets. This reduces cycles in the hot path for supported
architectures.

Signed-off-by: puranikvinit <kvp933.vinit@gmail.com>
Reviewed-by: Christian Herber <christian.herber@oss.nxp.com>
---
 newlib/libc/machine/riscv/strcmp.S | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/newlib/libc/machine/riscv/strcmp.S b/newlib/libc/machine/riscv/strcmp.S
index 405f2f655..42c870c10 100644
--- a/newlib/libc/machine/riscv/strcmp.S
+++ b/newlib/libc/machine/riscv/strcmp.S
@@ -48,10 +48,14 @@ strcmp:
     REG_L a2, \i*SZREG(a0)
     REG_L a3, \i*SZREG(a1)
 
-    and   a4, a2, a5
-    or    t1, a2, a5
-    add   a4, a4, a5
-    or    a4, a4, t1
+    #if __riscv_zbb
+      orc.b a4, a2
+    #else
+      and   a4, a2, a5
+      or    t1, a2, a5
+      add   a4, a4, a5
+      or    a4, a4, t1
+    #endif
 
     bne   a4, t2, .Lnull\i
     .if \i+1-\n
-- 
2.34.1



More information about the Newlib mailing list