The branch stable/15 has been updated by andrew:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d8e700f2eeb96e54e3d0e8c6fde0710004e32b4c

commit d8e700f2eeb96e54e3d0e8c6fde0710004e32b4c
Author:     Sarah Walker <[email protected]>
AuthorDate: 2026-01-13 14:24:53 +0000
Commit:     Andrew Turner <[email protected]>
CommitDate: 2026-02-09 14:50:14 +0000

    libc/aarch64: Use MOPS implementations of memcpy/memmove/memset where 
availble
    
    Reviewed by:    andrew
    Sponsored by:   Arm Ltd
    Differential Revision:  https://reviews.freebsd.org/D54560
    
    (cherry picked from commit 41ccf82b29f3b16fcd1ccb4987569c851222ef8d)
    (cherry picked from commit fb96702a034c663adb4a1b44299af01fa71e29fd)
---
 lib/libc/aarch64/string/Makefile.inc       | 13 ++++++---
 lib/libc/aarch64/string/memcpy.S           |  4 +--
 lib/libc/aarch64/string/memcpy_resolver.c  | 42 ++++++++++++++++++++++++++++++
 lib/libc/aarch64/string/memmove_resolver.c | 42 ++++++++++++++++++++++++++++++
 lib/libc/aarch64/string/memset.S           |  2 ++
 lib/libc/aarch64/string/memset_resolver.c  | 42 ++++++++++++++++++++++++++++++
 tools/build/depend-cleanup.sh              |  6 +++++
 7 files changed, 145 insertions(+), 6 deletions(-)

diff --git a/lib/libc/aarch64/string/Makefile.inc 
b/lib/libc/aarch64/string/Makefile.inc
index 35523fb954be..528c19574a1c 100644
--- a/lib/libc/aarch64/string/Makefile.inc
+++ b/lib/libc/aarch64/string/Makefile.inc
@@ -5,10 +5,8 @@
 
 AARCH64_STRING_FUNCS= \
        memcmp \
-       memcpy \
        memmove \
        memrchr \
-       memset \
        stpcpy \
        strchr \
        strchrnul \
@@ -34,7 +32,12 @@ MDSRCS+= \
        timingsafe_bcmp.S \
        timingsafe_memcmp.S \
        bcopy.c \
-       bzero.c
+       bzero.c \
+       memcpy.S \
+       memcpy_resolver.c \
+       memmove_resolver.c \
+       memset.S \
+       memset_resolver.c
 
 #
 # Add the above functions. Generate an asm file that includes the needed
@@ -55,6 +58,8 @@ MDSRCS+=      ${FUNC}.S
 CFLAGS.${FUNC}.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string
 .endfor
 
-# memchr.S is a wrapper in the src tree for the implementation from
+# Several files are wrappers in the src tree for the implementation from
 # arm-optimized-routines
 CFLAGS.memchr.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string
+CFLAGS.memcpy.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string
+CFLAGS.memset.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string
diff --git a/lib/libc/aarch64/string/memcpy.S b/lib/libc/aarch64/string/memcpy.S
index 53e860750eb2..06598d59bcf2 100644
--- a/lib/libc/aarch64/string/memcpy.S
+++ b/lib/libc/aarch64/string/memcpy.S
@@ -1,3 +1,3 @@
-#define        __memcpy_aarch64_simd   memcpy
-#define        __memmove_aarch64_simd  memmove
 #include "aarch64/memcpy-advsimd.S"
+#include "aarch64/memcpy-mops.S"
+#include "aarch64/memmove-mops.S"
diff --git a/lib/libc/aarch64/string/memcpy_resolver.c 
b/lib/libc/aarch64/string/memcpy_resolver.c
new file mode 100644
index 000000000000..c2a7477a939e
--- /dev/null
+++ b/lib/libc/aarch64/string/memcpy_resolver.c
@@ -0,0 +1,42 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2026 Arm Ltd
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/types.h>
+#include <machine/ifunc.h>
+
+#include <elf.h>
+
+void *__memcpy_aarch64_simd(void *, const void *, size_t);
+void *__memcpy_aarch64_mops(void *, const void *, size_t);
+
+DEFINE_UIFUNC(, void *, memcpy, (void *, const void *, size_t))
+{
+       if (ifunc_arg->_hwcap2 & HWCAP2_MOPS)
+               return (__memcpy_aarch64_mops);
+
+       return (__memcpy_aarch64_simd);
+}
+
diff --git a/lib/libc/aarch64/string/memmove_resolver.c 
b/lib/libc/aarch64/string/memmove_resolver.c
new file mode 100644
index 000000000000..95cf3deca966
--- /dev/null
+++ b/lib/libc/aarch64/string/memmove_resolver.c
@@ -0,0 +1,42 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2026 Arm Ltd
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/types.h>
+#include <machine/ifunc.h>
+
+#include <elf.h>
+
+void *__memmove_aarch64_simd(void *, const void *, size_t);
+void *__memmove_aarch64_mops(void *, const void *, size_t);
+
+DEFINE_UIFUNC(, void *, memmove, (void *, const void *, size_t))
+{
+       if (ifunc_arg->_hwcap2 & HWCAP2_MOPS)
+               return (__memmove_aarch64_mops);
+
+       return (__memmove_aarch64_simd);
+}
+
diff --git a/lib/libc/aarch64/string/memset.S b/lib/libc/aarch64/string/memset.S
new file mode 100644
index 000000000000..dfe1c54273b9
--- /dev/null
+++ b/lib/libc/aarch64/string/memset.S
@@ -0,0 +1,2 @@
+#include "aarch64/memset.S"
+#include "aarch64/memset-mops.S"
diff --git a/lib/libc/aarch64/string/memset_resolver.c 
b/lib/libc/aarch64/string/memset_resolver.c
new file mode 100644
index 000000000000..34ca98aa1d34
--- /dev/null
+++ b/lib/libc/aarch64/string/memset_resolver.c
@@ -0,0 +1,42 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2026 Arm Ltd
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/types.h>
+#include <machine/ifunc.h>
+
+#include <elf.h>
+
+void *__memset_aarch64(void *, int, size_t);
+void *__memset_aarch64_mops(void *, int, size_t);
+
+DEFINE_UIFUNC(, void *, memset, (void *, int, size_t))
+{
+       if (ifunc_arg->_hwcap2 & HWCAP2_MOPS)
+               return (__memset_aarch64_mops);
+
+       return (__memset_aarch64);
+}
+
diff --git a/tools/build/depend-cleanup.sh b/tools/build/depend-cleanup.sh
index bfe7b65c61d1..8e4b552edb0c 100755
--- a/tools/build/depend-cleanup.sh
+++ b/tools/build/depend-cleanup.sh
@@ -555,3 +555,9 @@ if [ ${MACHINE} = riscv ]; then
        clean_dep   lib/libc bcopy c "libc.string.bcopy.c"
        clean_dep   lib/libc bzero c "libc.string.bzero.c"
 fi
+
+if [ ${MACHINE_ARCH} = "aarch64" ]; then
+       # 20260113  41ccf82b29f3  libc/aarch64: Use MOPS implementations of 
memcpy/memmove/memset where availble
+       clean_dep   lib/libc memset S "[^/]memset.S"
+       run rm -fv "$OBJTOP"/lib/libc/memset.S
+fi

Reply via email to