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