<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/erts/etc/unix, branch master</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>Optimize continuation pointer management</title>
<updated>2019-08-22T11:37:41+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2019-06-26T13:49:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=25fe3fb23c594d735cb6ebae120910e44f0cdae4'/>
<id>25fe3fb23c594d735cb6ebae120910e44f0cdae4</id>
<content type='text'>
The BEAM instructions for calling a function don't save the
continuation pointer (return address) on the stack, but to a special
BEAM register called CP. It is the responsibility of the called
function to save CP to the stack frame before calling other functions.

In the earlier implementations of BEAM on Sparc, CP was located in a
CPU register. That meant that the continuation pointer was never
written to memory when calling simple functions that didn't call
other functions at all or ended in a tail-call to another function.

The modern BEAM no longer keeps CP in CPU register. Instead, it is
kept in the `process` struct (in `p-&gt;cp`). That means the continuation
pointer must be written to the memory on every call, and if the called
function will call other functions, it will must read the continuation
pointer from `p-&gt;cp` and store it on the stack.

This commit eliminates the concept of the CP register and modifies
the call instructions to directly store the continuation pointer on
the stack. That makes allocation and trimming of stack frames slightly
faster. A more important benefit is simplification of code that handles
continuation pointers. Because all continuation pointers are now stored
on the stack, the special case of handling `p-&gt;cp` disappears.

Co-authored-by: John Högberg &lt;john@erlang.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The BEAM instructions for calling a function don't save the
continuation pointer (return address) on the stack, but to a special
BEAM register called CP. It is the responsibility of the called
function to save CP to the stack frame before calling other functions.

In the earlier implementations of BEAM on Sparc, CP was located in a
CPU register. That meant that the continuation pointer was never
written to memory when calling simple functions that didn't call
other functions at all or ended in a tail-call to another function.

The modern BEAM no longer keeps CP in CPU register. Instead, it is
kept in the `process` struct (in `p-&gt;cp`). That means the continuation
pointer must be written to the memory on every call, and if the called
function will call other functions, it will must read the continuation
pointer from `p-&gt;cp` and store it on the stack.

This commit eliminates the concept of the CP register and modifies
the call instructions to directly store the continuation pointer on
the stack. That makes allocation and trimming of stack frames slightly
faster. A more important benefit is simplification of code that handles
continuation pointers. Because all continuation pointers are now stored
on the stack, the special case of handling `p-&gt;cp` disappears.

Co-authored-by: John Högberg &lt;john@erlang.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'maint'</title>
<updated>2019-07-22T09:37:11+00:00</updated>
<author>
<name>Rickard Green</name>
<email>rickard@erlang.org</email>
</author>
<published>2019-07-22T09:37:11+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=9d1b3bb0db87cf95cb821af01189f6d6be072f79'/>
<id>9d1b3bb0db87cf95cb821af01189f6d6be072f79</id>
<content type='text'>
* maint:
  Fix etp-ets-tables
  Fix node refc test for free processes hanging around
  Enhanced node refc bookkeeping
  Fix node container refc tests of ETS
  Fix node refc test of external data
  Node container refc test for persistent terms
  Include persistent term storage in node/dist refc check
  Fix node refc test for system message queue
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* maint:
  Fix etp-ets-tables
  Fix node refc test for free processes hanging around
  Enhanced node refc bookkeeping
  Fix node container refc tests of ETS
  Fix node refc test of external data
  Node container refc test for persistent terms
  Include persistent term storage in node/dist refc check
  Fix node refc test for system message queue
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'rickard/node-refc-tests-22' into maint</title>
<updated>2019-07-22T09:36:49+00:00</updated>
<author>
<name>Rickard Green</name>
<email>rickard@erlang.org</email>
</author>
<published>2019-07-22T09:36:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=bcffb7f5599efb62f13128e6feeb03a65cd9c11e'/>
<id>bcffb7f5599efb62f13128e6feeb03a65cd9c11e</id>
<content type='text'>
* rickard/node-refc-tests-22:
  Fix etp-ets-tables
  Fix node refc test for free processes hanging around
  Enhanced node refc bookkeeping
  Fix node container refc tests of ETS
  Fix node refc test of external data
  Node container refc test for persistent terms
  Include persistent term storage in node/dist refc check
  Fix node refc test for system message queue
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* rickard/node-refc-tests-22:
  Fix etp-ets-tables
  Fix node refc test for free processes hanging around
  Enhanced node refc bookkeeping
  Fix node container refc tests of ETS
  Fix node refc test of external data
  Node container refc test for persistent terms
  Include persistent term storage in node/dist refc check
  Fix node refc test for system message queue
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix etp-ets-tables</title>
<updated>2019-07-22T09:21:01+00:00</updated>
<author>
<name>Rickard Green</name>
<email>rickard@erlang.org</email>
</author>
<published>2019-07-15T13:43:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=bf72b2e9f1239337764955bd633af46149b6c3d6'/>
<id>bf72b2e9f1239337764955bd633af46149b6c3d6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'maint'</title>
<updated>2019-06-28T09:28:41+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2019-06-28T09:28:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=8899bb6efc878e915c025f284bde16613017a4b3'/>
<id>8899bb6efc878e915c025f284bde16613017a4b3</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>erts: Update etp-stackump, stackmap and disasm</title>
<updated>2019-06-28T09:21:36+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2019-06-28T09:05:39+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=bd3158fa382bce84c36234034b7075fb1b12501b'/>
<id>bd3158fa382bce84c36234034b7075fb1b12501b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'maint'</title>
<updated>2019-06-28T08:49:06+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2019-06-28T08:49:06+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=643ee0a6e0a2085c3c522fdb6e39bc3bd5159a95'/>
<id>643ee0a6e0a2085c3c522fdb6e39bc3bd5159a95</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>erts: Randomize valgrind taskset CPU</title>
<updated>2019-06-27T14:27:19+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2019-06-04T07:12:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=2c445bcb04d2d5d3537b31ac93007b03f26695f9'/>
<id>2c445bcb04d2d5d3537b31ac93007b03f26695f9</id>
<content type='text'>
When running multiple valgrinds on the same machine we want to
attempt to make sure that they do not end up on the same core.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When running multiple valgrinds on the same machine we want to
attempt to make sure that they do not end up on the same core.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'maint'</title>
<updated>2019-06-24T14:56:43+00:00</updated>
<author>
<name>Sverker Eriksson</name>
<email>sverker@erlang.org</email>
</author>
<published>2019-06-24T14:56:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=5d5706abe7a85ab4e54455c0b1061fd351236e16'/>
<id>5d5706abe7a85ab4e54455c0b1061fd351236e16</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix VALGRIND_MISC_FLAGS defaults to use ERL_TOP</title>
<updated>2019-06-24T14:55:39+00:00</updated>
<author>
<name>Sverker Eriksson</name>
<email>sverker@erlang.org</email>
</author>
<published>2019-06-24T13:00:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=220d813fb6e62516d363c73ba5ce63928a2c50e4'/>
<id>220d813fb6e62516d363c73ba5ce63928a2c50e4</id>
<content type='text'>
for suppression file.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
for suppression file.
</pre>
</div>
</content>
</entry>
</feed>
