summaryrefslogtreecommitdiff
path: root/dynasm
diff options
context:
space:
mode:
authorMike Pall <mike>2011-04-28 12:54:46 +0200
committerMike Pall <mike>2011-04-28 12:54:46 +0200
commit7ff84097976f09dfa306e0fb20103292bef9aee3 (patch)
tree1901453a6d092543b4ca4d368c7a77a9f19e8e96 /dynasm
parent0b606061dbe38bec18a4fdf37bfd248398ad015c (diff)
downloadluajit2-7ff84097976f09dfa306e0fb20103292bef9aee3.tar.gz
DynASM: x86/x64: Fix vreg in opcode. x64: Fix imm "I" after abs addr.
Diffstat (limited to 'dynasm')
-rw-r--r--dynasm/dasm_x86.lua5
1 files changed, 3 insertions, 2 deletions
diff --git a/dynasm/dasm_x86.lua b/dynasm/dasm_x86.lua
index 0d4bd4c3..4ade52f0 100644
--- a/dynasm/dasm_x86.lua
+++ b/dynasm/dasm_x86.lua
@@ -525,12 +525,13 @@ local function wputmrmsib(t, imark, s, vsreg)
-- Pure 32 bit displacement.
if x64 and tdisp ~= "table" then
wputmodrm(0, s, 4) -- [disp] -> (0, s, esp) (0, esp, ebp)
+ if imark == "I" then waction("MARK") end
wputmodrm(0, 4, 5)
else
riprel = x64
wputmodrm(0, s, 5) -- [disp|rip-label] -> (0, s, ebp)
+ if imark == "I" then waction("MARK") end
end
- if imark == "I" then waction("MARK") end
if vsreg then waction("VREG", vsreg); wputxb(2) end
end
if riprel then -- Emit rip-relative displacement.
@@ -1521,7 +1522,7 @@ local function dopattern(pat, args, sz, op, needrex)
if szov == "q" and rex == 0 then rex = rex + 8 end
if needrex then rex = rex + 16 end
if addin and addin.reg == -1 then
- wputop(szov, opcode + 1, rex)
+ wputop(szov, opcode - 7, rex)
waction("VREG", addin.vreg); wputxb(0)
else
if addin and addin.reg > 7 then rex = rex + 1 end