On 24 April 2012 17:05, Erik Jensen <[email protected]> wrote: > On Tuesday, 24 April 2012 at 14:40:05 UTC, Iain Buclaw wrote: >> >> On 24 April 2012 11:29, Alex Rønne Petersen <[email protected]> wrote: >>> >>> On 24-04-2012 11:42, Kagamin wrote: >>>> >>>> >>>> Speaking about GDC, you can't link to omf files directly - so there >>>> shouldn't be any binary incompatibility. >>>> If the assembler code is unportable across compilers, it's a developer's >>>> mistake or intention. >>> >>> >>> >>> The point is just that: Right now I can write assembly that will work on >>> GDC, LDC, and DMD on non-Windows. It will not work for DMD on Windows. >>> Something has to change here. >>> >>> You're missing the point if you think this is a "developer mistake". >>> >> >> Is not just Windows, the DMD calling convention on Linux differs from >> the system calling convention. For example, some of the naked >> functions in std.math returning floating point values assumes caller >> clean up. Where as the C calling convention is callee clean up. > > > That is incorrect. The cdecl calling convention is caller clean-up (see > http://en.wikipedia.org/wiki/X86_calling_conventions). Otherwise, variable > argument functions would not be possible (the called function doesn't know > what to clean up). > >
I forget which, but I'm pretty certain the CDecl calling convention does not call 'ret PARAMSIZE;' when returning floats. =) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
