<div dir="ltr">Hi Ronie, (Hi Clément),<div><br></div><div>   for a while now Clément and I have been unhappy about optStatus (CogSSOptStatus).  Now that the RegisterAllocatingCogit is nearly working it's clear that a much nicer approach is to give CogSimStackEntry a liveRegister instance variable and have simSelf take the place of optStatus, so that what were</div><div><br></div><div>    optStatus isReceiverResultRegLive</div>    optStatus isReceiverResultRegLive: true<div>    optStatus isReceiverResultRegLive: false</div><div><br></div><div>are replaced by</div><div><br></div><div>    simSelf liveRegister = ReceiverResultReg<br><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate">    simSelf liveRegister: ReceiverResultReg <br>    simSelf liveRegister: NoReg</span></div><div><span style="font-size:small;border-collapse:separate"><br></span></div><div><span style="font-size:small;border-collapse:separate">To this end can you rewrite the Lowcode code generator so that e.g. the following</span></div><div><br></div><div><div>genLowcodeAlloca32</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span><option: #LowcodeVM><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>"Lowcode instruction generator"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>| size |</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>(size := backEnd availableRegisterOrNoneFor: self liveRegisters) = NoReg ifTrue:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>[self ssAllocateRequiredReg:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                   </span>(size := optStatus isReceiverResultRegLive</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                             </span>ifTrue: [Arg0Reg]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                              </span>ifFalse: [ReceiverResultReg])].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>size = ReceiverResultReg ifTrue:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>[ optStatus isReceiverResultRegLive: false ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>self ssNativeTop nativePopToReg: size.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>self ssNativePop: 1.</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>self MoveAw: coInterpreter nativeStackPointerAddress R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>self SubR: size R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>self AndCq: -16 R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>self MoveR: TempReg R: size.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>self MoveR: size Aw: coInterpreter nativeStackPointerAddress.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>self ssPushNativeRegister: size.</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>^ 0</div><div><br></div></div><div>reads something more like</div><div><br></div><div>genLowcodeAlloca32</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span><option: #LowcodeVM><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>"Lowcode instruction generator"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>| size |</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      self allocateOneRegisterForLowcodeInto: [:reg| size := reg]</span>.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>self ssNativeTop nativePopToReg: size.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>self ssNativePop: 1.</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>self MoveAw: coInterpreter nativeStackPointerAddress R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>self SubR: size R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>self AndCq: -16 R: TempReg.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>self MoveR: TempReg R: size.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>self MoveR: size Aw: coInterpreter nativeStackPointerAddress.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>self ssPushNativeRegister: size.</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>^ 0</div><div><br></div><div>etc?  So there are <span style="white-space:pre">allocateOneRegisterForLowcodeInto: through allocateThreeRegistersForLowcodeInto:.  This way it'll be much easier to make the above change which I'm making now.</span></div><div> </div><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div></div>