| Index: src/x64/disasm-x64.cc
|
| ===================================================================
|
| --- src/x64/disasm-x64.cc (revision 4383)
|
| +++ src/x64/disasm-x64.cc (working copy)
|
| @@ -997,18 +997,23 @@
|
| // 0x66 0x0F prefix.
|
| int mod, regop, rm;
|
| get_modrm(*current, &mod, ®op, &rm);
|
| - const char* mnemonic = "?";
|
| - if (opcode == 0x57) {
|
| - mnemonic = "xorpd";
|
| - } else if (opcode == 0x2E) {
|
| - mnemonic = "comisd";
|
| - } else if (opcode == 0x2F) {
|
| - mnemonic = "ucomisd";
|
| + if (opcode == 0x6E) {
|
| + AppendToBuffer("movd %s,", NameOfXMMRegister(regop));
|
| + current += PrintRightOperand(current);
|
| } else {
|
| - UnimplementedInstruction();
|
| + const char* mnemonic = "?";
|
| + if (opcode == 0x57) {
|
| + mnemonic = "xorpd";
|
| + } else if (opcode == 0x2E) {
|
| + mnemonic = "comisd";
|
| + } else if (opcode == 0x2F) {
|
| + mnemonic = "ucomisd";
|
| + } else {
|
| + UnimplementedInstruction();
|
| + }
|
| + AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
|
| + current += PrintRightXMMOperand(current);
|
| }
|
| - AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
|
| - current += PrintRightXMMOperand(current);
|
| } else if (group_1_prefix_ == 0xF2) {
|
| // Beginning of instructions with prefix 0xF2.
|
|
|
| @@ -1039,13 +1044,21 @@
|
| } else {
|
| UnimplementedInstruction();
|
| }
|
| - } else if (opcode == 0x2C && group_1_prefix_ == 0xF3) {
|
| - // Instruction with prefix 0xF3.
|
| -
|
| - // CVTTSS2SI: Convert scalar single-precision FP to dword integer.
|
| - // Assert that mod is not 3, so source is memory, not an XMM register.
|
| - ASSERT_NE(0xC0, *current & 0xC0);
|
| - current += PrintOperands("cvttss2si", REG_OPER_OP_ORDER, current);
|
| + } else if (group_1_prefix_ == 0xF3) {
|
| + // Instructions with prefix 0xF3.
|
| + if (opcode == 0x2C) {
|
| + // CVTTSS2SI: Convert scalar single-precision FP to dword integer.
|
| + // Assert that mod is not 3, so source is memory, not an XMM register.
|
| + ASSERT_NE(0xC0, *current & 0xC0);
|
| + current += PrintOperands("cvttss2si", REG_OPER_OP_ORDER, current);
|
| + } else if (opcode == 0x5A) {
|
| + int mod, regop, rm;
|
| + get_modrm(*current, &mod, ®op, &rm);
|
| + AppendToBuffer("cvtss2sd %s,", NameOfXMMRegister(regop));
|
| + current += PrintRightXMMOperand(current);
|
| + } else {
|
| + UnimplementedInstruction();
|
| + }
|
| } else if (opcode == 0x1F) {
|
| // NOP
|
| int mod, regop, rm;
|
|
|