Index: src/x64/disasm-x64.cc |
diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc |
index eef1b8b226500d8ef3811afdcbb104fd283d1869..4a787c7a87a27faf797a1750f7490d08a308cdb1 100644 |
--- a/src/x64/disasm-x64.cc |
+++ b/src/x64/disasm-x64.cc |
@@ -958,11 +958,17 @@ int DisassemblerX64::AVXInstruction(byte* data) { |
switch (opcode) { |
case 0x10: |
AppendToBuffer("vmovss %s,", NameOfXMMRegister(regop)); |
+ if (mod == 3) { |
+ AppendToBuffer("%s,", NameOfXMMRegister(vvvv)); |
+ } |
current += PrintRightXMMOperand(current); |
break; |
case 0x11: |
AppendToBuffer("vmovss "); |
current += PrintRightXMMOperand(current); |
+ if (mod == 3) { |
+ AppendToBuffer(",%s", NameOfXMMRegister(vvvv)); |
+ } |
AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
break; |
case 0x58: |
@@ -1009,11 +1015,17 @@ int DisassemblerX64::AVXInstruction(byte* data) { |
switch (opcode) { |
case 0x10: |
AppendToBuffer("vmovsd %s,", NameOfXMMRegister(regop)); |
+ if (mod == 3) { |
+ AppendToBuffer("%s,", NameOfXMMRegister(vvvv)); |
+ } |
current += PrintRightXMMOperand(current); |
break; |
case 0x11: |
AppendToBuffer("vmovsd "); |
current += PrintRightXMMOperand(current); |
+ if (mod == 3) { |
+ AppendToBuffer(",%s", NameOfXMMRegister(vvvv)); |
+ } |
AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
break; |
case 0x2a: |
@@ -1176,6 +1188,15 @@ int DisassemblerX64::AVXInstruction(byte* data) { |
int mod, regop, rm, vvvv = vex_vreg(); |
get_modrm(*current, &mod, ®op, &rm); |
switch (opcode) { |
+ case 0x28: |
+ AppendToBuffer("vmovaps %s,", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ break; |
+ case 0x29: |
+ AppendToBuffer("vmovaps "); |
+ current += PrintRightXMMOperand(current); |
+ AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ break; |
case 0x2e: |
AppendToBuffer("vucomiss %s,", NameOfXMMRegister(regop)); |
current += PrintRightXMMOperand(current); |