diff options
author | Mike Pall <mike> | 2011-04-28 12:54:46 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-04-28 12:54:46 +0200 |
commit | 7ff84097976f09dfa306e0fb20103292bef9aee3 (patch) | |
tree | 1901453a6d092543b4ca4d368c7a77a9f19e8e96 | |
parent | 0b606061dbe38bec18a4fdf37bfd248398ad015c (diff) | |
download | luajit2-7ff84097976f09dfa306e0fb20103292bef9aee3.tar.gz |
DynASM: x86/x64: Fix vreg in opcode. x64: Fix imm "I" after abs addr.
-rw-r--r-- | dynasm/dasm_x86.lua | 5 |
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 |