<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
> Date: Tue, 31 Aug 2010 21:24:07 -0500<BR>> From: rodney_bates@<BR>> <BR>> If the writers of an ABI actually *required* that small structs/records be<BR>> passed in registers<BR>
 <BR>
 <BR>
Yes, they have. The rules are hard for me to understand. It isn't just based on size.<BR>
 <BR>
 <BR>
 > then they have made a big blunder.<BR>
 <BR>
 <BR>
No they have not. They know what they are doing.<BR>
 <BR>
 <BR>
 > Thus taking their address must always be possible,<BR>
 <BR>
 <BR>
If they have to be in memory, then they will be put in memory, at or before<BR>
the address is taken. That doesn't mean the parameters have to be passed in memory.<BR>
 <BR>
<BR>> 1) Declare that language semantics trump ABI requirements and defy the ABI.<BR>
 <BR>
Not necessary.<BR>
Granted, we don't have to follow the ABI. The ABI is for interoperability with C.<BR>
I'm plenty willing to say you can't pass records by value between C and Modula-3.<BR>
 <BR>
<BR><BR>> 2) Pass them in registers at the time of control transfer, but store them<BR>> in memory in the prologue, then access them from memory thereafter.<BR>
 <BR>
 <BR>
The backend does that as needed for C already.<BR>
 <BR>
 <BR>
Data can live in multiple places.<BR>
Just that there can be only be one mutable location at a time.<BR>
 <BR>
<BR>Look at the code generated Tony asked about, add like<BR>
printr("%p\n", &t);<BR>
 <BR>
 <BR>
you'll see the registers get written to the stack.<BR>
<BR> <BR>
 - Jay<BR>                                     </body>
</html>