Age | Commit message (Collapse) | Author |
|
The new compiler required adding support for Y register for all
binary matching instructions. That was (intentionally) done in a
naive way that simplicated duplicated the entire body of each
instruction.
Now it's time to be less naive. Rewrite the binary matching
instructions using micro instructions. Because some of the binary
instructions are huge, that will significantly decrease the size of
process_main().
When compiling with clang, a huge process_main() would mess up
profile-guide optimization resulting in a significant performance
degradation. On my Mac, profile-guide optimzation would decrease
the estone benchmark by 100K estones (about 20 percent). This commit
gives me back the lost estones.
|
|
Mark the obsoleted instructions bs_start_match2, bs_save2, bs_restore2, and
bs_context_to_binary as cold.
Remove support of a Y operand for bs_save2 and bs_restore2.
|
|
get_tuple_element with an Y register has become more frequent with
the new compiler.
|
|
The compiler used to generate "move Literal y(Y)" instructions very
rarely. Therefore, there was a transformation to avoid having a "move
c y" instruction.
With the new compiler, "move Literal y(Y)" instructions are relatively frequent, so we will need a "move c y" instruction.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* siri/logger/os-timestamp/OTP-15625:
Update preloaded
[logger] Change timestamp from erlang:system_time to os:system_time
|
|
|
|
Tune BEAM instructions for the new compiler (part 1)
|
|
|
|
The is_nonempty_list test is very frequently followed by
get_tl, and frequently followed by get_hd.
|
|
It turns out that the combination of is_nonempty_list
and test_heap is no longer frequent.
|
|
|
|
The test_arity instruction is often followed by get_tuple_element.
|
|
|
|
Add a quiet logger mode (default) which limits the
printouts in the (erlang) shell (the web log will
be as verbose as usual).
Also added a way to configure the runtime of the ttest
cases.
|
|
Moved the old socket test modules into
its own (temporary?) directory.
|
|
The test case did not consider that the machine might have both
IPv4 (inet) and IPv6 (inet6) domain interfaces.
OTP-15635
|
|
The getnameinfo function has been fixed:
1) Faulty sockaddr decode success check
2) Incorrect (name info) return value
OTP-15636
|
|
Add a (basically) placeholder test suite for the net module.
OTP-15635
|
|
`swap x y` is rarely or never used. I found a single use of
`swap_temp x y x` in the sample of modules compiled by
`scripts/diffable`.
|
|
Of the `move_dup` instructions, only `move_dup x x x` was
frequently used. Remove the other register combinations.
With those instruction `move_dup` instructions removed, it
is necessary to add new predicates to avoid unsafe translation
to `move_shift` and `move2_par`.
Also add additional transformations to transform more `move`
instructions into `move2_par`. The existing transformation
would require the `move` instructions to be in the "right"
order in order to be transformed.
Remove `move3 x y x y x y` because it turns out to be rarely
executed.
|
|
inet_drv adds some arcane #defines to get SCTP working, which may
end up disabling madvise(2) locally in that file, breaking the
build in the process.
This commit disables madvise(2) altogether on Solaris as it's
far simpler than undoing the define dance in erl_mmap.h.
|
|
This reverts commit df130102cdeca8d35fec95a0c926fd1cfec54eab.
|
|
|
|
Make iolist_size/1 yield
OTP-15631
|
|
The iolist_size/1 function did not yield even if the input list was
very long and a call to the function did only consume a single
reduction. This commit fixes these problems.
|
|
* maint:
erts: Fix macro redefinition
|
|
LIST_NEXT and LIST_PREV causes macro redefinitions from other include files.
beam/erl_ao_firstfit_alloc.c:103:9: warning: 'LIST_NEXT' macro redefined [-Wmacro-redefined]
^
/usr/include/sys/queue.h:507:9: note: previous definition is here
^
1 warning generated.
beam/erl_bestfit_alloc.c:125:9: warning: 'LIST_NEXT' macro redefined [-Wmacro-redefined]
^
/usr/include/sys/queue.h:507:9: note: previous definition is here
^
|
|
|
|
Some cleanup (of open, bind, connect) and rewrote the
accept code (moved the code into smaller functions).
OTP-14831
|
|
Better handling of socket close. The 'closeRef' needed
its own environment to make if work in both cases (both
called and scheduled).
Also Introduced the enif select wrapper functions (read,
write, stop and cancel). Also add error handling at every
time one of these functions are called.
OTP-14831
|
|
Fixed a raise condition bug in the socket_stop (callback)
function that could result in the socket actually *not*
beeing closed.
OTP-14831
|
|
Assert failed in enif_demonitor when called with "NULL-monitor".
Replaced null monitor with separate 'is_active' boolean
and added my_make_monitor_term for printing (to be replaced
with enif_make_monitor_term).
|
|
Asserts failed in debug vm as msg term was built
from mixed ErlNifEnv's.
|
|
Add a quiet mode for ttest which is used when running in
a (terminal) shell.
Moved the esock-ttest script(s) into their own directory.
Minor improvements to the (client) result printout.
Also fixed copyright (end) dates.
OTP-14831
|
|
Fixed how to figure out local address on macOS Mojave.
OTP-14831
|
|
and collapsed some duplicate code
|
|
|
|
as called in crypto.erl and erlang.erl.
|
|
This is to align the timestamps with external logs.
|
|
Add enif_set_pid_undefined & enif_is_pid_undefined
|
|
'lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613'
* lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613:
erts: Add debug dist obuf memory leak check
win32: Fix ./otp_build debuginfo_win32
Make ld.sh on windows print better error reason
erts: Fix so that externals with creation 0 compare equal to all
erts: Expand etp to look for free processes
erts: Implement trapping while sending distr exit/down
erts: Add ERL_NODE_BOOKKEEP to node tables refc
erts: Refactor ErtsSendContext to be ErtsDSigSendContext
erts: Add distr testcases for fragmentation
erts: Make remote send of exit/2 trap
erts: Implement fragmentation of distrubution messages
erts: Expand distribution protocol documentation
erts: Move reason in dist messages to payload
erts: Remove a copy of distribution data payload
erts: Yield later during process exit and allow free procs to run
erts: Refactor rbt _yielding to use reductions
erts: Limit binary printout for %.XT in erts_print
|
|
|
|
The special creation of 0 is used by internally created externals,
such as when list_to_pid is called. This creation should compare
equal to all externals creations of that external. If it does not
we can end up in very strange scenarios. For instance:
> P = spawn(OtherNode, fun() -> die end).
<8303.60.0>
> link(<8303.60.0>).
true
> flush().
ok
OTP-15613
|
|
The reason in EXIT and DOWN may be arbitrarily large,
so we yield and allow other processes to execute while
encoding and sending the signals over the distribution.
|