Index: src/ia32/disasm-ia32.cc |
diff --git a/src/ia32/disasm-ia32.cc b/src/ia32/disasm-ia32.cc |
index a0a4e1ceeb21d1fe3dd7a65777d2ee9b79dc24d6..6e99d9bda03b49d287302c3f0f6566c6188cfd54 100644 |
--- a/src/ia32/disasm-ia32.cc |
+++ b/src/ia32/disasm-ia32.cc |
@@ -10,6 +10,7 @@ |
#include "src/base/compiler-specific.h" |
#include "src/disasm.h" |
+#include "src/ia32/sse-instr.h" |
namespace disasm { |
@@ -1002,6 +1003,16 @@ int DisassemblerIA32::AVXInstruction(byte* data) { |
NameOfXMMRegister(vvvv)); |
current += PrintRightXMMOperand(current); |
break; |
+#define DECLARE_SSE_AVX_DIS_CASE(instruction, notUsed1, notUsed2, opcode) \ |
+ case 0x##opcode: { \ |
+ AppendToBuffer("v" #instruction " %s,%s,", NameOfXMMRegister(regop), \ |
+ NameOfXMMRegister(vvvv)); \ |
+ current += PrintRightXMMOperand(current); \ |
+ break; \ |
+ } |
+ |
+ SSE2_INSTRUCTION_LIST(DECLARE_SSE_AVX_DIS_CASE) |
+#undef DECLARE_SSE_AVX_DIS_CASE |
default: |
UnimplementedInstruction(); |
} |
@@ -1895,6 +1906,14 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
AppendToBuffer("movd "); |
data += PrintRightOperand(data); |
AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ } else if (*data == 0xC4) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("pinsrw %s,", NameOfXMMRegister(regop)); |
+ data += PrintRightOperand(data); |
+ AppendToBuffer(",%d", *reinterpret_cast<int8_t*>(data)); |
+ data++; |
} else if (*data == 0xDB) { |
data++; |
int mod, regop, rm; |
@@ -1929,6 +1948,18 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
NameOfXMMRegister(regop), |
NameOfXMMRegister(rm)); |
data++; |
+ } else if (*data == 0xFA) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("psubd %s,", NameOfXMMRegister(regop)); |
+ data += PrintRightXMMOperand(data); |
+ } else if (*data == 0xFE) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("paddd %s,", NameOfXMMRegister(regop)); |
+ data += PrintRightXMMOperand(data); |
} else if (*data == 0xB1) { |
data++; |
data += PrintOperands("cmpxchg_w", OPER_REG_OP_ORDER, data); |