diff --git a/dynasm/dasm_arm.lua b/dynasm/dasm_arm.lua index 1876078b..19bc94b8 100644 --- a/dynasm/dasm_arm.lua +++ b/dynasm/dasm_arm.lua @@ -278,10 +278,10 @@ local map_op = { bic_4 = "e1c00000DNMps", mvn_3 = "e1e00000DMps", - lsl_3 = "e1a00000DMvs", - lsr_3 = "e1a00020DMvs", - asr_3 = "e1a00040DMvs", - ror_3 = "e1a00060DMvs", + lsl_3 = "e1a00000DMws", + lsr_3 = "e1a00020DMws", + asr_3 = "e1a00040DMws", + ror_3 = "e1a00060DMws", rrx_2 = "e1a00060DMs", -- Multiply and multiply-accumulate. @@ -747,6 +747,13 @@ map_op[".template__"] = function(params, template, nparams) op = op + parse_imm16(params[n]); n = n + 1 elseif p == "v" then op = op + parse_imm(params[n], 5, 7, 0, false); n = n + 1 + elseif p == "w" then + local imm = match(params[n], "^#(.*)$") + if imm then + op = op + parse_imm(params[n], 5, 7, 0, false); n = n + 1 + else + op = op + parse_gpr(params[n]) * 256 + 16 + end elseif p == "X" then op = op + parse_imm(params[n], 5, 16, 0, false); n = n + 1 elseif p == "K" then