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