Luke Street da09fa13a8 | ||
---|---|---|
.github/workflows | ||
asm | ||
disasm | ||
fuzz | ||
genisa | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
isa.yaml | ||
rustfmt.toml |
README.md
ppc750cl
Rust tools for working with the PowerPC 750CL / 750CXe family of processors.
Building
cargo run --package ppc750cl-genisa
cargo build --release
Instruction Set
For those unfamiliar with PowerPC, here are some basics.
- PowerPC 7xx is a family of RISC CPUs produced from 1997 to 2012.
- They operate with 32-bit words and every instruction is 32-bits wide.
- This project focuses (only) on compatibility with the PowerPC 750CL and 750CXe.
- PowerPC 750CL ("Broadway") is used in the Nintendo Wii.
- PowerPC 750CXe ("Gekko") is used in the Nintendo GameCube.
- They add a "paired-singles" SIMD unit and a bunch of other instructions.
isa.yaml
The file isa.yaml contains a full definition of the PowerPC 750CL / 750CXe instruction set.
It powers the disassembler and assembler.
Similarly to LLVM TableGen, the program ppc750cl-genisa
generates a Rust file implementing an instruction decoder.
Safety & Correctness
- The disassembler has been fuzzed over all ~4.29 billion possible instructions (via
ppc750cl-fuzz
). - It is safe to run the disassembler over untrusted byte arrays.
- However, no guarantees on correctness are made (yet). Expect bugs.
Performance
With a single thread on Ryzen 9 3900X:
- Disassembling & printing: ~12M insn/s (~50 MB/s)
- Disassembling only: ~275M insn/s (~1 GB/s)