<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-11-27 8:20 GMT+01:00 Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br><div dir="ltr">Right thanks. I need to check if those tests are in Pharo somewhere and add them.<div><br></div><div>This primitive was tricky to implement. Not enough registers, it makes things difficult. With a couple more registers, things would be easier. We could try to change it so that the ARM and x64 version can use Extra0Reg/Extra1Reg and avoid reloading registers all the time.</div><div><br></div></div></blockquote><div>Of course, this is assembler...</div><div><div class="gmail_quote"><br></div><div class="gmail_quote">I clearly failed to review the generator code; such 
review requires good knowledge of generic instruction set, which I haven't + mental map 
of register usage...</div>Despite your worthy efforts for using semantic names, this register scarcity indeed make such code kind of write only...</div><div><br></div>Thanks for writing the tough part anyway!</div><div class="gmail_quote">Tests are there for polishing the corners ;)</div><div class="gmail_quote"><br></div><div class="gmail_quote"><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div>I'm thinking maybe something like:</div><div><font face="monospace, monospace">extraTempReg := backEnd hasExtra0Reg ifTrue: [Extra0Reg] ifFalse: [startReg].</font></div><div>And then later...</div><div><font face="monospace, monospace">backEnd hasExtra0Reg ifFalse: [cogit genStackArgAt: 3 into: startReg].</font><br></div><div>would not be that hard to implement and would speed things on x64/ARM (2-3 less instructions which are L1 cache memory reads).</div><div><br></div><div>However the main point of this intrinsic is to avoid the switch to the C stack for small copies, speeding those drastically, and there is no spill/reload in the copying loop so no slow down on long copies, so maybe it's better to keep a single version which is already difficult to get right...<br></div></div><div class="gmail_extra"><br></div></blockquote><div><br></div><div>It would then make generator code worse indeed.<br></div><div>IMO, there are lower fruits hanging now.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote">On Mon, Nov 27, 2017 at 12:12 AM, Nicolas Cellier <span dir="ltr"><<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@<wbr>gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-11-26 23:30 GMT+01:00 Nicolas Cellier <span dir="ltr"><<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmai<wbr>l.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div>Ah thanks!<br><br></div>But I think that there is another bug in replacement size test...<br><br></div>(1 to: 20) reject: [:n |<br>  a := String new: n.<br>  b := String new: n-1.<br>  ([a replaceFrom: 1 to: n with: b startingAt: 1] ifError: [nil]) isNil.<br>]<br>-> #(2 4 6 8 10 12 14 16 18 20)<br></div><div><div><br></div><div>I'd expect they all fail, thus an empty #()<br></div></div></div></blockquote><div><br></div><div>OK, I corrected it, the replArray size was not correct (VMMaker.oscog-nice.2283)<br></div><div>The variable holding replArray format was already overwritten.</div><div>So I choosed to store replArray format into repStartReg and that works OK.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-26 23:09 GMT+01:00 Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br><div dir="ltr">Ok fixed in 2282 ! Thanks for reporting</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 26, 2017 at 11:04 PM, Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">This is correct: (lessOrEqual instead of less):<div><br></div><div><span><div>        "0 >= start, fail"</div><div><span style="white-space:pre-wrap">     </span>cogit CmpCq: (objectMemory integerObjectOf: 0) R: startReg.</div></span><div><span style="white-space:pre-wrap"> </span>jumpOutOfBounds1 := cogit JumpLessOrEqual: 0.</div><span><div><span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap"> </span>"0 >= replStart, fail"</div><div><span style="white-space:pre-wrap">      </span>cogit CmpCq: (objectMemory integerObjectOf: 0) R: repStartReg.</div></span><div><span style="white-space:pre-wrap">      </span>jumpOutOfBounds2 := cogit JumpLessOrEqual: 0.</div><div><br></div><div>I can't commit right now (my image has many changes I need to commit and I cannot branch easily on monticello...) Will do tomorrow. Thanks for reporting. </div><div><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461h5"><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 26, 2017 at 10:58 PM, Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I think those lines are the problem:<div><br></div><div><div>        "0 >= start, fail"</div><div><span style="white-space:pre-wrap">       </span>cogit CmpCq: (objectMemory integerObjectOf: 0) R: startReg.</div><div><span style="white-space:pre-wrap">      </span>jumpOutOfBounds1 := cogit JumpLess: 0.</div><div><span style="white-space:pre-wrap">   </span></div><div><span style="white-space:pre-wrap"> </span>"0 >= replStart, fail"</div><div><span style="white-space:pre-wrap">      </span>cogit CmpCq: (objectMemory integerObjectOf: 0) R: repStartReg.</div><div><span style="white-space:pre-wrap">   </span>jumpOutOfBounds2 := cogit JumpLess: 0.</div></div><div><br></div><div>If this is equal if should jump out of bounds.</div><div><br></div><div><br></div></div><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-HOEnZb"><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 26, 2017 at 9:53 PM, Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Bug seems to be with underflow access on replacement array:<div><br></div><div>(1 to: 10) collect: [:i| ['123456789' replaceFrom: 1 to: 4 with: 'abcdefgh' startingAt: 0] on: Error do: ['error']]<br></div><div>#('error' ' abc56789' ' abc56789' ' abc56789' ' abc56789' ' abc56789' ' abc56789' ' abc56789' ' abc56789' ' abc56789').<br></div><div><br></div><div>Same thing on arrays since this is common code...</div><div><br></div><div>Generated code looks ok... I need to look again I may have inverted some branches.</div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444HOEnZb"><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 26, 2017 at 9:37 PM, Clément Bera <span dir="ltr"><<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ok I have a look.<div><br></div><div>This is on byte objects...</div></div><div class="gmail_extra"><div><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-h5"><br><div class="gmail_quote">On Sun, Nov 26, 2017 at 9:07 PM, Nicolas Cellier <span dir="ltr"><<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmai<wbr>l.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br><div dir="ltr"><div><div>Like reported on travis<br><a href="https://travis-ci.org/OpenSmalltalk/opensmalltalk-vm/jobs/307544570" target="_blank">https://travis-ci.org/OpenSmal<wbr>ltalk/opensmalltalk-vm/jobs/30<wbr>7544570</a><br><br></div>the testTextReplacement3 now fails randomly.<br></div>It sometimes omit to signal an Error...<br></div>
<br></blockquote></div></div></div><span class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444m_-1110853111354515885HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444m_-1110853111354515885m_-1455408150298314396gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444m_-1110853111354515885gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail-m_-1645267237519986444gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</div>
</div></div></blockquote></div><br><br clear="all"><span class="gmail-m_-5645231959707958769m_6558032598645204338gmail-HOEnZb"><font color="#888888"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461m_-7827408383984974839gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</font></span></div></div></div></div></div><span class="gmail-m_-5645231959707958769m_6558032598645204338gmail-HOEnZb"><font color="#888888">
</font></span></blockquote></div><span class="gmail-m_-5645231959707958769m_6558032598645204338gmail-HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769m_6558032598645204338gmail-m_4340838960879346522m_-9170287395828213461gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</font></span></div><span class="gmail-m_-5645231959707958769m_6558032598645204338gmail-HOEnZb"><font color="#888888">
<br></font></span></blockquote></div><br></div>
</blockquote></div><br></div></div>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-5645231959707958769gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div>
</div>
<br></blockquote></div><br></div></div>