[dmd-beta] dmd 1.070 and 2.055 beta

Rainer Schuetze r.sagitario at gmx.de
Tue Sep 6 14:05:56 PDT 2011


On 06.09.2011 22:51, Rainer Schuetze wrote:
> On 06.09.2011 22:45, Walter Bright wrote:
>>
>>
>> On 9/6/2011 12:13 PM, Rainer Schuetze wrote:
>>>
>>> I can reproduce the issue on Win7 64, but not on XP. I have debugged 
>>> it a little until I noticed that the generated code for TLS access 
>>> seems broken:
>>>
>>> dmd 2.054 generated this code for the append operation
>>>
>>>  push        1
>>> 1000207D  mov         ecx,dword ptr [__tls_index (1006BF98h)]
>>> 10002083  mov         edx,dword ptr fs:[2Ch]
>>> 1000208A  mov         ebx,dword ptr [edx+ecx*4]
>>> 1000208D  lea         esi,[ebx+4]
>>> 10002093  push        esi
>>> 10002094  mov         eax,offset TypeInfo_Ai at __init (1005E9A0h)
>>> 10002099  push        eax
>>> 1000209A  call        __d_arrayappendcT (10004D68h)
>>>
>>> while the beta generates
>>>
>>> push        1
>>> 10002076  mov         ecx,dword ptr fs:[2Ch]
>>> 1000207D  mov         edx,dword ptr [ecx]
>>> 1000207F  lea         ebx,[edx+4]
>>> 10002085  push        ebx
>>> 10002086  mov         esi,offset TypeInfo_Ai at __init (10067A90h)
>>> 1000208B  push        esi
>>> 1000208C  call        __d_arrayappendcT (10004F9Ch)
>>>
>>> so it completely ignores the tls_index. I guess it works on XP 
>>> because there are less DLLs that use TLS, so the DLLs index ends up 
>>> as 0.
>>>
>>
>> Very interesting. Can you provide the source code for that?
>>
>>
>> _______________________________________________
>> dmd-beta mailing list
>> dmd-beta at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/dmd-beta
> it seems to happen with any code:
>
> int x;
>
> int main()
> {
>         return x;
> }
>
> generates
>
> __Dmain comdat
>         assume  CS:__Dmain
>                 mov     EAX,FS:__tls_array
>                 mov     ECX,[EAX]
>                 mov     EAX,_D1m1xi[ECX]
>                 ret
> __Dmain ends
>

Sorry, this is wrong. This is the usual exe-only optimization that 
assumes tls_index==0. It seems the command line options do not suggest 
that a DLL is generated. I'll try to reduce it...


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/dmd-beta/attachments/20110906/e07afe2a/attachment.html>


More information about the dmd-beta mailing list