diff options
Diffstat (limited to 'src/jit')
| -rw-r--r-- | src/jit/dis_arm64.lua | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/jit/dis_arm64.lua b/src/jit/dis_arm64.lua index 84677666..2741cd2e 100644 --- a/src/jit/dis_arm64.lua +++ b/src/jit/dis_arm64.lua | |||
| @@ -658,6 +658,10 @@ local map_datafp = { -- Data processing, SIMD and FP. | |||
| 658 | } | 658 | } |
| 659 | } | 659 | } |
| 660 | } | 660 | } |
| 661 | }, | ||
| 662 | { -- 010 | ||
| 663 | shift = 0, mask = 0x81f8fc00, | ||
| 664 | [0x100e400] = "moviDdG" | ||
| 661 | } | 665 | } |
| 662 | } | 666 | } |
| 663 | 667 | ||
| @@ -832,6 +836,20 @@ local function parse_fpimm8(op) | |||
| 832 | return sign * frac * 2^exp | 836 | return sign * frac * 2^exp |
| 833 | end | 837 | end |
| 834 | 838 | ||
| 839 | local function decode_fpmovi(op) | ||
| 840 | local lo = rshift(op, 5) | ||
| 841 | local hi = rshift(op, 9) | ||
| 842 | lo = bor(band(lo, 1) * 0xff, band(lo, 2) * 0x7f80, band(lo, 4) * 0x3fc000, | ||
| 843 | band(lo, 8) * 0x1fe00000) | ||
| 844 | hi = bor(band(hi, 1) * 0xff, band(hi, 0x80) * 0x1fe, | ||
| 845 | band(hi, 0x100) * 0xff00, band(hi, 0x200) * 0x7f8000) | ||
| 846 | if hi ~= 0 then | ||
| 847 | return fmt_hex32(hi)..tohex(lo) | ||
| 848 | else | ||
| 849 | return fmt_hex32(lo) | ||
| 850 | end | ||
| 851 | end | ||
| 852 | |||
| 835 | local function prefer_bfx(sf, uns, imms, immr) | 853 | local function prefer_bfx(sf, uns, imms, immr) |
| 836 | if imms < immr or imms == 31 or imms == 63 then | 854 | if imms < immr or imms == 31 or imms == 63 then |
| 837 | return false | 855 | return false |
| @@ -1131,6 +1149,8 @@ local function disass_ins(ctx) | |||
| 1131 | x = 0 | 1149 | x = 0 |
| 1132 | elseif p == "F" then | 1150 | elseif p == "F" then |
| 1133 | x = parse_fpimm8(op) | 1151 | x = parse_fpimm8(op) |
| 1152 | elseif p == "G" then | ||
| 1153 | x = "#0x"..decode_fpmovi(op) | ||
| 1134 | elseif p == "g" or p == "f" or p == "x" or p == "w" or | 1154 | elseif p == "g" or p == "f" or p == "x" or p == "w" or |
| 1135 | p == "d" or p == "s" then | 1155 | p == "d" or p == "s" then |
| 1136 | -- These are handled in D/N/M/A. | 1156 | -- These are handled in D/N/M/A. |
