Index: src/ia32/disasm-ia32.cc |
diff --git a/src/ia32/disasm-ia32.cc b/src/ia32/disasm-ia32.cc |
index 6a7f3bc83775ac4a4622d9efe7608a8da9b353e7..177041de7ac114225bd65097f90feacd4fd8815f 100644 |
--- a/src/ia32/disasm-ia32.cc |
+++ b/src/ia32/disasm-ia32.cc |
@@ -881,6 +881,7 @@ static const char* F0Mnem(byte f0byte) { |
case 0xAD: return "shrd"; |
case 0xAC: return "shrd"; // 3-operand version. |
case 0xAB: return "bts"; |
+ case 0xBD: return "bsr"; |
default: return NULL; |
} |
} |
@@ -1096,22 +1097,26 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
data += SetCC(data); |
} else if ((f0byte & 0xF0) == 0x40) { |
data += CMov(data); |
- } else { |
+ } else if (f0byte == 0xAB || f0byte == 0xA5 || f0byte == 0xAD) { |
+ // shrd, shld, bts |
data += 2; |
- if (f0byte == 0xAB || f0byte == 0xA5 || f0byte == 0xAD) { |
- // shrd, shld, bts |
- AppendToBuffer("%s ", f0mnem); |
- int mod, regop, rm; |
- get_modrm(*data, &mod, ®op, &rm); |
- data += PrintRightOperand(data); |
- if (f0byte == 0xAB) { |
- AppendToBuffer(",%s", NameOfCPURegister(regop)); |
- } else { |
- AppendToBuffer(",%s,cl", NameOfCPURegister(regop)); |
- } |
+ AppendToBuffer("%s ", f0mnem); |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ data += PrintRightOperand(data); |
+ if (f0byte == 0xAB) { |
+ AppendToBuffer(",%s", NameOfCPURegister(regop)); |
} else { |
- UnimplementedInstruction(); |
+ AppendToBuffer(",%s,cl", NameOfCPURegister(regop)); |
} |
+ } else if (f0byte == 0xBD) { |
+ data += 2; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("%s %s,", f0mnem, NameOfCPURegister(regop)); |
+ data += PrintRightOperand(data); |
+ } else { |
+ UnimplementedInstruction(); |
} |
} |
break; |
@@ -1606,13 +1611,13 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
get_modrm(*data, &mod, ®op, &rm); |
AppendToBuffer("cvtss2sd %s,", NameOfXMMRegister(regop)); |
data += PrintRightXMMOperand(data); |
- } else if (b2 == 0x6F) { |
+ } else if (b2 == 0x6F) { |
data += 3; |
int mod, regop, rm; |
get_modrm(*data, &mod, ®op, &rm); |
AppendToBuffer("movdqu %s,", NameOfXMMRegister(regop)); |
data += PrintRightXMMOperand(data); |
- } else if (b2 == 0x7F) { |
+ } else if (b2 == 0x7F) { |
AppendToBuffer("movdqu "); |
data += 3; |
int mod, regop, rm; |