| Index: src/x64/disasm-x64.cc
|
| diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc
|
| index 4799a32f23db7027c331a6070968b1cdd0ef7f6e..c70684d99f5da0400ed5ca33d895b8c38348822e 100644
|
| --- a/src/x64/disasm-x64.cc
|
| +++ b/src/x64/disasm-x64.cc
|
| @@ -876,13 +876,7 @@ int DisassemblerX64::SetCC(byte* data) {
|
| int DisassemblerX64::AVXInstruction(byte* data) {
|
| byte opcode = *data;
|
| byte* current = data + 1;
|
| - if (vex_0f() && opcode == 0x2e) {
|
| - int mod, regop, rm;
|
| - get_modrm(*current, &mod, ®op, &rm);
|
| - AppendToBuffer("vucomis%c %s,", vex_66() ? 'd' : 's',
|
| - NameOfXMMRegister(regop));
|
| - current += PrintRightXMMOperand(current);
|
| - } else if (vex_66() && vex_0f38()) {
|
| + if (vex_66() && vex_0f38()) {
|
| int mod, regop, rm, vvvv = vex_vreg();
|
| get_modrm(*current, &mod, ®op, &rm);
|
| switch (opcode) {
|
| @@ -1137,6 +1131,49 @@ int DisassemblerX64::AVXInstruction(byte* data) {
|
| default:
|
| UnimplementedInstruction();
|
| }
|
| + } else if (vex_none() && vex_0f()) {
|
| + int mod, regop, rm, vvvv = vex_vreg();
|
| + get_modrm(*current, &mod, ®op, &rm);
|
| + switch (opcode) {
|
| + case 0x2e:
|
| + AppendToBuffer("vucomiss %s,", NameOfXMMRegister(regop));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + case 0x54:
|
| + AppendToBuffer("vandps %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + case 0x57:
|
| + AppendToBuffer("vxorps %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + default:
|
| + UnimplementedInstruction();
|
| + }
|
| + } else if (vex_66() && vex_0f()) {
|
| + int mod, regop, rm, vvvv = vex_vreg();
|
| + get_modrm(*current, &mod, ®op, &rm);
|
| + switch (opcode) {
|
| + case 0x2e:
|
| + AppendToBuffer("vucomisd %s,", NameOfXMMRegister(regop));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + case 0x54:
|
| + AppendToBuffer("vandpd %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + case 0x57:
|
| + AppendToBuffer("vxorpd %s,%s,", NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(vvvv));
|
| + current += PrintRightXMMOperand(current);
|
| + break;
|
| + default:
|
| + UnimplementedInstruction();
|
| + }
|
| +
|
| } else {
|
| UnimplementedInstruction();
|
| }
|
|
|