Age | Commit message (Collapse) | Author |
|
By default, GCC will inline calls to helper functions. Since
process_main() is already huge, there is no reason to inline
the helper functions (and some of them are used very seldom).
|
|
There were two separate functions (call_error_handler() and
call_breakpoint_handler()) that were identical except for
the name of the function in the error_handler module being
called. Generalize call_error_handler() by adding a function
name argument so that it can be used for both purposes.
Also let the call_error_handler() return the new program
counter instead of passing it in c_p->i. That slightly decrease
the code size at the call site.
There is also no need to use the Dispatch() macro to yet again
decrease the reduction counter, because that has just been done by
the call instruction that caused the execution of the
call_error_handler or i_debug_breakpoint instruction.
|
|
The compiler does not generate select_val instructions that only
selects one value, but the loader may previously have created such
an instruction when it splitted a select_val instruction that
selected on bignums.
|
|
Combine the put_tuple/2 and all following put/1 instructions
to one i_put_tuple/2 instruction. In general, that will reduce
the number of instruction words by 50 percent.
Measurements seem to indicate that the speed is about the same.
|
|
|
|
|
|
|
|
In many (not all) cases, the value for the 'I' type will
fit into 32 bits.
|
|
We don't want the packable types listed in two places.
|
|
|
|
|
|
|
|
|
|
Introduce a new 'Q' type, similar to 'P' except that it
can be packed.
|
|
In the 32-bit BEAM emulator, it is only possible to pack
3 register operands into one word. Therefore, the move2
instruction (that has 4 operands) needs two words for its
operands.
Take advantage of the larger wordsize in the 64-bit emulator
and pack up to 4 operands into a single word.
|
|
Giving the beam_makeops script access to the external word
size (=the size of instruction words) will allow it to pack
more operands into a word for the 64 bits emulator.
|
|
In the transformation engine in the loader, an is_eq/1 instruction
is currently always preceded by an is_type/1 instruction. Therefore,
save a word and slight amount of time by combining those
instructions into an is_type_eq/2 instruction.
|
|
|
|
The i_jump_on_val_zero/3 and i_select_tuple_arity/3 instructions
were not disassembled correctly.
|
|
|
|
|
|
|
|
It would only really work in simple case like:
select_val S=q Fail=f Size=u Rest=* => ...
where all operands for a single instruction where bound to
variables, and not for more complicated cases such as:
i_put_tuple Dst Arity Puts=* | put PutSrc => ...
|
|
There was a version of the BEAM loader and emulator that
had two versions of the fmove/2 instruction, one version
that allocated heap space internally and a newer version that
assumed that a previous test_heap/2 instruction had already
allocated the heap space.
Though the allocating fmove/2 instruction is no longer
supported, some vestiges of it still remains.
|
|
|
|
|
|
erts_debug:instructions/0 is useful for finding which specific
instructions that are not used at all.
|
|
* pan/fortify-source-gcc-4.5:
Remove strange name field in efile_drv.c as it upsets -D_FORTIFY_SOURCE
OTP-9025
|
|
Also added ASSERTion in beam_emu.c that the tmp-heap-counter in 0.
|
|
|
|
|
|
The listen() call can fail due to a variety of conditions, so check
its return value and if it fails, print a suitable debug message if
appropriate and then exit. The exit values used are the same for those
already used for bind() failures: 0 if the error is EADDRINUSE, 1
otherwise.
|
|
enif_realloc_binary return int
enif_alloc/enif_free does not accept env as first argument.
enif_send return int
enif_self in alphabetic order
|
|
* egil/timer-wheel-min-time/OTP-8990:
Teach timer-wheel slots to use double linked lists
Remove timer-thread implementation
Refactor timer interface
Teach timer-wheel to keep min time
|
|
Conflicts:
erts/emulator/beam/erl_time.h
|
|
* bjorn/bs-zero-width-bug/OTP-8997:
Fix type-checking of variable used in zero-width bit syntax construction
|
|
<<A:0>> will always produce an empty binary, regardless of the
type of A. The bug is in the run-time system. Fix it so that a
non-numeric value for A will cause a badarg exception.
Reported-by: Zvi
|
|
|
|
|
|
Increases the speed of the timer-wheel
|
|
* pan/r14b01-file-driver-fix:
Correct usage of pointer-to-size in unix_efile
|
|
* pan/bad-dist-msg/OTP-8993:
Remove ancient distribution message DOP_NODE_LINK from all code
Teach VM not to dump core on bad dist message structure
|
|
* pan/werl-scrollwheel/OTP-8985:
Teach win_con.c about scroll wheels
|
|
|
|
* raimo/getifaddrs_ifa_addr_NULL/OTP-8996:
Fix segfault for NULL return value fields from getifaddrs()
|
|
* rickard/exit/2-refc/OTP-9005:
Decrement refc after unlock in exit/2
|
|
|
|
|
|
* rickard/fix-warnings/R14B02:
Remove unused variable
Remove stray semicolons in erl_term.h
|
|
* rickard/ets-no-write-refc/OTP-9000:
Stop using reference counter when write accessing ETS-tables
Conflicts:
erts/emulator/beam/erl_db.c
|