summaryrefslogtreecommitdiff
path: root/disasm.cpp
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-05-20 18:46:37 +0300
committerOxore <oxore@protonmail.com>2023-05-20 18:47:34 +0300
commitc9f5a5810435bfc1ce0d231b34628ba12609115c (patch)
tree2c4fe01d90ffe02a62398bcf074d092f432943f7 /disasm.cpp
parent25bf809a867720399cf12f8c0efec86eaeec26c5 (diff)
Impl marks referencing for CMP, ADD and SUB
Diffstat (limited to 'disasm.cpp')
-rw-r--r--disasm.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/disasm.cpp b/disasm.cpp
index 8be3058..b20fd03 100644
--- a/disasm.cpp
+++ b/disasm.cpp
@@ -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) {