<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Is our garbage collector compacting?<br><br><br>In particular, what model do we need for "volatile" in codegen?<br>Does the compactor read the registers or just the stack?<br>Update references anywhere? Just the stack? Also context?<br><br><br>There are tradeoffs either way.<br><br><br>If it is not compacting and only reads the stack, then it can be more<br>portable, but every write of a collected type/pointer would have to be volatile.<br>Or is that what the barriers are for?<br><br><br>If we update values on the stack, then there is some portability,<br>but reads and writes would have to be volatile.<br><br><br>If we read and write registers in the collector, then nothing has to be volatile.<br><br><br>Should this all be parameters passed to the backend?<br>And/or preserved via #ifdef in the C backend?<br>That last part is easy enough, for generated C to take #ifdefs<br>indicating if reads and/or writes should be volatile.<br><br><br>If the collector is not compacting, then it need not update<br>stack or register values, just possibly read them.<br><br>I recall reading that it is compacting.<br><br><br>Thank you,<br> - Jay<br><br>                                      </div></body>
</html>