mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 15:34:09 +00:00
Minor cleanup of dasm_s390x.lua.
This commit is contained in:
parent
be3efbc65a
commit
410bdb8182
@ -239,8 +239,6 @@ local map_cond = {
|
|||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
local parse_reg_type
|
|
||||||
|
|
||||||
local function parse_gpr(expr)
|
local function parse_gpr(expr)
|
||||||
local r = match(expr, "^r(1?[0-9])$")
|
local r = match(expr, "^r(1?[0-9])$")
|
||||||
if r then
|
if r then
|
||||||
@ -1016,30 +1014,14 @@ local function parse_template(params, template, nparams, pos)
|
|||||||
local op1 = tonumber(sub(template, 5, 8), 16)
|
local op1 = tonumber(sub(template, 5, 8), 16)
|
||||||
local op2 = tonumber(sub(template, 9, 12), 16)
|
local op2 = tonumber(sub(template, 9, 12), 16)
|
||||||
|
|
||||||
local n,rs = 1,26
|
|
||||||
|
|
||||||
parse_reg_type = false
|
|
||||||
-- Process each character.
|
-- Process each character.
|
||||||
-- TODO
|
|
||||||
-- 12-bit displacements (DISP12) and 16-bit immediates (IMM16) can be put at
|
|
||||||
-- one of two locations relative to the end of the instruction.
|
|
||||||
-- To make decoding easier we should insert the actions for these immediately
|
|
||||||
-- after the halfword they modify.
|
|
||||||
-- For example, take the instruction ahik, which is laid out as follows (each
|
|
||||||
-- char is 4 bits):
|
|
||||||
-- o = op code, r = register, i = immediate
|
|
||||||
-- oorr iiii 00oo
|
|
||||||
-- This should be emitted as oorr, followed by the immediate action, followed by
|
|
||||||
-- 00oo.
|
|
||||||
for p in gmatch(sub(template, 13), ".") do
|
for p in gmatch(sub(template, 13), ".") do
|
||||||
local pr1,pr2,pr3
|
local pr1,pr2,pr3
|
||||||
if p == "g" then
|
if p == "g" then
|
||||||
pr1,pr2=params[n],params[n+1]
|
op2 = op2 + shl(parse_gpr(params[1]),4) + parse_gpr(params[2])
|
||||||
op2 = op2 + shl(parse_gpr(pr1),4) + parse_gpr(pr2)
|
|
||||||
wputhw(op2)
|
wputhw(op2)
|
||||||
elseif p == "h" then
|
elseif p == "h" then
|
||||||
pr1,pr2=params[n],params[n+1]
|
op2 = op2 + shl(parse_gpr(params[1]),4) + parse_gpr(params[2])
|
||||||
op2 = op2 + shl(parse_gpr(pr1),4) + parse_gpr(pr2)
|
|
||||||
wputhw(op1); wputhw(op2)
|
wputhw(op1); wputhw(op2)
|
||||||
elseif p == "j" then
|
elseif p == "j" then
|
||||||
local d, x, b, a = parse_mem_bx(params[2])
|
local d, x, b, a = parse_mem_bx(params[2])
|
||||||
@ -1067,20 +1049,20 @@ local function parse_template(params, template, nparams, pos)
|
|||||||
op1 = op1 + shl(parse_gpr(params[1]), 4) + parse_gpr(params[2])
|
op1 = op1 + shl(parse_gpr(params[1]), 4) + parse_gpr(params[2])
|
||||||
op2 = op2 + shl(b, 12) + d
|
op2 = op2 + shl(b, 12) + d
|
||||||
wputhw(op1); wputhw(op2)
|
wputhw(op1); wputhw(op2)
|
||||||
if a then a() end
|
if a then a() end -- a() emits action.
|
||||||
elseif p == "s" then
|
elseif p == "s" then
|
||||||
local d, b, a = parse_mem_by(params[3])
|
local d, b, a = parse_mem_by(params[3])
|
||||||
op0 = op0 + shl(parse_gpr(params[1]), 4) + parse_gpr(params[2])
|
op0 = op0 + shl(parse_gpr(params[1]), 4) + parse_gpr(params[2])
|
||||||
op1 = op1 + shl(b, 12) + band(d, 0xfff)
|
op1 = op1 + shl(b, 12) + band(d, 0xfff)
|
||||||
op2 = op2 + band(shr(d, 4), 0xff00)
|
op2 = op2 + band(shr(d, 4), 0xff00)
|
||||||
wputhw(op0); wputhw(op1); wputhw(op2)
|
wputhw(op0); wputhw(op1); wputhw(op2)
|
||||||
if a then a() end
|
if a then a() end -- a() emits action.
|
||||||
elseif p == "y" then
|
elseif p == "y" then
|
||||||
local d, x, b, a = parse_mem_bx(params[1])
|
local d, x, b, a = parse_mem_bx(params[1])
|
||||||
op1 = op1 + x
|
op1 = op1 + x
|
||||||
op2 = op2 + shl(b, 12) + d
|
op2 = op2 + shl(b, 12) + d
|
||||||
wputhw(op1); wputhw(op2);
|
wputhw(op1); wputhw(op2);
|
||||||
if a then a() end
|
if a then a() end -- a() emits action.
|
||||||
elseif p == "z" then
|
elseif p == "z" then
|
||||||
op2 = op2 + parse_gpr(params[1])
|
op2 = op2 + parse_gpr(params[1])
|
||||||
wputhw(op2)
|
wputhw(op2)
|
||||||
@ -1166,7 +1148,7 @@ map_op[".align_1"] = function(params)
|
|||||||
for i=1,8 do
|
for i=1,8 do
|
||||||
x = x / 2
|
x = x / 2
|
||||||
if x == 1 then
|
if x == 1 then
|
||||||
waction("ALIGN", align-1, nil, 1) -- Action byte is 2**n-1.
|
waction("ALIGN", align-1, nil, 1) -- Action halfword is 2**n-1.
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user