|
34 | 34 | regs_expr = [ExprId(x, 32) for x in regs_str] |
35 | 35 |
|
36 | 36 | # Single-Precision |
37 | | -spregs_str = ['S%d' % r for r in range(0x10)] |
| 37 | +spregs_str = ['S%d' % r for r in range(0x20)] |
38 | 38 | spregs_expr = [ExprId(x, 32) for x in spregs_str] |
39 | 39 | spregs = reg_info(spregs_str, spregs_expr) |
40 | 40 |
|
@@ -1830,24 +1830,34 @@ class arm_dpregs(reg_noarg): |
1830 | 1830 |
|
1831 | 1831 |
|
1832 | 1832 | def decode(self, v): |
1833 | | - ret = super(arm_dpregs, self).decode(v) |
1834 | | - if ret is False: |
1835 | | - return False |
1836 | | - if self.expr == reg_dum: |
| 1833 | + v = v & self.lmask |
| 1834 | + v = self.parent.vm1.value << 4 | v |
| 1835 | + self.expr = self.reg_info.expr[v] |
| 1836 | + return True |
| 1837 | + |
| 1838 | + def encode(self): |
| 1839 | + if not self.expr in self.reg_info.expr: |
| 1840 | + log.debug("cannot encode reg %r", self.expr) |
1837 | 1841 | return False |
| 1842 | + self.value = self.reg_info.expr.index(self.expr) |
| 1843 | + self.parent.vm1.value = self.value >> 4 & self.parent.vm1.lmask |
1838 | 1844 | return True |
1839 | 1845 |
|
| 1846 | + |
1840 | 1847 | class arm_spregs(reg_noarg): |
1841 | 1848 | reg_info = spregs |
1842 | 1849 | parser = reg_info.parser |
1843 | 1850 |
|
1844 | 1851 |
|
1845 | 1852 | def decode(self, v): |
1846 | | - ret = super(arm_spregs, self).decode(v) |
1847 | | - if ret is False: |
1848 | | - return False |
1849 | | - if self.expr == reg_dum: |
1850 | | - return False |
| 1853 | + v = v & self.lmask |
| 1854 | + v = self.parent.vn1.value | (v << 1) |
| 1855 | + self.expr = self.reg_info.expr[v] |
| 1856 | + return True |
| 1857 | + |
| 1858 | + def encode(self): |
| 1859 | + self.value = self.reg_info.expr.index(self.expr) |
| 1860 | + self.parent.vn1.value = self.value & self.parent.vn1.lmask |
1851 | 1861 | return True |
1852 | 1862 |
|
1853 | 1863 |
|
@@ -3393,20 +3403,20 @@ def check_fbits(self, v): |
3393 | 3403 |
|
3394 | 3404 | toarm = bs(l=1, fname="toarm") |
3395 | 3405 | vn = bs(l=4, cls=(arm_spregs, arm_arg)) |
3396 | | -vmov_n = bs(l=1) |
3397 | | -vmov_op = bs(l=1) |
| 3406 | +vn1 = bs(l=1, fname="vn1", order=-1) |
| 3407 | +vmov_op = bs(l=1, fname="vmovop") |
3398 | 3408 | vd = bs(l=4, cls=(arm_dpregs, arm_arg)) |
3399 | 3409 | vcvt_d = bs(l=1) |
3400 | | -vcvt_m = bs(l=1) |
| 3410 | +vm1 = bs(l=1, fname="vm1", order=-1) |
3401 | 3411 | vcvt_op = bs(l=1) |
3402 | 3412 | vcvt_sz = bs(l=1) |
3403 | 3413 | vcvt_opc2 = bs(l=3) |
3404 | | -armtop("vmov", [bs('11101110000'), bs('1'), vn, rt_nopc, bs('1010'), vmov_n, bs('0010000')], [rt_nopc, vn]) |
3405 | | -armtop("vmov", [bs('11101110000'), bs('0'), vn, rt_nopc, bs('1010'), vmov_n, bs('0010000')], [vn, rt_nopc]) |
3406 | | -armtop("vmov", [bs('11101100010'), bs('1'), rt2_nopc, rt_nopc, bs('101100'), vcvt_m, bs('1'), vd], [rt_nopc, rt2_nopc, vd]) |
3407 | | -armtop("vmov", [bs('11101100010'), bs('0'), rt2_nopc, rt_nopc, bs('101100'), vcvt_m, bs('1'), vd], [vd, rt_nopc, rt2_nopc]) |
| 3414 | +armtop("vmov", [bs('11101110000'), bs('1'), vn, rt_nopc, bs('1010'), vn1, bs('0010000')], [rt_nopc, vn]) |
| 3415 | +armtop("vmov", [bs('11101110000'), bs('0'), vn, rt_nopc, bs('1010'), vn1, bs('0010000')], [vn, rt_nopc]) |
| 3416 | +armtop("vmov", [bs('11101100010'), bs('1'), rt2_nopc, rt_nopc, bs('101100'), vm1, bs('1'), vd], [rt_nopc, rt2_nopc, vd]) |
| 3417 | +armtop("vmov", [bs('11101100010'), bs('0'), rt2_nopc, rt_nopc, bs('101100'), vm1, bs('1'), vd], [vd, rt_nopc, rt2_nopc]) |
3408 | 3418 |
|
3409 | | -armtop("vcvt", [bs('111011101'), vcvt_d, bs('111'), vcvt_opc2, vd, bs('101'), vcvt_sz, vcvt_op, bs('1'), vcvt_m, bs('0'), vn], [vd, vn]) |
| 3419 | +# armtop("vcvt", [bs('111011101'), vcvt_d, bs('111'), vcvt_opc2, vd, bs('101'), vcvt_sz, vcvt_op, bs('1'), vcvt_m, bs('0'), vn], [vd, vn]) |
3410 | 3420 | # armtop("vcvt", [bs('111011101'), vcvt_d, bs('111'), vcvt_opc2, vd, bs('101'), vcvt_sz, vcvt_op, bs('1'), vcvt_m, bs('0'), vn], [vd, vn]) |
3411 | 3421 |
|
3412 | 3422 | armtop("ldr", [bs('111110001101'), rn_deref, rt, off12], [rt, rn_deref]) |
|
0 commit comments