diff options
-rw-r--r-- | dynasm/dasm_arm.lua | 15 |
1 files changed, 11 insertions, 4 deletions
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 = { | |||
278 | bic_4 = "e1c00000DNMps", | 278 | bic_4 = "e1c00000DNMps", |
279 | mvn_3 = "e1e00000DMps", | 279 | mvn_3 = "e1e00000DMps", |
280 | 280 | ||
281 | lsl_3 = "e1a00000DMvs", | 281 | lsl_3 = "e1a00000DMws", |
282 | lsr_3 = "e1a00020DMvs", | 282 | lsr_3 = "e1a00020DMws", |
283 | asr_3 = "e1a00040DMvs", | 283 | asr_3 = "e1a00040DMws", |
284 | ror_3 = "e1a00060DMvs", | 284 | ror_3 = "e1a00060DMws", |
285 | rrx_2 = "e1a00060DMs", | 285 | rrx_2 = "e1a00060DMs", |
286 | 286 | ||
287 | -- Multiply and multiply-accumulate. | 287 | -- Multiply and multiply-accumulate. |
@@ -747,6 +747,13 @@ map_op[".template__"] = function(params, template, nparams) | |||
747 | op = op + parse_imm16(params[n]); n = n + 1 | 747 | op = op + parse_imm16(params[n]); n = n + 1 |
748 | elseif p == "v" then | 748 | elseif p == "v" then |
749 | op = op + parse_imm(params[n], 5, 7, 0, false); n = n + 1 | 749 | op = op + parse_imm(params[n], 5, 7, 0, false); n = n + 1 |
750 | elseif p == "w" then | ||
751 | local imm = match(params[n], "^#(.*)$") | ||
752 | if imm then | ||
753 | op = op + parse_imm(params[n], 5, 7, 0, false); n = n + 1 | ||
754 | else | ||
755 | op = op + parse_gpr(params[n]) * 256 + 16 | ||
756 | end | ||
750 | elseif p == "X" then | 757 | elseif p == "X" then |
751 | op = op + parse_imm(params[n], 5, 16, 0, false); n = n + 1 | 758 | op = op + parse_imm(params[n], 5, 16, 0, false); n = n + 1 |
752 | elseif p == "K" then | 759 | elseif p == "K" then |