996
999
if (operand_size_ == 0x66) {
997
1000
// 0x66 0x0F prefix.
998
1001
int mod, regop, rm;
999
get_modrm(*current, &mod, ®op, &rm);
1000
if (opcode == 0x6E) {
1001
AppendToBuffer("movd %s,", NameOfXMMRegister(regop));
1002
current += PrintRightOperand(current);
1002
if (opcode == 0x3A) {
1003
byte third_byte = *current;
1005
if (third_byte == 0x17) {
1006
get_modrm(*current, &mod, ®op, &rm);
1007
AppendToBuffer("extractps "); // reg/m32, xmm, imm8
1008
current += PrintRightOperand(current);
1009
AppendToBuffer(", %s, %d", NameOfCPURegister(regop), (*current) & 3);
1012
UnimplementedInstruction();
1004
const char* mnemonic = "?";
1005
if (opcode == 0x57) {
1007
} else if (opcode == 0x2E) {
1008
mnemonic = "comisd";
1009
} else if (opcode == 0x2F) {
1010
mnemonic = "ucomisd";
1015
get_modrm(*current, &mod, ®op, &rm);
1016
if (opcode == 0x6E) {
1017
AppendToBuffer("mov%c %s,",
1018
rex_w() ? 'q' : 'd',
1019
NameOfXMMRegister(regop));
1020
current += PrintRightOperand(current);
1021
} else if (opcode == 0x7E) {
1022
AppendToBuffer("mov%c %s,",
1023
rex_w() ? 'q' : 'd',
1024
NameOfCPURegister(regop));
1025
current += PrintRightXMMOperand(current);
1012
UnimplementedInstruction();
1027
const char* mnemonic = "?";
1028
if (opcode == 0x57) {
1030
} else if (opcode == 0x2E) {
1031
mnemonic = "comisd";
1032
} else if (opcode == 0x2F) {
1033
mnemonic = "ucomisd";
1035
UnimplementedInstruction();
1037
AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
1038
current += PrintRightXMMOperand(current);
1014
AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
1015
current += PrintRightXMMOperand(current);
1017
1041
} else if (group_1_prefix_ == 0xF2) {
1018
1042
// Beginning of instructions with prefix 0xF2.