+ def test_fp_adds(self):
+ """>>> lst = ["fadds 3, 1, 2",
+ ]
+ """
+ lst = ["fadds 3, 1, 2", # -32.3 + 32.3 = 0
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0xC040266660000000
+ fprs[2] = 0x4040266660000000
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0xC040266660000000, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(0x4040266660000000, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0, 64))
+
+ def test_fp_subs(self):
+ """>>> lst = ["fsubs 3, 1, 2",
+ ]
+ """
+ lst = ["fsubs 3, 1, 2", # 0 - -32.3 = 32.3
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x0
+ fprs[2] = 0xC040266660000000
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0x0, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(0xC040266660000000, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0x4040266660000000, 64))
+
+ def test_fp_add(self):
+ """>>> lst = ["fadd 3, 1, 2",
+ ]
+ """
+ lst = ["fadd 3, 1, 2", # 7.0 + -9.8 = -2.8
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x401C000000000000 # 7.0
+ fprs[2] = 0xC02399999999999A # -9.8
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0x401C000000000000, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(0xC02399999999999A, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0xC006666666666668, 64))
+
+ def test_fp_muls(self):
+ """>>> lst = ["fmuls 3, 1, 2",
+ ]
+ """
+ lst = ["fmuls 3, 1, 2", # 7.0 * -9.8 = -68.6
+ "fmuls 29,12,8", # test
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x401C000000000000 # 7.0
+ fprs[2] = 0xC02399999999999A # -9.8
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0x401C000000000000, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(0xC02399999999999A, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0xc051266640000000, 64))
+
+ def test_fp_muls3(self):
+ """>>> lst = ["fmuls 3, 1, 2",
+ ]
+ """
+ lst = ["fmuls 3, 1, 2", #
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0xbfb0ab5100000000
+ fprs[2] = 0xbdca000000000000
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(3), SelectableInt(0x3d8b1663a0000000, 64))
+
+ def test_fp_muls4(self):
+ """>>> lst = ["fmuls 3, 1, 2",
+ ]
+ """
+ lst = ["fmuls 3, 1, 2", #
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0xbe724e2000000000 # negative number
+ fprs[2] = 0x0 # times zero
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ # result should be -ve zero not +ve zero
+ self.assertEqual(sim.fpr(3), SelectableInt(0x8000000000000000, 64))
+
+ def test_fp_muls5(self):
+ """>>> lst = ["fmuls 3, 1, 2",
+ ]
+ """
+ lst = ["fmuls 3, 1, 2", #
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0xbfb0ab5100000000
+ fprs[2] = 0xbdca000000000000
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(3), SelectableInt(0x3d8b1663a0000000, 64))
+
+ def test_fp_mul(self):
+ """>>> lst = ["fmul 3, 1, 2",
+ ]
+ """
+ lst = ["fmul 3, 1, 2", # 7.0 * -9.8 = -68.6
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x401C000000000000 # 7.0
+ fprs[2] = 0xC02399999999999A # -9.8
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0x401C000000000000, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(0xC02399999999999A, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0xC051266666666667, 64))
+
+ def test_fp_madd1(self):
+ """>>> lst = ["fmadds 3, 1, 2, 4",
+ ]
+ """
+ lst = ["fmadds 3, 1, 2, 4", # 7.0 * -9.8 + 2 = -66.6
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x401C000000000000 # 7.0
+ fprs[2] = 0xC02399999999999A # -9.8
+ fprs[4] = 0x4000000000000000 # 2.0
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(3), SelectableInt(0xC050A66660000000, 64))
+
+ def test_fp_msub1(self):
+ """>>> lst = ["fmsubs 3, 1, 2, 4",
+ ]
+ """
+ lst = ["fmsubs 3, 1, 2, 4", # 7.0 * -9.8 + 2 = -70.6
+ ]
+
+ fprs = [0] * 32
+ fprs[1] = 0x401C000000000000 # 7.0
+ fprs[2] = 0xC02399999999999A # -9.8
+ fprs[4] = 0x4000000000000000 # 2.0
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(3), SelectableInt(0xc051a66660000000, 64))
+
+ def test_fp_fcfids(self):
+ """>>> lst = ["fcfids 1, 2",
+ lst = ["fcfids 3, 4",
+ ]
+ """
+ lst = ["fcfids 1, 2",
+ "fcfids 3, 4",
+ ]
+
+ fprs = [0] * 32
+ fprs[2] = 7
+ fprs[4] = -32
+
+ with Program(lst, bigendian=False) as program:
+ sim = self.run_tst_program(program, initial_fprs=fprs)
+ self.assertEqual(sim.fpr(1), SelectableInt(0x401C000000000000, 64))
+ self.assertEqual(sim.fpr(2), SelectableInt(7, 64))
+ self.assertEqual(sim.fpr(3), SelectableInt(0xC040000000000000, 64))
+ self.assertEqual(sim.fpr(4), SelectableInt(-32, 64))
+