<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On 21 aug 2014, at 12:34, Björn-Egil Dahlberg <<a href="mailto:egil@erlang.org">egil@erlang.org</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
<div bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 2014-08-21 12:11, Tony Rogvall
wrote:<br>
</div>
<blockquote cite="mid:D354611C-F2BE-48EC-B91C-4C9F5903DE1A@rogvall.se" type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
May I suggest a two stage commit, in the good old OTP way?
<div><br>
</div>
<div>- First step is to implement a fairly simple bif that call
the functionality I really want to get</div>
<div>(the remainder when doing bignum div calculations.) </div>
<div><br>
</div>
<div>This includes the work of checking special considerations
with GC. It works now, but</div>
<div>needs more testing. As an example, I needed to blank the
memory between the quotient </div>
<div>and the remainder in the case when both quotient and reminder
where both bignums.</div>
<div>(It should not really be needed, but I think the debug
compiled emulator/gc expect everything to be super clean?)</div>
<div><br>
</div>
<div>- Seconds step is to use the previous work and implement an
instruction that can be</div>
<div>used instead of call erlang:divrem when possible. This
instruction needs a couple of </div>
<div>variants I guess: One that return a tuple and one that store
remainder in</div>
<div>a X register as instructed by compiler.</div>
<div><br>
</div>
<div>What about that ? <br>
</div>
</blockquote>
<br>
Please, not an additional BIF. <br>
<br></div></blockquote>Why not? What is the problem ?</div><div><br><blockquote type="cite"><div bgcolor="#FFFFFF" text="#000000">
Do an optimization pass in beam-assembler to rewrite the two
gc-bif-instructions to a single divrem instruction. Or better, yet
.. just reorder them so you can please the loader and rewrite it in
the load-step. No need for an additional assembly instruction in the
compiler, just a specific instruction in the beam which is optimized
with a load trick.<br>
<br></div></blockquote>I think one boring thing with this is that I need then to be dependent on that the compiler is smart enough to figure</div><div>this out (even if I have to implement it my self ;-)</div><div>How can a user be sure that the compiler really this optimisation? I think at least Björn G used to have </div><div>thought about having to smart compilers ? </div><div><br></div><div>/Tony</div><div></div><div><br></div><div><br><blockquote type="cite"><div bgcolor="#FFFFFF" text="#000000">
<blockquote cite="mid:D354611C-F2BE-48EC-B91C-4C9F5903DE1A@rogvall.se" type="cite">
<div><br>
</div>
<div>:-)</div>
<div><br>
</div>
<div>/Tony</div>
<div><br>
</div>
<div><br>
<div>
<div>On 20 aug 2014, at 20:04, Björn-Egil Dahlberg <<a moz-do-not-send="true" href="mailto:wallentin.dahlberg@gmail.com">wallentin.dahlberg@gmail.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<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 moz-do-not-send="true" 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="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="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="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 moz-do-not-send="true" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a moz-do-not-send="true" href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</blockquote>
</div>
<br>
<div>
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px;">
<div><span class="Apple-style-span" style="color: rgb(51,
51, 51); font-family: Geneva, Arial, Helvetica,
sans-serif; font-size: 12px; ">"Installing applications
can lead to corruption over time. </span><span class="Apple-style-span" style="color: rgb(51, 51, 51);
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 12px; ">Applications gradually write over
each other's libraries, partial upgrades occur, user and
system errors happen, and minute changes may be
unnoticeable and difficult to fix"</span></div>
<div><span class="Apple-style-span" style="color: rgb(51,
51, 51); font-family: Geneva, Arial, Helvetica,
sans-serif; font-size: 12px; "><br>
</span></div>
</span><br class="Apple-interchange-newline">
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
erlang-questions mailing list
<a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre>
</blockquote>
<br>
</div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">"Installing applications can lead to corruption over time. </span><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">Applications gradually write over each other's libraries, partial upgrades occur, user and system errors happen, and minute changes may be unnoticeable and difficult to fix"</span></div><div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; "><br></span></div></span><br class="Apple-interchange-newline">
</div>
<br></body></html>