felix86 is a Linux userspace emulator that allows you to run x86-64 Linux programs on RISC-V processors. It is in the early stages of development.
Compilation and usage instructions can be found here.
Want to contribute but don't know where to start? Check this out.
- Just-in-Time (JIT) recompiler
- Uses the RISC-V Vector Extension for SSE instructions
- Utilizes the B extension, if available, for bit manipulation instructions like
bsr
- Supports a variety of optional extensions, such as XThead custom extensions
felix86 is in the very early stages of development and does not support AArch64.
Currently, felix86 can run some console-based applications, such as python3
and lua
.
If you need a more mature x86-64 userspace emulator, consider using one of these:
- FEX for x86 & x86-64 on AArch64
- box64 for x86 & x86-64 on AArch64 and RISC-V
- qemu-user for a wide range of architectures
felix86 relies on several great projects:
- FEX's comprehensive unit test suite and rootfs generation
- Biscuit for RISC-V code emission
- Zydis for decoding and disassembly
- Catch2 for unit testing
- fmt for string formatting
- nlohmann/json for JSON parsing
felix86 was started for several reasons, including:
- Gaining a deeper understanding of x86-64, RISC-V, Linux, and high-level emulation
- Exploring optimizing compilers and JITs (SSA, register allocation, optimization passes, etc.)
- To learn more about low level details, such as signals, syscalls, program loading
- Taking on a fun and challenging project