|
2 | 2 |
|
3 | 3 | import unittest |
4 | 4 |
|
| 5 | +import arch |
5 | 6 | from arch.zx48k.optimizer import memcell |
6 | 7 |
|
7 | 8 |
|
@@ -67,3 +68,57 @@ def test_require_ldir(self): |
67 | 68 | c = memcell.MemCell('ldir', 1) |
68 | 69 | self.assertSetEqual(c.requires, {'h', 'l', 'd', 'e', 'b', 'c'}) |
69 | 70 | self.assertSetEqual(c.destroys, {'h', 'l', 'd', 'e', 'b', 'c', 'f'}) |
| 71 | + |
| 72 | + def test_require_ex_de_hl(self): |
| 73 | + """ Test requires of ex de, hl instruction |
| 74 | + """ |
| 75 | + c = memcell.MemCell('ex de, hl', 1) |
| 76 | + self.assertSetEqual(c.requires, {'h', 'l', 'd', 'e'}) |
| 77 | + self.assertSetEqual(c.destroys, {'h', 'l', 'd', 'e'}) |
| 78 | + |
| 79 | + def test_require_add_hl(self): |
| 80 | + """ Test requires of add hl, NN instruction |
| 81 | + """ |
| 82 | + c = memcell.MemCell('add hl, de', 1) |
| 83 | + self.assertSetEqual(c.requires, {'h', 'l', 'd', 'e'}) |
| 84 | + self.assertSetEqual(c.destroys, {'h', 'l', 'f'}) |
| 85 | + c = memcell.MemCell('add hl, bc', 1) |
| 86 | + self.assertSetEqual(c.requires, {'h', 'l', 'b', 'c'}) |
| 87 | + self.assertSetEqual(c.destroys, {'h', 'l', 'f'}) |
| 88 | + |
| 89 | + def test_require_sbc_hl(self): |
| 90 | + """ Test requires of add hl, NN instruction |
| 91 | + """ |
| 92 | + c = memcell.MemCell('sbc hl, de', 1) |
| 93 | + self.assertSetEqual(c.requires, {'h', 'l', 'd', 'e', 'f'}) |
| 94 | + self.assertSetEqual(c.destroys, {'h', 'l', 'f'}) |
| 95 | + c = memcell.MemCell('sbc hl, bc', 1) |
| 96 | + self.assertSetEqual(c.requires, {'h', 'l', 'b', 'c', 'f'}) |
| 97 | + self.assertSetEqual(c.destroys, {'h', 'l', 'f'}) |
| 98 | + |
| 99 | + def test_require_sbc_a_a(self): |
| 100 | + """ Test requires of sbc a, a instruction |
| 101 | + """ |
| 102 | + c = memcell.MemCell('sbc a, a', 1) |
| 103 | + self.assertSetEqual(c.requires, {'f'}) |
| 104 | + self.assertSetEqual(c.destroys, {'a', 'f'}) |
| 105 | + |
| 106 | + def test_require_sub_1(self): |
| 107 | + """ Test requires of sub 1 instruction |
| 108 | + """ |
| 109 | + c = memcell.MemCell('sub 1', 1) |
| 110 | + self.assertSetEqual(c.requires, {'a'}) |
| 111 | + self.assertSetEqual(c.destroys, {'a', 'f'}) |
| 112 | + |
| 113 | + def test_require_destroys_asm(self): |
| 114 | + """ For a user memory block, returns the list of required (ALL) |
| 115 | + and destroyed (ALL) registers |
| 116 | + """ |
| 117 | + arch.zx48k.backend.ASMS['##ASM0'] = ['nop'] |
| 118 | + c = memcell.MemCell('##ASM0', 1) |
| 119 | + self.assertEqual(c.destroys, {'a', 'b', 'c', 'd', 'e', 'f', 'h', 'l', 'ixh', 'ixl', 'iyh', 'iyl', |
| 120 | + 'r', 'i', 'sp'}) |
| 121 | + self.assertEqual(c.requires, {'a', 'b', 'c', 'd', 'e', 'f', 'h', 'l', 'ixh', 'ixl', 'iyh', 'iyl', |
| 122 | + 'r', 'i', 'sp'}) |
| 123 | + |
| 124 | + del arch.zx48k.backend.ASMS['##ASM0'] |
0 commit comments