GNU lightning 2.2.1 release
GNU lightning is a library to aid in making portable programs
that compile assembly code at run time.
Development:
http://git.savannah.gnu.org/cgit/lightning.git
Download release:
ftp://ftp.gnu.org/gnu/lightning/lightning-2.2.1.tar.gz
GNU Lightning 2.2.1 main new features:
- Variable stack framesize implemented for aarch64, arm, i686, mips, riscv, loongarch and x86_64. This means function calls use only the minimum required stack space for prolog and epilog.
- Optimization of prolog and epilog to not create a frame pointer if not required, and not even save and restore the stack pointer if not required on a leaf function. These features implemented for the ports with variable stack framesize.
- New clor, czr, ctor and ctzr instructions, that count leading/trailing zeros/ones. These use hardware implementation when available, otherwise fallback to a software implementation.
- Correct several bugs with jit_arg_register_p and jit_putarg{r,i}{_f,_d}. These bugs were not noticed earlier due to an incorrect check for correctness in check/carg.c.
- Add rip relative addressing support for x86_64 and shorter signed 64 bit constant load if the constant fits in a signed 32 bit integer. This significantly reduces code size generation.
- Correct bugs in branch generation code for pppc and sparc.
- Correct bug in signed 32 bit integer load in ppc 64 bits.
- Add short relative unconditional branches and calls to mips, reducing code size generation.
- And several extra minor optimizations.