aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-07-28probably should decide where imm-shifted reg normalization happensiximeow
2026-07-28Decode the correct number of operands for CMP/CMN (immediate/register)Grond
This also incidentally fixes an issue where MOV/MVN instructions with a shifted operand could be decoded as if they had 3 operands.
2026-07-28Fix the handling of reserved bits in uncommon loads/storesGrond
There's a pattern of load/store instructions that look something like * `ldr<variant> <target registers>, [<base register>, +/- <offset register>]` * `str<variant> <target registers>, [<base register>, +/- <offset register>]` These instructions share a common encoding format, which includes the presence of 4 reserved bits starting at bit 8 in the instruction word. These bits should always be zero, according to `DDI0406C_d_armv7ar_arm.pdf`. However, while this crate did attempt to validate these bits sometimes, the validation was inverted. Instead of checking that the bits were zero, the validation would raise an error if all of the bits were zero! Additionally, some instructions were missing the check and some instructions that did not use the aforementioned encoding scheme incorrectly had the check applied to them. This commit fixes all of the issues I've found along these lines so far.
2026-07-28Check all of the appropriate bits when parsing op1 for CDP2/MCR2/MRC2Grond
2026-07-28Implement the RRX immediate shift typeGrond
2026-07-28Fix the handling of arithmetic register shifts with zero immediatesGrond
2026-06-19Add armv7::InstDecoder::in_thumb_mode() methodSamuel Arnold
2026-02-22support A1 encoding of several coprocessor instructions + SVCrva3
initially was "implement MCR/MRC decoding", but expanded to include the whole coprocessor space for completeness, and then SVC is right there too. Neon instructions in this space are still rejected, as neon support is not really there yet. Co-authored-by: iximeow <me@iximeow.net>
2026-02-22properly display coprocessor higher than 9rva3
2026-02-22rename MCR2/MRC2 to MCR/MRCrva3
they share exactly the same encoding, except the high bits for condition the bool indicates if it's A2 encondings which is unconditional
2026-02-22derive Clone and Copy for armv7 instructionrva3
2025-10-19run differential test0.4.0iximeow
2025-10-19adjust goodfile to exercise feature matrix moreiximeow
2025-10-19alloc needs yaxpeax-arch alloc tooiximeow
2025-10-19Remove empty format precision specifierMarijn Schouten
A format precision specifier consisting of a dot and no number actually does nothing and has no specified meaning. Currently this is silently ignored, but it may turn into a warning or error. See rust-lang/rust#131159 and rust-lang/rust#136638
2025-10-19update changelog, no 0.3.2 after alliximeow
2025-10-19Opcode and Operand should be non-exhaustiveiximeow
but exhaustiveness checking is very valuable here, so allow it to be disabled. caveats apply. read the docs in Cargo.toml.
2025-10-19avoid subtle changes to A64 Opcode enum discriminant choicesiximeow
2025-10-19tag instruction decode fixes, differential test precisioniximeow
2025-10-19fix opcode display for ldgMartin Fink
2025-10-19visitor-oriented fmtiximeow
this makes a decode+format benchmark drop from 75s to 14s... (decode is 5s)
2025-06-20changelog + another inlineiximeow
2025-06-02some armv7 decode helpers are trivial functions but didn't inlineiximeow
both from_u8 and the build function here compiled to truly trivial code: four instructions (mov rdi, rax; cmp 0xlim, rax; jae panic; ret) in the hot path, and constrained register choice on the caller side. inlining these makes for a *smaller* armv7 decoder, on the order of 5kb down from 5.5kb. in the process it also gets about 45% faster (400mb/s to 560mb/s) inlining decode_into, then, really just helps the standalone decoder benchmark case. this moves decode throughput from 560mb/s to 724mb/s.
2025-05-25support the rest of PAC instructions. compare to a more recent capstoneiximeow
capstone-rs currently binds an old capstone (4.0), where capstone 5.0 is where much of the armv8.2+ implementation was ported over from LLVM. so, differential testing is now pointed to a capstone-rs fork pending the merge of https://github.com/capstone-rust/capstone-rs/pull/172
2025-02-060.3.10.3.1iximeow
2025-02-06actually check no-std configuration does not transitively depend on stdiximeow
2025-02-04Disable bitvec features to fix no_stdLuke Street
2024-06-25update yaxpeax-arch in differential-tests, validate in goodfileiximeow
2024-06-250.3.00.3.0iximeow
2024-06-25Bump yaxpeax-arch and bitvec, allow use of deprecated yaxpeax-arch traits, ↵novafacing
fix bitvec syntax changes
2024-06-250.2.60.2.6iximeow
2024-06-25include udf note in changelogiximeow
2024-06-25Add support for `udf`Martin Fink
2024-03-17at least armv7t doesnt panic now, but im very uncertain these are rightiximeow
2024-03-17run non-panicking tests with a horkton of parallelismiximeow
they run in minute or so now and the thumb mode panics....???
2024-03-17armv8 no-panic test is now multithreadediximeow
2024-03-17differential test: more refinement on exceptionsiximeow
2024-03-17resolve warnings, make textual disassembly in differential tests a little fasteriximeow
2024-03-17differential tests: RUSTFLAGS on aarch64 noteiximeow
2024-03-17ye olde "const array rebuilt in locals with simd but static is const" issueiximeow
2024-03-17differential tests: unnecessary mutiximeow
2024-03-17ah uxtw/h fix introduced warningsiximeow
2024-03-17differential test: use raw capstone interface to avoid reallocating cs_insniximeow
2024-03-17differential test: atomic adds are relaxed, dont need specific orderingiximeow
2024-03-17fix uxtb/uxth alias being incorrectly applied with x-size registersiximeow
2024-03-17differential tests: more unneeded special casesiximeow
2024-03-17differential tests: width-aware immediate parsingiximeow
2024-03-17when decoding invalid opcodes, return errors. better testing for this ↵iximeow
circumstance.
2024-03-17disassembling sb is fine, tests ensure it happens nowiximeow
2024-03-17capstone also reports msr for some undefined encodingsiximeow