| Index: src/arm64/disasm-arm64.cc
|
| diff --git a/src/arm64/disasm-arm64.cc b/src/arm64/disasm-arm64.cc
|
| index 00c3ec25d6a76331547e6e5ecbc14e6196703789..9c8d8af09947b2be535c09f8181b4aa940d46299 100644
|
| --- a/src/arm64/disasm-arm64.cc
|
| +++ b/src/arm64/disasm-arm64.cc
|
| @@ -914,6 +914,43 @@ void DisassemblingDecoder::VisitLoadStorePairOffset(Instruction* instr) {
|
| Format(instr, mnemonic, form);
|
| }
|
|
|
| +void DisassemblingDecoder::VisitLoadStoreAcquireRelease(Instruction *instr) {
|
| + const char *mnemonic = "unimplemented";
|
| + const char *form = "'Wt, ['Xn]";
|
| + const char *form_x = "'Xt, ['Xn]";
|
| +
|
| + switch (instr->Mask(LoadStoreAcquireReleaseMask)) {
|
| + case LDAXR_b: mnemonic = "ldaxrb"; break;
|
| + case STLR_b: mnemonic = "stlrb"; break;
|
| + case LDAR_b: mnemonic = "ldarb"; break;
|
| + case LDAXR_h: mnemonic = "ldaxrh"; break;
|
| + case STLR_h: mnemonic = "stlrh"; break;
|
| + case LDAR_h: mnemonic = "ldarh"; break;
|
| + case LDAXR_w: mnemonic = "ldaxr"; break;
|
| + case STLR_w: mnemonic = "stlr"; break;
|
| + case LDAR_w: mnemonic = "ldar"; break;
|
| + case LDAXR_x: mnemonic = "ldaxr"; form = form_x; break;
|
| + case STLR_x: mnemonic = "stlr"; form = form_x; break;
|
| + case LDAR_x: mnemonic = "ldar"; form = form_x; break;
|
| + default: form = "(LoadStoreAcquireReleaseMask)";
|
| + }
|
| + Format(instr, mnemonic, form);
|
| +}
|
| +
|
| +void DisassemblingDecoder::VisitStoreReleaseExclusive(Instruction *instr) {
|
| + const char *mnemonic = "unimplemented";
|
| + const char *form = "'Ws, 'Wt, ['Xn]";
|
| + const char *form_x = "'Ws, 'Xt, ['Xn]";
|
| +
|
| + switch (instr->Mask(StoreReleaseExclusiveMask)) {
|
| + case STLXR_h: mnemonic = "stlxrh"; break;
|
| + case STLXR_b: mnemonic = "stlxrb"; break;
|
| + case STLXR_w: mnemonic = "stlxr"; break;
|
| + case STLXR_x: mnemonic = "stlxr"; form = form_x; break;
|
| + default: form = "(StoreReleaseExclusiveMask)";
|
| + }
|
| + Format(instr, mnemonic, form);
|
| +}
|
|
|
| void DisassemblingDecoder::VisitFPCompare(Instruction* instr) {
|
| const char *mnemonic = "unimplemented";
|
| @@ -1295,6 +1332,9 @@ int DisassemblingDecoder::SubstituteRegisterField(Instruction* instr,
|
| }
|
| break;
|
| }
|
| + case 's':
|
| + reg_num = instr->Rs();
|
| + break;
|
| default: UNREACHABLE();
|
| }
|
|
|
|
|