Index: src/ia32/disasm-ia32.cc |
diff --git a/src/ia32/disasm-ia32.cc b/src/ia32/disasm-ia32.cc |
index 58c22afcd376ea10e47b5222b557c43e3372e350..e1b5a88b51506aae1d70b0924124bf99dbfc741d 100644 |
--- a/src/ia32/disasm-ia32.cc |
+++ b/src/ia32/disasm-ia32.cc |
@@ -817,6 +817,7 @@ int DisassemblerIA32::RegisterFPUInstruction(int escape_opcode, |
// Returns NULL if the instruction is not handled here. |
static const char* F0Mnem(byte f0byte) { |
switch (f0byte) { |
+ case 0x18: return "prefetch"; |
Erik Corry
2010/06/04 07:07:40
What about the other instructions? Can they alrea
Lasse Reichstein
2010/06/04 11:52:13
movntdq[a] can't, but they aren't used yet either.
|
case 0xA2: return "cpuid"; |
case 0x31: return "rdtsc"; |
case 0xBE: return "movsx_b"; |
@@ -942,7 +943,13 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
case 0x0F: |
{ byte f0byte = *(data+1); |
const char* f0mnem = F0Mnem(f0byte); |
- if (f0byte == 0xA2 || f0byte == 0x31) { |
+ if (f0byte == 0x18) { |
+ int mod, regop, rm; |
+ get_modrm(*data, &mod, ®op, &rm); |
+ const char* suffix[] = {"nta", "1", "2", "3"}; |
+ AppendToBuffer("%s%s ", f0mnem, suffix[regop & 0x03]); |
+ data += PrintRightOperand(data); |
+ } else if (f0byte == 0xA2 || f0byte == 0x31) { |
AppendToBuffer("%s", f0mnem); |
data += 2; |
} else if ((f0byte & 0xF0) == 0x80) { |