On Thu, Jan 14, 2016 at 10:50 PM, Peter Bergner <pe...@bergner.org> wrote: > This patch adds support for __builtin_cpu_init(), __builtin_cpu_is() and > __builtin_cpu_supports() builtins for PowerPC. We use the same API as the > x86* builtins of the same name. These builtins uses the new GLIBC 2.23 > feature where we store the AT_PLATFORM, AT_HWCAP and AT_HWCAP2 values in the > Thread Control Block (TCB) which offers very fast access to these values. > > As part of the agreement with the GLIBC community, we always emit a reference > to a special symbol exported by LIBCs that support the AT_PLATFORM/AT_HWCAP* > values in the TCB, whenever we expand one of the CPU builtins. We do this > so that we will never attempt to access the TCB on old LIBCs. Joseph also > asked that we conditionalize the enabling of this code with a configure time > check for GLIBC's version and that is included here. > > I'll note that since GLIBC initializes the TCB before the application gets > control, we don't actually need __builtin_cpu_init(), but we have implemented > it anyway, to keep the same API as x86. It's just our init expands to > nothing. > > This passes bootstrap and regtesting with no errors. Ok for mainline? > > Peter > > > gcc/ > * config/rs6000/ppc-auxv.h: New file. > * config/rs6000/rs6000-builtin.def (cpu_init): Add new builtin. > (cpu_is): Likewise. > (cpu_supports): Likewise. > * config/rs6000/rs6000.c: include "ppc-auxv.h". > (cpu_is_info): New variable. > (cpu_supports_info): Likewise. > (tcb_verification_symbol): Likewise. > (cpu_builtin_p): Likewise. > (cpu_expand_builtin): New function. > (rs6000_expand_ternop_builtin): Add support for CPU builtin functions. > (rs6000_init_builtins): Likewise. > (rs6000_elf_file_end): Emit HWCAP in TCB verification symbol. > * config/rs6000/rs6000.h (TLS_REGNUM): New define. > * configure.ac (gcc_cv_libc_provides_hwcap_in_tcb): New test. > * configure: Regenerate. > * config.in: Likewise. > > gcc/testsuite/ > * gcc.target/powerpc/cpu-builtin-1.c: New test.
> * doc/extend.texi (PowerPC Built-in Functions): Document > __builtin_cpu_init, __builtin_cpu_is and __builtin_cpu_supports. This is okay. Thanks, David