diff options
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | README.md | 22 |
3 files changed, 24 insertions, 3 deletions
@@ -1,3 +1,6 @@ +## 0.2.1 +* README updates. + ## 0.2.0 * added documentation to all public members. * fix tests incorrectly expecting `lsl #0` in memory operands where it would have no effect @@ -1,7 +1,7 @@ [package] name = "yaxpeax-arm" -version = "0.2.0" +version = "0.2.1" authors = [ "iximeow <me@iximeow.net>" ] license = "0BSD" repository = "http://git.iximeow.net/yaxpeax-arm/" @@ -1,5 +1,8 @@ ## yaxpeax-arm +[![crate](https://img.shields.io/crates/v/yaxpeax-arm.svg?logo=rust)](https://crates.io/crates/yaxpeax-arm) +[![documentation](https://docs.rs/yaxpeax-arm/badge.svg)](https://docs.rs/yaxpeax-arm) + `yaxpeax-arm` provides implementations of decoders for the armv7, v7/thumb, v7/thumb2, and aarch64/a64 instruction sets. the entrypoint to begin decoding is either `armv7::InstDecoder` (`ARMv7::Decoder::default()`) or `armv8::InstDecoder` (`ARMv8::Decoder::default()`). `default` for both decoders is to decode in ARM mode. `default` will try to decode as permissively as possible, even attempting to produce some kind of instruction for `UNPREDICTABLE` patterns, where possible. for armv7 and below, `default_thumb` produces a similarly permissive set of rules, but for decoding thumb/thumb2 instructions. @@ -8,18 +11,33 @@ ARMv7 and thumb mode instructions decode to the same structure: `armv7::Instruct for all ARMv7 instructions, `armv7::Instruction::s()` reports if the instruction will update status flags. if `s` is in error, that is a decoder bug, please report it. +### features + +* `#[no_std]` +* very fast +* pretty small? + +### `#[no_std]` +`yaxpeax-arm` supports use in `no_std` environments. to build `yaxpeax-arm` in `no_std` environments, add `default-features = false` to the crate's depdency line. this disables the `std` feature, and removes the little integration with `std` that `yaxpeax-arm` optionally provides. + +### very fast +`yaxpeax-arm` hasn't been exhaustively benchmarked, but loose tests suggest that it's at least as fast as other high-quality `arm` disassemblers, like [`capstone`](https://github.com/capstone-engine/capstone) or [`bad64`](https://github.com/yrp604/bad64). more comprehensive benchmarks to come. + +### pretty small? +similarly to decode speed, the size of a compiled `yaxpeax-arm` hasn't been closely profiled, but at minimum it's 20% the size of `yaxpeax-x86`, with `armv7` and `armv8` code being entirely independent - using only one architecture should allow the other's code to be dead-code-eliminated. `yaxpeax-arm` compiles in release mode in only a few seconds. ## stability 0.1 and 1.0 versions are considered significant indicators of feature-completeness and stability. the specific guidelines by which `yaxpeax-arm` will be considered stable are listed below. ### 0.1 checklist -- [ ] support `NEON` -- [ ] adjust `yaxpeax-arch` so `min_length` can be contingent on the mode of `InstDecoder` +- [/] support `NEON` (SIMD before SVE supported in ARMv8!) +- [x] adjust `yaxpeax-arch` so `min_length` can be contingent on the mode of `InstDecoder` - currently `min_length` is always 4, which is incorrect for `Thumb` modes. conversely, selecting "2" would be flagrantly wrong for `ARM` modes. - [ ] address all in-tree TODO ### 1.0 checklist +- [ ] support `SVE` and `SVE2` - [ ] support per-version decode flags, so decoding an armv4, armv5, or armv7 instruction - [ ] fully support `should_is_must` to control how pedantic decoding should be - [ ] fully support reporting `unpredictable` encodings as `DecodeError::Unpredictable` if required |