| 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;
 | 
| 
 |