ckb_debugger/
instruction_decode.rs1use crate::arch;
2use ckb_vm::machine::VERSION2;
3
4pub fn instruction_decode(inst: u32) {
7 let mut inst_tag = String::from("?");
8 let mut inst_isa = String::from("?");
9 if let Some(i) = ckb_vm::instructions::i::factory::<u64>(inst, VERSION2) {
10 assert_eq!(inst_tag.as_str(), "?");
11 let tagged_instruction = ckb_vm::instructions::tagged::TaggedInstruction::try_from(i).unwrap();
12 inst_tag = tagged_instruction.to_string();
13 inst_isa = "I".to_string();
14 }
15 if let Some(i) = ckb_vm::instructions::m::factory::<u64>(inst, VERSION2) {
16 assert_eq!(inst_tag.as_str(), "?");
17 let tagged_instruction = ckb_vm::instructions::tagged::TaggedInstruction::try_from(i).unwrap();
18 inst_tag = tagged_instruction.to_string();
19 inst_isa = "M".to_string();
20 }
21 if let Some(i) = ckb_vm::instructions::a::factory::<u64>(inst, VERSION2) {
22 assert_eq!(inst_tag.as_str(), "?");
23 let tagged_instruction = ckb_vm::instructions::tagged::TaggedInstruction::try_from(i).unwrap();
24 inst_tag = tagged_instruction.to_string();
25 inst_isa = "A".to_string();
26 }
27 if let Some(i) = ckb_vm::instructions::rvc::factory::<u64>(inst, VERSION2) {
28 assert_eq!(inst_tag.as_str(), "?");
29 let tagged_instruction = ckb_vm::instructions::tagged::TaggedInstruction::try_from(i).unwrap();
30 inst_tag = tagged_instruction.to_string();
31 inst_isa = "C".to_string();
32 }
33 if let Some(i) = ckb_vm::instructions::b::factory::<u64>(inst, VERSION2) {
34 assert_eq!(inst_tag.as_str(), "?");
35 let tagged_instruction = ckb_vm::instructions::tagged::TaggedInstruction::try_from(i).unwrap();
36 inst_tag = tagged_instruction.to_string();
37 inst_isa = "B".to_string();
38 }
39 arch::println(&format!(" Assembly = {}", inst_tag));
40 if inst_isa == "C" {
41 arch::println(&format!(" Binary = {:016b}", inst));
42 arch::println(&format!(" Hexadecimal = {:04x}", inst));
43 } else {
44 arch::println(&format!(" Binary = {:032b}", inst));
45 arch::println(&format!(" Hexadecimal = {:08x}", inst));
46 }
47 arch::println(&format!("Instruction set = {}", inst_isa));
48}