[PATCH 2/3] aarch64: Remove non-temporal load/stores from oryon-1's memcpy

Adhemerval Zanella adhemerval.zanella@linaro.org
Mon Nov 18 20:44:42 GMT 2024


On Fri, Nov 15, 2024 at 12:04 AM Andrew Pinski <quic_apinski@quicinc.com> wrote:
>
> The hardware architects have a new recommendation not to use
> non-temporal load/stores for memcpy. This patch removes this path.
> I found there was no difference in the memcpy speed with/without
> non-temporal load/stores either.
>
> Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/aarch64/multiarch/memcpy_oryon1.S | 40 -----------------------
>  1 file changed, 40 deletions(-)
>
> diff --git a/sysdeps/aarch64/multiarch/memcpy_oryon1.S b/sysdeps/aarch64/multiarch/memcpy_oryon1.S
> index 4efc43df28..6cae97dc96 100644
> --- a/sysdeps/aarch64/multiarch/memcpy_oryon1.S
> +++ b/sysdeps/aarch64/multiarch/memcpy_oryon1.S
> @@ -160,46 +160,6 @@ L(copy96):
>         .p2align 6
>  L(copy_long):
>
> -       /* On oryon1 cores, large memcpy's are helped by using ldnp/stnp.
> -          This loop is identical to the one below it but using ldnp/stnp
> -          instructions.  For loops that are less than 32768 bytes,
> -          the ldnp/stnp instructions will not help and will cause a slow
> -          down so only use the ldnp/stnp loop for the largest sizes.  */
> -
> -       cmp     count, #32768
> -       b.lo    L(copy_long_without_nontemp)
> -       and     tmp1, dstin, 15
> -       bic     dst, dstin, 15
> -       ldnp    D_l, D_h, [src]
> -       sub     src, src, tmp1
> -       add     count, count, tmp1      /* Count is now 16 too large.  */
> -       ldnp    A_l, A_h, [src, 16]
> -       stnp    D_l, D_h, [dstin]
> -       ldnp    B_l, B_h, [src, 32]
> -       ldnp    C_l, C_h, [src, 48]
> -       ldnp    D_l, D_h, [src, 64]
> -       add     src, src, #64
> -       subs    count, count, 128 + 16  /* Test and readjust count.  */
> -
> -L(nontemp_loop64):
> -       tbz     src, #6, 1f
> -1:
> -       stnp    A_l, A_h, [dst, 16]
> -       ldnp    A_l, A_h, [src, 16]
> -       stnp    B_l, B_h, [dst, 32]
> -       ldnp    B_l, B_h, [src, 32]
> -       stnp    C_l, C_h, [dst, 48]
> -       ldnp    C_l, C_h, [src, 48]
> -       stnp    D_l, D_h, [dst, 64]
> -       ldnp    D_l, D_h, [src, 64]
> -       add     src, src, #64
> -       add     dst, dst, #64
> -       subs    count, count, 64
> -       b.hi    L(nontemp_loop64)
> -       b       L(last64)
> -
> -L(copy_long_without_nontemp):
> -
>         and     tmp1, dstin, 15
>         bic     dst, dstin, 15
>         ldp     D_l, D_h, [src]
> --
> 2.43.0
>


More information about the Libc-alpha mailing list