neo_decompiler/instruction/
opcode.rs1use std::fmt;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum OperandEncoding {
6 None,
8 I8,
10 I16,
12 I32,
14 I64,
16 Bytes(usize),
18 Data1,
20 Data2,
22 Data4,
24 Jump8,
26 Jump32,
28 U8,
30 U16,
32 U32,
34 Syscall,
36}
37
38#[allow(missing_docs)]
39mod opcodes_generated {
40 use super::OperandEncoding;
41
42 include!("../opcodes_generated.rs");
43}
44
45pub use opcodes_generated::OpCode;
46
47impl OpCode {
48 #[must_use]
50 pub fn all_known() -> Vec<OpCode> {
51 let mut entries = Vec::new();
52 for byte in u8::MIN..=u8::MAX {
53 let opcode = OpCode::from_byte(byte);
54 if matches!(opcode, OpCode::Unknown(_)) {
55 continue;
56 }
57 if !entries.contains(&opcode) {
58 entries.push(opcode);
59 }
60 }
61 entries
62 }
63}
64
65impl fmt::Display for OpCode {
66 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
67 match self {
68 OpCode::Unknown(value) => write!(f, "UNKNOWN_0x{value:02X}"),
69 _ => f.write_str(self.mnemonic()),
70 }
71 }
72}