| Index: src/x64/disasm-x64.cc
|
| ===================================================================
|
| --- src/x64/disasm-x64.cc (revision 2535)
|
| +++ src/x64/disasm-x64.cc (working copy)
|
| @@ -1343,6 +1343,39 @@
|
| data += 2;
|
| break;
|
|
|
| + case 0xA1: // Fall through.
|
| + case 0xA3:
|
| + switch (operand_size()) {
|
| + case DOUBLEWORD_SIZE: {
|
| + const char* memory_location = NameOfAddress(
|
| + reinterpret_cast<byte*>(
|
| + *reinterpret_cast<int32_t*>(data + 1)));
|
| + if (*data & 0x2 == 0x2) { // Opcode 0xA3
|
| + AppendToBuffer("movzxlq rax,(%s)", memory_location);
|
| + } else { // Opcode 0xA1
|
| + AppendToBuffer("movzxlq (%s),rax", memory_location);
|
| + }
|
| + data += 5;
|
| + break;
|
| + }
|
| + case QUADWORD_SIZE: {
|
| + // New x64 instruction mov rax,(imm_64).
|
| + const char* memory_location = NameOfAddress(
|
| + *reinterpret_cast<byte**>(data + 1));
|
| + if (*data & 0x2 == 0x2) { // Opcode 0xA3
|
| + AppendToBuffer("movq rax,(%s)", memory_location);
|
| + } else { // Opcode 0xA1
|
| + AppendToBuffer("movq (%s),rax", memory_location);
|
| + }
|
| + data += 9;
|
| + break;
|
| + }
|
| + default:
|
| + UnimplementedInstruction();
|
| + data += 2;
|
| + }
|
| + break;
|
| +
|
| case 0xA8:
|
| AppendToBuffer("test al,0x%x", *reinterpret_cast<uint8_t*>(data + 1));
|
| data += 2;
|
|
|