Index: src/arm64/disasm-arm64.cc |
diff --git a/src/arm64/disasm-arm64.cc b/src/arm64/disasm-arm64.cc |
index 8e022b1690f6e1efe86b344ee4e654e37aeeea8e..ee0132cdc9a4214638783164d8e456ec30eb50fb 100644 |
--- a/src/arm64/disasm-arm64.cc |
+++ b/src/arm64/disasm-arm64.cc |
@@ -914,12 +914,55 @@ void DisassemblingDecoder::VisitLoadStorePairOffset(Instruction* instr) { |
Format(instr, mnemonic, form); |
} |
+void DisassemblingDecoder::VisitLoadStoreExclusive(Instruction* instr) { |
+ const char* mnemonic = "unimplemented"; |
+ const char* form = "'Wt, ['Xns]"; |
+ const char* form_x = "'Xt, ['Xns]"; |
+ const char* form_stx = "'Ws, 'Wt, ['Xns]"; |
+ const char* form_stx_x = "'Ws, 'Xt, ['Xns]"; |
+ |
+ switch (instr->Mask(LoadStoreExclusiveMask)) { |
+ case STXRB: |
+ mnemonic = "stxrb"; |
+ form = form_stx; |
+ break; |
+ case LDXRB: |
+ mnemonic = "ldxrb"; |
+ break; |
+ case STXRH: |
+ mnemonic = "stxrh"; |
+ form = form_stx; |
+ break; |
+ case LDXRH: |
+ mnemonic = "ldxrh"; |
+ break; |
+ case STXR_w: |
+ mnemonic = "stxr"; |
+ form = form_stx; |
+ break; |
+ case LDXR_w: |
+ mnemonic = "ldxr"; |
+ break; |
+ case STXR_x: |
+ mnemonic = "stxr"; |
+ form = form_stx_x; |
+ break; |
+ case LDXR_x: |
+ mnemonic = "ldxr"; |
+ form = form_x; |
+ break; |
+ default: |
+ form = "(LoadStoreExclusive)"; |
+ } |
+ Format(instr, mnemonic, form); |
+} |
+ |
void DisassemblingDecoder::VisitLoadStoreAcquireRelease(Instruction *instr) { |
const char *mnemonic = "unimplemented"; |
- const char *form = "'Wt, ['Xn]"; |
- const char *form_x = "'Xt, ['Xn]"; |
- const char *form_stlx = "'Ws, 'Wt, ['Xn]"; |
- const char *form_stlx_x = "'Ws, 'Xt, ['Xn]"; |
+ const char* form = "'Wt, ['Xns]"; |
+ const char* form_x = "'Xt, ['Xns]"; |
+ const char* form_stlx = "'Ws, 'Wt, ['Xns]"; |
+ const char* form_stlx_x = "'Ws, 'Xt, ['Xns]"; |
switch (instr->Mask(LoadStoreAcquireReleaseMask)) { |
case LDAXR_b: mnemonic = "ldaxrb"; break; |
@@ -938,7 +981,8 @@ void DisassemblingDecoder::VisitLoadStoreAcquireRelease(Instruction *instr) { |
case STLXR_b: mnemonic = "stlxrb"; form = form_stlx; break; |
case STLXR_w: mnemonic = "stlxr"; form = form_stlx; break; |
case STLXR_x: mnemonic = "stlxr"; form = form_stlx_x; break; |
- default: form = "(LoadStoreAcquireReleaseMask)"; |
+ default: |
+ form = "(LoadStoreAcquireRelease)"; |
} |
Format(instr, mnemonic, form); |
} |