[PATCH] Aarch64: Use oryon1's memset/memcpy for Qualcomm's oryon-2 cores
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Thu Nov 6 16:14:03 GMT 2025
On 05/11/25 23:05, Andrew Pinski wrote:
> Oryon-2 cores are very similar when it comes to performance to oryon-1
> cores except they include SVE support so the check for oryon-1/2 needs
> to moved in front of the check for SVE.
>
> Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
How SVE memcpy/memset compares to oryon ones on oryon-2 CPUs?
The changes looks good.
> ---
> sysdeps/aarch64/cpu-features.h | 4 ++++
> sysdeps/aarch64/multiarch/memcpy.c | 6 +++---
> sysdeps/aarch64/multiarch/memset.c | 6 +++---
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/sysdeps/aarch64/cpu-features.h b/sysdeps/aarch64/cpu-features.h
> index ef4e947e8c..d74b18b39a 100644
> --- a/sysdeps/aarch64/cpu-features.h
> +++ b/sysdeps/aarch64/cpu-features.h
> @@ -54,6 +54,10 @@
> || (MIDR_PARTNUM(midr) == 0x002 \
> && MIDR_VARIANT(midr) == 0)))
>
> +#define IS_ORYON2(midr) (MIDR_IMPLEMENTOR(midr) == 'Q' \
> + && MIDR_PARTNUM(midr) == 0x002 \
> + && MIDR_VARIANT(midr) != 0)
> +
> struct cpu_features
> {
> uint64_t midr_el1;
> diff --git a/sysdeps/aarch64/multiarch/memcpy.c b/sysdeps/aarch64/multiarch/memcpy.c
> index 894dabe2ef..a3fa006c96 100644
> --- a/sysdeps/aarch64/multiarch/memcpy.c
> +++ b/sysdeps/aarch64/multiarch/memcpy.c
> @@ -43,6 +43,9 @@ select_memcpy_ifunc (void)
> if (mops)
> return __memcpy_mops;
>
> + if (IS_ORYON1 (midr) || IS_ORYON2 (midr))
> + return __memcpy_oryon1;
> +
> if (sve)
> {
> if (IS_A64FX (midr))
> @@ -50,9 +53,6 @@ select_memcpy_ifunc (void)
> return prefer_sve_ifuncs ? __memcpy_sve : __memcpy_generic;
> }
>
> - if (IS_ORYON1 (midr))
> - return __memcpy_oryon1;
> -
> return __memcpy_generic;
> }
>
> diff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c
> index 2b0a58b8fa..0534ae5b1b 100644
> --- a/sysdeps/aarch64/multiarch/memset.c
> +++ b/sysdeps/aarch64/multiarch/memset.c
> @@ -46,6 +46,9 @@ select_memset_ifunc (void)
> if (mops)
> return __memset_mops;
>
> + if ((IS_ORYON1 (midr) || IS_ORYON2 (midr)) && zva_size == 64)
> + return __memset_oryon1;
> +
> if (sve)
> {
> if (IS_A64FX (midr) && zva_size == 256)
> @@ -55,9 +58,6 @@ select_memset_ifunc (void)
> return __memset_sve_zva64;
> }
>
> - if (IS_ORYON1 (midr) && zva_size == 64)
> - return __memset_oryon1;
> -
> if (IS_KUNPENG920 (midr))
> return __memset_kunpeng;
>
More information about the Libc-alpha
mailing list