aboutsummaryrefslogtreecommitdiff
path: root/differential-tests/tests/differential-v7-thumb.rs
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2026-07-28 02:53:04 +0000
committeriximeow <me@iximeow.net>2026-07-28 07:28:15 +0000
commit1c03f9be10d03c63d9c6eed1e56333763fee628d (patch)
tree59ddcdce9e6d52c0aaf80465f637363569050890 /differential-tests/tests/differential-v7-thumb.rs
parent5581435b4edc8836e172a5088d74d2ec97b2bc99 (diff)
temp, armv8-thumb
Diffstat (limited to 'differential-tests/tests/differential-v7-thumb.rs')
-rw-r--r--differential-tests/tests/differential-v7-thumb.rs29
1 files changed, 23 insertions, 6 deletions
diff --git a/differential-tests/tests/differential-v7-thumb.rs b/differential-tests/tests/differential-v7-thumb.rs
index 84f8afc..86804a1 100644
--- a/differential-tests/tests/differential-v7-thumb.rs
+++ b/differential-tests/tests/differential-v7-thumb.rs
@@ -488,7 +488,7 @@ fn capstone_differential_thumb() {
let i = i as u32;
let bytes = &i.to_le_bytes();
if i % 0x01_00_00_00 == 0 {
- eprintln!("case {:08x}", i);
+// eprintln!("case {:08x}", i);
}
// let res = cs.disasm_all(bytes, 0);
@@ -529,7 +529,7 @@ fn capstone_differential_thumb() {
if let Ok(inst) = yax_res {
write!(yax_text, "{}", inst).unwrap();
} else if let Err(yaxpeax_arm::armv7::DecodeError::Incomplete) = yax_res {
- stats.missed_incomplete.fetch_add(1, Ordering::Relaxed);
+ // stats.missed_incomplete.fetch_add(1, Ordering::Relaxed);
continue;
} else {
let word = i;
@@ -644,7 +644,24 @@ fn capstone_differential_thumb() {
}
}
- if true {
+ // TODO: yax probably should simply write `stm` in this case like the
+ // manual implies and capstone does.
+ if parsed_yax.opcode == "stmia" && parsed_cs.opcode == "stm"
+ && parsed_yax.operands == parsed_cs.operands {
+ return true;
+ }
+
+ static BRANCHES: &'static [&'static str] = &[
+ "bgt", "bhi", "b", "ble", "bge", "blt", "bge",
+ "bhs", "blo", "beq", "bne", "bpl", "bmi", "bvc",
+ "bvs", "bls", "bfi", "b.w","blx.w",
+ ];
+ if BRANCHES.contains(&parsed_yax.opcode.as_str()) && parsed_yax.opcode == parsed_cs.opcode {
+ // TODO: the harness doesn't relativeizie branch targets?
+ return true;
+ }
+
+ if false {
eprintln!("yax: {} -> {:?}", yax_text, parsed_yax);
eprintln!("cs: {} -> {:?}", cs_text, parsed_cs);
}
@@ -654,8 +671,8 @@ fn capstone_differential_thumb() {
// eprintln!("{}", yax_text);
if !acceptable_match(i, &yax_text, &cs_text) {
- eprintln!("disassembly mismatch: {} != {}. bytes: {:x?}", yax_text, cs_text, bytes);
- std::process::abort();
+// eprintln!("disassembly mismatch: {} != {}. bytes: {:x?}", yax_text, cs_text, bytes);
+// std::process::abort();
stats.mismatch.fetch_add(1, Ordering::Relaxed);
} else {
stats.good.fetch_add(1, Ordering::Relaxed);
@@ -684,7 +701,7 @@ fn capstone_differential_thumb() {
let stats = Arc::new(stats);
-// test_range(0x00_00_00_00, 0xff_ff_ff_ff, Arc::clone(&stats));
+ // test_range(0x00_00_00_00, 0xff_ff_ff_ff, Arc::clone(&stats));
for i in 0..NR_THREADS {
let stats = Arc::clone(&stats);