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(); |
} |