Reviewers: titzer,

Description:
Implement lowering of JSStoreContext to machine operators.

[email protected]

Please review this at https://codereview.chromium.org/420073004/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+15, -22 lines):
  M src/compiler/js-generic-lowering.cc
  M src/runtime.h
  M src/runtime.cc
  M tools/generate-runtime-tests.py


Index: src/compiler/js-generic-lowering.cc
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc index 3526715638ad6ff90af8f164c6d1d89498e037c3..f87006f08b4c4a5d8267099cd10ad9efa0e36580 100644
--- a/src/compiler/js-generic-lowering.cc
+++ b/src/compiler/js-generic-lowering.cc
@@ -388,9 +388,19 @@ Node* JSGenericLowering::LowerJSLoadContext(Node* node) {

 Node* JSGenericLowering::LowerJSStoreContext(Node* node) {
   ContextAccess access = OpParameter<ContextAccess>(node);
-  PatchInsertInput(node, 1, SmiConstant(access.depth()));
-  PatchInsertInput(node, 2, SmiConstant(access.index()));
-  ReplaceWithRuntimeCall(node, Runtime::kStoreContextRelative, 4);
+ // TODO(mstarzinger): Use simplified operators instead of machine operators
+  // here so that load/store optimization can be applied afterwards.
+  for (int i = 0; i < access.depth(); ++i) {
+    node->ReplaceInput(
+        0, graph()->NewNode(
+               machine()->Load(kMachineTagged),
+               NodeProperties::GetValueInput(node, 0),
+               Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)),
+               NodeProperties::GetEffectInput(node)));
+  }
+  node->ReplaceInput(2, NodeProperties::GetValueInput(node, 1));
+ node->ReplaceInput(1, Int32Constant(Context::SlotOffset(access.index())));
+  PatchOperator(node, machine()->Store(kMachineTagged, kFullWriteBarrier));
   return node;
 }

Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index 7afa3a6aa6e6122bc1932a2a320d3077684d18d9..c1c3f8873e1ff99abca99c61a7944711f4cebb7a 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -9408,22 +9408,6 @@ RUNTIME_FUNCTION(Runtime_StoreLookupSlot) {
 }


-RUNTIME_FUNCTION(Runtime_StoreContextRelative) {
-  SealHandleScope shs(isolate);
-  ASSERT(args.length() == 4);
-  CONVERT_ARG_CHECKED(Context, context, 0);
-  CONVERT_SMI_ARG_CHECKED(depth, 1);
-  CONVERT_SMI_ARG_CHECKED(index, 2);
-  CONVERT_ARG_CHECKED(Object, value, 3);
-  while (depth-- > 0) {
-    context = context->previous();
-    ASSERT(context->IsContext());
-  }
-  context->set(index, value);
-  return isolate->heap()->undefined_value();
-}
-
-
 RUNTIME_FUNCTION(Runtime_Throw) {
   HandleScope scope(isolate);
   ASSERT(args.length() == 1);
Index: src/runtime.h
diff --git a/src/runtime.h b/src/runtime.h
index 67e6148c2f3a54a046452a8f79be64c9c4400981..381d4d57e73f5d1d9f59aea2e39443d09b8cff0a 100644
--- a/src/runtime.h
+++ b/src/runtime.h
@@ -481,7 +481,6 @@ namespace internal {
   F(LoadLookupSlot, 2, 2)                                            \
   F(LoadLookupSlotNoReferenceError, 2, 2)                            \
   F(StoreLookupSlot, 4, 1)                                           \
-  F(StoreContextRelative, 4, 1) /* TODO(turbofan): Only temporary */ \
                                                                      \
   /* Declarations and initialization */                              \
   F(DeclareGlobals, 3, 1)                                            \
Index: tools/generate-runtime-tests.py
diff --git a/tools/generate-runtime-tests.py b/tools/generate-runtime-tests.py index d766409ef63476eed18ea783fc6e8e211a51b3a5..58175394a3d6ce2e1c6bc6ea0fbc9ae138c538bf 100755
--- a/tools/generate-runtime-tests.py
+++ b/tools/generate-runtime-tests.py
@@ -47,9 +47,9 @@ EXPAND_MACROS = [
# that the parser doesn't bit-rot. Change the values as needed when you add, # remove or change runtime functions, but make sure we don't lose our ability
 # to parse them!
-EXPECTED_FUNCTION_COUNT = 426
+EXPECTED_FUNCTION_COUNT = 425
 EXPECTED_FUZZABLE_COUNT = 338
-EXPECTED_CCTEST_COUNT = 10
+EXPECTED_CCTEST_COUNT = 9
 EXPECTED_UNKNOWN_COUNT = 4
 EXPECTED_BUILTINS_COUNT = 816



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to