This release especially improves libtcc-JIT by more than doubling it's performance. It also adds a proxy mode that takes away some of the sandboxing, allowing access to the host system. This mode makes it easier to run regular RISC-V programs from the CLI. There is also macOS support now. 👍
What's Changed
- Add new Proxy Mode that disables most sandboxing features, but makes it easier to run most programs
- Allow support for JIT-produced segments in the fast-path, making v8 and NodeJS faster to emulate
- JIT-produced segments change while running, however it was possible to detect and reprocess the segments live
- Add basic register caching and tracking in binary translation, more than doubling libtcc performance
- Because the register caching is very basic, it adds general latency to libtcc, but it can be disabled at run-time if need be
- Add a new noexcept build option to allow including all libriscv public headers in a project with C++ exceptions disabled
- libriscv still needs C++ exceptions for robust sandboxing, but they can be caught at the border
- Binary translation performance improvements, allowing it to reach 92% of native CoreMark up from 86%
- MacOS support, thanks to @fire
PRs
- Add macOS support by @fire in #187
- bintr: Add penalties to fdiv and sqrt by @fwsGonzo in #190
- bintr: Simplify loading of embedded and shared binary translations by @fwsGonzo in #194
- Binary translation improvements by @fwsGonzo in #195
- Add AVX-512 CRC32-C variant, compress illegal opcodes in bintr by @fwsGonzo in #196
- Proxy mode by @fwsGonzo in #197
- v8: Avoid caching execute segments that are likely JIT by @fwsGonzo in #198
- Futex improvements by @fwsGonzo in #199
- More futex work by @fwsGonzo in #200
- bintr: Optimize JUMP_TO and returning from JAL by @fwsGonzo in #201
- Implement a work-around and support for NodeJS on RISC-V by @fwsGonzo in #202
- Add EBREAK live-patching support, execute JIT-segments undecoded by @fwsGonzo in #203
- Add bytecodes for C.SRLI, C.ANDI and C.XOR by @fwsGonzo in #204
- Use instruction handler caching for JIT-segments by @fwsGonzo in #205
- Just-in-time evict and reprocess JIT-segments by @fwsGonzo in #206
- bintr: Implement forward branch calls by @fwsGonzo in #207
- Allow opening a file with Newlib emulator by @fwsGonzo in #208
- Libtcc basic register allocation by @fwsGonzo in #209
- bintr: Improve system call register caching by @fwsGonzo in #210
- bintr: Separate codegen into its own function by @fwsGonzo in #211
- bintr: Implement basic register value tracking by @fwsGonzo in #212
- bintr: Reduce register usage during most system calls by @fwsGonzo in #213
- Add noexcept emulator to GH actions by @fwsGonzo in #214
- Fix build issue on FreeBSD by @fwsGonzo in #215
- Add internal common header by @fwsGonzo in #217
Full Changelog: v1.6...v1.7