aboutsummaryrefslogtreecommitdiff
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
parent0b606061dbe38bec18a4fdf37bfd248398ad015c (diff)
downloadluajit-7ff84097976f09dfa306e0fb20103292bef9aee3.tar.gz
luajit-7ff84097976f09dfa306e0fb20103292bef9aee3.tar.bz2
luajit-7ff84097976f09dfa306e0fb20103292bef9aee3.zip
DynASM: x86/x64: Fix vreg in opcode. x64: Fix imm "I" after abs addr.
-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)
525 -- Pure 32 bit displacement. 525 -- Pure 32 bit displacement.
526 if x64 and tdisp ~= "table" then 526 if x64 and tdisp ~= "table" then
527 wputmodrm(0, s, 4) -- [disp] -> (0, s, esp) (0, esp, ebp) 527 wputmodrm(0, s, 4) -- [disp] -> (0, s, esp) (0, esp, ebp)
528 if imark == "I" then waction("MARK") end
528 wputmodrm(0, 4, 5) 529 wputmodrm(0, 4, 5)
529 else 530 else
530 riprel = x64 531 riprel = x64
531 wputmodrm(0, s, 5) -- [disp|rip-label] -> (0, s, ebp) 532 wputmodrm(0, s, 5) -- [disp|rip-label] -> (0, s, ebp)
533 if imark == "I" then waction("MARK") end
532 end 534 end
533 if imark == "I" then waction("MARK") end
534 if vsreg then waction("VREG", vsreg); wputxb(2) end 535 if vsreg then waction("VREG", vsreg); wputxb(2) end
535 end 536 end
536 if riprel then -- Emit rip-relative displacement. 537 if riprel then -- Emit rip-relative displacement.
@@ -1521,7 +1522,7 @@ local function dopattern(pat, args, sz, op, needrex)
1521 if szov == "q" and rex == 0 then rex = rex + 8 end 1522 if szov == "q" and rex == 0 then rex = rex + 8 end
1522 if needrex then rex = rex + 16 end 1523 if needrex then rex = rex + 16 end
1523 if addin and addin.reg == -1 then 1524 if addin and addin.reg == -1 then
1524 wputop(szov, opcode + 1, rex) 1525 wputop(szov, opcode - 7, rex)
1525 waction("VREG", addin.vreg); wputxb(0) 1526 waction("VREG", addin.vreg); wputxb(0)
1526 else 1527 else
1527 if addin and addin.reg > 7 then rex = rex + 1 end 1528 if addin and addin.reg > 7 then rex = rex + 1 end