| Index: src/ia32/disasm-ia32.cc
|
| ===================================================================
|
| --- src/ia32/disasm-ia32.cc (revision 4002)
|
| +++ src/ia32/disasm-ia32.cc (working copy)
|
| @@ -1056,8 +1056,21 @@
|
| AppendToBuffer(",%s", NameOfCPURegister(regop));
|
| } else if (*data == 0x0F) {
|
| data++;
|
| - if (*data == 0x2F) {
|
| + if (*data == 0x38) {
|
| data++;
|
| + if (*data == 0x17) {
|
| + data++;
|
| + int mod, regop, rm;
|
| + get_modrm(*data, &mod, ®op, &rm);
|
| + AppendToBuffer("ptest %s,%s",
|
| + NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(rm));
|
| + data++;
|
| + } else {
|
| + UnimplementedInstruction();
|
| + }
|
| + } else if (*data == 0x2F) {
|
| + data++;
|
| int mod, regop, rm;
|
| get_modrm(*data, &mod, ®op, &rm);
|
| AppendToBuffer("comisd %s,%s",
|
| @@ -1072,6 +1085,12 @@
|
| NameOfXMMRegister(regop),
|
| NameOfXMMRegister(rm));
|
| data++;
|
| + } else if (*data == 0x6E) {
|
| + data++;
|
| + int mod, regop, rm;
|
| + get_modrm(*data, &mod, ®op, &rm);
|
| + AppendToBuffer("movd %s,", NameOfXMMRegister(regop));
|
| + data += PrintRightOperand(data);
|
| } else if (*data == 0x6F) {
|
| data++;
|
| int mod, regop, rm;
|
| @@ -1085,6 +1104,14 @@
|
| get_modrm(*data, &mod, ®op, &rm);
|
| data += PrintRightOperand(data);
|
| AppendToBuffer(",%s", NameOfXMMRegister(regop));
|
| + } else if (*data == 0xEF) {
|
| + data++;
|
| + int mod, regop, rm;
|
| + get_modrm(*data, &mod, ®op, &rm);
|
| + AppendToBuffer("pxor %s,%s",
|
| + NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(rm));
|
| + data++;
|
| } else {
|
| UnimplementedInstruction();
|
| }
|
| @@ -1171,6 +1198,7 @@
|
| const char* mnem = "?";
|
| switch (b2) {
|
| case 0x2A: mnem = "cvtsi2sd"; break;
|
| + case 0x51: mnem = "sqrtsd"; break;
|
| case 0x58: mnem = "addsd"; break;
|
| case 0x59: mnem = "mulsd"; break;
|
| case 0x5C: mnem = "subsd"; break;
|
| @@ -1200,6 +1228,14 @@
|
| if (*(data+2) == 0x2C) {
|
| data += 3;
|
| data += PrintOperands("cvttss2si", REG_OPER_OP_ORDER, data);
|
| + } else if (*(data+2) == 0x5A) {
|
| + data += 3;
|
| + int mod, regop, rm;
|
| + get_modrm(*data, &mod, ®op, &rm);
|
| + AppendToBuffer("cvtss2sd %s,%s",
|
| + NameOfXMMRegister(regop),
|
| + NameOfXMMRegister(rm));
|
| + data++;
|
| } else if (*(data+2) == 0x6F) {
|
| data += 3;
|
| int mod, regop, rm;
|
|
|