]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
PPC: Distinguish slwi, srwi and rlwinm in disassembly.
authorMike Pall <mike>
Mon, 17 Oct 2011 15:22:21 +0000 (17:22 +0200)
committerMike Pall <mike>
Mon, 17 Oct 2011 15:22:21 +0000 (17:22 +0200)
lib/dis_ppc.lua

index 57cd330d5e93e10d43338c11afccad0b1c2533cb..79b306d5cccc1156e1c980ef40e954ac162a0c4a 100644 (file)
@@ -35,6 +35,23 @@ local map_crops = {
   [150] = "isync",
 }
 
+local map_rlwinm = setmetatable({
+  shift = 0, mask = -1,
+},
+{ __index = function(t, x)
+    local rot = band(rshift(x, 11), 31)
+    local mb = band(rshift(x, 6), 31)
+    local me = band(rshift(x, 1), 31)
+    if mb == 0 and me == 31-rot then
+      return "slwiRR~A."
+    elseif me == 31 and mb == 32-rot then
+      return "srwiRR~-A."
+    else
+      return "rlwinmRR~AAA."
+    end
+  end
+})
+
 local map_rld = {
   shift = 2, mask = 7,
   [0] = "rldiclRR~HM.", "rldicrRR~HM.", "rldicRR~HM.", "rldimiRR~HM.",
@@ -342,7 +359,7 @@ local map_pri = {
   "subficRRI", false,          "cmpl_iYLRU",   "cmp_iYLRI",
   "addicRRI",  "addic.RRI",    "addi|liRR0I",  "addis|lisRR0I",
   "b_KBJ",     "sc",            "bKJ",         map_crops,
-  "rlwimiRR~AAA.", "rlwinmRR~AAA.", false,     "rlwnmRR~RAA.",
+  "rlwimiRR~AAA.", map_rlwinm, false,          "rlwnmRR~RAA.",
   "oriNRR~U",  "orisRR~U",     "xoriRR~U",     "xorisRR~U",
   "andi.RR~U", "andis.RR~U",   map_rld,        map_ext,
   "lwzRRD",    "lwzuRRD",      "lbzRRD",       "lbzuRRD",