Revision: 15525
Author:   [email protected]
Date:     Fri Jul  5 07:51:57 2013
Log:      MIPS: Generate StoreGlobal stubs with Hydrogen.

Port r15512 (bdf9918)

Original commit message:
- Constants globals are inlined into Hydrogen code using code dependencies that invalidate the Crankshafted code when global PropertyCells or the global object change. - The more general case generates code that is just as good as the hand-written assembly stubs on all platforms.

BUG=

Review URL: https://codereview.chromium.org/18277005
Patch from Balazs Kilvady <[email protected]>.
http://code.google.com/p/v8/source/detail?r=15525

Modified:
 /branches/bleeding_edge/src/mips/code-stubs-mips.cc
 /branches/bleeding_edge/src/mips/lithium-gap-resolver-mips.cc

=======================================
--- /branches/bleeding_edge/src/mips/code-stubs-mips.cc Fri Jul 5 07:48:50 2013 +++ /branches/bleeding_edge/src/mips/code-stubs-mips.cc Fri Jul 5 07:51:57 2013
@@ -236,6 +236,17 @@
   descriptor->deoptimization_handler_ =
       FUNCTION_ADDR(UnaryOpIC_Miss);
 }
+
+
+void StoreGlobalStub::InitializeInterfaceDescriptor(
+    Isolate* isolate,
+    CodeStubInterfaceDescriptor* descriptor) {
+  static Register registers[] = { a1, a2, a0 };
+  descriptor->register_param_count_ = 3;
+  descriptor->register_params_ = registers;
+  descriptor->deoptimization_handler_ =
+      FUNCTION_ADDR(StoreIC_MissFromStubFailure);
+}


 #define __ ACCESS_MASM(masm)
=======================================
--- /branches/bleeding_edge/src/mips/lithium-gap-resolver-mips.cc Tue May 28 14:37:57 2013 +++ /branches/bleeding_edge/src/mips/lithium-gap-resolver-mips.cc Fri Jul 5 07:51:57 2013
@@ -222,7 +222,6 @@
       ASSERT(destination->IsStackSlot());
       __ sw(source_register, cgen_->ToMemOperand(destination));
     }
-
   } else if (source->IsStackSlot()) {
     MemOperand source_operand = cgen_->ToMemOperand(source);
     if (destination->IsRegister()) {
@@ -259,6 +258,10 @@
       } else {
         __ LoadObject(dst, cgen_->ToHandle(constant_source));
       }
+    } else if (source->IsDoubleRegister()) {
+      DoubleRegister result = cgen_->ToDoubleRegister(destination);
+      double v = cgen_->ToDouble(constant_source);
+      __ Move(result, v);
     } else {
       ASSERT(destination->IsStackSlot());
ASSERT(!in_cycle_); // Constant moves happen after all cycles are gone.

--
--
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/groups/opt_out.


Reply via email to