summaryrefslogtreecommitdiffhomepage
path: root/asm
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2020-11-09 16:41:07 +0100
committerRoland Reichwein <mail@reichwein.it>2020-11-09 16:41:07 +0100
commitfe063834e53e856823b9a42ad3a5e04153446849 (patch)
tree6ea84c1274e52bf5a07d7fcb8dbb64ceb6fc7a47 /asm
parentfc1461874a6bcecc919f650d1bfb6bf37161c413 (diff)
Support multiply (WIP)
Diffstat (limited to 'asm')
-rw-r--r--asm/intel64/encode.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/asm/intel64/encode.cpp b/asm/intel64/encode.cpp
index 8bf33c0..702efaf 100644
--- a/asm/intel64/encode.cpp
+++ b/asm/intel64/encode.cpp
@@ -58,7 +58,13 @@ void Asm::toMachineCode(const FlowGraph::Graph& graph, Segment& segment)
segment.push_back(makeOp("mov", args1));
Asm::Args args2{{Asm::Args::Register32("edi"), Asm::Args::Immediate32(immediate2)}};
- segment.push_back(makeOp("add", args2));
+
+ if (op.type() == FlowGraph::BinaryOperationType::Add)
+ segment.push_back(makeOp("add", args2));
+ else if (op.type() == FlowGraph::BinaryOperationType::Multiply)
+ segment.push_back(makeOp("mul", args2));
+ else
+ throw std::runtime_error("ICE: Asm: Unsupported binary operation type: "s + std::to_string(static_cast<int>(FlowGraph::BinaryOperationType::Multiply)));
} catch (const std::bad_cast& ex) {
std::runtime_error("ICE: Encoding: Unsupported node: "s + ex.what());