<div dir="ltr">It should probably be an instruction instead. <div><br></div><div>The compiler should recognize if div and rem is used and combine them to one instruction. You have no issue with multiple return values if you do it in core for instance. I did some doodling with this on my previous summer vacation .. along with sub-expr-elim .. I stopped after the doodling phase =)</div>
<div><br></div><div>No eep necessary if you do it as an optimization pass, only light-eep.</div><div><br></div><div>// Björn-Egil</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-08-20 19:41 GMT+02:00 Tony Rogvall <span dir="ltr"><<a href="mailto:tony@rogvall.se" target="_blank">tony@rogvall.se</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span style="border-collapse:separate;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;border-spacing:0px"><div style="color:rgb(0,0,0);font-family:Helvetica">
<span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;font-size:12px">Hi list.</span></div><div style="color:rgb(0,0,0);font-family:Helvetica"><span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;font-size:12px"><br>
</span></div><div style="color:rgb(0,0,0);font-family:Helvetica"><span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;font-size:12px">I have been playing with a new BIF called divrem today. Calling erlang:divrem(A,B) has the the same result</span></div>
<div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">as calling {A div B, A rem B}. (possibly with some strange exceptional cases that remain to be found :-)</font></div><div><br></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">Since the bignum div operation has always calculated the remainder as a "waste product" I thought it was</font></div>
<div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">about time to pick it up and make use if it.</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif"><br></font></div><div>
<font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">The speedup when comparing calculation of {Q,R} = erlang:divrem(A,B) and Q=A div B, R=A rem B,</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">is about 70-80% already around 60 bit arguments (64bit platform) (max speedup is of course 100%), </font></div>
<div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">currently the downside </font><span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;text-align:-webkit-auto">is that divrem for small numbers are a bit slower, since a tuple {Q,R} is constructed </span></div>
<div><span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;text-align:-webkit-auto">and the emulator have instructions for div and rem.</span></div><div><span style="color:rgb(51,51,51);font-family:Geneva,Arial,Helvetica,sans-serif;text-align:-webkit-auto"><br>
</span></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">The above could probably be handle by regarding divrem as a builtin function with a multiple return value</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">and have the compiler to generate an instruction for some instances of divrem.</font></div>
<div><br></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">I remember some work for handling multiple return values?</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif"><br>
</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">What about it ? eep?</font></div><span class="HOEnZb"><font color="#888888"><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif"><br>
</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif">/Tony</font></div><div><font color="#333333" face="Geneva, Arial, Helvetica, sans-serif"><br></font></div></font></span></span></div></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>