Age | Commit message (Collapse) | Author |
|
The C compiler will probably optimize this, but just to be sure...
|
|
Conflicts:
erts/emulator/sys/unix/sys.c
|
|
* lukas/erts/fix_warnings:
Fix some clang warnings
Fix unused-functions warnings
|
|
|
|
|
|
* lukas/erts/non-smp-removal-cleanup/OTP-14518:
Make estone work with older releases
erts: Allow read in ttsl driver to return EAGAIN
syntax_tools: Fix makefile dep
erts: non-smp removal cleanup in erlexec
|
|
|
|
|
|
|
|
* lukas/erts/pgo/OTP-14604:
Add support for building a pgo beam_emu
|
|
The 'S' operand type was added in 5bf73db9fd77.
|
|
The right side of a transformation must be either a single call
to a transformation function OR a list of instructions. Mixing
them like this is not supported:
some_instruction A B C => gen_something(A) | other B C
Unfortunately, beam_makeops would silenty ignore anything after the
function call, basically handling it in the same way as:
some_instruction A B C => gen_something(A)
Add a sanity check to reject such mixed right-hand sides.
|
|
|
|
* bjorn/erts/improve-beam-ops:
Don't allow macros to assign to hard-coded variables
Annotate try_case_end as cold
beam_emu.c: Mark initialization code as unlikely
Try to avoid generating unecessary do/while wrappers
Eliminate unecessary instruction macro i_move_call_only()
|
|
|
|
* In both loader and compiler, make sure constants are always the second
operand - many passes of the compiler assume that's always the case.
* In loader rewrite is_eq_exact with same arguments to skip the instruction
and with different constants move one to an x register to maintain
the properly outlined above.
* The same (but in reverse) is done with the is_ne_exact, where we rewrite
to an unconditional jump or add a move to an x register.
* All of the above allow to replace is_eq_exact_fss with is_eq_exact_fyy and
is_ne_exact_fss with is_ne_exact_fSS as those are the only possibilities left.
|
|
Besides being noisy, they were already defined by a global Unix-
specific header, causing the Windows build to fail if one forgot to
define them.
|
|
|
|
|
|
|
|
OTP-14527
|
|
OTP-14520
|
|
OTP-14527
|
|
All operations will now yield appropriately, allowing them to be used
freely in concurrent applications. This commit also deprecates the
functions listed below, although they won't raise deprecation
warnings until OTP 21:
zlib:adler32
zlib:crc32
zlib:inflateChunk
zlib:getBufSize
zlib:setBufSize
The behavior of throwing an error when a dictionary is required for
decompression has also been deprecated.
|
|
OTP-14520
|
|
* maint:
Bug fixes of statistics(wall_clock) and statistics(runtime)
Conflicts:
erts/emulator/beam/erl_time_sup.c
|
|
* rickard/statistics-time-fixes/OTP-14597/ERL-465:
Bug fixes of statistics(wall_clock) and statistics(runtime)
Conflicts:
erts/emulator/beam/erl_time_sup.c
|
|
|
|
* rickard/dist/OTP-14459:
Fix setnode/3 and erts_net_message()
|
|
Cannot read fix->counter safely without table lock.
|
|
|
|
|
|
It's bad style. Pass the name of the variable as an
extra argument to the macro.
|
|
try_case_end is an excepting-generating instruction that is
infrequently executed.
|
|
|
|
Make the generated code easier to read.
|
|
|
|
This fixes the issue with the function `move_cursor` described in #1536 and that causes the bug described in https://github.com/elixir-lang/elixir/issues/6504.
The function `cp_pos_to_col` maps the current position in the buffer to the correct column on the screen, but it didn't handle ANSI escape codes. Since the ANSI escape codes aren't visible, the `cp_pos_to_col` now skips them when executing the calculations using `ansi_escape_width`. This new function only considers color escape codes, but also handles invalid codes.
|
|
|
|
* sverker/20/binary_to_atom-utf8-crash/ERL-474/OTP-14590:
erts: Fix crash in binary_to_atom/term for invalid utf8
|
|
De-duplicate bignums in the literal pool
|
|
* bjorn/erts/improve-beam-ops:
Optimize dispatch of loop_rec from recv_set
Add missing -no_next directives
Eliminate three arguments for erts_hibernate()
Eliminate three arguments for the apply() helper
Assign machine registers for X86-64
Annotate arithmetic instructions with likely/unlikely
Add annotations for likely/unlikely
ops.tab: Mark infrequently used instructions as %cold
Introduce '%warm' and beam_warm.h
|
|
|
|
We KNOW that recv_set instruction is immediately followed
by a loop_rec instruction.
|
|
|
|
We don't need to pass x(0), x(1), and x(2) because they
can already be found in the register array.
|
|
We don't need to pass x(0), x(1), and x(2) because they
can already be found in the register array.
|
|
Keep frequently used variables in machine registers.
|
|
We expect that:
* An arithmetic instruction is more likely to succeed
than to fail.
* An arithmetic instruction is more likely to have small
operands than bignum operands.
|
|
In a correct Erlang programs, we can expect that:
* A GC test instruction (such as test_heap) is more likely
not to do the GC.
* A BIF is more likely to succeed than to fail.
* A BIF is more likely to fail in a guard than in a body.
* An apply or fun call is likely to succeed.
Annotate conditions accordingly.
|