Index: src/x64/disasm-x64.cc |
diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc |
index 557eaf00904d78324c2cb93edc7ea84fe13a960f..9f453d16177056f202ab02a318b0b6c930d97a83 100644 |
--- a/src/x64/disasm-x64.cc |
+++ b/src/x64/disasm-x64.cc |
@@ -351,6 +351,11 @@ class DisassemblerX64 { |
bool rex_w() { return (rex_ & 0x08) != 0; } |
+ bool vex_w() { |
+ DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX); |
+ return vex_byte0_ == VEX3_PREFIX ? (vex_byte2_ & 0x80) != 0 : false; |
+ } |
+ |
bool vex_128() { |
DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX); |
byte checked = vex_byte0_ == VEX3_PREFIX ? vex_byte2_ : vex_byte1_; |
@@ -1191,6 +1196,16 @@ int DisassemblerX64::AVXInstruction(byte* data) { |
NameOfXMMRegister(vvvv)); |
current += PrintRightXMMOperand(current); |
break; |
+ case 0x6e: |
+ AppendToBuffer("vmov%c %s,", vex_w() ? 'q' : 'd', |
+ NameOfXMMRegister(regop)); |
+ current += PrintRightOperand(current); |
+ break; |
+ case 0x7e: |
+ AppendToBuffer("vmov%c ", vex_w() ? 'q' : 'd'); |
+ current += PrintRightOperand(current); |
+ AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ break; |
default: |
UnimplementedInstruction(); |
} |