| Index: src/x64/disasm-x64.cc
|
| diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc
|
| index 667561b7cf2571d6a2b60c444fc939baa2e54cf8..76b541c01002b0f8ec1cb53f3220b8914d7ae0f1 100644
|
| --- a/src/x64/disasm-x64.cc
|
| +++ b/src/x64/disasm-x64.cc
|
| @@ -1260,26 +1260,37 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
| byte_size_operand_ = idesc.byte_size_operation;
|
| current += PrintOperands(idesc.mnem, idesc.op_order_, current);
|
|
|
| - } else if (opcode == 0x54) {
|
| - // andps xmm, xmm/m128
|
| + } else if (opcode >= 0x53 && opcode <= 0x5F) {
|
| + const char* const pseudo_op[] = {
|
| + "rcpps",
|
| + "andps",
|
| + "andnps",
|
| + "orps",
|
| + "xorps",
|
| + "addps",
|
| + "mulps",
|
| + "cvtps2pd",
|
| + "cvtdq2ps",
|
| + "subps",
|
| + "minps",
|
| + "divps",
|
| + "maxps",
|
| + };
|
| int mod, regop, rm;
|
| get_modrm(*current, &mod, ®op, &rm);
|
| - AppendToBuffer("andps %s,", NameOfXMMRegister(regop));
|
| + AppendToBuffer("%s %s,",
|
| + pseudo_op[opcode - 0x53],
|
| + NameOfXMMRegister(regop));
|
| current += PrintRightXMMOperand(current);
|
|
|
| - } else if (opcode == 0x56) {
|
| - // orps xmm, xmm/m128
|
| + } else if (opcode == 0xC6) {
|
| + // shufps xmm, xmm/m128, imm8
|
| int mod, regop, rm;
|
| get_modrm(*current, &mod, ®op, &rm);
|
| - AppendToBuffer("orps %s,", NameOfXMMRegister(regop));
|
| - current += PrintRightXMMOperand(current);
|
| -
|
| - } else if (opcode == 0x57) {
|
| - // xorps xmm, xmm/m128
|
| - int mod, regop, rm;
|
| - get_modrm(*current, &mod, ®op, &rm);
|
| - AppendToBuffer("xorps %s,", NameOfXMMRegister(regop));
|
| + AppendToBuffer("shufps %s, ", NameOfXMMRegister(regop));
|
| current += PrintRightXMMOperand(current);
|
| + AppendToBuffer(", %d", (*current) & 3);
|
| + current += 1;
|
|
|
| } else if (opcode == 0x50) {
|
| // movmskps reg, xmm
|
|
|