about summary refs log tree commit diff stats
path: root/test/arch/mep/ir/test_multiply.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/arch/mep/ir/test_multiply.py')
-rw-r--r--test/arch/mep/ir/test_multiply.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/test/arch/mep/ir/test_multiply.py b/test/arch/mep/ir/test_multiply.py
new file mode 100644
index 00000000..0618f69f
--- /dev/null
+++ b/test/arch/mep/ir/test_multiply.py
@@ -0,0 +1,138 @@
+# Toshiba MeP-c4 - Multiply instructions unit tests
+# Guillaume Valadon <guillaume@valadon.net>
+
+from ut_helpers_ir import exec_instruction
+
+from miasm2.expression.expression import ExprId, ExprInt, ExprCond, ExprOp
+
+
+class TestMultiply:
+
+    def test_mul(self):
+        """Test MUL execution"""
+
+        # MUL Rn,Rm
+        exec_instruction("MUL R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF80, 32))])
+
+        exec_instruction("MUL R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80000000, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x00000000, 32)),
+                          (ExprId("LO", 32), ExprInt(0x80000000, 32))])
+
+    def test_mulu(self):
+        """Test MULU execution"""
+
+        # MULU Rn,Rm
+        exec_instruction("MULU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x2, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x1, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFFFE, 32))])
+
+        exec_instruction("MULU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80000000, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x7FFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0x80000000, 32))])
+
+    def test_mulr(self):
+        """Test MULR execution"""
+
+        # MULR Rn,Rm
+        exec_instruction("MULR R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF80, 32)),
+                          (ExprId("R0", 32), ExprInt(0xFFFFFF80, 32))])
+
+    def test_mulru(self):
+        """Test MULRU execution"""
+
+        # MULRU Rn,Rm
+        exec_instruction("MULRU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x2, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x1, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFFFE, 32)),
+                          (ExprId("R0", 32), ExprInt(0xFFFFFFFE, 32))])
+
+    def test_madd(self):
+        """Test MADD execution"""
+
+        # MADD Rn,Rm
+        exec_instruction("MADD R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(0, 32)),
+                          (ExprId("LO", 32), ExprInt(0, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF80, 32))])
+
+        exec_instruction("MADD R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(1, 32)),
+                          (ExprId("LO", 32), ExprInt(1, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF81, 32))])
+
+    def test_maddu(self):
+        """Test MADDU execution"""
+
+        # MADDU Rn,Rm
+        exec_instruction("MADDU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x2, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(0, 32)),
+                          (ExprId("LO", 32), ExprInt(0, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x1, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFFFE, 32))])
+
+        exec_instruction("MADDU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x2, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(1, 32)),
+                          (ExprId("LO", 32), ExprInt(1, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x1, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFFFF, 32))])
+
+    def test_maddr(self):
+        """Test MADDR execution"""
+
+        # MADDR Rn,Rm
+        exec_instruction("MADDR R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(0, 32)),
+                          (ExprId("LO", 32), ExprInt(0, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF80, 32)),
+                          (ExprId("R0", 32), ExprInt(0xFFFFFF80, 32))])
+
+        exec_instruction("MADDR R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x80, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(1, 32)),
+                          (ExprId("LO", 32), ExprInt(1, 32))],
+                         [(ExprId("HI", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFF81, 32)),
+                          (ExprId("R0", 32), ExprInt(0xFFFFFF81, 32))])
+
+    def test_maddru(self):
+        """Test MADDRU execution"""
+
+        # MADDRU Rn,Rm
+        exec_instruction("MADDRU R0, R1",
+                         [(ExprId("R0", 32), ExprInt(0x2, 32)),
+                          (ExprId("R1", 32), ExprInt(0xFFFFFFFF, 32)),
+                          (ExprId("HI", 32), ExprInt(0, 32)),
+                          (ExprId("LO", 32), ExprInt(0, 32))],
+                         [(ExprId("HI", 32), ExprInt(0x1, 32)),
+                          (ExprId("LO", 32), ExprInt(0xFFFFFFFE, 32)),
+                          (ExprId("R0", 32), ExprInt(0xFFFFFFFE, 32))])