[PATCH v5 0/2] riscv: lib: add optimized memcmp() and extend KUnit tests
Milan Tripkovic
milant2002 at gmail.com
Tue May 19 07:00:27 PDT 2026
This v5 series provides an optimized RISC-V memcmp() implementation
along with extended KUnit tests for functional verification and
benchmarking
The memcmp() implementation now uses word-aligned loads for the generic
path and leverages Zbb for fast sign resolution on supported hardware.
A robust fallback to byte-by-byte comparison is implemented for non-Zbb
systems to ensure correctness and stability across different toolchains
and hardware revisions.
Signed-off-by: Milan Tripkovic <Milan.Tripkovic at rt-rk.com>
---
v5 changes:
- Removed redundant warm-up from test case
- Optimized generic memcmp path with word-aligned loads.
- Implemented non-ZBB fallback to byte comparison per review.
- Link to v4: https://lore.kernel.org/all/20260518131407.1026049-2-milant2002@gmail.com/
v4 changes:
- Fixed build error: call to undeclared function 'STRING_BENCH'
- Link to v3: https://lore.kernel.org/all/20260515141019.1234037-1-milant2002@gmail.com/
v3 changes:
- Split memcmp benchmark into wrapper (string_bench_memcmp) and worker
function (do_string_bench_memcmp).
- Removed all C99 mixed declarations; moved all variable declarations
to the top of each function.
- Converted len, iterations and loop counters in the benchmark to u64
to avoid implicit casts.
- Cleaned up spacing, indentation and minor style issues.
- Added #if defined(CONFIG_RISCV_ISA_ZBB)... in memcmp.S
- Link to v2: https://lore.kernel.org/all/20260514121359.931999-1-milant2002@gmail.com/
v2 changes:
- Added alignment checks for buffers to avoid expensive misaligned loads.
- Optimized the loop using end-pointers to reduce per-iteration overhead.
- Implemented word-aligned tail handling using ZBB shifts.
- Removed redundant pointer equality (a0 == a1) check.
- Retained BE support via #ifndef; ZBB rev8 is used for the LE fast-path.
- Fixed KUnit build failures for Clang and non-benchmark configs.
- Link to v1: https://lore.kernel.org/all/20260512141007.1193033-1-milant2002@gmail.com/
Milan Tripkovic (2):
riscv: lib: add memcmp() implementation
lib/string_kunit: extend benchmarks and unit test to memcmp()
arch/riscv/include/asm/string.h | 2 +
arch/riscv/lib/Makefile | 1 +
arch/riscv/lib/memcmp.S | 106 ++++++++++++++++++++++++++++++
arch/riscv/purgatory/Makefile | 5 +-
lib/tests/string_kunit.c | 110 ++++++++++++++++++++++++++++++++
5 files changed, 223 insertions(+), 1 deletion(-)
create mode 100644 arch/riscv/lib/memcmp.S
--
2.43.0
More information about the linux-riscv
mailing list