diff options
-rw-r--r-- | dynasm/dasm_arm64.lua | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/dynasm/dasm_arm64.lua b/dynasm/dasm_arm64.lua index e69f8ef3..05ea3e22 100644 --- a/dynasm/dasm_arm64.lua +++ b/dynasm/dasm_arm64.lua | |||
@@ -549,7 +549,7 @@ end | |||
549 | local function parse_load_pair(params, nparams, n, op) | 549 | local function parse_load_pair(params, nparams, n, op) |
550 | if params[n+2] then werror("too many operands") end | 550 | if params[n+2] then werror("too many operands") end |
551 | local pn, p2 = params[n], params[n+1] | 551 | local pn, p2 = params[n], params[n+1] |
552 | local scale = shr(op, 30) == 0 and 2 or 3 | 552 | local scale = 2 + shr(op, 31 - band(shr(op, 26), 1)) |
553 | local p1, wb = match(pn, "^%[%s*(.-)%s*%](!?)$") | 553 | local p1, wb = match(pn, "^%[%s*(.-)%s*%](!?)$") |
554 | if not p1 then | 554 | if not p1 then |
555 | if not p2 then | 555 | if not p2 then |
@@ -806,8 +806,8 @@ map_op = { | |||
806 | ["ldrsw_*"] = "98000000DxB|b8800000DxL", | 806 | ["ldrsw_*"] = "98000000DxB|b8800000DxL", |
807 | -- NOTE: ldur etc. are handled by ldr et al. | 807 | -- NOTE: ldur etc. are handled by ldr et al. |
808 | 808 | ||
809 | ["stp_*"] = "28000000DAwP|a8000000DAxP|2c000000DAsP|6c000000DAdP", | 809 | ["stp_*"] = "28000000DAwP|a8000000DAxP|2c000000DAsP|6c000000DAdP|ac000000DAqP", |
810 | ["ldp_*"] = "28400000DAwP|a8400000DAxP|2c400000DAsP|6c400000DAdP", | 810 | ["ldp_*"] = "28400000DAwP|a8400000DAxP|2c400000DAsP|6c400000DAdP|ac400000DAqP", |
811 | ["ldpsw_*"] = "68400000DAxP", | 811 | ["ldpsw_*"] = "68400000DAxP", |
812 | 812 | ||
813 | -- Branches. | 813 | -- Branches. |
@@ -942,7 +942,7 @@ local function parse_template(params, template, nparams, pos) | |||
942 | werror("bad register type") | 942 | werror("bad register type") |
943 | end | 943 | end |
944 | parse_reg_type = false | 944 | parse_reg_type = false |
945 | elseif p == "x" or p == "w" or p == "d" or p == "s" then | 945 | elseif p == "x" or p == "w" or p == "d" or p == "s" or p == "q" then |
946 | if parse_reg_type ~= p then | 946 | if parse_reg_type ~= p then |
947 | werror("register size mismatch") | 947 | werror("register size mismatch") |
948 | end | 948 | end |