| Index: src/arm/disasm-arm.cc
|
| diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc
|
| index 66b7f4584943b3b9dc9fd3aa9749d39d5039a6a0..ecf5acc93593e18f60875e60664f46322da54a38 100644
|
| --- a/src/arm/disasm-arm.cc
|
| +++ b/src/arm/disasm-arm.cc
|
| @@ -1689,6 +1689,12 @@ void Decoder::DecodeType6CoprocessorIns(Instruction* instr) {
|
| }
|
|
|
|
|
| +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 +1771,24 @@ void Decoder::DecodeSpecialCondition(Instruction* instr) {
|
| 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);
|
| }
|
|
|