diff options
Diffstat (limited to 'src/real_mode')
-rw-r--r-- | src/real_mode/mod.rs | 74 |
1 files changed, 43 insertions, 31 deletions
diff --git a/src/real_mode/mod.rs b/src/real_mode/mod.rs index 4b8ad6d..d7fda17 100644 --- a/src/real_mode/mod.rs +++ b/src/real_mode/mod.rs @@ -833,11 +833,13 @@ const REGISTER_CLASS_NAMES: &[&'static str] = &[ /// } /// /// if let Operand::Register(regspec) = instruction.operand(0) { +/// #[cfg(feature="fmt")] /// println!("first operand is {}", regspec); /// show_register_class_info(regspec.class()); /// } /// /// if let Operand::Register(regspec) = instruction.operand(1) { +/// #[cfg(feature="fmt")] /// println!("first operand is {}", regspec); /// show_register_class_info(regspec.class()); /// } @@ -7388,7 +7390,7 @@ fn read_0f3a_opcode(opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecord { }; } -/// the actual description for a selection of bits involved in decoding an [`long_mode::Instruction`]. +/// the actual description for a selection of bits involved in decoding a [`real_mode::Instruction`]. /// /// some prefixes are only identified as an `InnerDescription::Misc` string, while some are full /// `InnerDescription::SegmentPrefix(Segment)`. generally, strings should be considered unstable @@ -7441,37 +7443,47 @@ impl InnerDescription { } } -impl fmt::Display for InnerDescription { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - InnerDescription::RexPrefix(bits) => { - write!(f, "rex prefix: {}{}{}{}", - if bits & 0x8 != 0 { "w" } else { "-" }, - if bits & 0x4 != 0 { "r" } else { "-" }, - if bits & 0x2 != 0 { "x" } else { "-" }, - if bits & 0x1 != 0 { "b" } else { "-" }, - ) - } - InnerDescription::SegmentPrefix(segment) => { - write!(f, "segment override: {}", segment) - } - InnerDescription::Misc(text) => { - f.write_str(text) - } - InnerDescription::Number(text, num) => { - write!(f, "{}: {:#x}", text, num) - } - InnerDescription::Opcode(opc) => { - write!(f, "opcode `{}`", opc) - } - InnerDescription::OperandCode(OperandCodeWrapper { code }) => { - write!(f, "operand code `{:?}`", code) - } - InnerDescription::RegisterNumber(name, num, reg) => { - write!(f, "`{}` (`{}` selects register number {})", reg, name, num) +cfg_if::cfg_if! { + if #[cfg(feature = "fmt")] { + impl fmt::Display for InnerDescription { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + InnerDescription::RexPrefix(bits) => { + write!(f, "rex prefix: {}{}{}{}", + if bits & 0x8 != 0 { "w" } else { "-" }, + if bits & 0x4 != 0 { "r" } else { "-" }, + if bits & 0x2 != 0 { "x" } else { "-" }, + if bits & 0x1 != 0 { "b" } else { "-" }, + ) + } + InnerDescription::SegmentPrefix(segment) => { + write!(f, "segment override: {}", segment) + } + InnerDescription::Misc(text) => { + f.write_str(text) + } + InnerDescription::Number(text, num) => { + write!(f, "{}: {:#x}", text, num) + } + InnerDescription::Opcode(opc) => { + write!(f, "opcode `{}`", opc) + } + InnerDescription::OperandCode(OperandCodeWrapper { code }) => { + write!(f, "operand code `{:?}`", code) + } + InnerDescription::RegisterNumber(name, num, reg) => { + write!(f, "`{}` (`{}` selects register number {})", reg, name, num) + } + InnerDescription::Boundary(desc) => { + write!(f, "{}", desc) + } + } } - InnerDescription::Boundary(desc) => { - write!(f, "{}", desc) + } + } else { + impl fmt::Display for InnerDescription { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str("non-fmt build") } } } |