| Index: runtime/vm/disassembler_arm64.cc
|
| diff --git a/runtime/vm/disassembler_arm64.cc b/runtime/vm/disassembler_arm64.cc
|
| index 6bbc3c76e4c28a17407ff25199830278fce1acda..448fda328ca7c3203add6a7da79a09de09df01b0 100644
|
| --- a/runtime/vm/disassembler_arm64.cc
|
| +++ b/runtime/vm/disassembler_arm64.cc
|
| @@ -16,9 +16,7 @@ namespace dart {
|
| class ARM64Decoder : public ValueObject {
|
| public:
|
| ARM64Decoder(char* buffer, size_t buffer_size)
|
| - : buffer_(buffer),
|
| - buffer_size_(buffer_size),
|
| - buffer_pos_(0) {
|
| + : buffer_(buffer), buffer_size_(buffer_size), buffer_pos_(0) {
|
| buffer_[buffer_pos_] = '\0';
|
| }
|
|
|
| @@ -43,16 +41,15 @@ class ARM64Decoder : public ValueObject {
|
|
|
| // Handle formatting of instructions and their options.
|
| int FormatRegister(Instr* instr, const char* option);
|
| - int FormatVRegister(Instr*instr, const char* option);
|
| + int FormatVRegister(Instr* instr, const char* option);
|
| int FormatOption(Instr* instr, const char* format);
|
| void Format(Instr* instr, const char* format);
|
| void Unknown(Instr* instr);
|
|
|
| - // Decode instructions.
|
| - #define DECODE_OP(op) \
|
| - void Decode##op(Instr* instr);
|
| +// Decode instructions.
|
| +#define DECODE_OP(op) void Decode##op(Instr* instr);
|
| APPLY_OP_LIST(DECODE_OP)
|
| - #undef DECODE_OP
|
| +#undef DECODE_OP
|
|
|
|
|
| // Convenience functions.
|
| @@ -60,9 +57,9 @@ class ARM64Decoder : public ValueObject {
|
| char* current_position_in_buffer() { return buffer_ + buffer_pos_; }
|
| size_t remaining_size_in_buffer() { return buffer_size_ - buffer_pos_; }
|
|
|
| - char* buffer_; // Decode instructions into this buffer.
|
| + char* buffer_; // Decode instructions into this buffer.
|
| size_t buffer_size_; // The size of the character buffer.
|
| - size_t buffer_pos_; // Current character position in buffer.
|
| + size_t buffer_pos_; // Current character position in buffer.
|
|
|
| DISALLOW_ALLOCATION();
|
| DISALLOW_COPY_AND_ASSIGN(ARM64Decoder);
|
| @@ -70,7 +67,7 @@ class ARM64Decoder : public ValueObject {
|
|
|
|
|
| // Support for assertions in the ARM64Decoder formatting functions.
|
| -#define STRING_STARTS_WITH(string, compare_string) \
|
| +#define STRING_STARTS_WITH(string, compare_string) \
|
| (strncmp(string, compare_string, strlen(compare_string)) == 0)
|
|
|
|
|
| @@ -89,10 +86,9 @@ void ARM64Decoder::Print(const char* str) {
|
| // formatting, except for register aliases ctx (r9), pp (r10) and sp (r19).
|
| // See for example the command "objdump -d <binary file>".
|
| static const char* reg_names[kNumberOfCpuRegisters] = {
|
| - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
| - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
|
| - "ip0", "ip1", "r18", "sp", "r20", "r21", "r22", "r23",
|
| - "r24", "r25", "thr", "pp", "ctx", "fp", "lr", "r31",
|
| + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
|
| + "r11", "r12", "r13", "r14", "r15", "ip0", "ip1", "r18", "sp", "r20", "r21",
|
| + "r22", "r23", "r24", "r25", "thr", "pp", "ctx", "fp", "lr", "r31",
|
| };
|
|
|
|
|
| @@ -113,29 +109,25 @@ void ARM64Decoder::PrintVRegister(int reg) {
|
| ASSERT(0 <= reg);
|
| ASSERT(reg < kNumberOfVRegisters);
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "v%d", reg);
|
| + remaining_size_in_buffer(), "v%d", reg);
|
| }
|
|
|
|
|
| // These shift names are defined in a way to match the native disassembler
|
| // formatting. See for example the command "objdump -d <binary file>".
|
| -static const char* shift_names[kMaxShift] = {
|
| - "lsl", "lsr", "asr", "ror"
|
| -};
|
| +static const char* shift_names[kMaxShift] = {"lsl", "lsr", "asr", "ror"};
|
|
|
|
|
| static const char* extend_names[kMaxExtend] = {
|
| - "uxtb", "uxth", "uxtw", "uxtx",
|
| - "sxtb", "sxth", "sxtw", "sxtx",
|
| + "uxtb", "uxth", "uxtw", "uxtx", "sxtb", "sxth", "sxtw", "sxtx",
|
| };
|
|
|
|
|
| // These condition names are defined in a way to match the native disassembler
|
| // formatting. See for example the command "objdump -d <binary file>".
|
| static const char* cond_names[kMaxCondition] = {
|
| - "eq", "ne", "cs" , "cc" , "mi" , "pl" , "vs" , "vc" ,
|
| - "hi", "ls", "ge", "lt", "gt", "le", "", "invalid",
|
| + "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
|
| + "hi", "ls", "ge", "lt", "gt", "le", "", "invalid",
|
| };
|
|
|
|
|
| @@ -172,25 +164,21 @@ void ARM64Decoder::PrintShiftExtendRm(Instr* instr) {
|
| } else if (((shift == LSR) || (shift == ASR)) && (shift_amount == 0)) {
|
| shift_amount = 32;
|
| }
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - " %s #%d",
|
| - shift_names[shift],
|
| - shift_amount);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + " %s #%d", shift_names[shift], shift_amount);
|
| } else {
|
| ASSERT(instr->IsExtend());
|
| // by register
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - " %s",
|
| - extend_names[extend]);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + " %s", extend_names[extend]);
|
| if (((instr->SFField() == 1) && (extend == UXTX)) ||
|
| ((instr->SFField() == 0) && (extend == UXTW))) {
|
| // Shift amount.
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - " %d",
|
| - extend_shift_amount);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + " %d", extend_shift_amount);
|
| }
|
| }
|
| }
|
| @@ -207,9 +195,7 @@ void ARM64Decoder::PrintMemOperand(Instr* instr) {
|
| PrintRegister(rn, R31IsSP);
|
| if (off != 0) {
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d",
|
| - off);
|
| + remaining_size_in_buffer(), ", #%d", off);
|
| }
|
| Print("]");
|
| } else {
|
| @@ -220,9 +206,7 @@ void ARM64Decoder::PrintMemOperand(Instr* instr) {
|
| Print("[");
|
| PrintRegister(rn, R31IsSP);
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d",
|
| - imm9);
|
| + remaining_size_in_buffer(), ", #%d", imm9);
|
| Print("]");
|
| break;
|
| }
|
| @@ -233,9 +217,7 @@ void ARM64Decoder::PrintMemOperand(Instr* instr) {
|
| PrintRegister(rn, R31IsSP);
|
| Print("]");
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d !",
|
| - imm9);
|
| + remaining_size_in_buffer(), ", #%d !", imm9);
|
| break;
|
| }
|
| case 2: {
|
| @@ -246,10 +228,9 @@ void ARM64Decoder::PrintMemOperand(Instr* instr) {
|
| PrintRegister(rn, R31IsSP);
|
| Print(", ");
|
| PrintRegister(rm, R31IsZR);
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - " %s",
|
| - extend_names[ext]);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), " %s", extend_names[ext]);
|
| if (s == 1) {
|
| Print(" scaled");
|
| }
|
| @@ -262,15 +243,11 @@ void ARM64Decoder::PrintMemOperand(Instr* instr) {
|
| Print("[");
|
| PrintRegister(rn, R31IsSP);
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d",
|
| - imm9);
|
| + remaining_size_in_buffer(), ", #%d", imm9);
|
| Print("] !");
|
| break;
|
| }
|
| - default: {
|
| - Print("???");
|
| - }
|
| + default: { Print("???"); }
|
| }
|
| }
|
| }
|
| @@ -285,24 +262,20 @@ void ARM64Decoder::PrintPairMemOperand(Instr* instr) {
|
| switch (instr->Bits(23, 3)) {
|
| case 1:
|
| // rn + (imm7 << (2 + B31)), post-index, writeback.
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "], #%d !",
|
| - offset);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + "], #%d !", offset);
|
| break;
|
| case 2:
|
| // rn + (imm7 << (2 + B31)), pre-index, no writeback.
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d ]",
|
| - offset);
|
| + remaining_size_in_buffer(), ", #%d ]", offset);
|
| break;
|
| case 3:
|
| // rn + (imm7 << (2 + B31)), pre-index, writeback.
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - ", #%d ]!",
|
| - offset);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + ", #%d ]!", offset);
|
| break;
|
| default:
|
| Print(", ???]");
|
| @@ -381,17 +354,13 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| ASSERT(STRING_STARTS_WITH(format, "bitimm"));
|
| const uint64_t imm = instr->ImmLogical();
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "0x%" Px64,
|
| - imm);
|
| + remaining_size_in_buffer(), "0x%" Px64, imm);
|
| return 6;
|
| } else {
|
| ASSERT(STRING_STARTS_WITH(format, "bitpos"));
|
| int bitpos = instr->Bits(19, 4) | (instr->Bit(31) << 5);
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "#%d",
|
| - bitpos);
|
| + remaining_size_in_buffer(), "#%d", bitpos);
|
| return 6;
|
| }
|
| }
|
| @@ -410,9 +379,7 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| typ = "d";
|
| }
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%s",
|
| - typ);
|
| + remaining_size_in_buffer(), "%s", typ);
|
| return 3;
|
| } else {
|
| ASSERT(STRING_STARTS_WITH(format, "cond"));
|
| @@ -425,52 +392,55 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| ASSERT(STRING_STARTS_WITH(format, "dest26"));
|
| int64_t off = instr->SImm26Field() << 2;
|
| uword destination = reinterpret_cast<uword>(instr) + off;
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%#" Px "",
|
| - destination);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "%#" Px "", destination);
|
| } else {
|
| if (format[5] == '4') {
|
| ASSERT(STRING_STARTS_WITH(format, "dest14"));
|
| int64_t off = instr->SImm14Field() << 2;
|
| uword destination = reinterpret_cast<uword>(instr) + off;
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%#" Px "",
|
| - destination);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "%#" Px "", destination);
|
| } else {
|
| ASSERT(STRING_STARTS_WITH(format, "dest19"));
|
| int64_t off = instr->SImm19Field() << 2;
|
| uword destination = reinterpret_cast<uword>(instr) + off;
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%#" Px "",
|
| - destination);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "%#" Px "", destination);
|
| }
|
| }
|
| return 6;
|
| }
|
| case 'f': {
|
| ASSERT(STRING_STARTS_WITH(format, "fsz"));
|
| - const int sz = instr->SzField();
|
| - char const* sz_str;
|
| - switch (sz) {
|
| - case 0:
|
| - if (instr->Bit(23) == 1) {
|
| - sz_str = "q";
|
| - } else {
|
| - sz_str = "b";
|
| - }
|
| - break;
|
| - case 1: sz_str = "h"; break;
|
| - case 2: sz_str = "s"; break;
|
| - case 3: sz_str = "d"; break;
|
| - default: sz_str = "?"; break;
|
| - }
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%s",
|
| - sz_str);
|
| + const int sz = instr->SzField();
|
| + char const* sz_str;
|
| + switch (sz) {
|
| + case 0:
|
| + if (instr->Bit(23) == 1) {
|
| + sz_str = "q";
|
| + } else {
|
| + sz_str = "b";
|
| + }
|
| + break;
|
| + case 1:
|
| + sz_str = "h";
|
| + break;
|
| + case 2:
|
| + sz_str = "s";
|
| + break;
|
| + case 3:
|
| + sz_str = "d";
|
| + break;
|
| + default:
|
| + sz_str = "?";
|
| + break;
|
| + }
|
| + buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "%s", sz_str);
|
| return 3;
|
| }
|
| case 'h': {
|
| @@ -478,9 +448,7 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| const int shift = instr->HWField() << 4;
|
| if (shift != 0) {
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "lsl %d",
|
| - shift);
|
| + remaining_size_in_buffer(), "lsl %d", shift);
|
| }
|
| return 2;
|
| }
|
| @@ -509,9 +477,7 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| idx = imm >> (shift + 3);
|
| }
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "[%d]",
|
| - idx);
|
| + remaining_size_in_buffer(), "[%d]", idx);
|
| return 4;
|
| } else if (format[3] == '1') {
|
| uint64_t imm;
|
| @@ -533,18 +499,14 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| imm = instr->Imm16Field();
|
| }
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "0x%" Px64,
|
| - imm);
|
| + remaining_size_in_buffer(), "0x%" Px64, imm);
|
| return ret;
|
| } else {
|
| ASSERT(STRING_STARTS_WITH(format, "immd"));
|
| - double dimm = bit_cast<double, int64_t>(
|
| - Instr::VFPExpandImm(instr->Imm8Field()));
|
| + double dimm =
|
| + bit_cast<double, int64_t>(Instr::VFPExpandImm(instr->Imm8Field()));
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%f",
|
| - dimm);
|
| + remaining_size_in_buffer(), "%f", dimm);
|
| return 4;
|
| }
|
| }
|
| @@ -562,19 +524,17 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| const int64_t off = (immhi << 2) | immlo;
|
| const int64_t pc = reinterpret_cast<int64_t>(instr);
|
| const int64_t dest = pc + off;
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "0x%" Px64,
|
| - dest);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "0x%" Px64, dest);
|
| } else {
|
| ASSERT(STRING_STARTS_WITH(format, "pcldr"));
|
| const int64_t off = instr->SImm19Field() << 2;
|
| const int64_t pc = reinterpret_cast<int64_t>(instr);
|
| const int64_t dest = pc + off;
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "0x%" Px64,
|
| - dest);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(),
|
| + remaining_size_in_buffer(), "0x%" Px64, dest);
|
| }
|
| return 5;
|
| } else {
|
| @@ -592,21 +552,31 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| char const* sz_str = NULL;
|
| if (instr->Bits(14, 2) == 3) {
|
| switch (instr->Bit(22)) {
|
| - case 0: sz_str = "s"; break;
|
| - case 1: sz_str = "d"; break;
|
| - default: UNREACHABLE(); break;
|
| + case 0:
|
| + sz_str = "s";
|
| + break;
|
| + case 1:
|
| + sz_str = "d";
|
| + break;
|
| + default:
|
| + UNREACHABLE();
|
| + break;
|
| }
|
| } else {
|
| switch (instr->Bit(22)) {
|
| - case 0: sz_str = "w"; break;
|
| - case 1: sz_str = "x"; break;
|
| - default: UNREACHABLE(); break;
|
| + case 0:
|
| + sz_str = "w";
|
| + break;
|
| + case 1:
|
| + sz_str = "x";
|
| + break;
|
| + default:
|
| + UNREACHABLE();
|
| + break;
|
| }
|
| }
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%s",
|
| - sz_str);
|
| + remaining_size_in_buffer(), "%s", sz_str);
|
| return 3;
|
| } else {
|
| return FormatVRegister(instr, format);
|
| @@ -632,16 +602,24 @@ int ARM64Decoder::FormatOption(Instr* instr, const char* format) {
|
| const int sz = instr->SzField();
|
| char const* sz_str;
|
| switch (sz) {
|
| - case 0: sz_str = "b"; break;
|
| - case 1: sz_str = "h"; break;
|
| - case 2: sz_str = "w"; break;
|
| - case 3: sz_str = "x"; break;
|
| - default: sz_str = "?"; break;
|
| + case 0:
|
| + sz_str = "b";
|
| + break;
|
| + case 1:
|
| + sz_str = "h";
|
| + break;
|
| + case 2:
|
| + sz_str = "w";
|
| + break;
|
| + case 3:
|
| + sz_str = "x";
|
| + break;
|
| + default:
|
| + sz_str = "?";
|
| + break;
|
| }
|
| buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - "%s",
|
| - sz_str);
|
| + remaining_size_in_buffer(), "%s", sz_str);
|
| return 2;
|
| } else if (format[1] == ' ') {
|
| if (instr->HasS()) {
|
| @@ -675,7 +653,7 @@ void ARM64Decoder::Format(Instr* instr, const char* format) {
|
| }
|
| cur = *format++;
|
| }
|
| - buffer_[buffer_pos_] = '\0';
|
| + buffer_[buffer_pos_] = '\0';
|
| }
|
|
|
|
|
| @@ -748,9 +726,7 @@ void ARM64Decoder::DecodeLoadRegLiteral(Instr* instr) {
|
|
|
|
|
| void ARM64Decoder::DecodeLoadStoreExclusive(Instr* instr) {
|
| - if ((instr->Bit(23) != 0) ||
|
| - (instr->Bit(21) != 0) ||
|
| - (instr->Bit(15) != 0)) {
|
| + if ((instr->Bit(23) != 0) || (instr->Bit(21) != 0) || (instr->Bit(15) != 0)) {
|
| Unknown(instr);
|
| }
|
| const int32_t size = instr->Bits(30, 2);
|
| @@ -859,10 +835,9 @@ void ARM64Decoder::DecodeExceptionGen(Instr* instr) {
|
| if (instr->Imm16Field() == Instr::kStopMessageCode) {
|
| const char* message = *reinterpret_cast<const char**>(
|
| reinterpret_cast<intptr_t>(instr) - 2 * Instr::kInstrSize);
|
| - buffer_pos_ += OS::SNPrint(current_position_in_buffer(),
|
| - remaining_size_in_buffer(),
|
| - " ; \"%s\"",
|
| - message);
|
| + buffer_pos_ +=
|
| + OS::SNPrint(current_position_in_buffer(), remaining_size_in_buffer(),
|
| + " ; \"%s\"", message);
|
| }
|
| } else if ((instr->Bits(0, 2) == 0) && (instr->Bits(2, 3) == 0) &&
|
| (instr->Bits(21, 3) == 2)) {
|
| @@ -1187,7 +1162,7 @@ void ARM64Decoder::DecodeSIMDCopy(Instr* instr) {
|
| } else {
|
| Format(instr, "vmovrd 'rd, 'vn'idx5");
|
| }
|
| - } else if ((Q == 1) && (op == 0) && (imm4 == 0)) {
|
| + } else if ((Q == 1) && (op == 0) && (imm4 == 0)) {
|
| Format(instr, "vdup'csz 'vd, 'vn'idx5");
|
| } else if ((Q == 1) && (op == 0) && (imm4 == 3)) {
|
| Format(instr, "vins'csz 'vd'idx5, 'rn");
|
| @@ -1487,10 +1462,14 @@ void ARM64Decoder::InstructionDecode(uword pc) {
|
| }
|
|
|
|
|
| -void Disassembler::DecodeInstruction(char* hex_buffer, intptr_t hex_size,
|
| - char* human_buffer, intptr_t human_size,
|
| - int* out_instr_size, const Code& code,
|
| - Object** object, uword pc) {
|
| +void Disassembler::DecodeInstruction(char* hex_buffer,
|
| + intptr_t hex_size,
|
| + char* human_buffer,
|
| + intptr_t human_size,
|
| + int* out_instr_size,
|
| + const Code& code,
|
| + Object** object,
|
| + uword pc) {
|
| ARM64Decoder decoder(human_buffer, human_size);
|
| decoder.InstructionDecode(pc);
|
| int32_t instruction_bits = Instr::At(pc)->InstructionBits();
|
|
|