aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2022-01-02 00:12:47 -0800
committeriximeow <me@iximeow.net>2022-01-02 00:12:58 -0800
commitd7effd5f49af37f560a061b3d82716b807eb8a36 (patch)
treeffd7c8fa3f3fa5a99156d50775a6372484b70299 /README.md
parentcd85596e6fefdf59e3788a7b817e69562e13fa5b (diff)
0.2.10.2.1
Diffstat (limited to 'README.md')
-rw-r--r--README.md22
1 files changed, 20 insertions, 2 deletions
diff --git a/README.md b/README.md
index 852c0be..e7294d7 100644
--- a/README.md
+++ b/README.md
@@ -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