From dff9a7e4a14984705db8fb18550af5a4fa9ce3d5 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sat, 21 Aug 2021 14:33:13 -0700 Subject: fix negative relative branches (again!!! +- is bad!!!) --- src/long_mode/display.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/long_mode') diff --git a/src/long_mode/display.rs b/src/long_mode/display.rs index 59efe38..7bbd83f 100644 --- a/src/long_mode/display.rs +++ b/src/long_mode/display.rs @@ -3331,7 +3331,11 @@ fn contextualize_intel(instr: &Instruction, colors: out.write_str(instr.opcode.name())?; if instr.opcode == Opcode::XBEGIN { - return write!(out, " $+{}", colors.number(signed_i32_hex(instr.imm as i32))); + if (instr.imm as i32) >= 0 { + return write!(out, " $+{}", colors.number(signed_i32_hex(instr.imm as i32))); + } else { + return write!(out, " ${}", colors.number(signed_i32_hex(instr.imm as i32))); + } } if instr.operand_count > 0 { @@ -3356,10 +3360,18 @@ fn contextualize_intel(instr: &Instruction, colors: if RELATIVE_BRANCHES.contains(&instr.opcode) { return match x { Operand::ImmediateI8(rel) => { - write!(out, "$+{}", colors.number(signed_i32_hex(rel as i32))) + if rel >= 0 { + write!(out, "$+{}", colors.number(signed_i32_hex(rel as i32))) + } else { + write!(out, "${}", colors.number(signed_i32_hex(rel as i32))) + } } Operand::ImmediateI32(rel) => { - write!(out, "$+{}", colors.number(signed_i32_hex(rel))) + if rel >= 0 { + write!(out, "$+{}", colors.number(signed_i32_hex(rel))) + } else { + write!(out, "${}", colors.number(signed_i32_hex(rel))) + } } _ => { unreachable!() } }; -- cgit v1.1