diff options
author | Mike Pall <mike> | 2011-10-17 17:22:21 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-10-17 17:22:21 +0200 |
commit | e5f310eefac2e2b885082256fa39688efabba0c2 (patch) | |
tree | c77020b8a3ff6208968090138c9a339d8b7df4d6 | |
parent | 270de2d6cc72470818a75be698fc2755fcdd79f8 (diff) | |
download | luajit-e5f310eefac2e2b885082256fa39688efabba0c2.tar.gz luajit-e5f310eefac2e2b885082256fa39688efabba0c2.tar.bz2 luajit-e5f310eefac2e2b885082256fa39688efabba0c2.zip |
PPC: Distinguish slwi, srwi and rlwinm in disassembly.
-rw-r--r-- | lib/dis_ppc.lua | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/dis_ppc.lua b/lib/dis_ppc.lua index 57cd330d..79b306d5 100644 --- a/lib/dis_ppc.lua +++ b/lib/dis_ppc.lua | |||
@@ -35,6 +35,23 @@ local map_crops = { | |||
35 | [150] = "isync", | 35 | [150] = "isync", |
36 | } | 36 | } |
37 | 37 | ||
38 | local map_rlwinm = setmetatable({ | ||
39 | shift = 0, mask = -1, | ||
40 | }, | ||
41 | { __index = function(t, x) | ||
42 | local rot = band(rshift(x, 11), 31) | ||
43 | local mb = band(rshift(x, 6), 31) | ||
44 | local me = band(rshift(x, 1), 31) | ||
45 | if mb == 0 and me == 31-rot then | ||
46 | return "slwiRR~A." | ||
47 | elseif me == 31 and mb == 32-rot then | ||
48 | return "srwiRR~-A." | ||
49 | else | ||
50 | return "rlwinmRR~AAA." | ||
51 | end | ||
52 | end | ||
53 | }) | ||
54 | |||
38 | local map_rld = { | 55 | local map_rld = { |
39 | shift = 2, mask = 7, | 56 | shift = 2, mask = 7, |
40 | [0] = "rldiclRR~HM.", "rldicrRR~HM.", "rldicRR~HM.", "rldimiRR~HM.", | 57 | [0] = "rldiclRR~HM.", "rldicrRR~HM.", "rldicRR~HM.", "rldimiRR~HM.", |
@@ -342,7 +359,7 @@ local map_pri = { | |||
342 | "subficRRI", false, "cmpl_iYLRU", "cmp_iYLRI", | 359 | "subficRRI", false, "cmpl_iYLRU", "cmp_iYLRI", |
343 | "addicRRI", "addic.RRI", "addi|liRR0I", "addis|lisRR0I", | 360 | "addicRRI", "addic.RRI", "addi|liRR0I", "addis|lisRR0I", |
344 | "b_KBJ", "sc", "bKJ", map_crops, | 361 | "b_KBJ", "sc", "bKJ", map_crops, |
345 | "rlwimiRR~AAA.", "rlwinmRR~AAA.", false, "rlwnmRR~RAA.", | 362 | "rlwimiRR~AAA.", map_rlwinm, false, "rlwnmRR~RAA.", |
346 | "oriNRR~U", "orisRR~U", "xoriRR~U", "xorisRR~U", | 363 | "oriNRR~U", "orisRR~U", "xoriRR~U", "xorisRR~U", |
347 | "andi.RR~U", "andis.RR~U", map_rld, map_ext, | 364 | "andi.RR~U", "andis.RR~U", map_rld, map_ext, |
348 | "lwzRRD", "lwzuRRD", "lbzRRD", "lbzuRRD", | 365 | "lwzRRD", "lwzuRRD", "lbzRRD", "lbzuRRD", |