On Thu, Jul 28, 2011 at 3:46 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Thu, Jul 28, 2011 at 3:40 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> On Fri, Jul 29, 2011 at 12:28 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>
>>>>>>>>>>> TP is 32bit in x32  For load_tp_x32, we load SImode value and
>>>>>>>>>>> zero-extend to DImode. For add_tp_x32, we are adding SImode
>>>>>>>>>>> value.  We can't pretend TP is 64bit.  load_tp_x32 and add_tp_x32
>>>>>>>>>>> must take SImode TP.
>>>>
>>>>> Here is the revised patch.  The difference is I changed *add_tp_x32 to 
>>>>> SImode.
>>>>> For
>>>>>
>>>>> ---
>>>>> extern __thread int __libc_errno __attribute__ ((tls_model 
>>>>> ("initial-exec")));
>>>>>
>>>>> int *
>>>>> __errno_location (void)
>>>>> {
>>>>>  return &__libc_errno;
>>>>> }
>>>>> ---
>>>>>
>>>>> compiled with -mx32 -O2 -fPIC  DImode *add_tp_x32 generates:
>>>>>
>>>>>        movq    __libc_errno@gottpoff(%rip), %rax
>>>>>        addl    %fs:0, %eax
>>>>>        mov     %eax, %eax
>>>>>        ret
>>>>>
>>>>> SImode *add_tp_x32 generates:
>>>>>
>>>>>        movl    %fs:0, %eax
>>>>>        addl    __libc_errno@gottpoff(%rip), %eax
>>>>>        ret
>>>>
>>>> This happens because combine can't combine DImode load and SImode plus
>>>> RTXes. These RTXes have to be in Pmode, see the intention in
>>>> legitimize_tls_address, also for TARGET_GNU2_TLS.
>>>>
>>>> Can you please debug what goes wrong with tp_add_x32 in DImode?
>>>>
>>>
>>> We start with
>>
>> Uh, we didn't understand each other... can you please debug what goes
>> wrong with glibc runtime test?
>>
>
> I haven't be able to reproduce it.  I may have a typo when I fixed the
> pattern.  I will try again.
>

I can't reproduce it any more.


-- 
H.J.

Reply via email to