NameOfXMMRegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (f0byte == 0x12) {
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("movhlps %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
- } else if (f0byte == 0x16) {
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("movlhps %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
- } else if (f0byte == 0x10) {
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("movups %s,", NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (f0byte == 0x11) {
- AppendToBuffer("movups ");
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- data += PrintRightXMMOperand(data);
- AppendToBuffer(",%s", NameOfXMMRegister(regop));
- } else if (f0byte >= 0x51 && f0byte <= 0x5F) {
+ } else if (f0byte >= 0x53 && f0byte <= 0x5F) {
const char* const pseudo_op[] = {
- "sqrtps",
- "rsqrtps",
"rcpps",
"andps",
"andnps",
"subps",
"minps",
"divps",
- "maxps"
+ "maxps",
};
data += 2;
int mod, regop, rm;
get_modrm(*data, &mod, ®op, &rm);
AppendToBuffer("%s %s,",
- pseudo_op[f0byte - 0x51],
+ pseudo_op[f0byte - 0x53],
NameOfXMMRegister(regop));
data += PrintRightXMMOperand(data);
} else if (f0byte == 0x50) {
NameOfCPURegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (f0byte == 0xC2) {
- // Intel manual 2A, Table 3-11.
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- const char* const pseudo_op[] = {
- "cmpeqps",
- "cmpltps",
- "cmpleps",
- "cmpunordps",
- "cmpneqps",
- "cmpnltps",
- "cmpnleps",
- "cmpordps"
- };
- AppendToBuffer("%s %s,%s",
- pseudo_op[data[1]],
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data += 2;
} else if (f0byte== 0xC6) {
// shufps xmm, xmm/m128, imm8
data += 2;
NameOfXMMRegister(regop),
static_cast<int>(imm8));
data += 2;
- } else if (f0byte== 0x5B) {
- data += 2;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("cvtdq2ps %s,",
- NameOfXMMRegister(rm));
- data += PrintRightXMMOperand(data);
} else if ((f0byte & 0xF0) == 0x80) {
data += JumpConditional(data, branch_hint);
} else if (f0byte == 0xBE || f0byte == 0xBF || f0byte == 0xB6 ||
NameOfXMMRegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (*data == 0x40) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("pmulld %s,%s",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
} else if (*data == 0x2A) {
// movntdqa
data++;
NameOfXMMRegister(rm),
static_cast<int>(imm8));
data += 2;
- } else if (*data == 0x21) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- int8_t imm8 = static_cast<int8_t>(data[1]);
- AppendToBuffer("insertps %s,%s,%d",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm),
- static_cast<int>(imm8));
- data += 2;
} else if (*data == 0x17) {
data++;
int mod, regop, rm;
NameOfCPURegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (*data == 0x51) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("sqrtpd %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
} else if (*data == 0x54) {
data++;
int mod, regop, rm;
data++;
int mod, regop, rm;
get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("xorpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x58) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("addpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x59) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("mulpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x5B) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("cvtps2dq %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x5C) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("subpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x5D) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("minpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x5E) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("divpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x5F) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("maxpd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0x62) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("punpackldq %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0xD6) {
- AppendToBuffer("movq ");
- data += 3;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- data += PrintRightXMMOperand(data);
- AppendToBuffer(",%s", NameOfXMMRegister(regop));
- } else if (*data == 0xF4) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("pmuludq %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0xFA) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("psubd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
- } else if (*data == 0xFE) {
+ AppendToBuffer("xorpd %s,%s",
+ NameOfXMMRegister(regop),
+ NameOfXMMRegister(rm));
data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("paddd %s,",
- NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
} else if (*data == 0x6E) {
data++;
int mod, regop, rm;
NameOfXMMRegister(rm),
static_cast<int>(imm8));
data += 2;
- } else if (*data == 0x66) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("pcmpgtd %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
} else if (*data == 0x76) {
data++;
int mod, regop, rm;
NameOfXMMRegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (*data == 0x73) {
+ } else if (*data == 0x72) {
data++;
int mod, regop, rm;
get_modrm(*data, &mod, ®op, &rm);
int8_t imm8 = static_cast<int8_t>(data[1]);
DCHECK(regop == esi || regop == edx);
- AppendToBuffer("%s %s,%d",
- (regop == esi) ? "psllq" : "psrlq",
- NameOfXMMRegister(rm),
- static_cast<int>(imm8));
+ AppendToBuffer("%s %s,%d", (regop == esi) ? "pslld" : "psrld",
+ NameOfXMMRegister(rm), static_cast<int>(imm8));
data += 2;
- } else if (*data == 0xF2) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("pslld %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
- } else if (*data == 0x72) {
+ } else if (*data == 0x73) {
data++;
int mod, regop, rm;
get_modrm(*data, &mod, ®op, &rm);
int8_t imm8 = static_cast<int8_t>(data[1]);
DCHECK(regop == esi || regop == edx);
AppendToBuffer("%s %s,%d",
- (regop == esi) ? "pslld"
- : ((regop == edx) ? "psrld" : "psrad"),
- NameOfXMMRegister(rm),
- static_cast<int>(imm8));
- data += 2;
- } else if (*data == 0xC6) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- int8_t imm8 = static_cast<int8_t>(data[1]);
- AppendToBuffer("shufpd %s,%s,%d",
- NameOfXMMRegister(regop),
+ (regop == esi) ? "psllq" : "psrlq",
NameOfXMMRegister(rm),
static_cast<int>(imm8));
data += 2;
- } else if (*data == 0xD2) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("psrld %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
} else if (*data == 0xD3) {
data++;
int mod, regop, rm;
NameOfXMMRegister(regop),
NameOfXMMRegister(rm));
data++;
- } else if (*data == 0xE2) {
- data++;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("psrad %s,%s",
- NameOfXMMRegister(regop),
- NameOfXMMRegister(rm));
- data++;
} else if (*data == 0x7F) {
AppendToBuffer("movdqa ");
data++;
get_modrm(*data, &mod, ®op, &rm);
data += PrintRightXMMOperand(data);
AppendToBuffer(",%s", NameOfXMMRegister(regop));
- } else if (b2 == 0x7E) {
- data += 3;
- int mod, regop, rm;
- get_modrm(*data, &mod, ®op, &rm);
- AppendToBuffer("movq %s,", NameOfXMMRegister(regop));
- data += PrintRightXMMOperand(data);
} else {
UnimplementedInstruction();
}
//------------------------------------------------------------------------------
-static const char* cpu_regs[8] = {
+static const char* const cpu_regs[8] = {
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
};
-static const char* byte_cpu_regs[8] = {
+static const char* const byte_cpu_regs[8] = {
"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"
};
-static const char* xmm_regs[8] = {
+static const char* const xmm_regs[8] = {
"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
};