Index: src/x64/disasm-x64.cc |
diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc |
index 57847571dcc3b8a166fa5b99b3fb1fd68c9df0e0..002a5ebc7bfb54e8d270a19963e48d0183083b48 100644 |
--- a/src/x64/disasm-x64.cc |
+++ b/src/x64/disasm-x64.cc |
@@ -1057,7 +1057,7 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
// CVTSI2SD: integer to XMM double conversion. |
int mod, regop, rm; |
get_modrm(*current, &mod, ®op, &rm); |
- AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop)); |
+ AppendToBuffer("%sd %s,", mnemonic, NameOfXMMRegister(regop)); |
current += PrintRightOperand(current); |
} else if ((opcode & 0xF8) == 0x58 || opcode == 0x51) { |
// XMM arithmetic. Mnemonic was retrieved at the start of this function. |
@@ -1070,7 +1070,25 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) { |
} |
} else if (group_1_prefix_ == 0xF3) { |
// Instructions with prefix 0xF3. |
- if (opcode == 0x2C) { |
+ if (opcode == 0x11 || opcode == 0x10) { |
+ // MOVSS: Move scalar double-precision fp to/from/between XMM registers. |
+ AppendToBuffer("movss "); |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ if (opcode == 0x11) { |
+ current += PrintRightOperand(current); |
+ AppendToBuffer(",%s", NameOfXMMRegister(regop)); |
+ } else { |
+ AppendToBuffer("%s,", NameOfXMMRegister(regop)); |
+ current += PrintRightOperand(current); |
+ } |
+ } else if (opcode == 0x2A) { |
+ // CVTSI2SS: integer to XMM single conversion. |
+ int mod, regop, rm; |
+ get_modrm(*current, &mod, ®op, &rm); |
+ AppendToBuffer("%ss %s,", mnemonic, NameOfXMMRegister(regop)); |
+ current += PrintRightOperand(current); |
+ } else if (opcode == 0x2C) { |
// CVTTSS2SI: Convert scalar single-precision FP to dword integer. |
// Assert that mod is not 3, so source is memory, not an XMM register. |
ASSERT_NE(0xC0, *current & 0xC0); |
@@ -1146,8 +1164,8 @@ const char* DisassemblerX64::TwoByteMnemonic(byte opcode) { |
switch (opcode) { |
case 0x1F: |
return "nop"; |
- case 0x2A: // F2 prefix. |
- return "cvtsi2sd"; |
+ case 0x2A: // F2/F3 prefix. |
+ return "cvtsi2s"; |
case 0x31: |
return "rdtsc"; |
case 0x51: // F2 prefix. |