Revision: 22397
Author: [email protected]
Date: Tue Jul 15 08:40:26 2014 UTC
Log: MIPS: Use the same registers for StoreIC and KeyedStoreIC.
Port r22387 (ff76c666)
BUG=
[email protected]
Review URL: https://codereview.chromium.org/390263002
http://code.google.com/p/v8/source/detail?r=22397
Modified:
/branches/bleeding_edge/src/mips/code-stubs-mips.cc
/branches/bleeding_edge/src/mips/ic-mips.cc
/branches/bleeding_edge/src/mips/stub-cache-mips.cc
/branches/bleeding_edge/src/mips64/code-stubs-mips64.cc
/branches/bleeding_edge/src/mips64/ic-mips64.cc
/branches/bleeding_edge/src/mips64/stub-cache-mips64.cc
=======================================
--- /branches/bleeding_edge/src/mips/code-stubs-mips.cc Fri Jul 11 01:50:12
2014 UTC
+++ /branches/bleeding_edge/src/mips/code-stubs-mips.cc Tue Jul 15 08:40:26
2014 UTC
@@ -219,14 +219,6 @@
CodeStubInterfaceDescriptor* descriptor) {
InitializeInternalArrayConstructorDescriptor(descriptor, -1);
}
-
-
-void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { a0, a3, a1, a2 };
- descriptor->Initialize(ARRAY_SIZE(registers), registers,
- FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
-}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/mips/ic-mips.cc Tue Jul 15 08:38:16 2014 UTC
+++ /branches/bleeding_edge/src/mips/ic-mips.cc Tue Jul 15 08:40:26 2014 UTC
@@ -510,8 +510,6 @@
Register receiver = ReceiverRegister();
Register key = NameRegister();
Register value = ValueRegister();
- ASSERT(receiver.is(a2));
- ASSERT(key.is(a1));
ASSERT(value.is(a0));
Label slow, notin;
@@ -568,9 +566,24 @@
const Register StoreIC::ValueRegister() { return a0; }
-const Register KeyedStoreIC::ReceiverRegister() { return a2; }
-const Register KeyedStoreIC::NameRegister() { return a1; }
-const Register KeyedStoreIC::ValueRegister() { return a0; }
+const Register KeyedStoreIC::ReceiverRegister() {
+ return StoreIC::ReceiverRegister();
+}
+
+
+const Register KeyedStoreIC::NameRegister() {
+ return StoreIC::NameRegister();
+}
+
+
+const Register KeyedStoreIC::ValueRegister() {
+ return StoreIC::ValueRegister();
+}
+
+
+const Register KeyedStoreIC::MapRegister() {
+ return a3;
+}
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
@@ -980,8 +993,6 @@
Register value = ValueRegister();
Register key = NameRegister();
Register receiver = ReceiverRegister();
- ASSERT(receiver.is(a2));
- ASSERT(key.is(a1));
ASSERT(value.is(a0));
Register receiver_map = a3;
Register elements_map = t2;
=======================================
--- /branches/bleeding_edge/src/mips/stub-cache-mips.cc Fri Jul 11 01:50:12
2014 UTC
+++ /branches/bleeding_edge/src/mips/stub-cache-mips.cc Tue Jul 15 08:40:26
2014 UTC
@@ -1284,10 +1284,11 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1, scratch2, scratch3.
+ // receiver, name, scratch1/map, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- static Register registers[] = { receiver, name, a3, t0, t1 };
+ Register map = KeyedStoreIC::MapRegister();
+ static Register registers[] = { receiver, name, map, t0, t1 };
return registers;
}
@@ -1387,7 +1388,10 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target, match); // Reg match is 0 if Smi.
+ // Polymorphic keyed stores may use the map register
Register map_reg = scratch2();
+ ASSERT(kind() != Code::KEYED_STORE_IC ||
+ map_reg.is(KeyedStoreIC::MapRegister()));
int receiver_count = types->length();
int number_of_handled_maps = 0;
=======================================
--- /branches/bleeding_edge/src/mips64/code-stubs-mips64.cc Fri Jul 11
01:50:12 2014 UTC
+++ /branches/bleeding_edge/src/mips64/code-stubs-mips64.cc Tue Jul 15
08:40:26 2014 UTC
@@ -219,14 +219,6 @@
CodeStubInterfaceDescriptor* descriptor) {
InitializeInternalArrayConstructorDescriptor(descriptor, -1);
}
-
-
-void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { a0, a3, a1, a2 };
- descriptor->Initialize(ARRAY_SIZE(registers), registers,
- FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
-}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/mips64/ic-mips64.cc Tue Jul 15 08:38:16
2014 UTC
+++ /branches/bleeding_edge/src/mips64/ic-mips64.cc Tue Jul 15 08:40:26
2014 UTC
@@ -510,8 +510,6 @@
Register receiver = ReceiverRegister();
Register key = NameRegister();
Register value = ValueRegister();
- ASSERT(receiver.is(a2));
- ASSERT(key.is(a1));
ASSERT(value.is(a0));
Label slow, notin;
@@ -568,9 +566,24 @@
const Register StoreIC::ValueRegister() { return a0; }
-const Register KeyedStoreIC::ReceiverRegister() { return a2; }
-const Register KeyedStoreIC::NameRegister() { return a1; }
-const Register KeyedStoreIC::ValueRegister() { return a0; }
+const Register KeyedStoreIC::ReceiverRegister() {
+ return StoreIC::ReceiverRegister();
+}
+
+
+const Register KeyedStoreIC::NameRegister() {
+ return StoreIC::NameRegister();
+}
+
+
+const Register KeyedStoreIC::ValueRegister() {
+ return StoreIC::ValueRegister();
+}
+
+
+const Register KeyedStoreIC::MapRegister() {
+ return a3;
+}
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
@@ -991,8 +1004,6 @@
Register value = ValueRegister();
Register key = NameRegister();
Register receiver = ReceiverRegister();
- ASSERT(receiver.is(a2));
- ASSERT(key.is(a1));
ASSERT(value.is(a0));
Register receiver_map = a3;
Register elements_map = a6;
=======================================
--- /branches/bleeding_edge/src/mips64/stub-cache-mips64.cc Fri Jul 11
01:50:12 2014 UTC
+++ /branches/bleeding_edge/src/mips64/stub-cache-mips64.cc Tue Jul 15
08:40:26 2014 UTC
@@ -1284,10 +1284,11 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1, scratch2, scratch3.
+ // receiver, name, scratch1/map, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- static Register registers[] = { receiver, name, a3, a4, a5 };
+ Register map = KeyedStoreIC::MapRegister();
+ static Register registers[] = { receiver, name, map, a4, a5 };
return registers;
}
@@ -1387,7 +1388,10 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target, match); // Reg match is 0 if Smi.
+ // Polymorphic keyed stores may use the map register
Register map_reg = scratch2();
+ ASSERT(kind() != Code::KEYED_STORE_IC ||
+ map_reg.is(KeyedStoreIC::MapRegister()));
int receiver_count = types->length();
int number_of_handled_maps = 0;
--
--
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.