Index: src/ia32/disasm-ia32.cc |
=================================================================== |
--- src/ia32/disasm-ia32.cc (revision 6008) |
+++ src/ia32/disasm-ia32.cc (working copy) |
@@ -1107,6 +1107,21 @@ |
} else { |
UnimplementedInstruction(); |
} |
+ } else if (*data == 0x3A) { |
+ data++; |
+ if (*data == 0x16) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ int8_t imm8 = static_cast<int8_t>(data[1]); |
+ AppendToBuffer("pextrd %s,%s,%d", |
+ NameOfXMMRegister(regop), |
+ NameOfXMMRegister(rm), |
+ static_cast<int>(imm8)); |
+ data += 2; |
+ } else { |
+ UnimplementedInstruction(); |
+ } |
} else if (*data == 0x2E || *data == 0x2F) { |
const char* mnem = (*data == 0x2E) ? "ucomisd" : "comisd"; |
data++; |
@@ -1129,6 +1144,14 @@ |
NameOfCPURegister(regop), |
NameOfXMMRegister(rm)); |
data++; |
+ } else if (*data == 0x54) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("andpd %s,%s", |
+ NameOfXMMRegister(regop), |
+ NameOfXMMRegister(rm)); |
+ data++; |
} else if (*data == 0x57) { |
data++; |
int mod, regop, rm; |
@@ -1149,6 +1172,25 @@ |
get_modrm(*data, &mod, ®op, &rm); |
AppendToBuffer("movdqa %s,", NameOfXMMRegister(regop)); |
data += PrintRightOperand(data); |
+ } else if (*data == 0x70) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ int8_t imm8 = static_cast<int8_t>(data[1]); |
+ AppendToBuffer("pshufd %s,%s,%d", |
+ NameOfXMMRegister(regop), |
+ NameOfXMMRegister(rm), |
+ static_cast<int>(imm8)); |
+ data += 2; |
+ } else if (*data == 0x73) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ int8_t imm8 = static_cast<int8_t>(data[1]); |
+ AppendToBuffer("psllq %s,%d", |
+ NameOfXMMRegister(rm), |
+ static_cast<int>(imm8)); |
+ data += 2; |
} else if (*data == 0x7F) { |
AppendToBuffer("movdqa "); |
data++; |
@@ -1156,6 +1198,21 @@ |
get_modrm(*data, &mod, ®op, &rm); |
data += PrintRightOperand(data); |
AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ } else if (*data == 0x7E) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("movd "); |
+ data += PrintRightOperand(data); |
+ AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ } else if (*data == 0xDB) { |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("pand %s,%s", |
+ NameOfXMMRegister(regop), |
+ NameOfXMMRegister(rm)); |
+ data++; |
} else if (*data == 0xE7) { |
AppendToBuffer("movntdq "); |
data++; |
@@ -1164,38 +1221,13 @@ |
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 if (*data == 0xDB) { |
- data++; |
- int mod, regop, rm; |
- get_modrm(*data, &mod, ®op, &rm); |
- AppendToBuffer("pand %s,%s", |
- NameOfXMMRegister(regop), |
- NameOfXMMRegister(rm)); |
- data++; |
- } else if (*data == 0x73) { |
- data++; |
- int mod, regop, rm; |
- get_modrm(*data, &mod, ®op, &rm); |
- int8_t imm8 = static_cast<int8_t>(data[1]); |
- AppendToBuffer("psllq %s,%d", |
- NameOfXMMRegister(rm), |
- static_cast<int>(imm8)); |
- data += 2; |
- } else if (*data == 0x54) { |
- data++; |
- int mod, regop, rm; |
- get_modrm(*data, &mod, ®op, &rm); |
- AppendToBuffer("andpd %s,%s", |
- NameOfXMMRegister(regop), |
- NameOfXMMRegister(rm)); |
- data++; |
+ data++; |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ AppendToBuffer("pxor %s,%s", |
+ NameOfXMMRegister(regop), |
+ NameOfXMMRegister(rm)); |
+ data++; |
} else { |
UnimplementedInstruction(); |
} |