On Tue, Apr 24, 2012 at 5:10 PM, Sriraman Tallam <tmsri...@google.com> wrote:
> Hi,
>
>   Thanks for all the comments. I have made all the changes as
> mentioned and submiited the patch. Summary of changes made:
>
> * Add support for AVX
> * Fix documentation in extend.texi
> * Make it thread-safe according to H.J.'s comments.
>
> I have attached the patch. Boot-strapped and checked for test parity
> with pristine build.
>
>       * config/i386/i386.c (build_processor_model_struct): New function.
>        (make_var_decl): New function.
>        (fold_builtin_cpu): New function.
>        (ix86_fold_builtin): New function.
>        (make_cpu_type_builtin): New function.
>        (ix86_init_platform_type_builtins): New function.
>        (ix86_expand_builtin): Expand new builtins by folding them.
>        (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/gcc.target/builtin_target.c: New testcase.
>        * doc/extend.texi: Document builtins.
>
>        * libgcc/config/i386/i386-cpuinfo.c: New file.
>        * libgcc/config/i386/t-cpuinfo: New file.
>        * libgcc/config.host: Include t-cpuinfo.
>        * libgcc/config/i386/libgcc-glibc.ver: Version symbol __cpu_model.
>
>

+  /* This function needs to run just once.  */
+  if (__cpu_model.__cpu_vendor)
+    return 0;
+
+  /* Assume cpuid insn present. Run in level 0 to get vendor id. */
+  if (!__get_cpuid_output (0, &eax, &ebx, &ecx, &edx))
+    return -1;

If __get_cpuid_output returns non-zero, it will be called
repeatedly.  I think you should set __cpu_model.__cpu_vendor
to non-zero in this case.

Otherwise, it looks good to me.

Thanks.


-- 
H.J.

Reply via email to