Mill Computing, Inc. › Forums › The Mill › Architecture › Wide Data / Multiple Return Values on a Short Belt › Reply To: Wide Data / Multiple Return Values on a Short Belt
Sorry Dave; somehow I missed your question and didn’t reply; only picked it up when serprex answered for me 🙁
Serprex has it right: too big or too many arguments, and varargs too, are passed in memory. The tricky part is how to pass them through a RPC (remote procedure call) in which the callee cannot address the caller’s space. That protocol is in hardware, but it needs pictures to explain. The short answer though is that the compiler produces generic calls in the .gen file, and the specializer decides how to pass the arguments based on the signature and the target Mill family member as part of producing the .asm file. Ditto for returned values. In both directions, neither party can browse in the other guy’s stack rubble; they see only the passed/returned data, not even pad bytes in large objects.