[PATCH v6 4/4] x86/string: Make page-unrolled memmove default for Intel processors
Noah Goldstein
goldstein.w.n@gmail.com
Fri Dec 5 01:02:16 GMT 2025
On Thu, Dec 4, 2025, 17:04 Sunil Pandey <skpgkp2@gmail.com> wrote:
>
>
> On Fri, Nov 28, 2025 at 12:47 AM Noah Goldstein <goldstein.w.n@gmail.com>
> wrote:
>
>> Continue using page-unrolled large memmove implementation for all
>> Intel processors to stay consistent with how it has been since glibc
>> 2.34.
>>
>> So far the page-unrolled implementation has been benchmarked on
>> HSW-SPR, with it yielding 5-15% performance improvements on
>> HSW-ICX. On SPR it appears to be roughly equal, and it is not known
>> how it compares on newer hardware (although Sunil has some benchmarks
>> that suggest it may still yield performance improvements).
>>
>> Since as of now, we only have positive or roughly neutral benchmark
>> results on Intel hardware, it seems fair to continue using this
>> implementation as the default. It would be prudent, however, to
>> continue benchmarking the page-unrolled vs standard implementation for
>> future hardware to ensure that is remains performant.
>> ---
>> sysdeps/x86/cpu-features.c | 14 ++++
>> sysdeps/x86_64/multiarch/Makefile | 2 +
>> sysdeps/x86_64/multiarch/ifunc-impl-list.c | 72 +++++++++++++++++--
>> sysdeps/x86_64/multiarch/ifunc-memmove.h | 38 +++++++---
>> ...move-avx512-unaligned-erms-page-unrolled.S | 24 +++++++
>> ...emmove-sse2-unaligned-erms-page-unrolled.S | 24 +++++++
>> .../multiarch/memmove-sse2-unaligned-erms.S | 2 +-
>> 7 files changed, 161 insertions(+), 15 deletions(-)
>> create mode 100644
>> sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms-page-unrolled.S
>> create mode 100644
>> sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms-page-unrolled.S
>>
>> diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
>> index 36803aa53f..2d9ded010f 100644
>> --- a/sysdeps/x86/cpu-features.c
>> +++ b/sysdeps/x86/cpu-features.c
>> @@ -769,6 +769,20 @@ init_cpu_features (struct cpu_features *cpu_features)
>> cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
>> &= ~bit_arch_Avoid_Non_Temporal_Memset;
>>
>> + /* Enable page unrolled large implementation to remain consistent
>> + with glibc 2.34 and earlier. Thus far all benchmarks on Intel
>> Bigcore
>> + hardware suggest the large implementation is equal to or more
>> + performant than the standard large memmove implementation.
>> + However, since the page-unrolled implementation is less
>> + standard/obvious, it may not receive as much optimization
>> + attention from hardware implementors, so we should continue to
>> + benchmark new hardware to ensure this is the right decision.
>> + Note: As of writing this, there have been no benchmarks
>> indicating the
>> + page-unrolled implementation is prefered on Atom processors.
>
>
> This is not correct. Current implementation provides better performance on
> current atom core
> processors as well as on big core processors, so I don't see any reason
> for change on Intel
> side.
>
Hmm? Did I mess up? This should be setting page unrolled preference for all
Intel machines. Atom and Big core.
The comment is just a comment which I believe is accurate regarding
publicly known benchmarks.
>
> We keep
>> + enabled in the interest of remaining consistent with glibc
>> 2.34. */
>> + cpu_features->preferred[index_arch_Prefer_Page_Unrolled_Large_Copy]
>> + |= bit_arch_Prefer_Page_Unrolled_Large_Copy;
>> +
>> enum intel_microarch microarch = INTEL_UNKNOWN;
>> if (family == 0x06)
>> {
>> diff --git a/sysdeps/x86_64/multiarch/Makefile
>> b/sysdeps/x86_64/multiarch/Makefile
>> index 381eaef455..c4573f27df 100644
>> --- a/sysdeps/x86_64/multiarch/Makefile
>> +++ b/sysdeps/x86_64/multiarch/Makefile
>> @@ -21,10 +21,12 @@ sysdep_routines += \
>> memmove-avx-unaligned-erms-rtm \
>> memmove-avx512-no-vzeroupper \
>> memmove-avx512-unaligned-erms \
>> + memmove-avx512-unaligned-erms-page-unrolled \
>> memmove-erms \
>> memmove-evex-unaligned-erms \
>> memmove-evex-unaligned-erms-page-unrolled \
>> memmove-sse2-unaligned-erms \
>> + memmove-sse2-unaligned-erms-page-unrolled \
>> memmove-ssse3 \
>> memrchr-avx2 \
>> memrchr-avx2-rtm \
>> diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c
>> b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
>> index f9add65d24..26278da8d4 100644
>> --- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c
>> +++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c
>> @@ -127,9 +127,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_chk_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memmove_chk_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_chk_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memmove_chk_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_chk_evex_unaligned)
>> @@ -181,7 +187,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
>> __memmove_chk_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
>> - __memmove_chk_sse2_unaligned_erms))
>> +
>> __memmove_chk_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
>> + __memmove_chk_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
>> +
>> __memmove_chk_sse2_unaligned_erms_page_unrolled))
>> #endif
>>
>> /* Support sysdeps/x86_64/multiarch/memmove.c. */
>> @@ -194,9 +204,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memmove_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memmove_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memmove_evex_unaligned)
>> @@ -248,7 +264,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
>> __memmove_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
>> - __memmove_sse2_unaligned_erms))
>> +
>> __memmove_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
>> + __memmove_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
>> +
>> __memmove_sse2_unaligned_erms_page_unrolled))
>>
>> /* Support sysdeps/x86_64/multiarch/memrchr.c. */
>> IFUNC_IMPL (i, name, memrchr,
>> @@ -1174,9 +1194,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_chk_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memcpy_chk_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_chk_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memcpy_chk_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_chk_evex_unaligned)
>> @@ -1228,7 +1254,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
>> __memcpy_chk_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
>> - __memcpy_chk_sse2_unaligned_erms))
>> +
>> __memcpy_chk_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
>> + __memcpy_chk_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
>> +
>> __memcpy_chk_sse2_unaligned_erms_page_unrolled))
>> #endif
>>
>> /* Support sysdeps/x86_64/multiarch/memcpy.c. */
>> @@ -1241,9 +1271,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memcpy_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __memcpy_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __memcpy_evex_unaligned)
>> @@ -1295,7 +1331,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
>> __memcpy_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
>> - __memcpy_sse2_unaligned_erms))
>> +
>> __memcpy_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
>> + __memcpy_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
>> +
>> __memcpy_sse2_unaligned_erms_page_unrolled))
>>
>> #ifdef SHARED
>> /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */
>> @@ -1308,9 +1348,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_chk_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __mempcpy_chk_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_chk_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __mempcpy_chk_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_chk_evex_unaligned)
>> @@ -1362,7 +1408,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
>> __mempcpy_chk_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
>> - __mempcpy_chk_sse2_unaligned_erms))
>> +
>> __mempcpy_chk_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
>> + __mempcpy_chk_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
>> +
>> __mempcpy_chk_sse2_unaligned_erms_page_unrolled))
>> #endif
>>
>> /* Support sysdeps/x86_64/multiarch/mempcpy.c. */
>> @@ -1375,9 +1425,15 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_avx512_unaligned)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __mempcpy_avx512_unaligned_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_avx512_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
>> + CPU_FEATURE_USABLE (AVX512VL),
>> +
>> __mempcpy_avx512_unaligned_erms_page_unrolled)
>> X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
>> CPU_FEATURE_USABLE (AVX512VL),
>> __mempcpy_evex_unaligned)
>> @@ -1429,7 +1485,11 @@ __libc_ifunc_impl_list (const char *name, struct
>> libc_ifunc_impl *array,
>> X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
>> __mempcpy_sse2_unaligned)
>> X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
>> - __mempcpy_sse2_unaligned_erms))
>> +
>> __mempcpy_sse2_unaligned_page_unrolled)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
>> + __mempcpy_sse2_unaligned_erms)
>> + X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
>> +
>> __mempcpy_sse2_unaligned_erms_page_unrolled))
>>
>> /* Support sysdeps/x86_64/multiarch/strncmp.c. */
>> IFUNC_IMPL (i, name, strncmp,
>> diff --git a/sysdeps/x86_64/multiarch/ifunc-memmove.h
>> b/sysdeps/x86_64/multiarch/ifunc-memmove.h
>> index 6d5df8a9eb..dc03269d8f 100644
>> --- a/sysdeps/x86_64/multiarch/ifunc-memmove.h
>> +++ b/sysdeps/x86_64/multiarch/ifunc-memmove.h
>> @@ -23,10 +23,14 @@ extern __typeof (REDIRECT_NAME) OPTIMIZE (erms)
>> attribute_hidden;
>>
>> extern __typeof (REDIRECT_NAME) OPTIMIZE (avx512_unaligned)
>> attribute_hidden;
>> -extern __typeof (REDIRECT_NAME) OPTIMIZE (avx512_unaligned_erms)
>> - attribute_hidden;
>> -extern __typeof (REDIRECT_NAME) OPTIMIZE (avx512_no_vzeroupper)
>> - attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (avx512_unaligned_page_unrolled) attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (avx512_unaligned_erms) attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (avx512_unaligned_erms_page_unrolled) attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (avx512_no_vzeroupper) attribute_hidden;
>>
>> extern __typeof (REDIRECT_NAME) OPTIMIZE (evex_unaligned)
>> attribute_hidden;
>> extern __typeof (REDIRECT_NAME)
>> @@ -54,8 +58,12 @@ extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3)
>> attribute_hidden;
>>
>> extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned)
>> attribute_hidden;
>> -extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned_erms)
>> - attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (sse2_unaligned_page_unrolled) attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (sse2_unaligned_erms) attribute_hidden;
>> +extern __typeof (REDIRECT_NAME)
>> + OPTIMIZE (sse2_unaligned_erms_page_unrolled) attribute_hidden;
>>
>> static inline void *
>> IFUNC_SELECTOR (void)
>> @@ -72,8 +80,16 @@ IFUNC_SELECTOR (void)
>> if (X86_ISA_CPU_FEATURE_USABLE_P (cpu_features, AVX512VL))
>> {
>> if (CPU_FEATURE_USABLE_P (cpu_features, ERMS))
>> - return OPTIMIZE (avx512_unaligned_erms);
>> + {
>> + if (CPU_FEATURES_ARCH_P (cpu_features,
>> + Prefer_Page_Unrolled_Large_Copy))
>> + return OPTIMIZE (avx512_unaligned_erms_page_unrolled);
>> + return OPTIMIZE (avx512_unaligned_erms);
>> + }
>>
>> + if (CPU_FEATURES_ARCH_P (cpu_features,
>> + Prefer_Page_Unrolled_Large_Copy))
>> + return OPTIMIZE (avx512_unaligned_page_unrolled);
>> return OPTIMIZE (avx512_unaligned);
>> }
>>
>> @@ -140,7 +156,13 @@ IFUNC_SELECTOR (void)
>> }
>>
>> if (CPU_FEATURE_USABLE_P (cpu_features, ERMS))
>> - return OPTIMIZE (sse2_unaligned_erms);
>> + {
>> + if (CPU_FEATURES_ARCH_P (cpu_features,
>> Prefer_Page_Unrolled_Large_Copy))
>> + return OPTIMIZE (sse2_unaligned_erms_page_unrolled);
>> + return OPTIMIZE (sse2_unaligned_erms);
>> + }
>>
>> + if (CPU_FEATURES_ARCH_P (cpu_features,
>> Prefer_Page_Unrolled_Large_Copy))
>> + return OPTIMIZE (sse2_unaligned_page_unrolled);
>> return OPTIMIZE (sse2_unaligned);
>> }
>> diff --git
>> a/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms-page-unrolled.S
>> b/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms-page-unrolled.S
>> new file mode 100644
>> index 0000000000..a7dee420b4
>> --- /dev/null
>> +++
>> b/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms-page-unrolled.S
>> @@ -0,0 +1,24 @@
>> +/* Memmove w/ AVX512 and Page Unrolled Large Copy
>> + Copyright (C) 2025 Free Software Foundation, Inc.
>> + This file is part of the GNU C Library.
>> +
>> + The GNU C Library is free software; you can redistribute it and/or
>> + modify it under the terms of the GNU Lesser General Public
>> + License as published by the Free Software Foundation; either
>> + version 2.1 of the License, or (at your option) any later version.
>> +
>> + The GNU C Library is distributed in the hope that it will be useful,
>> + but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + Lesser General Public License for more details.
>> +
>> + You should have received a copy of the GNU Lesser General Public
>> + License along with the GNU C Library; if not, see
>> + <https://www.gnu.org/licenses/>. */
>> +
>> +
>> +#ifndef MEMMOVE_SYMBOL
>> +# define MEMMOVE_SYMBOL(p,s) p##_avx512_##s##_page_unrolled
>> +#endif
>> +#define MEMMOVE_VEC_LARGE_IMPL "memmove-vec-large-page-unrolled.S"
>> +#include "memmove-avx512-unaligned-erms.S"
>> diff --git
>> a/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms-page-unrolled.S
>> b/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms-page-unrolled.S
>> new file mode 100644
>> index 0000000000..9ecd223e4e
>> --- /dev/null
>> +++ b/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms-page-unrolled.S
>> @@ -0,0 +1,24 @@
>> +/* Memmove w/ SSE2 and Page Unrolled Large Copy
>> + Copyright (C) 2025 Free Software Foundation, Inc.
>> + This file is part of the GNU C Library.
>> +
>> + The GNU C Library is free software; you can redistribute it and/or
>> + modify it under the terms of the GNU Lesser General Public
>> + License as published by the Free Software Foundation; either
>> + version 2.1 of the License, or (at your option) any later version.
>> +
>> + The GNU C Library is distributed in the hope that it will be useful,
>> + but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + Lesser General Public License for more details.
>> +
>> + You should have received a copy of the GNU Lesser General Public
>> + License along with the GNU C Library; if not, see
>> + <https://www.gnu.org/licenses/>. */
>> +
>> +#ifndef MEMMOVE_SYMBOL
>> +# define MEMMOVE_SYMBOL(p,s) p##_sse2_##s##_page_unrolled
>> +#endif
>> +#define MEMMOVE_VEC_LARGE_IMPL "memmove-vec-large-page-unrolled.S"
>> +#define PAGE_UNROLLED 1
>> +#include "memmove-sse2-unaligned-erms.S"
>> diff --git a/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S
>> b/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S
>> index aeaa3bd2f0..c941d62279 100644
>> --- a/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S
>> +++ b/sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S
>> @@ -32,7 +32,7 @@
>>
>> # include "multiarch/memmove-vec-unaligned-erms.S"
>>
>> -# if MINIMUM_X86_ISA_LEVEL <= 2
>> +# if MINIMUM_X86_ISA_LEVEL <= 2 && !(defined PAGE_UNROLLED)
>> # include "memmove-shlib-compat.h"
>> # endif
>> #endif
>> --
>> 2.43.0
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20251204/a7dfe276/attachment-0001.htm>
More information about the Libc-alpha
mailing list