Assembler toolkit: encoding and decoding of various architectures
- Rust 89.5%
- C 7.6%
- Python 2.9%
| benches | feat(x86): dyn emit and parsing | |
| examples | rewrite arm64; remove disasm; proper feature gates | |
| meta | slight improvements to risc-v | |
| src | cleanup | |
| .gitignore | hot patch | |
| .gitmodules | riscv labels | |
| Cargo.lock | bump version | |
| Cargo.toml | bump version | |
| LICENSE | license finally | |
| PORTING.md | add relocations | |
| README.md | rewrite arm64; remove disasm; proper feature gates | |
asmkit
#![no_std] assembler library.
Features
- X64, RISC-V, PPC, and ARM (WIP) assemblers
- Small and portable library.
- Tiny amount of dependencies:
libc,intrusive-collections: for JIT supportpaste,derive-more: makes our life simpler when declaring arch-specific stuff over and oversmallvec: for code generation to not heap allocate often
- Relocations are provided by CodeBuffer interface and assembler will use them if you use symbols in API.
Goals
- Auto-generated assemblers for as many as possible platform.
- Portability: library should built & run on any platform (even if it does not provide assembler for one), and assemblers on its own
must not be dependent on platform we built
asmkiton.
TODO
(削除) Add support for ARM64 (削除ここまで)Works! Not everything is tested, so if errors occur please open an issue.- Add support for PPC64
- Add support for OpenPOWER (POWER9/POWER10)
- Add support for RW info and implicit operand info for all opcodes
- Cross-platform helpers to perform calls
- JSC/SpiderMonkey-like
MacroAssemblerto help generate assembly without worrying about target architecture - Compiler/Builder interface: emit instructions as
Inststructure and allow modifying them before emitting, and also possibly to have regalloc pass over them.
Related projects
- AsmJit: Core API, JIT API, AArch64 backend and operands are ported from AsmJit, the overall idea of making portable assembler in Rust comes from AsmJit
- fadec: x86/64 encoding/decoding library. We use opcode tables provided by fadec
for x86/64 support and
encode.cis partially used for emitting code. - riscv-opcodes: Opcode table for RISC-V, used to generate RISC-V assembler/disassembler.
- GDB: GDB is a debugger but we use its
ppc-opc.cas an opcode table for PowerPC support.