Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc
index 20a898e..1bb33fa 100644
--- a/src/arm/disasm-arm.cc
+++ b/src/arm/disasm-arm.cc
@@ -40,6 +40,7 @@
namespace v8 {
namespace internal {
+const auto GetRegConfig = RegisterConfiguration::Crankshaft;
//------------------------------------------------------------------------------
@@ -755,7 +756,45 @@
Format(instr, "'um'al'cond's 'rd, 'rn, 'rm, 'rs");
}
} else {
- Unknown(instr); // not used by V8
+ if (instr->Bits(24, 23) == 3) {
+ if (instr->Bit(20) == 1) {
+ // ldrex
+ switch (instr->Bits(22, 21)) {
+ case 0:
+ Format(instr, "ldrex'cond 'rt, ['rn]");
+ break;
+ case 2:
+ Format(instr, "ldrexb'cond 'rt, ['rn]");
+ break;
+ case 3:
+ Format(instr, "ldrexh'cond 'rt, ['rn]");
+ break;
+ default:
+ UNREACHABLE();
+ break;
+ }
+ } else {
+ // strex
+ // The instruction is documented as strex rd, rt, [rn], but the
+ // "rt" register is using the rm bits.
+ switch (instr->Bits(22, 21)) {
+ case 0:
+ Format(instr, "strex'cond 'rd, 'rm, ['rn]");
+ break;
+ case 2:
+ Format(instr, "strexb'cond 'rd, 'rm, ['rn]");
+ break;
+ case 3:
+ Format(instr, "strexh'cond 'rd, 'rm, ['rn]");
+ break;
+ default:
+ UNREACHABLE();
+ break;
+ }
+ }
+ } else {
+ Unknown(instr); // not used by V8
+ }
}
} else if ((instr->Bit(20) == 0) && ((instr->Bits(7, 4) & 0xd) == 0xd)) {
// ldrd, strd
@@ -2010,7 +2049,7 @@
const char* NameConverter::NameOfAddress(byte* addr) const {
- v8::internal::SNPrintF(tmp_buffer_, "%p", addr);
+ v8::internal::SNPrintF(tmp_buffer_, "%p", static_cast<void*>(addr));
return tmp_buffer_.start();
}
@@ -2021,7 +2060,7 @@
const char* NameConverter::NameOfCPURegister(int reg) const {
- return v8::internal::Register::from_code(reg).ToString();
+ return v8::internal::GetRegConfig()->GetGeneralRegisterName(reg);
}
@@ -2073,9 +2112,8 @@
buffer[0] = '\0';
byte* prev_pc = pc;
pc += d.InstructionDecode(buffer, pc);
- v8::internal::PrintF(
- f, "%p %08x %s\n",
- prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start());
+ v8::internal::PrintF(f, "%p %08x %s\n", static_cast<void*>(prev_pc),
+ *reinterpret_cast<int32_t*>(prev_pc), buffer.start());
}
}