On Wed, Apr 25, 2012 at 2:28 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Wed, Apr 25, 2012 at 2:25 PM, Sriraman Tallam <tmsri...@google.com> wrote:
>> On Tue, Apr 24, 2012 at 7:39 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Tue, Apr 24, 2012 at 7:06 PM, Sriraman Tallam <tmsri...@google.com> 
>>> wrote:
>>>> 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,
>>>
>>> Should you also handle AVX2?
>>
>>  I cannot test it and thought will wait till I get access to a
>> processor with AVX2.
>>
>
> You can download an AVX2 emulator (SDE) from
>
> http://software.intel.com/en-us/avx/
>
> to test AVX2 binaries.

Ok thanks, I will prepare a patch.

-Sri.

>
> --
> H.J.

Reply via email to