diff options
Diffstat (limited to 'disasm.cpp')
-rw-r--r-- | disasm.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -1290,8 +1290,16 @@ static size_t disasm_add_sub_cmp( case AddrMode::kAnAddrDecr: case AddrMode::kD16AnAddr: case AddrMode::kD8AnXiAddr: + break; case AddrMode::kWord: case AddrMode::kLong: + if (dir_to_addr) { + node.ref2_addr = static_cast<uint32_t>(addr.lword); + node.ref_kinds = kRef2AbsMask | kRef2ReadMask; + } else { + node.ref1_addr = static_cast<uint32_t>(addr.lword); + node.ref_kinds = kRef1AbsMask | kRef1ReadMask; + } break; case AddrMode::kD16PCAddr: case AddrMode::kD8PCXiAddr: @@ -1299,6 +1307,11 @@ static size_t disasm_add_sub_cmp( // PC relative cannot be destination return disasm_verbatim(node, instr); } + if (addr.mode == AddrMode::kD16PCAddr) { + node.ref1_addr = node.offset + kInstructionSizeStepBytes + + static_cast<uint32_t>(addr.d16_pc.d16); + node.ref_kinds = kRef1RelMask | kRef1ReadMask; + } break; case AddrMode::kImmediate: if (dir_to_addr) { |