Chromium Code Reviews| Index: src/ia32/disasm-ia32.cc |
| =================================================================== |
| --- src/ia32/disasm-ia32.cc (revision 4104) |
| +++ src/ia32/disasm-ia32.cc (working copy) |
| @@ -1069,12 +1069,26 @@ |
| } else { |
| UnimplementedInstruction(); |
| } |
| - } else if (*data == 0x2F) { |
| + } else if (*data == 0x2E || *data == 0x2F) { |
| + const char* mnem = (*data == 0x2E) ? "ucomisd" : "comisd"; |
| data++; |
| int mod, regop, rm; |
| get_modrm(*data, &mod, ®op, &rm); |
| - AppendToBuffer("comisd %s,%s", |
| - NameOfXMMRegister(regop), |
| + if (mod == 0x3) { |
| + AppendToBuffer("%s %s,%s", mnem, |
| + NameOfXMMRegister(regop), |
| + NameOfXMMRegister(rm)); |
| + data++; |
| + } else { |
| + AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop)); |
| + data += PrintRightOperand(data); |
| + } |
| + } else if (*data == 0x50) { |
| + data++; |
| + int mod, regop, rm; |
| + get_modrm(*data, &mod, ®op, &rm); |
| + AppendToBuffer("movmskpd %s,%s", |
| + NameOfCPURegister(regop), |
| NameOfXMMRegister(rm)); |
| data++; |
| } else if (*data == 0x57) { |
| @@ -1198,6 +1212,7 @@ |
| const char* mnem = "?"; |
| switch (b2) { |
| case 0x2A: mnem = "cvtsi2sd"; break; |
| + case 0x2C: mnem = "cvttsd2si"; break; |
| case 0x51: mnem = "sqrtsd"; break; |
| case 0x58: mnem = "addsd"; break; |
| case 0x59: mnem = "mulsd"; break; |
| @@ -1208,14 +1223,38 @@ |
| int mod, regop, rm; |
| get_modrm(*data, &mod, ®op, &rm); |
| if (b2 == 0x2A) { |
| - AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop)); |
| - data += PrintRightOperand(data); |
| + if (mod != 0x3) { |
| + AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop)); |
| + data += PrintRightOperand(data); |
| + } else { |
| + AppendToBuffer("%s %s,%s", |
| + mnem, |
| + NameOfXMMRegister(regop), |
| + NameOfCPURegister(rm)); |
| + data++; |
| + } |
| + } else if (b2 == 0x2C) { |
| + if (mod != 0x3) { |
| + AppendToBuffer("%s %s,", mnem, NameOfCPURegister(regop)); |
| + data += PrintRightOperand(data); |
| + } else { |
| + AppendToBuffer("%s %s,%s", |
| + mnem, |
| + NameOfCPURegister(regop), |
| + NameOfXMMRegister(rm)); |
| + data++; |
| + } |
| } else { |
| - AppendToBuffer("%s %s,%s", |
| - mnem, |
| - NameOfXMMRegister(regop), |
| - NameOfXMMRegister(rm)); |
| - data++; |
| + if (mod != 0x3) { |
| + AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop)); |
| + data += PrintRightOperand(data); |
| + } else { |
| + AppendToBuffer("%s %s,%s", |
| + mnem, |
| + NameOfXMMRegister(regop), |
| + NameOfXMMRegister(rm)); |
| + data++; |
| + } |
|
ricowindcs_gmail.com
2010/03/11 18:20:04
The conditionals above could potentially be made m
|
| } |
| } |
| } else { |