- Vectorized complex load/save.
- Optimized complex multiplication (permissive mode).
- Direct translation from Symbolica.
- Fused load/math operations (both constant and memory access) are implemented.
- Debugging complex codegen.
- Code refactoring to better support multi-threading through
Applet. Poolis removed asopt_level = 2is the default.
- Improved inter-operability with Symbolica, especially adding external functions.
- Addition of
Applet.
symjit-crateSymbolica dependency is removed.Complexis re-exported.
- Parser complex constants parsing is fixed.
get_instructionsparser added.- Complex logical/boolean instructions changed to real only.
Bridgeencoder bugs fixed.
order=fortranadded tocompile_evaluator.- Matrix uses fat pointers now.
- Mixed complex-real computation to align with Symbolica 1.3.
- Symbolica Python interface improvements.
Compilermodified to access the output of Symbolicaexport_instructions.Translatorobject implements a two-pass translation ofexport_instructionsoutputs.- Adding
compile_evaluatorto the Python interface. - Symbolica interface supports SIMD (
Application.evaluate*functions). opt_leveldefault increased to 2.
- Adding support for complex numbers.
- Adding
dtypetocompilefunctions. - Removing explicit independent variable.
- Fixing and consolidation stack frames between regular and fast functions.
- Adding support for NEON instructions on aarch64 (128-bit f64x2).
- Adding hidden observables (named observables prefixed with
__). compile_jsonaccepts regular functions in addition to ODE systems.sanitizeswitch is deprecated.
- Adding support for aarch64 code segments > 1 MB (aarch64 adrp instruction).
- Can support >2^16 variables on aarch64.
- Code-factoring, especially separating
Expr. - Symbolica support added to both Python and Rust.
- Memory leak for normal compiled code fixed (fast functions still intentionally leak memory).
- Explicit looping constructs
SumandProductimplemented. defunskeyword added, allowing for calling Python and other Symjit functions.- Better testing (runtests.py).
- An
IfElselevel-2 bug fixed.
- RISC-V machine code is supported (64-bit only).
IfElseexplicitely supported in the low-level code genetators.- Improvement in register usage in the Arm64 backend.
- A bug in Windows fast-func fixed.
flush()removed and replaced withused_registersin the preamble code.- Alignment fixed before writing constants.
- Level-2 optimization with improved graph coloring algorithm added.
opt_levelargument added to compile functions.
- Sympy constants accepted (is_number).
- RISC-V compilation (bytecode only).
- New Intemediate-Representation (MIR).
- Peephole optimization on MIR.
- Optional fused-mul-add instructions (fastmath option).
- Adding
applyfunction to PythonFunc. - Adding callable functions to Python
Func.
- Large stack frame support in x64 (chkstk functionality).
- Debug mode fixed.
- Arm64 (aarch64) large stack frame.
- Consolidated tests suite (plots.py).
- New intrinsic operators (Min, Max, Heaviside).
- Switch to spec_math::cephes64 and addition of new numerical functions (erf, gamma, ...).
- Common-subexpression elimination (keywork
cse) implementede. - Reg and Block classes added.
- Examples and tests updated.
- F32 support added to low-level codegen (not exposed to the API yet).
- Multi-threading support added (keywork
use_threads). - Runnable class extensively rewritten to support parallelization.
- Matrix class added to support parallelization.
- Precise transcendental functions (expm1, log1p, exp2, and log2) added.
- Sub-expression rewriting rules.
- Debug mode added.
- A subtle bug in arm code generator fixed.
- The rust backend is extensively updated. Specially, a new register allocator improves register use.
- The new backend uses a tree-based Intemediate Representation instead of the three-address form in version 1.
- The default instruction set on AMD64 systems is AVX instead of SSE2 (SSE2 can still be generated if needed).
- Improved and unified stack frame structure. The stack frame size is significantly reduced compared to version 1.
- Fast functions (exposed rust function pointers) are introduced to reduce function call overhead of small functions.
- Rounding functions
floorandceilare added. - Special fast code generation for exponentiation to an integer power (e.g.,
x**100). - Special fast code generation for modular exponentiation (e.g.,
x**100 % 65537). - Less overhead in calling standard transcendental functions.
- Fixing a bug in comparison operators (swaping the meaning of strict vs non-strict comparisons).
- Addition of extensive testing examples.