Thread overview |
---|
October 19, 2009 [Issue 3421] New: Inline assembler problems accessing static variables | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=3421 Summary: Inline assembler problems accessing static variables Product: D Version: 2.035 Platform: x86 OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: grahamc001uk@yahoo.co.uk --- Comment #0 from Graham <grahamc001uk@yahoo.co.uk> 2009-10-19 08:03:19 PDT --- This code works in DMD v1.047 and fails in DMD v2.035 import std.stdio; static int value1; void main() { value1 = 2; asm { mov EAX,1; mov [value1],EAX; } writefln("value1 %d", value1); } The code generated in each case is: Compiled under DMD v 1.047: > u __Dmain l39 TEST03!__Dmain+0x0: 0x00402010 55 push ebp 0x00402011 8bec mov ebp,esp 0x00402013 c705801445000200 0000 mov dword ptr [_D6test036value1i (00451480)],00000002 0x0040201d b801000000 mov eax,00000001 0x00402022 a380144500 mov dword ptr [_D6test036value1i (00451480)],eax 0x00402027 ff3580144500 push dword ptr [_D6test036value1i (00451480)] 0x0040202d ff3594b04400 push dword ptr [_TMP0+00000004 (0044b094)] 0x00402033 ff3590b04400 push dword ptr [_TMP0 (0044b090)] 0x00402039 b8f0b04400 mov eax,0044b0f0 0x0040203e 50 push eax 0x0040203f e830170000 call _D3std5stdio8writeflnFYv (00403774) 0x00402044 83c410 add esp,10 0x00402047 5d pop ebp 0x00402048 c3 retn > Compiled under DMD v 2.0035: > u __Dmain l43 TEST03!__Dmain+0x0: 0x00402010 55 push ebp 0x00402011 8bec mov ebp,esp 0x00402013 53 push ebx 0x00402014 64a12c000000 mov eax,dword ptr fs:[0000002c] 0x0040201a 8b08 mov ecx,dword ptr [eax] 0x0040201c c781040000000200 0000 mov dword ptr [ecx+00000004],00000002 0x00402026 b801000000 mov eax,00000001 0x0040202b a304000000 mov dword ptr [00000004],eax 0x00402030 ff3594904200 push dword ptr [_TMP0+00000004 (00429094)] 0x00402036 ff3590904200 push dword ptr [_TMP0 (00429090)] 0x0040203c 648b152c000000 mov edx,dword ptr fs:[0000002c] 0x00402043 8b1a mov ebx,dword ptr [edx] 0x00402045 8b8304000000 mov eax,dword ptr [ebx+00000004] 0x0040204b e804000000 call _D3std5stdio19__T8writeflnTAyaTiZ8writeflnFAyaiZv (00402054) 0x00402050 5b pop ebx 0x00402051 5d pop ebp 0x00402052 c3 retn > The "D" code accesses 'value1' as dword ptr [ecx+00000004] and the inline assember as dword ptr [00000004] Is this a change in the language runtime specification for how module static variables are accessed or it this a bug ? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 19, 2009 [Issue 3421] Inline assembler problems accessing static variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Graham | http://d.puremagic.com/issues/show_bug.cgi?id=3421 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugdbug@yahoo.com.au --- Comment #1 from Don <clugdbug@yahoo.com.au> 2009-10-19 08:37:32 PDT --- It's a change. statics are now thread-local by default. You need to mark as __gshared if you want the D1 behaviour. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 20, 2009 [Issue 3421] Inline assembler problems accessing static variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Graham | http://d.puremagic.com/issues/show_bug.cgi?id=3421 --- Comment #2 from Graham <grahamc001uk@yahoo.co.uk> 2009-10-20 15:29:29 PDT --- Thanks. Is there any way to put __gshared or immutable into a typedef or alias so that conditional compilation can allow code to compile with both DMD v1 and DMD v2 ? I thought something like this would do it: import std.stdio; static __gshared uint value1 = 3; static immutable uint value2 = 4; version(D_Version2) { mixin("typedef static __gshared uint __gshared_uint;"); mixin("typedef static immutable uint immutable_uint;"); } else { typedef static uint __gshared_uint; typedef static uint immutable_uint; } __gshared_uint value3 = 5; immutable_uint value4 = 6; void main() { uint save1, save2, save3, save4; asm { mov EAX,value1; mov save1,EAX; mov EAX,value2; mov save2,EAX; mov EAX,value3; mov save3,EAX; mov EAX,value4; mov save4,EAX; } writefln("save1 %d save2 %d save3 %d save4 %d", save1, save2, save3, save4); } but it does not: dmd -vtls test03 test03.d(15): value3 is thread local test03.d(16): value4 is thread local -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 31, 2010 [Issue 3421] Inline assembler problems accessing static variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Graham | http://d.puremagic.com/issues/show_bug.cgi?id=3421 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID --- Comment #3 from Don <clugdbug@yahoo.com.au> 2010-01-31 12:17:37 PST --- Marking this as invalid, since it is an intentional change between D1 and D2. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation