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

Unified Diff: src/code-stub-assembler.cc

Issue 2040193002: [stubs] Fixed tests that prevented LoadICTF stubs from being enabled. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « src/code-stub-assembler.h ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stub-assembler.cc
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
index d9db4999e0c88342df3cc36de45aa9cfac3ab72c..cdd36b30d1e86ea2a200ec6856bcb9c94920040e 100644
--- a/src/code-stub-assembler.cc
+++ b/src/code-stub-assembler.cc
@@ -1444,6 +1444,34 @@ Node* CodeStubAssembler::BitFieldDecode(Node* word32, uint32_t shift,
Int32Constant(shift));
}
+void CodeStubAssembler::SetCounter(StatsCounter* counter, int value) {
+ if (FLAG_native_code_counters && counter->Enabled()) {
+ Node* counter_address = ExternalConstant(ExternalReference(counter));
+ StoreNoWriteBarrier(MachineRepresentation::kWord32, counter_address,
+ Int32Constant(value));
+ }
+}
+
+void CodeStubAssembler::IncrementCounter(StatsCounter* counter, int delta) {
+ DCHECK(delta > 0);
+ if (FLAG_native_code_counters && counter->Enabled()) {
+ Node* counter_address = ExternalConstant(ExternalReference(counter));
+ Node* value = Load(MachineType::Int32(), counter_address);
+ value = Int32Add(value, Int32Constant(delta));
+ StoreNoWriteBarrier(MachineRepresentation::kWord32, counter_address, value);
+ }
+}
+
+void CodeStubAssembler::DecrementCounter(StatsCounter* counter, int delta) {
+ DCHECK(delta > 0);
+ if (FLAG_native_code_counters && counter->Enabled()) {
+ Node* counter_address = ExternalConstant(ExternalReference(counter));
+ Node* value = Load(MachineType::Int32(), counter_address);
+ value = Int32Sub(value, Int32Constant(delta));
+ StoreNoWriteBarrier(MachineRepresentation::kWord32, counter_address, value);
+ }
+}
+
void CodeStubAssembler::TryToName(Node* key, Label* if_keyisindex,
Variable* var_index, Label* if_keyisunique,
Label* if_bailout) {
@@ -2157,8 +2185,10 @@ void CodeStubAssembler::TryProbeStubCacheTable(
#ifdef DEBUG
if (FLAG_test_secondary_stub_cache && table == StubCache::kPrimary) {
Goto(if_miss);
+ return;
} else if (FLAG_test_primary_stub_cache && table == StubCache::kSecondary) {
Goto(if_miss);
+ return;
}
#endif
// The {table_offset} holds the entry offset times four (due to masking
@@ -2202,10 +2232,13 @@ void CodeStubAssembler::TryProbeStubCache(
StubCache* stub_cache, Code::Flags flags, compiler::Node* receiver,
compiler::Node* name, Label* if_handler, Variable* var_handler,
Label* if_miss) {
- Label try_secondary(this);
+ Label try_secondary(this), miss(this);
+
+ Counters* counters = isolate()->counters();
+ IncrementCounter(counters->megamorphic_stub_cache_probes(), 1);
// Check that the {receiver} isn't a smi.
- GotoIf(WordIsSmi(receiver), if_miss);
+ GotoIf(WordIsSmi(receiver), &miss);
Node* receiver_map = LoadMap(receiver);
@@ -2220,8 +2253,13 @@ void CodeStubAssembler::TryProbeStubCache(
Node* secondary_offset =
StubCacheSecondaryOffset(name, flags, primary_offset);
TryProbeStubCacheTable(stub_cache, kSecondary, secondary_offset, name,
- flags, receiver_map, if_handler, var_handler,
- if_miss);
+ flags, receiver_map, if_handler, var_handler, &miss);
+ }
+
+ Bind(&miss);
+ {
+ IncrementCounter(counters->megamorphic_stub_cache_misses(), 1);
+ Goto(if_miss);
}
}
« no previous file with comments | « src/code-stub-assembler.h ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698