Index: src/ia32/disasm-ia32.cc |
diff --git a/src/ia32/disasm-ia32.cc b/src/ia32/disasm-ia32.cc |
index 9140d5782158485429354b66aae5272ac6c396e9..36acd1e05d5f6e73a2c88c28ef798eee5c52cb82 100644 |
--- a/src/ia32/disasm-ia32.cc |
+++ b/src/ia32/disasm-ia32.cc |
@@ -868,6 +868,10 @@ int DisassemblerIA32::AVXInstruction(byte* data) { |
NameOfXMMRegister(vvvv)); |
current += PrintRightXMMOperand(current); |
break; |
+ case 0x5b: |
+ AppendToBuffer("vcvttps2dq %s,", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ break; |
case 0x5c: |
AppendToBuffer("vsubss %s,%s,", NameOfXMMRegister(regop), |
NameOfXMMRegister(vvvv)); |
@@ -988,6 +992,14 @@ int DisassemblerIA32::AVXInstruction(byte* data) { |
int mod, regop, rm, vvvv = vex_vreg(); |
get_modrm(*current, &mod, ®op, &rm); |
switch (opcode) { |
+ case 0x52: |
+ AppendToBuffer("vrsqrtps %s,", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ break; |
+ case 0x53: |
+ AppendToBuffer("vrcpps %s,", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ break; |
case 0x54: |
AppendToBuffer("vandps %s,%s,", NameOfXMMRegister(regop), |
NameOfXMMRegister(vvvv)); |
@@ -1008,6 +1020,10 @@ int DisassemblerIA32::AVXInstruction(byte* data) { |
NameOfXMMRegister(vvvv)); |
current += PrintRightXMMOperand(current); |
break; |
+ case 0x5B: |
+ AppendToBuffer("vcvtdq2ps %s,", NameOfXMMRegister(regop)); |
+ current += PrintRightXMMOperand(current); |
+ break; |
case 0x5C: |
AppendToBuffer("vsubps %s,%s,", NameOfXMMRegister(regop), |
NameOfXMMRegister(vvvv)); |
@@ -1547,28 +1563,17 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
get_modrm(*data, &mod, ®op, &rm); |
AppendToBuffer("ucomiss %s,", NameOfXMMRegister(regop)); |
data += PrintRightXMMOperand(data); |
- } else if (f0byte >= 0x53 && f0byte <= 0x5F) { |
+ } else if (f0byte >= 0x52 && f0byte <= 0x5F) { |
const char* const pseudo_op[] = { |
- "rcpps", |
- "andps", |
- "andnps", |
- "orps", |
- "xorps", |
- "addps", |
- "mulps", |
- "cvtps2pd", |
- "cvtdq2ps", |
- "subps", |
- "minps", |
- "divps", |
- "maxps", |
+ "rsqrtps", "rcpps", "andps", "andnps", "orps", |
+ "xorps", "addps", "mulps", "cvtps2pd", "cvtdq2ps", |
+ "subps", "minps", "divps", "maxps", |
}; |
data += 2; |
int mod, regop, rm; |
get_modrm(*data, &mod, ®op, &rm); |
- AppendToBuffer("%s %s,", |
- pseudo_op[f0byte - 0x53], |
+ AppendToBuffer("%s %s,", pseudo_op[f0byte - 0x52], |
NameOfXMMRegister(regop)); |
data += PrintRightXMMOperand(data); |
} else if (f0byte == 0x50) { |
@@ -2266,6 +2271,9 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
case 0x59: |
mnem = "mulss"; |
break; |
+ case 0x5B: |
+ mnem = "cvttps2dq"; |
+ break; |
case 0x5C: |
mnem = "subss"; |
break; |