Age | Commit message (Collapse) | Author |
|
* maint:
Fix scheduler id field in timers
Conflicts:
erts/emulator/beam/erl_hl_timer.c
|
|
* rickard/timer-sid-bug/OTP-14548:
Fix scheduler id field in timers
Conflicts:
erts/emulator/beam/erl_hl_timer.c
|
|
* bjorn/erts/improve-beam-ops:
arith_instrs.tab: Clean up bsl/bsr
beam_makeops: Stop using the Arg() macro
Eliminate the beam_instrs.h file
Add the 'S' type for a register source
Introduce more packable types
Pack cold instructions too
Pack instructions using 'q', 'c', and 's'
beam_makeops: Rewrite the packer, fixing several bugs
Make map update instruction functions indepedent of instruction format
beam_makeops: Introduce the new type 'W' (machine word)
Use the wait_timeout_{un}locked_int instructions
beam_makeops: Remove the unused aliases 'N' and 'U'
beam_makeops: Add an additional sanity check
beam_makeops: Prevent truncation when packing 'I' values
Improve performance for bsl/bsr
arith_instrs.tab: Eliminate warning for uninitialized value
beam_emu: Remove unused macros
beam_makeops: Remove unused subroutine save_c_code
Add missing -no_next for badarg instruction
|
|
Conflicts:
OTP_VERSION
|
|
* maint-20:
Updated OTP version
Prepare release
Accept non-binary options as socket-options
Bump version
Fix broken handling of default values in extensions for PER
compiler: Fix live regs update on allocate in validator
Take fail labels into account when determining liveness in block ops
Check for overflow when appending binaries, and error out with system_limit
|
|
|
|
Eliminate the all-purpose variable 'ires'. Replace it with several
variables used that are used for their specific purpose. Narrow
the scope of the variables.
Do this to improve readability. It is not expected that it should
any impact on performance.
|
|
* maint:
Unicode support for erlang:display_string/1
|
|
* rickard/unicode-display_string/OTP-14545:
Unicode support for erlang:display_string/1
|
|
|
|
|
|
* lukas/erts/fix_dirty_trace_message_flush/OTP-14538:
erts: Fix incorrect merge of dirty_trace_message_flush fix to master
|
|
* sverker/halt-unicode-slogan/OTP-14553:
erts: Allow any unicode string as crash dump slogan
erts: Generate crash_dump slogan string as UTF8
erts: Refactor erts_unicode_list_to_buf
|
|
|
|
Generated code uses 'I' explicitly in other places, so it
can as well use 'I' when accessing the operands for instructions.
|
|
The beam_instrs.h file serves no useful purpose. Put the
instructions in beam_hot.h instead.
|
|
The type 'd' could be used both for destination registers and
source register.
Restrict the 'd' type to only be used for destinations, and
introduce the new 'S' type to be used when a source must be
a register.
|
|
i.e the first argument to erlang:halt
|
|
|
|
* john/erts/fix-binary-append-syslimit/OTP-14524:
Check for overflow when appending binaries, and error out with system_limit
# Conflicts:
# erts/emulator/test/bs_construct_SUITE.erl
|
|
* maint:
Fix ANSI support in the console
|
|
The 'I' type can be replaced with 't' if we know that the value
will fit in 16 bits. The 'P' type can be replaced with 'Q' if
it is used for deallocating a stack frame.
|
|
Cold instructions used to be cooler (less frequently executed),
so it did not seem worthwhile to pack their operands. Now bit
syntax instructions are included among the cold instructions,
and they are frequently used.
|
|
Update the pack engine to safely push literal operands to the pack
stack and to safely pop them back to another code address. That
will allow packing of more instructions.
|
|
The packer had several bugs and limitations. For instance, on
a 32-bit Erlang virtual machine it would gladly pack three
't' values into one word even though it would be not safe.
The rewritten version will be more careful how much it packs
into each word. It will also be able to do packing for more
instructions.
|
|
Having the helper functions for map update knowing all the details
of operands for the instruction will make it difficult to make
improvements such as better packing.
|
|
As a preparation for potentially improving packing in the future,
we will need to make sure that packable types have a defined maximum
size.
The packer algorithm assumes that two 'I' operands can be packed
into one 64-bit word, but there are instructions that use an 'I'
operand to store a pointer. It only works because those instructions
are not packed for other reasons.
Introduce the 'W' type and use it for operands that don't fit in
32 bits.
|
|
The transformations were incorrect.
|
|
I don't remember what they were used for, but they are certainly
no longer used.
|
|
If a type has a size in %arg_size, it should also have
a defined pattern in %bit_type.
|
|
BEAM_WIDE_MASK covered the 16 right-most bits, instead of the 32
right-most bits. This bug will bite us when we'll do more packing in
the future.
This bug has been harmless in the past. It has been used in
test_heap and allocate instructions for the number of heap words
needed. It would be theoretically possible to construct a program
that would need 65536 or more heap words, but it is hard to imagine
a practical use for such a program. (The program would have to build
a tuple or list with at least one variable and the rest of the elements
being literals.)
|
|
Eliminate the variable used for holding which BIF (bsl or bsr).
It seems to improve performance slightly.
|
|
Make it clear to GCC that shift_left_count is initialized.
|
|
|
|
* lukas/erts/HRelease-assert:
erts: Add HRelease endp assert
|
|
|
|
|
|
The ANSI support doesn't work properly with edlin, the issue can be noticed when you try to use the history of the shell and the prompt prefix has ANSI (https://github.com/elixir-lang/elixir/issues/6448). The problem is that when a `\e` character appears, it handles it like a new line, dropping the buffer before it.
The solution is to always add the `\e` to the buffer like a regular character and handle it when writing the buffer instead.
|
|
* maint:
stdlib: Improve edlin handling of unicode chars
|
|
* dgud/stdlib/edit-unicode:
stdlib: Improve edlin handling of unicode chars
OTP-14542
|
|
Conflicts:
erts/emulator/beam/erl_nif.c
erts/emulator/beam/erl_process.c
|
|
* lukas/erts/fix_dirty_trace_message_flush/OTP-14538:
erts: Must have main lock when flushing trace messages
|
|
run_erl: Fix error handling in sf_close and during pty master read
|
|
Let edlin handle grapheme clusters instead of codepoints to
improve the handling multi-codepoints characters.
The ttsl driver (and protocol) still expects all lengths as
codepoints.
Previously it was expected that each codepoint used (at least) one
terminal column for each codepoint, and a hack was made for wide
characters (multicolumn) by patching in TAGGED characters to occupy
the extra space so that codepoint index was equal column index.
This didn't work at all for combining codepoints that do not occupy any
more space than the previous character.
Improved this handling by calculating column positions in move_cursor.
This is based on wcwidth() and is not perfect, wcwidth() is wrong for
some codepoints and wcwidth() can not know with Hangul graphemes for
example. But it works better than before without making a major change
in the protocol.
|
|
The instruction put_map_assoc/5 (used for updating a map) has a
failure operand, but it can't actually fail provided that its "map"
argument is a map.
The following code:
M#{key=>value}.
will be compiled to:
{test,is_map,{f,3},[{x,0}]}.
{line,[...]}.
{put_map_assoc,{f,0},{x,0},{x,0},1,{list,[{atom,key},{atom,value}]}}.
return.
{label,3}.
%% Code that produces a 'badmap' exception follows.
Because of the is_map instruction, {x,0} always contains a map when
the put_map_assoc instruction is executed. Therefore we can remove
the failure operand. That will save one word, and also eliminate
two tests at run-time.
The only problem is that the compiler in OTP 17 did not emit a
is_map instruction before the put_map_assoc instruction. Therefore,
we must add an instruction that tests for a map if the code was
compiled with the OTP 17 compiler.
Unfortunately, there is no safe and relatively easy way to known that
the OTP 17 compiler was used, so we will check whether a compiler
before OTP 20 was used. OTP 20 introduced a new chunk type for atoms,
which is trivial to check.
|
|
* rickard/non-smp-removal-cleanup/OTP-14518:
erts: Cleanup erl and erlang docs after non-smp removal
erts: Remove unused prototypes after non-smp removal
|
|
|
|
|
|
|
|
'0 bsl 134217728' would fail with a system limit exception on a 32-bit
BEAM machine, but not on a 64-bit BEAM machine. Smaller values
on the right would always work.
Make erlang:bsl(0, BigNumber) always return 0 to make for consistency.
(The previous commit accidentally did that change for
'0 bsl BigNumber'.)
|