| Index: src/x64/disasm-x64.cc
|
| diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc
|
| index 47c2371da14c62ee0d64037ce0325d47558f1d5c..3845ab8436935c72f188385cdfa5edd02abf1282 100644
|
| --- a/src/x64/disasm-x64.cc
|
| +++ b/src/x64/disasm-x64.cc
|
| @@ -1259,6 +1259,16 @@ int DisassemblerX64::AVXInstruction(byte* data) {
|
| NameOfXMMRegister(vvvv));
|
| current += PrintRightXMMOperand(current);
|
| break;
|
| + case 0xC2: {
|
| + AppendToBuffer("vcmpps %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
|
| + "neq", "nlt", "nle", "ord"};
|
| + AppendToBuffer(", (%s)", pseudo_op[*current]);
|
| + current += 1;
|
| + break;
|
| + }
|
| default:
|
| UnimplementedInstruction();
|
| }
|
| @@ -1328,6 +1338,16 @@ int DisassemblerX64::AVXInstruction(byte* data) {
|
| current += PrintRightOperand(current);
|
| AppendToBuffer(",%s", NameOfXMMRegister(regop));
|
| break;
|
| + case 0xC2: {
|
| + AppendToBuffer("vcmppd %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
|
| + "neq", "nlt", "nle", "ord"};
|
| + AppendToBuffer(", (%s)", pseudo_op[*current]);
|
| + current += 1;
|
| + break;
|
| + }
|
| default:
|
| UnimplementedInstruction();
|
| }
|
| @@ -1680,11 +1700,19 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
| mnemonic = "psubd";
|
| } else if (opcode == 0xFE) {
|
| mnemonic = "paddd";
|
| + } else if (opcode == 0xC2) {
|
| + mnemonic = "cmppd";
|
| } else {
|
| UnimplementedInstruction();
|
| }
|
| AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
|
| current += PrintRightXMMOperand(current);
|
| + if (opcode == 0xC2) {
|
| + const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
|
| + "neq", "nlt", "nle", "ord"};
|
| + AppendToBuffer(", (%s)", pseudo_op[*current]);
|
| + current += 1;
|
| + }
|
| }
|
| }
|
| } else if (group_1_prefix_ == 0xF2) {
|
| @@ -1896,12 +1924,12 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
| // cmpps xmm, xmm/m128, imm8
|
| int mod, regop, rm;
|
| get_modrm(*current, &mod, ®op, &rm);
|
| - const char* const pseudo_op[] = {"cmpeqps", "cmpltps", "cmpleps",
|
| - "cmpunordps", "cmpneqps", "cmpnltps",
|
| - "cmpnleps", "cmpordps"};
|
| - AppendToBuffer("%s %s,%s", pseudo_op[current[1]], NameOfXMMRegister(regop),
|
| - NameOfXMMRegister(rm));
|
| - current += 2;
|
| + const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
|
| + "neq", "nlt", "nle", "ord"};
|
| + AppendToBuffer("cmpps %s, ", NameOfXMMRegister(regop));
|
| + current += PrintRightXMMOperand(current);
|
| + AppendToBuffer(", %s", pseudo_op[*current]);
|
| + current += 1;
|
| } else if (opcode == 0xC6) {
|
| // shufps xmm, xmm/m128, imm8
|
| int mod, regop, rm;
|
|
|