| Index: src/x64/disasm-x64.cc
|
| diff --git a/src/x64/disasm-x64.cc b/src/x64/disasm-x64.cc
|
| index 189ee42cea457d5569b29bf9d8a69ae14dbb95a5..2b7b7b7d334e35a8d16bc583d9d32165924fec24 100644
|
| --- a/src/x64/disasm-x64.cc
|
| +++ b/src/x64/disasm-x64.cc
|
| @@ -652,6 +652,9 @@ int DisassemblerX64::PrintImmediateOp(byte* data) {
|
| case 2:
|
| mnem = "adc";
|
| break;
|
| + case 3:
|
| + mnem = "sbb";
|
| + break;
|
| case 4:
|
| mnem = "and";
|
| break;
|
| @@ -1502,7 +1505,39 @@ int DisassemblerX64::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
| data++;
|
| }
|
| break;
|
| -
|
| + case 0xB0:
|
| + case 0xB1:
|
| + case 0xB2:
|
| + case 0xB3:
|
| + case 0xB4:
|
| + case 0xB5:
|
| + case 0xB6:
|
| + case 0xB7:
|
| + case 0xB8:
|
| + case 0xB9:
|
| + case 0xBA:
|
| + case 0xBB:
|
| + case 0xBC:
|
| + case 0xBD:
|
| + case 0xBE:
|
| + case 0xBF: {
|
| + // mov reg8,imm8 or mov reg32,imm32
|
| + byte opcode = *data;
|
| + data++;
|
| + bool is_32bit = (opcode >= 0xB8);
|
| + int reg = (opcode & 0x7) | (rex_b() ? 8 : 0);
|
| + if (is_32bit) {
|
| + AppendToBuffer("mov%c %s, ",
|
| + operand_size_code(),
|
| + NameOfCPURegister(reg));
|
| + data += PrintImmediate(data, DOUBLEWORD_SIZE);
|
| + } else {
|
| + AppendToBuffer("movb %s, ",
|
| + NameOfByteCPURegister(reg));
|
| + data += PrintImmediate(data, BYTE_SIZE);
|
| + }
|
| + break;
|
| + }
|
| case 0xFE: {
|
| data++;
|
| int mod, regop, rm;
|
| @@ -1513,9 +1548,8 @@ int DisassemblerX64::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
| } else {
|
| UnimplementedInstruction();
|
| }
|
| - }
|
| break;
|
| -
|
| + }
|
| case 0x68:
|
| AppendToBuffer("push 0x%x", *reinterpret_cast<int32_t*>(data + 1));
|
| data += 5;
|
|
|