summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yjit/src/backend/arm64/mod.rs24
-rw-r--r--yjit/src/disasm.rs9
2 files changed, 33 insertions, 0 deletions
diff --git a/yjit/src/backend/arm64/mod.rs b/yjit/src/backend/arm64/mod.rs
index be329f61cf..c5ddbea7c1 100644
--- a/yjit/src/backend/arm64/mod.rs
+++ b/yjit/src/backend/arm64/mod.rs
@@ -767,4 +767,28 @@ mod tests {
asm.compile_with_num_regs(&mut cb, 1);
}
+
+ #[test]
+ #[cfg(feature = "disasm")]
+ fn test_simple_disasm() -> std::result::Result<(), capstone::Error> {
+ // Test drive Capstone with simple input
+ use capstone::prelude::*;
+
+ let cs = Capstone::new()
+ .arm64()
+ .mode(arch::arm64::ArchMode::Arm)
+ .build()?;
+
+ let insns = cs.disasm_all(&[0x60, 0x0f, 0x80, 0xF2], 0x1000)?;
+
+ match insns.as_ref() {
+ [insn] => {
+ assert_eq!(Some("movk"), insn.mnemonic());
+ Ok(())
+ }
+ _ => Err(capstone::Error::CustomError(
+ "expected to disassemble to movk",
+ )),
+ }
+ }
}
diff --git a/yjit/src/disasm.rs b/yjit/src/disasm.rs
index 83c80d6c66..62b270bce9 100644
--- a/yjit/src/disasm.rs
+++ b/yjit/src/disasm.rs
@@ -69,6 +69,8 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
// Initialize capstone
use capstone::prelude::*;
+
+ #[cfg(target_arch = "x86_64")]
let cs = Capstone::new()
.x86()
.mode(arch::x86::ArchMode::Mode64)
@@ -76,6 +78,13 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
.build()
.unwrap();
+ #[cfg(target_arch = "aarch64")]
+ let cs = Capstone::new()
+ .arm64()
+ .mode(arch::arm64::ArchMode::Arm)
+ .build()
+ .unwrap();
+
out.push_str(&format!("NUM BLOCK VERSIONS: {}\n", block_list.len()));
out.push_str(&format!(
"TOTAL INLINE CODE SIZE: {} bytes\n",