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.