Index: src/x64/disasm-x64.cc |
diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc |
index 1d708aee959d8c1a991f496a4a89aba814807024..82bc6ef93b932933c0219a5ae5aab277dc4210f8 100644 |
--- a/src/x64/disasm-x64.cc |
+++ b/src/x64/disasm-x64.cc |
@@ -1033,7 +1033,14 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
} |
} else { |
get_modrm(*current, &mod, ®op, &rm); |
- if (opcode == 0x6E) { |
+ if (opcode == 0x28) { |
+ AppendToBuffer("movapd %s, ", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ } else if (opcode == 0x29) { |
+ AppendToBuffer("movapd "); |
+ current += PrintRightXMMOperand(current); |
+ AppendToBuffer(", %s", NameOfXMMRegister(regop)); |
+ } else if (opcode == 0x6E) { |
AppendToBuffer("mov%c %s,", |
rex_w() ? 'q' : 'd', |
NameOfXMMRegister(regop)); |
@@ -1051,6 +1058,10 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
AppendToBuffer("movdqa "); |
current += PrintRightXMMOperand(current); |
AppendToBuffer(", %s", NameOfXMMRegister(regop)); |
+ } else if (opcode == 0xD6) { |
+ AppendToBuffer("movq "); |
+ current += PrintRightXMMOperand(current); |
+ AppendToBuffer(", %s", NameOfXMMRegister(regop)); |
} else { |
const char* mnemonic = "?"; |
if (opcode == 0x50) { |
@@ -1152,6 +1163,11 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
get_modrm(*current, &mod, ®op, &rm); |
AppendToBuffer("cvtss2sd %s,", NameOfXMMRegister(regop)); |
current += PrintRightXMMOperand(current); |
+ } else if (opcode == 0x7E) { |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ AppendToBuffer("movq %s, ", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
} else { |
UnimplementedInstruction(); |
} |
@@ -1169,6 +1185,22 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
current += 4; |
} // else no immediate displacement. |
AppendToBuffer("nop"); |
+ |
+ } else if (opcode == 28) { |
+ // movaps xmm, xmm/m128 |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ AppendToBuffer("movaps %s, ", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ |
+ } else if (opcode == 29) { |
+ // movaps xmm/m128, xmm |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ AppendToBuffer("movaps"); |
+ current += PrintRightXMMOperand(current); |
+ AppendToBuffer(", %s", NameOfXMMRegister(regop)); |
+ |
} else if (opcode == 0xA2 || opcode == 0x31) { |
// RDTSC or CPUID |
AppendToBuffer("%s", mnemonic); |
@@ -1180,6 +1212,13 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
byte_size_operand_ = idesc.byte_size_operation; |
current += PrintOperands(idesc.mnem, idesc.op_order_, current); |
+ } else if (opcode == 57) { |
+ // xoprps xmm, xmm/m128 |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ AppendToBuffer("xorps %s, ", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ |
} else if ((opcode & 0xF0) == 0x80) { |
// Jcc: Conditional jump (branch). |
current = data + JumpConditional(data); |