summaryrefslogtreecommitdiff
path: root/dynasm
diff options
context:
space:
mode:
authorMike Pall <mike>2014-12-27 06:08:36 +0100
committerMike Pall <mike>2014-12-27 06:08:36 +0100
commitdb7cb5ab0ebf15f60e7b23e8edce95707fc451b1 (patch)
tree21cf1577fe6850fd1b70dbbd33d65b40c5321265 /dynasm
parentf45d11e2fea7a56dcf699e72dee40b475590128c (diff)
downloadluajit2-db7cb5ab0ebf15f60e7b23e8edce95707fc451b1.tar.gz
DynASM/ARM: Fix rollback for variant templates.
Diffstat (limited to 'dynasm')
-rw-r--r--dynasm/dasm_arm.lua5
1 files changed, 4 insertions, 1 deletions
diff --git a/dynasm/dasm_arm.lua b/dynasm/dasm_arm.lua
index 3aa8dead..d5078f7e 100644
--- a/dynasm/dasm_arm.lua
+++ b/dynasm/dasm_arm.lua
@@ -929,13 +929,16 @@ map_op[".template__"] = function(params, template, nparams)
-- A single opcode needs a maximum of 3 positions.
if secpos+3 > maxsecpos then wflush() end
local pos = wpos()
- local apos, spos = #actargs, secpos
+ local lpos, apos, spos = #actlist, #actargs, secpos
local ok, err
for t in gmatch(template, "[^|]+") do
ok, err = pcall(parse_template, params, t, nparams, pos)
if ok then return end
secpos = spos
+ actlist[lpos+1] = nil
+ actlist[lpos+2] = nil
+ actlist[lpos+3] = nil
actargs[apos+1] = nil
actargs[apos+2] = nil
actargs[apos+3] = nil