Inline-Lua

 view release on metacpan or  search on metacpan

ffi/target/release/build/mlua-sys-6a99a2ae50f12319/out/luajit-build/build/src/jit/dis_ppc.lua  view on Meta::CPAN

----------------------------------------------------------------------------
-- LuaJIT PPC disassembler module.
--
-- Copyright (C) 2005-2025 Mike Pall. All rights reserved.
-- Released under the MIT/X license. See Copyright Notice in luajit.h
----------------------------------------------------------------------------
-- This is a helper module used by the LuaJIT machine code dumper module.
--
-- It disassembles all common, non-privileged 32/64 bit PowerPC instructions
-- plus the e500 SPE instructions and some Cell/Xenon extensions.
--
-- NYI: VMX, VMX128
------------------------------------------------------------------------------

local type = type
local byte, format = string.byte, string.format
local match, gmatch, gsub = string.match, string.gmatch, string.gsub
local concat = table.concat
local bit = require("bit")
local band, bor, tohex = bit.band, bit.bor, bit.tohex
local lshift, rshift, arshift = bit.lshift, bit.rshift, bit.arshift

------------------------------------------------------------------------------
-- Primary and extended opcode maps
------------------------------------------------------------------------------

local map_crops = {
  shift = 1, mask = 1023,
  [0] = "mcrfXX",
  [33] = "crnor|crnotCCC=", [129] = "crandcCCC",
  [193] = "crxor|crclrCCC%", [225] = "crnandCCC",
  [257] = "crandCCC", [289] = "creqv|crsetCCC%",
  [417] = "crorcCCC", [449] = "cror|crmoveCCC=",
  [16] = "b_lrKB", [528] = "b_ctrKB",
  [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.",
  {
    shift = 1, mask = 1,
    [0] = "rldclRR~RM.", "rldcrRR~RM.",
  },
}

local map_ext = setmetatable({
  shift = 1, mask = 1023,

  [0] = "cmp_YLRR", [32] = "cmpl_YLRR",
  [4] = "twARR", [68] = "tdARR",

  [8] = "subfcRRR.", [40] = "subfRRR.",
  [104] = "negRR.", [136] = "subfeRRR.",
  [200] = "subfzeRR.", [232] = "subfmeRR.",
  [520] = "subfcoRRR.", [552] = "subfoRRR.",
  [616] = "negoRR.", [648] = "subfeoRRR.",
  [712] = "subfzeoRR.", [744] = "subfmeoRR.",

  [9] = "mulhduRRR.", [73] = "mulhdRRR.", [233] = "mulldRRR.",
  [457] = "divduRRR.", [489] = "divdRRR.",
  [745] = "mulldoRRR.",



( run in 1.054 second using v1.01-cache-2.11-cpan-39bf76dae61 )