[PATCH 0/5] LoongArch: Multiarch string and memory copy routines for unaligned access

Xi Ruoyao xry111@xry111.site
Sat Apr 15 11:23:35 GMT 2023


LoongArch CPUs may have hardware unaligned access support.  For the
launched LoongArch CPUs, those branded as Loongson-3 (for desktops or
servers) have hardware unaligned access support, but those branded as
Loongson-2 (for embedded or industrial applications) do not.

On Linux, the unaligned access support is indicated by a HWCAP bit
provided by the kernel.  So we can multiarch stpcpy and memcpy with
ifunc to take the advantage on the CPUs with unaligned access support.

On a Loongson-3A5000HV CPU running at 2.5GHz, "make bench" has shown
these changes can really improve the performance:

- https://www.linuxfromscratch.org/~xry111/loongarch-ual-bench/bench-stpcpy-summary.txt
- https://www.linuxfromscratch.org/~xry111/loongarch-ual-bench/bench-memcpy-summary.txt

Xi Ruoyao (5):
  LoongArch: Add bits/hwcap.h for Linux
  LoongArch: Add LOONGARCH_HAVE_UAL macro
  string: stpcpy.c: Only alias __stpcpy to stpcpy if STPCPY undefined
  LoongArch: Multiarch stpcpy for unaligned access
  LoongArch: Multiarch memcpy for unaligned access

 string/stpcpy.c                               |  3 ++
 sysdeps/loongarch/loongarch-features.h        | 26 ++++++++++
 sysdeps/loongarch/multiarch/Makefile          |  6 +++
 sysdeps/loongarch/multiarch/memcpy-generic.c  | 27 ++++++++++
 sysdeps/loongarch/multiarch/memcpy-ual.c      | 50 +++++++++++++++++++
 sysdeps/loongarch/multiarch/memcpy.c          | 39 +++++++++++++++
 sysdeps/loongarch/multiarch/stpcpy-generic.c  | 25 ++++++++++
 sysdeps/loongarch/multiarch/stpcpy-ual.c      | 43 ++++++++++++++++
 sysdeps/loongarch/multiarch/stpcpy.c          | 37 ++++++++++++++
 .../loongarch/multiarch/wordcopy-ual-inline.c | 31 ++++++++++++
 .../unix/sysv/linux/loongarch/bits/hwcap.h    | 37 ++++++++++++++
 .../sysv/linux/loongarch/loongarch-features.h | 30 +++++++++++
 sysdeps/unix/sysv/linux/loongarch/sysdep.h    |  1 +
 13 files changed, 355 insertions(+)
 create mode 100644 sysdeps/loongarch/loongarch-features.h
 create mode 100644 sysdeps/loongarch/multiarch/Makefile
 create mode 100644 sysdeps/loongarch/multiarch/memcpy-generic.c
 create mode 100644 sysdeps/loongarch/multiarch/memcpy-ual.c
 create mode 100644 sysdeps/loongarch/multiarch/memcpy.c
 create mode 100644 sysdeps/loongarch/multiarch/stpcpy-generic.c
 create mode 100644 sysdeps/loongarch/multiarch/stpcpy-ual.c
 create mode 100644 sysdeps/loongarch/multiarch/stpcpy.c
 create mode 100644 sysdeps/loongarch/multiarch/wordcopy-ual-inline.c
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/hwcap.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/loongarch-features.h

-- 
2.39.2



More information about the Libc-alpha mailing list