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 | ✅ | ✅ | ✅ |
Asterisc (RISC-V)
Asterisc is based off of therv64gc target architecture, which defines the following extensions:
RV32Isupport - 32 bit base instruction setFENCE,ECALL,EBREAKare hardwired to implement a minimal subset of systemcalls of the linux kernel- Work in progress. All syscalls used by the Golang
risc64runtime.
- Work in progress. All syscalls used by the Golang
RV64IsupportRV32M+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.Ino-op: No need forFENCE.IZicsr: 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 (MIPS64r2)
Cannon is based off of themips64r2 target architecture, specified in MIPS® Architecture For Programmers Volume II-A: The MIPS64® Instruction Set Reference Manual
Syscalls
Syscalls supported bycannon can be found within the cannon specification here.