This is the mail archive of the 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: Support for Runtime CPU type detection via builtins (issue5754058)


On Mon, Apr 23, 2012 at 1:19 AM, Uros Bizjak <> wrote:
> On Tue, Apr 3, 2012 at 9:47 PM, Sriraman Tallam <> wrote:
>> i386 maintainers - ?Is this patch ok?
> Has the community reached the consensus on how this kind of
> functionality has to be implemented? I have followed the discussion a
> bit, but IIRC, there was no clear decision. Without this decision, I
> am not able to review the _implementation_ of agreed functionality for
> x86 target.
> (I apologize if I have missed the decision, please point me to the
> discussion in this case.)

The discussions are here:
and follow-ups to this.

I am not sure about consensus, but the important points raised were:

1) Constructor ordering: What if some constructors fire before
cpu_indicator_init?, which determines the CPU. I addressed this
problem by making the priority of cpu_indicator_init to be the highest
possible. Still, IFUNC initializers will fire before and they have to
explicitly call __builtin_cpu_init() before checking the CPU type.
2) Reducing the number of builtins : It is only two now.

>>>>> Patch available for review here:
> Please attach patches or inline it in the message itself for a review.
> Please see [1] for further instructions.

Patch attached, tested on x86_64 and all tests pass.

       * config/i386/i386.c (build_processor_features_struct): New function.
       (build_processor_model_struct): New function.
       (make_var_decl): New function.
       (get_field_from_struct): New function.
       (fold_builtin_target): New function.
       (ix86_fold_builtin): New function.
       (ix86_expand_builtin): Expand new builtins by folding them.
       (make_cpu_type_builtin): New functions.
       (ix86_init_platform_type_builtins): Make the new builtins.
       (ix86_init_builtins): Make new builtins to detect CPU type.
       (TARGET_FOLD_BUILTIN): New macro.
       (IX86_BUILTIN_CPU_INIT): New enum value.
       (IX86_BUILTIN_CPU_IS): New enum value.
       (IX86_BUILTIN_CPU_SUPPORTS): New enum value.
       * config/i386/i386-builtin-types.def: New function type.
       * testsuite/ New testcase.
       * doc/extend.texi: Document builtins.

       * libgcc/config/i386/i386-cpuinfo.c: New file.
       * libgcc/config/i386/t-cpuinfo: New file.
       * libgcc/ Include t-cpuinfo.
       * libgcc/config/i386/libgcc-glibc.ver: Version symbols __cpu_model
       and __cpu_features.


> [1]
> Uros.

Attachment: cpu_runtime_patch.txt
Description: Text document

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