Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc
index 66b7f45..9258703 100644
--- a/src/arm/disasm-arm.cc
+++ b/src/arm/disasm-arm.cc
@@ -1188,7 +1188,13 @@
}
}
} else {
- UNREACHABLE();
+ // PU == 0b01, BW == 0b11, Bits(9, 6) != 0b0001
+ if ((instr->Bits(20, 16) == 0x1f) &&
+ (instr->Bits(11, 4) == 0xf3)) {
+ Format(instr, "rbit'cond 'rd, 'rm");
+ } else {
+ UNREACHABLE();
+ }
}
break;
}
@@ -1689,6 +1695,12 @@
}
+static const char* const barrier_option_names[] = {
+ "invalid", "oshld", "oshst", "osh", "invalid", "nshld", "nshst", "nsh",
+ "invalid", "ishld", "ishst", "ish", "invalid", "ld", "st", "sy",
+};
+
+
void Decoder::DecodeSpecialCondition(Instruction* instr) {
switch (instr->SpecialValue()) {
case 5:
@@ -1765,6 +1777,24 @@
out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_,
"pld [r%d, #+%d]", Rn, offset);
}
+ } else if (instr->SpecialValue() == 0xA && instr->Bits(22, 20) == 7) {
+ int option = instr->Bits(3, 0);
+ switch (instr->Bits(7, 4)) {
+ case 4:
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_,
+ "dsb %s", barrier_option_names[option]);
+ break;
+ case 5:
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_,
+ "dmb %s", barrier_option_names[option]);
+ break;
+ case 6:
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_,
+ "isb %s", barrier_option_names[option]);
+ break;
+ default:
+ Unknown(instr);
+ }
} else {
Unknown(instr);
}