Revision: 24479
Author:   [email protected]
Date:     Thu Oct  9 07:05:20 2014 UTC
Log:      X87: Updates to maintain flag --vector-ics

port r24548.

original commit message:

   Updates to maintain flag --vector-ics

BUG=
[email protected]

Review URL: https://codereview.chromium.org/642603004

Patch from Chunyang Dai <[email protected]>.
https://code.google.com/p/v8/source/detail?r=24479

Modified:
 /branches/bleeding_edge/src/x87/builtins-x87.cc
 /branches/bleeding_edge/src/x87/debug-x87.cc
 /branches/bleeding_edge/src/x87/full-codegen-x87.cc

=======================================
--- /branches/bleeding_edge/src/x87/builtins-x87.cc Sat Sep 20 05:08:58 2014 UTC +++ /branches/bleeding_edge/src/x87/builtins-x87.cc Thu Oct 9 07:05:20 2014 UTC
@@ -1002,17 +1002,21 @@
     __ bind(&loop);
     __ mov(receiver, Operand(ebp, kArgumentsOffset));  // load arguments

-    // Use inline caching to speed up access to arguments.
     if (FLAG_vector_ics) {
-      __ mov(VectorLoadICDescriptor::SlotRegister(),
-             Immediate(Smi::FromInt(0)));
+ // TODO(mvstanton): Vector-based ics need additional infrastructure to
+      // be embedded here. For now, just call the runtime.
+      __ push(receiver);
+      __ push(key);
+      __ CallRuntime(Runtime::kGetProperty, 2);
+    } else {
+      // Use inline caching to speed up access to arguments.
+      Handle<Code> ic = CodeFactory::KeyedLoadIC(masm->isolate()).code();
+      __ call(ic, RelocInfo::CODE_TARGET);
+      // It is important that we do not have a test instruction after the
+      // call.  A test instruction after the call is used to indicate that
+      // we have generated an inline version of the keyed load.  In this
+      // case, we know that we are not generating a test instruction next.
     }
-    Handle<Code> ic = CodeFactory::KeyedLoadIC(masm->isolate()).code();
-    __ call(ic, RelocInfo::CODE_TARGET);
-    // It is important that we do not have a test instruction after the
-    // call.  A test instruction after the call is used to indicate that
-    // we have generated an inline version of the keyed load.  In this
-    // case, we know that we are not generating a test instruction next.

     // Push the nth argument.
     __ push(eax);
=======================================
--- /branches/bleeding_edge/src/x87/debug-x87.cc Fri Sep 5 02:11:31 2014 UTC +++ /branches/bleeding_edge/src/x87/debug-x87.cc Thu Oct 9 07:05:20 2014 UTC
@@ -182,7 +182,11 @@
   // Register state for IC load call (from ic-x87.cc).
   Register receiver = LoadDescriptor::ReceiverRegister();
   Register name = LoadDescriptor::NameRegister();
- Generate_DebugBreakCallHelper(masm, receiver.bit() | name.bit(), 0, false);
+  RegList regs = receiver.bit() | name.bit();
+  if (FLAG_vector_ics) {
+    regs |= VectorLoadICTrampolineDescriptor::SlotRegister().bit();
+  }
+  Generate_DebugBreakCallHelper(masm, regs, 0, false);
 }


=======================================
--- /branches/bleeding_edge/src/x87/full-codegen-x87.cc Wed Oct 8 06:21:42 2014 UTC +++ /branches/bleeding_edge/src/x87/full-codegen-x87.cc Thu Oct 9 07:05:20 2014 UTC
@@ -1276,7 +1276,13 @@
Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
   __ mov(LoadDescriptor::NameRegister(), home_object_symbol);

-  CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId());
+  if (FLAG_vector_ics) {
+    __ mov(VectorLoadICDescriptor::SlotRegister(),
+           Immediate(Smi::FromInt(expr->HomeObjectFeedbackSlot())));
+    CallLoadIC(NOT_CONTEXTUAL);
+  } else {
+    CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId());
+  }

   __ cmp(eax, isolate()->factory()->undefined_value());
   Label done;

--
--
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