]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
DynASM/x64: Add VREG support to mov64.
authorMike Pall <mike>
Thu, 18 Jul 2013 06:51:32 +0000 (08:51 +0200)
committerMike Pall <mike>
Thu, 18 Jul 2013 06:51:32 +0000 (08:51 +0200)
Thanks to Peter Cawley.

dynasm/dasm_x86.lua

index 07ddd98de988a1d749789dcbb13fbb55ddd1c1a6..824c63430563a9d5a78f007ad8f3cc49b91e2c4a 100644 (file)
@@ -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