From ec96d8b494f0fa87cb8a31a38e7c9241f4f414d3 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 18 Jul 2013 08:51:32 +0200 Subject: [PATCH] DynASM/x64: Add VREG support to mov64. Thanks to Peter Cawley. --- dynasm/dasm_x86.lua | 10 ++++++++-- 1 file 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