Age | Commit message (Collapse) | Author |
|
These primops use the standard_bif_interface_X macros in
hipe_bif_list.m4 and must therefor be implemented as bifs for things to work.
Maybe there is room for optimization here to call the primops more directly
with arguments in registers without having to push them on stack to emulate
bif calls.
|
|
x86 and amd64: Push BIF__ARGS array on C-stack.
ppc, sparc and arm: Write BIF__ARGS array to P->def_arg_reg[]
Just the simplest solution with limited assembler knowledge,
probably room for improvements.
|
|
No semantic change.
Just easier to debug when jumps are spelled out
and not obscured by yet another layer of macros.
|
|
A first step to adapt hipe to the new BIF calling convention.
|
|
Taking advantage of the new calling convention for BIFs, we
only need one instruction to handle BIFs with any number of
arguments. This change eliminates the limit of three arguments
for BIFs, but traps are still limited to three arguments.
|
|
The current calling convention for BIFs makes it necessary to
handle each arity specially, since each argument for the BIF
also becomes an argument for the C function implementing the BIF,
which makes it hard to allow BIFs with any number of arguments.
Change the calling convention for BIFs, so that BIF arguments are
passed in an array to the C function implementing the BIF.
|
|
As a preparation for changing the calling convention for
BIFs, make sure that all BIFs use the macros. Also, eliminate
all calls from one BIF to another, since that also breaks
the calling convention abstraction.
|
|
* bjorn/unicode-noncharacters/OTP-9624:
Allow noncharacter code points in unicode encoding and decoding
|
|
Previously removed code erroneously reappeared in a merge to the master
branch (ec36499d7e329b4dc69a1a3be3422eac7907c260).
|
|
* fm/enif_is_number:
Add NIF function enif_is_number
Conflicts:
erts/emulator/beam/erl_nif_api_funcs.h
OTP-9629
|
|
|
|
The two noncharacter code points 16#FFFE and 16#FFFF were not
allowed to be encoded or decoded using the unicode module or
bit syntax. That causes an inconsistency, since the noncharacters
16#FDD0 to 16#FDEF could be encoded/decoded.
There is two ways to fix that inconsistency.
We have chosen to allow 16#FFFE and 16#FFFF to be encoded and
decoded, because the noncharacters could be useful internally
within an application and it will make encoding and decoding
slightly faster.
Reported-by: Alisdair Sullivan
|
|
We already avoid outputting a comment terminator ("*/") inside
a comment to avoid causing a syntax error. Also avoid outputting
the start of a comment ("/*") to avoid causing a compiler warning.
Noticed-by: Tuncer Ayaz
|
|
* bjorn/erts/beam-loader-fixes:
Print transformtions sorted on the name of the first instruction
Share code for call of predicate and transformation functions
Simplify transformations of gc_bif[123] instructions
Refactor 'too_old_compiler' handling
Introduce 'try_me_else_fail'
Combine 'store_var' with 'next_arg'
Merge 'next_instr' and 'is_op' into 'next_instr'
Merge 'new_instr' and 'store_op' into 'new_instr'
Combine a 'call' instruction with the following 'end' instruction
Remove some unnecessary type constraints in transformations
Get rid of redundant 'try_me_else' and 'fail' instructions
Add some more information in instruction comments
In transformations, don't store variables that are never used
Remove redundant 'next_arg' before 'next_instr'
Generalize and rename is_set_var_instr() to is_instr()
Remove too_old_compiler handling for very old instruction variants
Remove the special instructions for the hybrid heap emulator
Remove optimization of 'move R R'
|
|
* bjorn/some-configure-clean-ups:
erts/configure.in: Remove test for reversed setvbuf() arguments
erts/configure.in: Remove broken support for System V
erts/configure.in: Don't check for the presence of mach-o/dyld.h
erts/configure.in: Remove useless --disable-fixalloc option
|
|
|
|
|
|
Each gc_bif[123] instruction must have both a transformation in
ops.tab and special code in gen_guard_bif[123]().
Rewrite it to do most of the work in gen_guard_bif[123]().
|
|
In the handling of generic instructions, we used to always
test whether the instruction was 'too_old_compiler' and abort
loading with a special error message.
Refactor the code so that we only do test if we an error
has occurred. That will allow us to make the test more expensive
in the future, allowing us to customize error messages for certain
opcode without any cost in the successful case.
|
|
|
|
'store_var' is always followed by 'next_arg'.
|
|
'next_instr' is always followed by 'is_op'.
|
|
Since the 'new_instr' instruction always occurs before the
'store_op' instruction, we can merge the instructions into one.
Also, there is no need to include the arity of the BEAM
instruction as an operand, since the arity can be looked up
based on the opcode.
|
|
A 'call' instruction in the loader transformation language is
always followed by an 'end' instruction, so we can replace the
'call' instruction with a 'call_end' instruction.
|
|
We don't need type constraints that essentially are assertions;
the wrong type will be detected and loading aborted when no specific
instruction can be found.
|
|
If the left part of a transformation will always match, omit the
the 'try_me_else' and 'fail' instructions.
As part of this optimization, make it an error to have a
transformation that can never be reached because of a previous
transformation that will always match. (Remove one transformation
from ops.tab that was found to be unreachable.)
|
|
|
|
This optimization will save some space (in the loader tables) and
some loading time.
|
|
Fix the incorrect code that attempted to remove a single
'next_arg' instructions before 'next_instr'.
|
|
It is more useful to have a helper function that can test for
any instruction.
|
|
is_list/2 and other test instructions with a zero label was last
generated by the v1 BEAM compiler which was last supported in R6B.
Since BEAM modules produced by that compiler will be rejected with
a nice error message for other reasons (e.g. by the test for the
module_info/0,1 functions), retaining those transformations serves
no useful purpose.
|
|
The hybrid-heap emulator is broken since R12, so there is no
need to keep those instructions.
|
|
Ancient versions of BEAM compiler could generate move instruction with
the same source and destination registers, so the loader would optimize
away such instructions.
|
|
* ia/ssl/remove-old-ssl/OTP-7048:
Remove old ssl implementation and deprecated function ssl:peercert/1
Conflicts:
lib/ssl/test/Makefile
|
|
|
|
* dev:
Prepare release
[ssl] Step version for patch 1178
Touch crypto to provoke patch release (again)
Prepare release
|
|
|
|
|
|
Conflicts:
erts/doc/src/notes.xml
erts/emulator/drivers/common/inet_drv.c
erts/vsn.mk
lib/kernel/test/gen_sctp_SUITE.erl
|
|
* dev:
Update copyright years
|
|
|
|
* dev:
Prevent valgrind warning for erts_alloc_permanent_cache_aligned
[erts] Fix memory leak in erts_make_stub_module (hipe loading)
|
|
* sverker/stub-module-code-leakage:
Prevent valgrind warning for erts_alloc_permanent_cache_aligned
[erts] Fix memory leak in erts_make_stub_module (hipe loading)
|
|
* dev:
Skip create_big_boot on platforms without crypto
Remove test_server path instead of cwd for clash test
Skip getaddr_v6 test if on the ipv4_only host
Use static port for old solaris versions
Extend time to wait for zone files to be loaded
Allow out of memory exception for max_port checks
Extend slave start timeout for windows tests
Double timeout to make sure debug builds pass
Use now instead of os:timestamp
Increase timeout in scheduler_suspend for slow platforms
Skip update_cpu_info if 'taskset' cannot be found
|
|
* lukas/fix_erts_testcases/OTP-9596:
Skip create_big_boot on platforms without crypto
Remove test_server path instead of cwd for clash test
Skip getaddr_v6 test if on the ipv4_only host
Use static port for old solaris versions
Extend time to wait for zone files to be loaded
Allow out of memory exception for max_port checks
Extend slave start timeout for windows tests
Double timeout to make sure debug builds pass
Use now instead of os:timestamp
Increase timeout in scheduler_suspend for slow platforms
Skip update_cpu_info if 'taskset' cannot be found
|
|
|
|
|
|
This is done in order to improve timing when testing
debug builds, especially ppc debug builds.
|
|
|
|
Code area allocation was done twice; first in read_code_header()
and then in erts_make_stub_module() itself.
|