Thread overview | |||||
---|---|---|---|---|---|
|
March 17, 2007 [Issue 1066] New: Variadic arguments being passed in registers | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1066 Summary: Variadic arguments being passed in registers Product: DGCC aka GDC Version: 0.23 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: glue layer AssignedTo: dvdfrdmn@users.sf.net ReportedBy: madou@madou.org On several architectures, optional arguments to variadic functions get passed in registers, just like regular arguments. This prevents the use of _argptr, among others. In our opinion (my own and that of several Tango library developers), even if the platform ABI dictates the use of registers for variadic arguments, this approach should only ever be taken for extern (C) functions. D functions are better off using stack-borne varargs, for the reason mentioned above, and also since register based varargs incur a heavy performance penalty due to most platforms' inability to dynamically index their register files. -- |
March 18, 2007 [Issue 1066] Variadic arguments being passed in registers | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1066 fvbommel@wxs.nl changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |fvbommel@wxs.nl ------- Comment #1 from fvbommel@wxs.nl 2007-03-18 17:41 ------- I just found out that gphobos also suffers because of this. std/format.d, line 897+: --- else version(X86_64) { throw new FormatError("cannot portably format a struct on this target"); } --- This seems to be because it can't obtain a pointer to the struct to pass to TypeInfo_Struct.xtoString(void*)... This _really_ needs to be fixed. Neither of gphobos and tango can fully support their respective formatted text output facilities on amd64 (and any similar platforms, presumably) because of this. (workaround for gphobos: explicitly calling .toString on arguments) -- |
January 31, 2011 [Issue 1066] Variadic arguments being passed in registers | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1066 Iain Buclaw <ibuclaw@ubuntu.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID --- Comment #2 from Iain Buclaw <ibuclaw@ubuntu.com> 2011-01-31 09:33:28 PST --- The spec does not dictate that variadic functions must be passed on the stack. This does not prevent the use of _argptr, to protect against the vagaries of stack layouts on different CPU architectures, use std.stdarg (or core.vararg on D2) to access the variadic arguments. Regards -- 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