summaryrefslogtreecommitdiff
path: root/disasm.h
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-05-09 18:21:30 +0300
committerOxore <oxore@protonmail.com>2023-05-09 18:25:55 +0300
commitfb9c81fd1f726244be8a43b2f775306bfc7f7954 (patch)
tree2900e0ec92744f7f7ef7e54c6ff1a8ba98002d69 /disasm.h
parentfdc5756981286ac904a7b0d623ff823044207b48 (diff)
Migrate Bcc to new Arg data structure
Diffstat (limited to 'disasm.h')
-rw-r--r--disasm.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/disasm.h b/disasm.h
index 2dcff2f..24495e6 100644
--- a/disasm.h
+++ b/disasm.h
@@ -249,6 +249,7 @@ enum class Condition: uint8_t {
enum class SizeSpec: uint8_t {
kNone,
kByte,
+ kShort,
kWord,
kLong,
};
@@ -325,6 +326,11 @@ struct Arg {
a.uword = regmask;
return a;
}
+ static constexpr Self Displacement(const int16_t displacement) {
+ Arg a{ArgType::kDisplacement, 0};
+ a.lword = displacement;
+ return a;
+ }
private:
static constexpr Self addrModeXn(const ArgType type, const uint8_t xn) {
Arg a{type, 0};
@@ -366,7 +372,7 @@ private:
a.lword = value;
return a;
}
- static constexpr RegKind RegKindFromRegCharSizeChar(char r, OpSize s)
+ static constexpr RegKind regKindFromRegCharSizeChar(char r, OpSize s)
{
if (r == 'd' && s == OpSize::kWord) {
return RegKind::kDnWord;
@@ -398,7 +404,7 @@ public:
return addrModeD16AnAddr(D16AnPCAddr{arg.xn, static_cast<int16_t>(arg.value)});
case AddrMode::kD8AnXiAddr:
return addrModeD8AnAddr(D8AnPCXiAddr{
- RegKindFromRegCharSizeChar(arg.r, arg.s),
+ regKindFromRegCharSizeChar(arg.r, arg.s),
arg.xn,
arg.xi,
static_cast<int8_t>(arg.value),
@@ -411,7 +417,7 @@ public:
return addrModeD16PCAddr(D16AnPCAddr{0, static_cast<int16_t>(arg.value)});
case AddrMode::kD8PCXiAddr:
return addrModeD8PCAddr(D8AnPCXiAddr{
- RegKindFromRegCharSizeChar(arg.r, arg.s),
+ regKindFromRegCharSizeChar(arg.r, arg.s),
0,
arg.xi,
static_cast<int8_t>(arg.value),