Supported Targets
Kona seeks to support all FPVM targets that LLVM and rustc
can offer introductory support for. Below is a matrix of features that Kona offers
for each FPVM target:
Target | Build Pipeline | IO | malloc |
---|---|---|---|
cannon & cannon-rs | ✅ | ✅ | ✅ |
asterisc | ✅ | ✅ | ✅ |
If there is a feature that you would like to see supported, please open an issue or consider contributing!
Asterisc (RISC-V)
Asterisc is based off of the rv64gc
target architecture, which defines the following extensions:
RV32I
support - 32 bit base instruction setFENCE
,ECALL
,EBREAK
are hardwired to implement a minimal subset of systemcalls of the linux kernel- Work in progress. All syscalls used by the Golang
risc64
runtime.
- Work in progress. All syscalls used by the Golang
RV64I
supportRV32M
+RV64M
: Multiplication supportRV32A
+RV64A
: Atomics supportRV{32,64}{D,F,Q}
: no-op: No floating points support (since no IEEE754 determinism with rounding modes etc., nor worth the complexity)Zifencei
:FENCE.I
no-op: No need forFENCE.I
Zicsr
: no-op: some support for Control-and-status registers may come later though.Ztso
: no-op: no need for Total Store Ordering- other: revert with error code on unrecognized instructions
asterisc
supports a plethora of syscalls, documented in the repository. kona
offers an interface for
programs to directly invoke a select few syscalls:
EXIT
- Terminate the process with the provided exit code.WRITE
- Write the passed buffer to the passed file descriptor.READ
- Read the specified number of bytes from the passed file descriptor.
Cannon (MIPS32r2)
Cannon is based off of the mips32r2
target architecture, specified in MIPS32™ Architecture For Programmers Volume III: The MIPS32™ Privileged Resource Architecture
Syscalls
Syscalls supported by cannon
can be found within the cannon
specification here.