| 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);
|
|
|