This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000] Add support for __builtin_cpu_is() and __builtin_cpu_supports()


On Thu, Jan 14, 2016 at 10:50 PM, Peter Bergner <peter@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]