Mill Computing, Inc. › Forums › The Mill › Architecture › Wide Data / Multiple Return Values on a Short Belt
Tagged: belt, Multiple Return Values, Wide Data
- AuthorPosts
- #1992 |
I was reading in the Wide Data section of your docs that the Mill hardware is aware of “composite data types”, and I got to thinking… What happens if my function returns a “composite data type” that won’t fit on the belt? Similarly (I think), since the Mill supports multiple return values, what happens if my function returns 9 values on a Tin Mill (which IIRC only has 8 belt positions)?
(I’m kinda expecting the answer to be some combination of “NYF” and/or “Wait for the talk on Wide Data”.)
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.
- AuthorPosts
You must be logged in to reply to this topic.