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

Unified Diff: runtime/vm/flow_graph_builder.cc

Issue 1151523002: VM-internalize the default Map implementation. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix fingerprints. Created 5 years, 7 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 | « runtime/vm/flow_graph_builder.h ('k') | runtime/vm/method_recognizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_builder.cc
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index c414fe9a87fd91dcdf8a782611179d4559d1c411..aa73c5506071b784ed91c8e3ca20b13ce4ac4206 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -3324,6 +3324,25 @@ LoadFieldInstr* EffectGraphVisitor::BuildNativeGetter(
}
+ConstantInstr* EffectGraphVisitor::DoNativeSetterStoreValue(
+ NativeBodyNode* node,
+ intptr_t offset,
+ StoreBarrierType emit_store_barrier) {
+ Value* receiver = Bind(BuildLoadThisVar(node->scope()));
+ LocalVariable* value_var =
+ node->scope()->LookupVariable(Symbols::Value(), true);
+ Value* value = Bind(new(Z) LoadLocalInstr(*value_var));
+ StoreInstanceFieldInstr* store = new(Z) StoreInstanceFieldInstr(
+ offset,
+ receiver,
+ value,
+ emit_store_barrier,
+ node->token_pos());
+ Do(store);
+ return new(Z) ConstantInstr(Object::ZoneHandle(Z, Object::null()));
+}
+
+
void EffectGraphVisitor::VisitNativeBodyNode(NativeBodyNode* node) {
const Function& function = owner()->function();
if (!function.IsClosureFunction()) {
@@ -3427,6 +3446,59 @@ void EffectGraphVisitor::VisitNativeBodyNode(NativeBodyNode* node) {
node, kind, Bigint::used_offset(),
Type::ZoneHandle(Z, Type::SmiType()), kSmiCid));
}
+ case MethodRecognizer::kLinkedHashMap_getIndex: {
+ return ReturnDefinition(BuildNativeGetter(
+ node, kind, LinkedHashMap::index_offset(),
+ Type::ZoneHandle(Z, Type::DynamicType()),
+ kTypedDataUint32ArrayCid));
+ }
+ case MethodRecognizer::kLinkedHashMap_setIndex: {
+ return ReturnDefinition(DoNativeSetterStoreValue(
+ node, LinkedHashMap::index_offset(), kEmitStoreBarrier));
+ }
+ case MethodRecognizer::kLinkedHashMap_getData: {
+ return ReturnDefinition(BuildNativeGetter(
+ node, kind, LinkedHashMap::data_offset(),
+ Type::ZoneHandle(Z, Type::DynamicType()),
+ kArrayCid));
+ }
+ case MethodRecognizer::kLinkedHashMap_setData: {
+ return ReturnDefinition(DoNativeSetterStoreValue(
+ node, LinkedHashMap::data_offset(), kEmitStoreBarrier));
+ }
+ case MethodRecognizer::kLinkedHashMap_getHashMask: {
+ return ReturnDefinition(BuildNativeGetter(
+ node, kind, LinkedHashMap::hash_mask_offset(),
+ Type::ZoneHandle(Z, Type::SmiType()),
+ kSmiCid));
+ }
+ case MethodRecognizer::kLinkedHashMap_setHashMask: {
+ // Smi field; no barrier needed.
+ return ReturnDefinition(DoNativeSetterStoreValue(
+ node, LinkedHashMap::hash_mask_offset(), kNoStoreBarrier));
+ }
+ case MethodRecognizer::kLinkedHashMap_getUsedData: {
+ return ReturnDefinition(BuildNativeGetter(
+ node, kind, LinkedHashMap::used_data_offset(),
+ Type::ZoneHandle(Z, Type::SmiType()),
+ kSmiCid));
+ }
+ case MethodRecognizer::kLinkedHashMap_setUsedData: {
+ // Smi field; no barrier needed.
+ return ReturnDefinition(DoNativeSetterStoreValue(
+ node, LinkedHashMap::used_data_offset(), kNoStoreBarrier));
+ }
+ case MethodRecognizer::kLinkedHashMap_getDeletedKeys: {
+ return ReturnDefinition(BuildNativeGetter(
+ node, kind, LinkedHashMap::deleted_keys_offset(),
+ Type::ZoneHandle(Z, Type::SmiType()),
+ kSmiCid));
+ }
+ case MethodRecognizer::kLinkedHashMap_setDeletedKeys: {
+ // Smi field; no barrier needed.
+ return ReturnDefinition(DoNativeSetterStoreValue(
+ node, LinkedHashMap::deleted_keys_offset(), kNoStoreBarrier));
+ }
case MethodRecognizer::kBigint_getNeg: {
return ReturnDefinition(BuildNativeGetter(
node, kind, Bigint::neg_offset(),
« no previous file with comments | « runtime/vm/flow_graph_builder.h ('k') | runtime/vm/method_recognizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698