From: Mike Pall Date: Thu, 2 Jun 2022 11:48:04 +0000 (+0200) Subject: DynASM/ARM64: Fix LSL/BFI* encoding with variable registers. X-Git-Tag: v2.1.ROLLING~69 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68bb11405ce8b6356cb90dac010b5c87b933bbab;p=thirdparty%2FLuaJIT.git DynASM/ARM64: Fix LSL/BFI* encoding with variable registers. Thanks to Dmitry Stogov. --- diff --git a/dynasm/dasm_arm64.lua b/dynasm/dasm_arm64.lua index 69c31db5..1f581ba0 100644 --- a/dynasm/dasm_arm64.lua +++ b/dynasm/dasm_arm64.lua @@ -248,7 +248,7 @@ local map_cond = { local parse_reg_type -local function parse_reg(expr, shift) +local function parse_reg(expr, shift, no_vreg) if not expr then werror("expected register name") end local tname, ovreg = match(expr, "^([%w_]+):(@?%l%d+)$") if not tname then @@ -281,7 +281,7 @@ local function parse_reg(expr, shift) elseif parse_reg_type ~= vrt then werror("register size mismatch") end - if shift then waction("VREG", shift, vreg) end + if not no_vreg then waction("VREG", shift, vreg) end return 0 end werror("bad register name `"..expr.."'") @@ -638,7 +638,7 @@ local function alias_bfx(p) end local function alias_bfiz(p) - parse_reg(p[1], 0) + parse_reg(p[1], 0, true) if parse_reg_type == "w" then p[3] = "#(32-("..p[3]:sub(2).."))%32" p[4] = "#("..p[4]:sub(2)..")-1" @@ -649,7 +649,7 @@ local function alias_bfiz(p) end local alias_lslimm = op_alias("ubfm_4", function(p) - parse_reg(p[1], 0) + parse_reg(p[1], 0, true) local sh = p[3]:sub(2) if parse_reg_type == "w" then p[3] = "#(32-("..sh.."))%32"