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

Unified Diff: src/arm64/instrument-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/instrument-arm64.cc
diff --git a/src/arm64/instrument-arm64.cc b/src/arm64/instrument-arm64.cc
index dad89fe6bffff03ffb695a53e0617c5cd4779e14..bf878c526c221e54ad7afef32eaa9d6e1a36e954 100644
--- a/src/arm64/instrument-arm64.cc
+++ b/src/arm64/instrument-arm64.cc
@@ -61,39 +61,41 @@ typedef struct {
CounterType type;
} CounterDescriptor;
-
static const CounterDescriptor kCounterList[] = {
- {"Instruction", Cumulative},
-
- {"Move Immediate", Gauge},
- {"Add/Sub DP", Gauge},
- {"Logical DP", Gauge},
- {"Other Int DP", Gauge},
- {"FP DP", Gauge},
-
- {"Conditional Select", Gauge},
- {"Conditional Compare", Gauge},
-
- {"Unconditional Branch", Gauge},
- {"Compare and Branch", Gauge},
- {"Test and Branch", Gauge},
- {"Conditional Branch", Gauge},
-
- {"Load Integer", Gauge},
- {"Load FP", Gauge},
- {"Load Pair", Gauge},
- {"Load Literal", Gauge},
-
- {"Store Integer", Gauge},
- {"Store FP", Gauge},
- {"Store Pair", Gauge},
-
- {"PC Addressing", Gauge},
- {"Other", Gauge},
- {"SP Adjust", Gauge},
+ {"Instruction", Cumulative},
+
+ {"Move Immediate", Gauge},
+ {"Add/Sub DP", Gauge},
+ {"Logical DP", Gauge},
+ {"Other Int DP", Gauge},
+ {"FP DP", Gauge},
+
+ {"Conditional Select", Gauge},
+ {"Conditional Compare", Gauge},
+
+ {"Unconditional Branch", Gauge},
+ {"Compare and Branch", Gauge},
+ {"Test and Branch", Gauge},
+ {"Conditional Branch", Gauge},
+
+ {"Load Integer", Gauge},
+ {"Load FP", Gauge},
+ {"Load Pair", Gauge},
+ {"Load Literal", Gauge},
+ {"Load Exclusive", Gauge},
+ {"Load Acquire", Gauge},
+
+ {"Store Integer", Gauge},
+ {"Store FP", Gauge},
+ {"Store Pair", Gauge},
+ {"Store Exclusive", Gauge},
+ {"Store Release", Gauge},
+
+ {"PC Addressing", Gauge},
+ {"Other", Gauge},
+ {"SP Adjust", Gauge},
};
-
Instrument::Instrument(const char* datafile, uint64_t sample_period)
: output_stream_(stderr), sample_period_(sample_period) {
@@ -429,6 +431,29 @@ void Instrument::VisitLoadStoreUnsignedOffset(Instruction* instr) {
InstrumentLoadStore(instr);
}
+void Instrument::VisitLoadStoreExclusive(Instruction* instr) {
+ Update();
+ static Counter* load_counter = GetCounter("Load Exclusive");
+ static Counter* store_counter = GetCounter("Store Exclusive");
+
+ switch (instr->Mask(LoadStoreAcquireReleaseMask)) {
+ case LDXRB: // Fall-through.
+ case LDXRH: // Fall-through.
+ case LDXR_w: // Fall-through.
+ case LDXR_x:
+ load_counter->Increment();
+ break;
+ case STXRB: // Fall-through.
+ case STXRH: // Fall-through.
+ case STXR_w: // Fall-through.
+ case STXR_x:
+ store_counter->Increment();
+ break;
+ default:
+ UNREACHABLE();
+ }
+}
+
void Instrument::VisitLoadStoreAcquireRelease(Instruction* instr) {
Update();
static Counter* load_counter = GetCounter("Load Acquire");

Powered by Google App Engine
This is Rietveld 408576698