aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2017-09-14Use relative failure labelsBjörn Gustavsson
Relative failure in itself is not an optimization, but we plan to pack failure labels in the future to save memory.
2017-09-14Add information about offset to common group start positionBjörn Gustavsson
2017-09-14Remove JUMP_OFFSETBjörn Gustavsson
It has served its purpose.
2017-09-14Document that the compiler may optimize away atomsBjörn Gustavsson
The following code could fail in the call to list_existing_atom/1: String = atom_to_list(some_atom), Atom = list_to_existing_atom(String) because the compiler will rewrite the code to: String = "some_atom", Atom = list_to_existing_atom(String) If some_atom is not used in another place, it will not exist. The compiler could be updated to preserve the atom in this simple case, but it would be hard to make sure that the compiler never loses atoms that exist in the source text. It also difficult to imagine a real world use case where this would be a problem. If an atom is mentioned only in a way that the compiler can optimize away, is there really any need to create the atom at all in list_to_existing_atom/1? Therefore, it is better to place the responsibility that the atom exists on the user of list_to_existing_atom/1. Update the documentation to mention that the compiler may optimize away atoms. https://bugs.erlang.org/browse/ERL-453
2017-09-14Merge branch 'maint'Dan Gudmundsson
* maint: stdlib: Fix jumping to beginning or end of line Fix del_chars not considering wide chars and update buffer length before calling write_buf Make cp_pos_to_col function aware of the ANSI escape codes
2017-09-14Merge pull request #1549 from ggcampinho/fix-move-cursorDan Gudmundsson
Consider ANSI escape codes on cp_pos_to_col
2017-09-13Merge branch 'sverker/19/on_load-on_load-bug/OTP-14612' into ↵Sverker Eriksson
sverker/on_load-on_load-bug/OTP-14612
2017-09-13erts: Fix 'on_load' tracing bug for modules with -on_loadSverker Eriksson
Symptom: VM crash when erlang:trace_pattern(on_load, ..) is set and module with -on_load is loaded. Problem: Tracing and -on_load clash in their use of Export.beam[1] Solution: Do not do call set_default_trace_pattern in finish_loading_1 for modules with -on_load. finish_after_on_load_2 will do that anyway.
2017-09-13Fix del_chars not considering wide chars and update buffer length before ↵Glauber Campinho
calling write_buf After deleting the chars the function `del_chars` was considering the code points to move the cursor back and not the graphemes
2017-09-13Refactor instructions to support relative jumpsBjörn Gustavsson
Introduce new macros that can be used for relative jumps and use them consistently. Test that everything works by using a non-zero constant JUMP_OFFSET. The loader subtracts JUMP_OFFSET from loaded labels, and all instructions that use 'f' operands add it back.
2017-09-13Merge branch 'bjorn/erts/improve-beam-ops'Björn Gustavsson
* bjorn/erts/improve-beam-ops: Add built-in macros $ARG_POSITION() and $IS_PACKED() Use 't' instead of 'I' bit syntax operands Optimize operand type for match context in i_bs_get_integer Change operand type from 's' to 'S' for a few instructions Use the correct name of the parameter
2017-09-13Add built-in macros $ARG_POSITION() and $IS_PACKED()Björn Gustavsson
2017-09-13Merge pull request #1544 from michalmuskala/eq-optBjörn Gustavsson
Optimise equality comparisons
2017-09-13Merge branch 'potatosalad/erts/binary_find_bif_improved/PR-1480/OTP-14610'Lukas Larsson
* potatosalad/erts/binary_find_bif_improved/PR-1480/OTP-14610: stdlib: Improved BIF for binary matches and split.
2017-09-13Update release notesErlang/OTP
2017-09-13Update version numbersErlang/OTP
2017-09-13Merge branch 'sverker/20/binary_to_atom-utf8-crash/ERL-474/OTP-14590' into ↵Erlang/OTP
maint-20 * sverker/20/binary_to_atom-utf8-crash/ERL-474/OTP-14590: erts: Fix crash in binary_to_atom/term for invalid utf8
2017-09-12Merge branch 'maint'Sverker Eriksson
2017-09-12Merge branch 'sverker/ets-fix-assert-fix' into maintSverker Eriksson
* sverker/ets-fix-assert-fix: erts: Fix faulty ASSERT of table fixation counter
2017-09-12Merge branch 'maint'Sverker Eriksson
2017-09-12Merge branch 'sverker/valgrind-fixes/OTP-14609' into maintSverker Eriksson
* sverker/valgrind-fixes/OTP-14609: erts: Suppress false memory leak for dlerror [ct] Cleanup and rename purify related functions as valgrind Revert "remove unused purify functions" erts: Fix memory leak when sending to terminating port erts: Fix harmless use of uninitialised value
2017-09-12Merge branch 'maint'Lukas Larsson
2017-09-12Merge branch 'lukas/ct/ts_abort_on_compilation_fail' into maintLukas Larsson
* lukas/ct/ts_abort_on_compilation_fail: erts: Fix leaking of fds in iovec_SUITE ts: Don't test apps that are not available asn1: Fix test suite deprecated functions ct: ts:run now abort the test run on compilation failure
2017-09-12erts: Fix leaking of fds in iovec_SUITELukas Larsson
2017-09-11Use 't' instead of 'I' bit syntax operandsBjörn Gustavsson
The number of live registers, unit and flags, and the number of slots all fit comortably in 16 bits. This change will give more opportunities for packing.
2017-09-11Optimize operand type for match context in i_bs_get_integerBjörn Gustavsson
The match context is always in an X register. Change the 's' operand to 'x'. While we are it, also change the operands for Live and FlagsAndUnit to 't' (they will both fit comfortably in 16 bits).
2017-09-11Change operand type from 's' to 'S' for a few instructionsBjörn Gustavsson
'S' is slightly more efficient. Using 'S' may also enable more packing.
2017-09-11Use the correct name of the parameterBjörn Gustavsson
2017-09-11Introduce a new trace_jump/1 instruction for tracingBjörn Gustavsson
As a preparation for introducing relative jumps, introduce "trace_jump W" that can be used for tracing. This instruction will continue to have an absolute address for the jump target. (Note: This instruction is never created during loading; it is only created in stubs when tracing is active.)
2017-09-11Avoid using $Src more than onceBjörn Gustavsson
The C compiler will probably optimize this, but just to be sure...
2017-09-11Merge branch 'maint'Lukas Larsson
Conflicts: erts/emulator/sys/unix/sys.c
2017-09-11Merge branch 'lukas/erts/fix_warnings' into maintLukas Larsson
* lukas/erts/fix_warnings: Fix some clang warnings Fix unused-functions warnings
2017-09-11Fix some clang warningsLukas Larsson
2017-09-11Fix unused-functions warningsLukas Larsson
2017-09-11Merge branch 'lukas/erts/non-smp-removal-cleanup/OTP-14518'Lukas Larsson
* 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
2017-09-11Make estone work with older releasesLukas Larsson
2017-09-11erts: Allow read in ttsl driver to return EAGAINLukas Larsson
2017-09-11erts: non-smp removal cleanup in erlexecLukas Larsson
2017-09-11erts: Remove possibility to disable dirty schedulersLukas Larsson
2017-09-11Merge branch 'lukas/erts/pgo/OTP-14604'Lukas Larsson
* lukas/erts/pgo/OTP-14604: Add support for building a pgo beam_emu
2017-09-11beam_debug: Add support for printing 'S' operandsBjörn Gustavsson
The 'S' operand type was added in 5bf73db9fd77.
2017-09-11Check the right side of a transformation betterBjörn Gustavsson
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.
2017-09-11Merge branch 'maint'John Högberg
2017-09-11Merge branch 'john/erts/hoist-min-max-macros' into maintJohn Högberg
2017-09-08Merge branch 'bjorn/erts/improve-beam-ops'Björn Gustavsson
* 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()
2017-09-08Add support for building a pgo beam_emuLukas Larsson
2017-09-08Optimise equality comparisonsMichał Muskała
* 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.
2017-09-07Merge branch 'maint'Sverker Eriksson
2017-09-07Merge branch 'sverker/nif-resource-doc' into maintSverker Eriksson
* sverker/nif-resource-doc: erts: Update docs for enif_make_resource
2017-09-07Replace ad-hoc MIN/MAX macros with common onesJohn Högberg
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.