Age | Commit message (Collapse) | Author |
|
Better optimizations with less code.
|
|
The BEAM compiler translates code such as:
is_hex_digit(D) when $0 =< D, D =< $9 -> true;
is_hex_digit(D) when $a =< D, D =< $z -> true;
is_hex_digit(D) when $A =< D, D =< $Z -> true;
is_hex_digit(_) -> false.
to something like this:
L0: test is_ge L1 {x,0} 48
test is_ge L1 57 {x,0}
move true {x,0}
return.
L1: test is_ge L2 {x,0} 97
test is_ge L2 122 {x,0}
move true {x,0}
return
L2: test is_ge L3 {x,0} 65
test is_ge L3 90 {x,0}
move true {x,0}
return
L3: move false {x,0}
return
We can see that tests will be repeated even if they cannot possibly
succeed. For instance, if we pass in {x,0} equal to 32, the first
test that {x,0} is greater than or equal to 48 at L0 will fail.
The control will transfer to L1, where it will be tested whether
{x,0} is greater than 97. That test will fail and control
will pass to L2, where again the test will fail.
The compiler can do better by short-circuiting repeating tests:
L0: test is_ge L3 {x,0} 48
test is_ge L1 57 {x,0}
move true {x,0}
return.
L1: test is_ge L2 {x,0} 97
test is_ge L3 122 {x,0}
move true {x,0}
return
L2: test is_ge L3 {x,0} 65
test is_ge L3 90 {x,0}
move true {x,0}
return
L3: move false {x,0}
return
|
|
* lemenkov/use_os_getenv_2:
fix missing include
Start using os:getenv/2 fun
Introduce os:getenv/2
|
|
|
|
* mikpe/fix-eacces-spelling:
fix eacces spelling
|
|
* arekinath/aes-evp/OTP-12380:
crypto: use EVP for AES-CBC
|
|
|
|
* lukas/erts/crashdump_improvements/OTP-12377:
erts: Make main thread safe from pipe closed event
erts: Improve crash dumps
erts: Rename sys_sigset to sys_signal
erts: Introduce thread suspend functions
erts: Remove usage of QUANTIFY signal
erts: Add support for thread names
ets: Increase data available in crash dumps and ets:info
erts: Start compilation of beam_emu earlier
|
|
|
|
This commit improves crash dumps in several ways:
* Suspends schedulers to get a current snapshot
* Dumps information about scheduler
* Dumps stack trace of current running process
(including Garbing processes)
|
|
Also removed old legacy fallback that is no longer used
|
|
These functions allow any thread to suspend any other thread
immediately and then resume all threads. This is useful when
doing a crash dump in order to get a more accurate picture
of what state the system is in.
|
|
|
|
|
|
OTP-12376
|
|
|
|
* hans/eldap/bad_return_close/OTP-12349:
eldap: Remove trailing white space.
eldap: Test cases for a few return values (open, close)
eldap: updated eldap:close in tests
eldap: Makes close/1 return as documented.
|
|
|
|
* hans/eldap/test_improvents/OTP-12355:
eldap: Corrects SSL over IPv6 test.
eldap: Removes eldap_misc_SUITE that is now included in eldap_basic_SUITE.
eldap: Add encode/decode tests.
eldap: Merge eldap_connections_SUITE into eldab_basic_SUITE
eldap: Adds ssl to connections test suite
eldap: Updates basic test suite - Splits one large testcase into smaller ones. - Makes tests independent - Adds some tests.
|
|
|
|
* haguenau/fix-endianness-speling:
Replaced "Endianess" with "Endianness" everywhere
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Splits one large testcase into smaller ones.
- Makes tests independent
- Adds some tests.
|
|
|
|
* ia/ssh/ssh-connection-protocol-timeout/OTP-12004:
ssh: Improve errorhandling in ssh_connection.erl
|
|
If a channel is closed by the peer while using a function with call semantics
in ssh_connection.erl return {error, closed}. Document that the functions
can return {error, timeout | closed} and not only ssh_request_status()
|
|
|
|
* marcus/revert-ssh-testcase2/OTP-12004:
fix failed conflict resolution
|
|
* sverk/ets-take-2/OTP-12309:
erts: Optimize ets:lookup and ets:take for bags
Implement ets:take/2
|
|
* sverk/ct-assert:
erts: Add compile time assert ERTS_CT_ASSERT
|
|
* lukas/erts/non-blocking-shell:
erts: Fix big-endian issue with printf_putc
|
|
See #535
Signed-off-by: Peter Lemenkov <[email protected]>
|
|
Signed-off-by: Peter Lemenkov <[email protected]>
|
|
On little-endian machines, doing &int will give the smallest
byte which is what we want to give to write. But on big-endian
it will give the highest byte, which will always be \000 here
which results in write never doing any writes.
So we have to cast c to an unsigned char before passing it to
write.
|
|
* lukas/erts/cpu_timestamp_linux/OTP-12366:
erts: Allow cpu_timestamp tracing for Linux
|
|
* lukas/erts/non-blocking-shell:
erts: Make sure IOV_MAX is enforced for writev
erts: Make erts_printf work with non-blocking
|
|
|
|
|
|
|
|
|
|
* marcus/fix-eldap-notes:
add missing release notes
|
|
|