The branch main has been updated by andrew:

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

commit 41ccf82b29f3b16fcd1ccb4987569c851222ef8d
Author:     Sarah Walker <[email protected]>
AuthorDate: 2026-01-13 14:24:53 +0000
Commit:     Andrew Turner <[email protected]>
CommitDate: 2026-01-13 15:28:04 +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
---
 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 ++++++++++++++++++++++++++++++
 6 files changed, 139 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);
+}
+

Reply via email to