Reviewers: danno, mvstanton, Paul Lind, gergely.kis.imgtec, balazs.kilvady, dusan.milosavljevic,

Message:
PTAL.

Description:
MIPS: Use the same registers for StoreIC and KeyedStoreIC.

Port r22387 (ff76c666)

BUG=

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

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

Affected files (+48, -34 lines):
  M src/mips/code-stubs-mips.cc
  M src/mips/ic-mips.cc
  M src/mips/stub-cache-mips.cc
  M src/mips64/code-stubs-mips64.cc
  M src/mips64/ic-mips64.cc
  M src/mips64/stub-cache-mips64.cc


Index: src/mips/code-stubs-mips.cc
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
index 130664d65c524c8322341382c752ea33c60d7dc7..b060be2dca4895c9fc1a225e851d5efa7b742d1c 100644
--- a/src/mips/code-stubs-mips.cc
+++ b/src/mips/code-stubs-mips.cc
@@ -221,14 +221,6 @@ void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
 }


-void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  Register registers[] = { a0, a3, a1, a2 };
-  descriptor->Initialize(ARRAY_SIZE(registers), registers,
-                         FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
-}
-
-
 void BinaryOpICStub::InitializeInterfaceDescriptor(
     CodeStubInterfaceDescriptor* descriptor) {
   Register registers[] = { a1, a0 };
Index: src/mips/ic-mips.cc
diff --git a/src/mips/ic-mips.cc b/src/mips/ic-mips.cc
index 629aef9b6c76c7e83a1fd64e895ad7a76b269fac..4683502a301805c89ea7970f2fc6e8f1c564b6b6 100644
--- a/src/mips/ic-mips.cc
+++ b/src/mips/ic-mips.cc
@@ -510,8 +510,6 @@ void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
   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::NameRegister() { return a2; }
 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 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
   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;
Index: src/mips/stub-cache-mips.cc
diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
index d08d597b9e7c0990c8669b59cf7370e4e96cc22d..3a0b18f70ffaea03a3260a5bff45ff2cb72d683c 100644
--- a/src/mips/stub-cache-mips.cc
+++ b/src/mips/stub-cache-mips.cc
@@ -1284,10 +1284,11 @@ Register* StoreStubCompiler::registers() {


 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 @@ Handle<Code> BaseLoadStoreStubCompiler::CompilePolymorphicIC(
   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;
Index: src/mips64/code-stubs-mips64.cc
diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc index 823ce075a72ece2305a804638b44db11dcc958ba..ac5ac433b65ddb20ccc5da933fd0299179a16e88 100644
--- a/src/mips64/code-stubs-mips64.cc
+++ b/src/mips64/code-stubs-mips64.cc
@@ -221,14 +221,6 @@ void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
 }


-void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  Register registers[] = { a0, a3, a1, a2 };
-  descriptor->Initialize(ARRAY_SIZE(registers), registers,
-                         FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
-}
-
-
 void BinaryOpICStub::InitializeInterfaceDescriptor(
     CodeStubInterfaceDescriptor* descriptor) {
   Register registers[] = { a1, a0 };
Index: src/mips64/ic-mips64.cc
diff --git a/src/mips64/ic-mips64.cc b/src/mips64/ic-mips64.cc
index 3adf9f6ad490ac2700fef0d6639f52f8be53bc0a..1a13365f7a2327c5419df738da842a2b238184d7 100644
--- a/src/mips64/ic-mips64.cc
+++ b/src/mips64/ic-mips64.cc
@@ -510,8 +510,6 @@ void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
   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::NameRegister() { return a2; }
 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 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
   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;
Index: src/mips64/stub-cache-mips64.cc
diff --git a/src/mips64/stub-cache-mips64.cc b/src/mips64/stub-cache-mips64.cc index 26270496e4bec3dfc1c92d98a9014589d6febaa7..5260eb3e95a724aaa0a85499da2e5bfd75a2f348 100644
--- a/src/mips64/stub-cache-mips64.cc
+++ b/src/mips64/stub-cache-mips64.cc
@@ -1284,10 +1284,11 @@ Register* StoreStubCompiler::registers() {


 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 @@ Handle<Code> BaseLoadStoreStubCompiler::CompilePolymorphicIC(
   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.

Reply via email to