<div dir="ltr">( oops, there will need to be at least <span style="color:rgb(0,0,0);font-size:12.800000190734863px;white-space:pre-wrap">allocateFourRegistersForLowco</span><wbr style="color:rgb(0,0,0);font-size:12.800000190734863px;white-space:pre-wrap"><span style="color:rgb(0,0,0);font-size:12.800000190734863px;white-space:pre-wrap">deInto:, but you know what I mean :-) )</span></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Feb 25, 2017 at 5:22 PM, Eliot Miranda <span dir="ltr"><<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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="m_-5045970348487068558gmail_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="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">        </span><option: #LowcodeVM><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>"Lowcode instruction generator"</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>| size |</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>(size := backEnd availableRegisterOrNoneFor: self liveRegisters) = NoReg ifTrue:</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>[self ssAllocateRequiredReg:</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">                        </span>(size := optStatus isReceiverResultRegLive</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">                          </span>ifTrue: [Arg0Reg]</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>ifFalse: [ReceiverResultReg])].</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>size = ReceiverResultReg ifTrue:</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>[ optStatus isReceiverResultRegLive: false ].</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>self ssNativeTop nativePopToReg: size.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>self ssNativePop: 1.</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>self MoveAw: coInterpreter nativeStackPointerAddress R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>self SubR: size R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>self AndCq: -16 R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>self MoveR: TempReg R: size.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>self MoveR: size Aw: coInterpreter nativeStackPointerAddress.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>self ssPushNativeRegister: size.</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>^ 0</div><div><br></div></div><div>reads something more like</div><div><br></div><div>genLowcodeAlloca32</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">  </span><option: #LowcodeVM><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>"Lowcode instruction generator"</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>| size |</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   self allocateOneRegisterForLowcodeI<wbr>nto: [:reg| size := reg]</span>.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>self ssNativeTop nativePopToReg: size.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>self ssNativePop: 1.</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>self MoveAw: coInterpreter nativeStackPointerAddress R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>self SubR: size R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>self AndCq: -16 R: TempReg.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>self MoveR: TempReg R: size.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>self MoveR: size Aw: coInterpreter nativeStackPointerAddress.</div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>self ssPushNativeRegister: size.</div><div><br></div><div><span class="m_-5045970348487068558gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>^ 0</div><div><br></div><div>etc?  So there are <span style="white-space:pre-wrap">allocateOneRegisterForLowc<wbr>odeInto: through allocateThreeRegistersForLowco<wbr>deInto:.  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>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>