diff options
| -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", |
