summaryrefslogtreecommitdiff
path: root/dynasm
diff options
context:
space:
mode:
authorMike Pall <mike>2013-07-18 08:51:32 +0200
committerMike Pall <mike>2013-07-18 08:51:32 +0200
commitec96d8b494f0fa87cb8a31a38e7c9241f4f414d3 (patch)
treedfaf4547096266a7990ecc3d1467e9cebb38f7cb /dynasm
parent9aa5d04137f9ba2f279eb0aebb0a4ba98e6ea2b3 (diff)
downloadluajit2-ec96d8b494f0fa87cb8a31a38e7c9241f4f414d3.tar.gz
DynASM/x64: Add VREG support to mov64.
Thanks to Peter Cawley.
Diffstat (limited to 'dynasm')
-rw-r--r--dynasm/dasm_x86.lua10
1 files changed, 8 insertions, 2 deletions
diff --git a/dynasm/dasm_x86.lua b/dynasm/dasm_x86.lua
index 07ddd98d..824c6343 100644
--- a/dynasm/dasm_x86.lua
+++ b/dynasm/dasm_x86.lua
@@ -1678,7 +1678,7 @@ if x64 then
function map_op.mov64_2(params)
if not params then return { "reg, imm", "reg, [disp]", "[disp], reg" } end
if secpos+2 > maxsecpos then wflush() end
- local opcode, op64, sz, rex
+ local opcode, op64, sz, rex, vreg
local op64 = match(params[1], "^%[%s*(.-)%s*%]$")
if op64 then
local a = parseoperand(params[2])
@@ -1699,11 +1699,17 @@ if x64 then
werror("bad operand mode")
end
op64 = params[2]
- opcode = 0xb8 + band(a.reg, 7) -- !x64: no VREG support.
+ if a.reg == -1 then
+ vreg = a.vreg
+ opcode = 0xb8
+ else
+ opcode = 0xb8 + band(a.reg, 7)
+ end
rex = a.reg > 7 and 9 or 8
end
end
wputop(sz, opcode, rex)
+ if vreg then waction("VREG", vreg); wputxb(0) end
waction("IMM_D", format("(unsigned int)(%s)", op64))
waction("IMM_D", format("(unsigned int)((%s)>>32)", op64))
end