Date: Tue, 24 Mar 2026 19:17:05 +0000 From: Robert Clausecker <fuz@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: a002d848b52b - main - textproc/krep: fix build on armv7 Message-ID: <69c2e331.429e6.35888bce@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/ports/commit/?id=a002d848b52bda537a6d0a90da4616001303f80b commit a002d848b52bda537a6d0a90da4616001303f80b Author: Robert Clausecker <fuz@FreeBSD.org> AuthorDate: 2026-03-18 19:53:07 +0000 Commit: Robert Clausecker <fuz@FreeBSD.org> CommitDate: 2026-03-24 19:12:37 +0000 textproc/krep: fix build on armv7 Add polyfill for the vmaxvq_u8() intrinsic only available on AArch64. This should probably be upstreamed. Approved by: portmgr (build fix blanket) --- textproc/krep/files/patch-krep.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/textproc/krep/files/patch-krep.c b/textproc/krep/files/patch-krep.c new file mode 100644 index 000000000000..f0215d13d627 --- /dev/null +++ b/textproc/krep/files/patch-krep.c @@ -0,0 +1,39 @@ +--- krep.c.orig 2026-03-18 19:36:12 UTC ++++ krep.c +@@ -4503,6 +4503,27 @@ uint64_t memchr_short_search(const search_params_t *pa + } + + #ifdef __ARM_NEON ++ ++#ifdef __aarch64__ ++static inline bool ++is_nonzero(uint8x16_t a) ++{ ++ return (vmaxvq_u8(a) != 0); ++} ++#else ++/* no vmaxvq_u8() on AArch32 */ ++static inline bool ++is_nonzero(uint8x16_t a) ++{ ++ uint8x8_t a8, a4; ++ ++ a8 = vmax_u8(vget_low_u8(a), vget_high_u8(a)); ++ a4 = vpmax_u8(a8, a8); ++ ++ return (vget_lane_u32(a4, 0) != 0); ++} ++#endif /* defined(__aarch64__) */ ++ + uint64_t neon_search(const search_params_t *params, + const char *text_start, + size_t text_len, +@@ -4541,7 +4562,7 @@ uint64_t neon_search(const search_params_t *params, + + // Check if any match found + // vmaxvq_u8 returns the maximum value across the vector. If any byte matched (0xFF), result is 0xFF. +- if (vmaxvq_u8(cmp) != 0) ++ if (is_nonzero(cmp)) + { + // Extract mask to find exact positions + // Since NEON doesn't have a direct movemask, we simulate it or iterate.home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69c2e331.429e6.35888bce>
