| Index: src/x64/disasm-x64.cc | 
| diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc | 
| index bb8f5430ccb0d3e03ad565f9e38290ae81f26b6c..75adc8988f5d63d84b14ab0c3410e6cb1a1c0457 100644 | 
| --- a/src/x64/disasm-x64.cc | 
| +++ b/src/x64/disasm-x64.cc | 
| @@ -383,12 +383,12 @@ class DisassemblerX64 { | 
| } | 
|  | 
| bool vex_0f38() { | 
| -    DCHECK(vex_byte0_ == VEX3_PREFIX); | 
| +    if (vex_byte0_ == VEX2_PREFIX) return false; | 
| return (vex_byte1_ & 3) == 2; | 
| } | 
|  | 
| bool vex_0f3a() { | 
| -    DCHECK(vex_byte0_ == VEX3_PREFIX); | 
| +    if (vex_byte0_ == VEX2_PREFIX) return false; | 
| return (vex_byte1_ & 3) == 3; | 
| } | 
|  | 
| @@ -870,83 +870,102 @@ int DisassemblerX64::SetCC(byte* data) { | 
| int DisassemblerX64::AVXInstruction(byte* data) { | 
| byte opcode = *data; | 
| byte* current = data + 1; | 
| -  if (vex_byte0_ == VEX3_PREFIX) { | 
| -    if (vex_128()) { | 
| -      if (vex_66() && vex_0f38()) { | 
| -        int mod, regop, rm, vvvv = vex_vreg(); | 
| -        get_modrm(*current, &mod, ®op, &rm); | 
| -        switch (opcode) { | 
| -          case 0x99: | 
| -            AppendToBuffer("vfmadd132s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xa9: | 
| -            AppendToBuffer("vfmadd213s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xb9: | 
| -            AppendToBuffer("vfmadd231s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0x9b: | 
| -            AppendToBuffer("vfmsub132s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xab: | 
| -            AppendToBuffer("vfmsub213s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xbb: | 
| -            AppendToBuffer("vfmsub231s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0x9d: | 
| -            AppendToBuffer("vfnmadd132s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xad: | 
| -            AppendToBuffer("vfnmadd213s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xbd: | 
| -            AppendToBuffer("vfnmadd231s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0x9f: | 
| -            AppendToBuffer("vfnmsub132s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xaf: | 
| -            AppendToBuffer("vfnmsub213s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          case 0xbf: | 
| -            AppendToBuffer("vfnmsub231s%c %s,%s,", float_size_code(), | 
| -                           NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| -            current += PrintRightXMMOperand(current); | 
| -            break; | 
| -          default: | 
| -            UnimplementedInstruction(); | 
| -        } | 
| -      } | 
| -    } else { | 
| -      UnimplementedInstruction(); | 
| +  if (vex_66() && vex_0f38()) { | 
| +    int mod, regop, rm, vvvv = vex_vreg(); | 
| +    get_modrm(*current, &mod, ®op, &rm); | 
| +    switch (opcode) { | 
| +      case 0x99: | 
| +        AppendToBuffer("vfmadd132s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xa9: | 
| +        AppendToBuffer("vfmadd213s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xb9: | 
| +        AppendToBuffer("vfmadd231s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x9b: | 
| +        AppendToBuffer("vfmsub132s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xab: | 
| +        AppendToBuffer("vfmsub213s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xbb: | 
| +        AppendToBuffer("vfmsub231s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x9d: | 
| +        AppendToBuffer("vfnmadd132s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xad: | 
| +        AppendToBuffer("vfnmadd213s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xbd: | 
| +        AppendToBuffer("vfnmadd231s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x9f: | 
| +        AppendToBuffer("vfnmsub132s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xaf: | 
| +        AppendToBuffer("vfnmsub213s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0xbf: | 
| +        AppendToBuffer("vfnmsub231s%c %s,%s,", float_size_code(), | 
| +                       NameOfXMMRegister(regop), NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      default: | 
| +        UnimplementedInstruction(); | 
| +    } | 
| +  } else if (vex_f2() && vex_0f()) { | 
| +    int mod, regop, rm, vvvv = vex_vreg(); | 
| +    get_modrm(*current, &mod, ®op, &rm); | 
| +    switch (opcode) { | 
| +      case 0x58: | 
| +        AppendToBuffer("vaddsd %s,%s,", NameOfXMMRegister(regop), | 
| +                       NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x59: | 
| +        AppendToBuffer("vmulsd %s,%s,", NameOfXMMRegister(regop), | 
| +                       NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x5c: | 
| +        AppendToBuffer("vsubsd %s,%s,", NameOfXMMRegister(regop), | 
| +                       NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      case 0x5e: | 
| +        AppendToBuffer("vdivsd %s,%s,", NameOfXMMRegister(regop), | 
| +                       NameOfXMMRegister(vvvv)); | 
| +        current += PrintRightXMMOperand(current); | 
| +        break; | 
| +      default: | 
| +        UnimplementedInstruction(); | 
| } | 
| -  } else if (vex_byte0_ == VEX2_PREFIX) { | 
| -    UnimplementedInstruction(); | 
| } else { | 
| -    UNREACHABLE(); | 
| +    UnimplementedInstruction(); | 
| } | 
|  | 
| return static_cast<int>(current - data); | 
|  |