On Tue, Apr 24, 2012 at 5:24 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > 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.
Done now. 2012-04-24 Sriraman Tallam <tmsri...@google.com> * libgcc/config/i386/i386-cpuinfo.c: Set __cpu_vendor always. Index: libgcc/config/i386/i386-cpuinfo.c =================================================================== --- libgcc/config/i386/i386-cpuinfo.c (revision 186789) +++ libgcc/config/i386/i386-cpuinfo.c (working copy) @@ -256,16 +256,25 @@ __cpu_indicator_init (void) /* Assume cpuid insn present. Run in level 0 to get vendor id. */ if (!__get_cpuid_output (0, &eax, &ebx, &ecx, &edx)) - return -1; + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } vendor = ebx; max_level = eax; if (max_level < 1) - return -1; + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } if (!__get_cpuid_output (1, &eax, &ebx, &ecx, &edx)) - return -1; + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } model = (eax >> 4) & 0x0f; family = (eax >> 8) & 0x0f; Thanks, -Sri. > > Otherwise, it looks good to me. > > Thanks. > > > -- > H.J.