Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: src/arm64/disasm-arm64.cc

Issue 2754543006: [arm64] Use exclusive instructions in exchange (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698