When a function is inlined, virtually everything regarding parameters passing is irrelevant, the compiler can usually do what's best in this case.<div><br></div><div>In the former case, it's extremely rare that the calling function making the register available for the return value could negatively affect performance.. if it wants the returned value (that was alternatively written to the stack), it needs to allocate a register for it anyway, why not the one that allows it to return directly. Additionally, if the function receives any args, then the registers for return values are probably already allocated to the function call to pass the args when calling.<br>
<div><br><div class="gmail_quote">On 4 January 2012 01:17, Mail Mantis <span dir="ltr"><<a href="mailto:mail.mantis.88@gmail.com">mail.mantis.88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><div class="gmail_quote">2012/1/4 Manu <span dir="ltr"><<a href="mailto:turkeyman@gmail.com" target="_blank">turkeyman@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Does returning a tuple give any ABI guarantees? How can I be sure multiple return values will return in consecutive registers?<div>What if the return types are of different types, a float and an int... can I expect each to return in their own register types respectively?</div>



<div>This needs to be defined and loosely guaranteed (within reason) so people can expect multiple return values to behave as expected on any architecture.<div><div><br><br><div class="gmail_quote">On 4 January 2012 01:02, Sean Kelly <span dir="ltr"><<a href="mailto:sean@invisibleduck.org" target="_blank">sean@invisibleduck.org</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It's easy enough with Tuple, though better language support would be nice.<br>
<br>
Sent from my iPhone<br>
<div><div><br>
On Jan 3, 2012, at 2:40 PM, Manu <<a href="mailto:turkeyman@gmail.com" target="_blank">turkeyman@gmail.com</a>> wrote:<br>
<br>
> Why doesn't D support multiple return values like many other modern languages?<br>
><br>
> Clearly the same syntax as Go wouldn't work, but I'm sure a neat and tidy syntax could be invented?<br>
> I constantly want to be able to return x,y from a function, or retVal,errorCode and I want the language to make some rough ABI guarantees, like multiple return values will be returned in consecutive registers, rather than a single return value register like C/C++, avoiding the need to pass output addresses through ref function parameters (slow!).<br>




</div></div></blockquote></div><br></div></div></div>
</blockquote></div></div></div>Returning multiple values in registers might not always be the best idea from the performance point of view. The caller must make sure the appropriate registers don't hold any intermediate values before calling the function, so overall complier optimization may be poorer. <div>

Of course, this only applies when function is actually called. When it is inlined, having multiple return values could result in better optimization.</div>
</blockquote></div><br></div></div>