working on code
[bigint-presentation-code.git] / src / bigint_presentation_code / _tests / test_toom_cook.py
index 735d7e0881b8ed981f38bac56a9a5d5b56c945e0..2032cbc8f1e12b68adf2df5954f330dd04398a8f 100644 (file)
@@ -990,8 +990,7 @@ class TestToomCook(unittest.TestCase):
             'sv.std *4, 0(3)'
         ])
 
-    def test_toom_2_mul_256x256_asm(self):
-        self.skipTest("WIP")  # FIXME: finish
+    def toom_2_mul_256x256(self):
         TOOM_2 = ToomCookInstance.make_toom_2()
         instances = TOOM_2, TOOM_2
 
@@ -999,12 +998,686 @@ class TestToomCook(unittest.TestCase):
             # type: (Fn, SSAVal, SSAVal) -> SSAVal
             return toom_cook_mul(fn=fn, lhs=lhs, lhs_signed=False, rhs=rhs,
                                  rhs_signed=False, instances=instances)
-        code = Mul(mul=mul, lhs_size_in_words=3, rhs_size_in_words=3)
+        return Mul(mul=mul, lhs_size_in_words=3, rhs_size_in_words=3)
+
+    def test_toom_2_mul_256x256_pre_ra_sim(self):
+        self.skipTest("WIP")  # FIXME: finish
+        # maybe use something that multiplies to:
+        # int.from_bytes(
+        # b'256x256-bit bigint mul using TOOM-2 -- Karatsuba Multiplication!',
+        # 'little')
+        # as the multiplication test...
+        # known factors (used yafu-1.34):
+        # P1 = 2
+        # P1 = 7
+        # P3 = 197
+        # P7 = 1319057
+        # ***co-factor***
+        # C144 = 4812983706140089583461601472550901888754775658675461119771495\
+        # 11062521614062442465071845504357495554525178667728633744424201288485\
+        # 594266060663587
+
+    def test_toom_2_mul_256x256_asm(self):
+        self.skipTest("WIP")  # FIXME: finish
+        code = self.toom_2_mul_256x256()
         fn = code.fn
         assigned_registers = allocate_registers(fn)
         gen_asm_state = GenAsmState(assigned_registers)
         fn.gen_asm(gen_asm_state)
         self.assertEqual(gen_asm_state.output, [
+            'or 23, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 6, 23, 23',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.ld *3, 48(6)',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 6, 23, 23',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.ld *3, 72(6)',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *16, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *3, *7, *7',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'or 5, 6, 6',
+            'or 4, 7, 7',
+            'or 3, 8, 8',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 5, 5',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 10, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 25, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 10, 10',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 25, 25',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *7, *6, *6',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.adde *3, *7, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *14, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *3, *16, *16',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'or 5, 6, 6',
+            'or 4, 7, 7',
+            'or 3, 8, 8',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 5, 5',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 9, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 24, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 9, 9',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 24, 24',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *7, *6, *6',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.adde *3, *7, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *11, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 9, 9',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 5, 3, 3',
+            'addi 3, 0, 0',
+            'or 4, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'addi 3, 0, 0',
+            'or 6, 10, 10',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'sv.maddedu *3, *6, 5, 4',
+            'or 5, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *21, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *14, *14',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *4, *3, *3',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 10, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 18, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 10, 10',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 18, 18',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *7, *6, *6',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.adde *3, *7, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *16, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *11, *11',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *4, *3, *3',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 9, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 15, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 9, 9',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 15, 15',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 4, 3, 3',
+            'addi 3, 0, 0',
+            'or 5, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or/mrr *7, *6, *6',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.adde *3, *7, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 9, 9',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 5, 3, 3',
+            'addi 3, 0, 0',
+            'or 4, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'addi 3, 0, 0',
+            'or 6, 10, 10',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'sv.maddedu *3, *6, 5, 4',
+            'or 5, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *19, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *7, *7',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 4, 5, 5',
+            'or 11, 6, 6',
+            'addi 3, 0, 0',
+            'or 10, 3, 3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addi 3, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *8, *16, *16',
+            'or 6, 4, 4',
+            'or 5, 10, 10',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.maddedu *3, *8, 6, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 14, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 12, 3, 3',
+            'or 7, 4, 4',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *8, *16, *16',
+            'or 6, 11, 11',
+            'or 5, 10, 10',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.maddedu *3, *8, 6, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 11, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 10, 3, 3',
+            'or 9, 4, 4',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 7, 7',
+            'or 4, 14, 14',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'or 3, 10, 10',
+            'or 4, 9, 9',
+            'or 5, 11, 11',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *6, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.adde *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 9, 3, 3',
+            'or 8, 4, 4',
+            'or 7, 5, 5',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'or 3, 12, 12',
+            'or 4, 9, 9',
+            'or 5, 8, 8',
+            'or 6, 7, 7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 15, 15',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 5, 3, 3',
+            'addi 3, 0, 0',
+            'or 4, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'addi 3, 0, 0',
+            'or 6, 18, 18',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'sv.maddedu *3, *6, 5, 4',
+            'or 5, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *17, *3, *3',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *3, *7, *7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *8, *3, *3',
+            'or 4, 8, 8',
+            'or 7, 9, 9',
+            'or 6, 10, 10',
+            'or 3, 11, 11',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *14, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *19, *19',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 4, 5, 5',
+            'or 7, 6, 6',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'subfc 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *14, *14',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.subfe *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *14, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *17, *17',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 4, 5, 5',
+            'or 7, 6, 6',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'subfc 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *14, *14',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.subfe *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *8, *3, *3',
+            'addi 3, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *19, *19',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 12, 3, 3',
+            'or 7, 4, 4',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *3, *8, *8',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 11, 3, 3',
+            'or 10, 4, 4',
+            'or 9, 5, 5',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 7, 7',
+            'or 4, 6, 6',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'or 3, 11, 11',
+            'or 4, 10, 10',
+            'or 5, 9, 9',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *6, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.adde *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 9, 3, 3',
+            'or 6, 4, 4',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *17, *17',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 8, 3, 3',
+            'or 7, 4, 4',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 3, 6, 6',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 3, 8, 8',
+            'or 4, 7, 7',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *7, *5, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.adde *3, *7, *5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 8, 3, 3',
+            'or 7, 4, 4',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'or 3, 12, 12',
+            'or 4, 9, 9',
+            'or 5, 8, 8',
+            'or 6, 7, 7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 3, 24, 24',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'or 5, 3, 3',
+            'addi 3, 0, 0',
+            'or 4, 3, 3',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'addi 3, 0, 0',
+            'or 6, 25, 25',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'sv.maddedu *3, *6, 5, 4',
+            'or 5, 4, 4',
+            'setvl 0, 0, 1, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 4, 5, 5',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *19, *3, *3',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *3, *7, *7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *8, *3, *3',
+            'or 4, 8, 8',
+            'or 7, 9, 9',
+            'or 6, 10, 10',
+            'or 3, 11, 11',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *14, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *21, *21',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 4, 5, 5',
+            'or 7, 6, 6',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'subfc 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *14, *14',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.subfe *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *14, *3, *3',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *19, *19',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *5, *3, *3',
+            'or 4, 5, 5',
+            'or 7, 6, 6',
+            'addi 3, 0, 0',
+            'or 6, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 4, 4',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'subfc 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *14, *14',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.subfe *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'addi 3, 0, 0',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *21, *21',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 18, 3, 3',
+            'or 6, 4, 4',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *3, *7, *7',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 15, 3, 3',
+            'or 14, 4, 4',
+            'or 12, 5, 5',
+            'addi 3, 0, 0',
+            'or 7, 3, 3',
+            'or 3, 12, 12',
+            'sradi 3, 3, 63',
+            'or 11, 3, 3',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'or 3, 6, 6',
+            'or 4, 7, 7',
+            'or 5, 7, 7',
+            'or 6, 7, 7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'or 3, 15, 15',
+            'or 4, 14, 14',
+            'or 5, 12, 12',
+            'or 6, 11, 11',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *14, *7, *7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *7, *3, *3',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.adde *3, *14, *7',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'setvl 0, 0, 4, 0, 1, 1',
+            'sv.or *8, *3, *3',
+            'or 14, 8, 8',
+            'or 5, 9, 9',
+            'or 7, 10, 10',
+            'or 6, 11, 11',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'sv.or *3, *19, *19',
+            'setvl 0, 0, 2, 0, 1, 1',
+            'or 11, 3, 3',
+            'or 10, 4, 4',
+            'addi 3, 0, 0',
+            'or 9, 3, 3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 3, 5, 5',
+            'or 4, 7, 7',
+            'or 5, 6, 6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'or 3, 11, 11',
+            'or 4, 10, 10',
+            'or 5, 9, 9',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'addic 0, 0, 0',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *9, *6, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.or *6, *3, *3',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'sv.adde *3, *9, *6',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'setvl 0, 0, 3, 0, 1, 1',
+            'or 12, 3, 3',
+            'or 11, 4, 4',
+            'or 10, 5, 5',
+            'addi 3, 0, 0',
+            'or 9, 3, 3',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'or 3, 18, 18',
+            'or 4, 14, 14',
+            'or 5, 12, 12',
+            'or 6, 11, 11',
+            'or 7, 10, 10',
+            'or 8, 9, 9',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'sv.or/mrr *4, *3, *3',
+            'or 3, 23, 23',
+            'setvl 0, 0, 6, 0, 1, 1',
+            'sv.std *4, 0(3)'
         ])