LoongArch: Add glibc.cpu.hwcap support.
authorcaiyinyu <caiyinyu@loongson.cn>
Fri, 15 Sep 2023 09:35:19 +0000 (17:35 +0800)
committercaiyinyu <caiyinyu@loongson.cn>
Tue, 19 Sep 2023 01:11:49 +0000 (09:11 +0800)
commita53451559dc9cce765ea5bcbb92c4007e058e92b
tree4d5b3261a97e362cb36da87962b99a9799a5dc7c
parent5bc9b3a1f6a003f6456f717b590615ea98e2d6fb
LoongArch: Add glibc.cpu.hwcap support.

Key Points:
1. On lasx & lsx platforms, We must use _dl_runtime_{profile, resolve}_{lsx, lasx}
   to save vector registers.
2. Via "tunables", users can choose str/mem_{lasx,lsx,unaligned} functions with
   `export GLIBC_TUNABLES=glibc.cpu.hwcaps=LASX,...`.
   Note: glibc.cpu.hwcaps doesn't affect _dl_runtime_{profile, resolve}_{lsx, lasx}
   selection.

Usage Notes:
1. Only valid inputs: LASX, LSX, UAL. Case-sensitive, comma-separated, no spaces.
2. Example: `export GLIBC_TUNABLES=glibc.cpu.hwcaps=LASX,UAL` turns on LASX & UAL.
   Unmentioned features turn off. With default ifunc: lasx > lsx > unaligned >
   aligned > generic, effect is: lasx > unaligned > aligned > generic; lsx off.
3. Incorrect GLIBC_TUNABLES settings will show error messages.
   For example: On lsx platforms, you cannot enable lasx features. If you do
   that, you will get error messages.
4. Valid input examples:
   - GLIBC_TUNABLES=glibc.cpu.hwcaps=LASX: lasx > aligned > generic.
   - GLIBC_TUNABLES=glibc.cpu.hwcaps=LSX,UAL: lsx > unaligned > aligned > generic.
   - GLIBC_TUNABLES=glibc.cpu.hwcaps=LASX,UAL,LASX,UAL,LSX,LASX,UAL: Repetitions
     allowed but not recommended. Results in: lasx > lsx > unaligned > aligned >
     generic.
sysdeps/loongarch/Makefile
sysdeps/loongarch/Versions [new file with mode: 0644]
sysdeps/loongarch/cpu-tunables.c [new file with mode: 0644]
sysdeps/loongarch/dl-get-cpu-features.c [new file with mode: 0644]
sysdeps/loongarch/dl-machine.h
sysdeps/loongarch/dl-tunables.list [new file with mode: 0644]
sysdeps/unix/sysv/linux/loongarch/cpu-features.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/loongarch/cpu-features.h
sysdeps/unix/sysv/linux/loongarch/dl-procinfo.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/loongarch/dl-sysdep.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/loongarch/libc-start.c [new file with mode: 0644]