<div dir="ltr">Hello Bjorn, <div><br></div><div>I was not aware of it, I am new to Erlang. I started doing development on Elixir but </div><div>I would like to learn and understand what Erlang does under the hood. </div><div><br></div><div>Thanks for the tip, it is very useful.</div><div><br></div><div>Gabriel</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 15, 2017 at 4:46 AM, Björn Gustavsson <span dir="ltr"><<a href="mailto:bjorn@erlang.org" target="_blank">bjorn@erlang.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Sep 14, 2017 at 11:16 PM, Gabriel Rivas<br>
<<a href="mailto:gabriel.alberto.rivas@gmail.com">gabriel.alberto.rivas@gmail.<wbr>com</a>> wrote:<br>
<br>
><br>
> But I still don't see how the subtraction happens. Can anybody shed some<br>
> light<br>
> on the internals of calling a BIF in the erlang module?<br>
<br>
</span>Not sure that you are aware of it, but there is a disassembler that is<br>
used like this:<br>
<br>
  erts_debug:df(ex3).<br>
<br>
It creates a file named ex3.dis. In it, you can see that the loaded<br>
code looks this:<br>
<br>
00007F9C8F953AD0: i_func_info_IaaI 0 ex3 sub 2<br>
00007F9C8F953AF8: i_minus_jIxxd j(0000000000000000) 2 x(0) x(1) x(0)<br>
00007F9C8F953B28: return<br>
<br>
In this particular case, you can see that the BIF call has been<br>
translated to a special instruction.<br>
<br>
The translations that the loader makes can be found in<br>
erts/emulator/beam/ops.tab.<br>
<br>
/Bjorn<br>
</blockquote></div><br></div>