Revision: 21939
Author:   [email protected]
Date:     Mon Jun 23 13:42:12 2014 UTC
Log:      Create a RegisterSpec class inside of the IC that provides:
1) symbolic names for the register (like, edx == receiver)
2) can return an array of registers
3) defines ordering when passed on the stack

Code that implements or uses the IC should use this RegisterSpec instead of "knowing" what the registers are. Or at least have the RegisterSpec to validate it's assumptions.

[email protected]

Review URL: https://codereview.chromium.org/340363002
http://code.google.com/p/v8/source/detail?r=21939

Modified:
 /branches/bleeding_edge/src/arm/code-stubs-arm.cc
 /branches/bleeding_edge/src/arm/ic-arm.cc
 /branches/bleeding_edge/src/arm/stub-cache-arm.cc
 /branches/bleeding_edge/src/arm64/code-stubs-arm64.cc
 /branches/bleeding_edge/src/arm64/ic-arm64.cc
 /branches/bleeding_edge/src/arm64/stub-cache-arm64.cc
 /branches/bleeding_edge/src/code-stubs-hydrogen.cc
 /branches/bleeding_edge/src/code-stubs.cc
 /branches/bleeding_edge/src/code-stubs.h
 /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
 /branches/bleeding_edge/src/ia32/ic-ia32.cc
 /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
 /branches/bleeding_edge/src/ic.h
 /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/x64/code-stubs-x64.cc
 /branches/bleeding_edge/src/x64/ic-x64.cc
 /branches/bleeding_edge/src/x64/stub-cache-x64.cc
 /branches/bleeding_edge/src/x87/code-stubs-x87.cc
 /branches/bleeding_edge/src/x87/ic-x87.cc
 /branches/bleeding_edge/src/x87/stub-cache-x87.cc

=======================================
--- /branches/bleeding_edge/src/arm/code-stubs-arm.cc Tue Jun 17 14:10:16 2014 UTC +++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Jun 23 13:42:12 2014 UTC
@@ -86,26 +86,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { r1, r0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { r1, r0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
@@ -116,16 +96,6 @@
   descriptor->deoptimization_handler_ =
       Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { r1, r0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}


 void LoadFieldStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/arm/ic-arm.cc   Thu Jun 12 16:38:37 2014 UTC
+++ /branches/bleeding_edge/src/arm/ic-arm.cc   Mon Jun 23 13:42:12 2014 UTC
@@ -543,6 +543,17 @@

   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = r0;
+Register LoadIC::kNameRegister = r2;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = r1;
+Register KeyedLoadIC::kNameRegister = r0;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1263,14 +1263,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { r0, r2, r3, r1, r4, r5 };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, r3, r1, r4, r5 };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { r1, r0, r2, r3, r4, r5 };
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, r2, r3, r4, r5 };
   return registers;
 }

=======================================
--- /branches/bleeding_edge/src/arm64/code-stubs-arm64.cc Tue Jun 17 14:10:16 2014 UTC +++ /branches/bleeding_edge/src/arm64/code-stubs-arm64.cc Mon Jun 23 13:42:12 2014 UTC
@@ -99,40 +99,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { x1, x0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  // x1: receiver
-  // x0: key
-  static Register registers[] = { x1, x0 };
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]);
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  // x1: receiver
-  // x0: key
-  static Register registers[] = { x1, x0 };
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]);
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/arm64/ic-arm64.cc Thu Jun 12 16:38:37 2014 UTC +++ /branches/bleeding_edge/src/arm64/ic-arm64.cc Mon Jun 23 13:42:12 2014 UTC
@@ -580,6 +580,17 @@

   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = x0;
+Register LoadIC::kNameRegister = x2;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = x1;
+Register KeyedLoadIC::kNameRegister = x0;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/arm64/stub-cache-arm64.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/arm64/stub-cache-arm64.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1245,14 +1245,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { x0, x2, x3, x1, x4, x5 };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, x3, x1, x4, x5 };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
-  // receiver, name/key, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { x1, x0, x2, x3, x4, x5 };
+  // receiver, name, scratch1, scratch2, scratch3, scratch4.
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, x2, x3, x4, x5 };
   return registers;
 }

=======================================
--- /branches/bleeding_edge/src/code-stubs-hydrogen.cc Thu Jun 12 09:58:10 2014 UTC +++ /branches/bleeding_edge/src/code-stubs-hydrogen.cc Mon Jun 23 13:42:12 2014 UTC
@@ -539,9 +539,14 @@
 template <>
 HValue* CodeStubGraphBuilder<KeyedLoadFastElementStub>::BuildCodeStub() {
   HInstruction* load = BuildUncheckedMonomorphicElementAccess(
-      GetParameter(0), GetParameter(1), NULL,
-      casted_stub()->is_js_array(), casted_stub()->elements_kind(),
-      LOAD, NEVER_RETURN_HOLE, STANDARD_STORE);
+      GetParameter(KeyedLoadIC::kReceiverIndex),
+      GetParameter(KeyedLoadIC::kNameIndex),
+      NULL,
+      casted_stub()->is_js_array(),
+      casted_stub()->elements_kind(),
+      LOAD,
+      NEVER_RETURN_HOLE,
+      STANDARD_STORE);
   return load;
 }

@@ -1371,8 +1376,8 @@

 template<>
HValue* CodeStubGraphBuilder<KeyedLoadDictionaryElementStub>::BuildCodeStub() {
-  HValue* receiver = GetParameter(0);
-  HValue* key = GetParameter(1);
+  HValue* receiver = GetParameter(KeyedLoadIC::kReceiverIndex);
+  HValue* key = GetParameter(KeyedLoadIC::kNameIndex);

   Add<HCheckSmi>(key);

@@ -1504,8 +1509,8 @@


HValue* CodeStubGraphBuilder<KeyedLoadGenericElementStub>::BuildCodeStub() {
-  HValue* receiver = GetParameter(0);
-  HValue* key = GetParameter(1);
+  HValue* receiver = GetParameter(KeyedLoadIC::kReceiverIndex);
+  HValue* key = GetParameter(KeyedLoadIC::kNameIndex);

   // Split into a smi/integer case and unique string case.
HIfContinuation index_name_split_continuation(graph()->CreateBasicBlock(),
=======================================
--- /branches/bleeding_edge/src/code-stubs.cc   Fri Jun 20 08:40:11 2014 UTC
+++ /branches/bleeding_edge/src/code-stubs.cc   Mon Jun 23 13:42:12 2014 UTC
@@ -510,6 +510,33 @@
   handler_table->set(0, Smi::FromInt(handler_offset_));
   code->set_handler_table(*handler_table);
 }
+
+
+void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
+    CodeStubInterfaceDescriptor* descriptor) {
+  descriptor->register_param_count_ = KeyedLoadIC::kRegisterArgumentCount;
+  descriptor->register_params_ = KeyedLoadIC::registers;
+  descriptor->deoptimization_handler_ =
+      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
+}
+
+
+void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
+    CodeStubInterfaceDescriptor* descriptor) {
+  descriptor->register_param_count_ = KeyedLoadIC::kRegisterArgumentCount;
+  descriptor->register_params_ = KeyedLoadIC::registers;
+  descriptor->deoptimization_handler_ =
+      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
+}
+
+
+void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
+    CodeStubInterfaceDescriptor* descriptor) {
+  descriptor->register_param_count_ = KeyedLoadIC::kRegisterArgumentCount;
+  descriptor->register_params_ = KeyedLoadIC::registers;
+  descriptor->deoptimization_handler_ =
+      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
+}


 void KeyedLoadDictionaryElementPlatformStub::Generate(
=======================================
--- /branches/bleeding_edge/src/code-stubs.h    Thu Jun 12 09:58:10 2014 UTC
+++ /branches/bleeding_edge/src/code-stubs.h    Mon Jun 23 13:42:12 2014 UTC
@@ -275,7 +275,7 @@
   // return sequence. Default value is -1, which means it is ignored.
   int hint_stack_parameter_count_;
   StubFunctionMode function_mode_;
-  Register* register_params_;
+  const Register* register_params_;
// Specifies Representations for the stub's parameter. Points to an array of
   // Representations of the same length of the numbers of parameters to the
   // stub, or if NULL (the default value), Representation of each parameter
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Jun 23 13:42:12 2014 UTC
@@ -91,26 +91,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
@@ -121,16 +101,6 @@
   descriptor->deoptimization_handler_ =
       Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}


 void LoadFieldStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/ia32/ic-ia32.cc Thu Jun 12 16:38:37 2014 UTC
+++ /branches/bleeding_edge/src/ia32/ic-ia32.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1023,6 +1023,17 @@
       ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = edx;
+Register LoadIC::kNameRegister = ecx;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = LoadIC::kReceiverRegister;
+Register KeyedLoadIC::kNameRegister = LoadIC::kNameRegister;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1283,14 +1283,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { edx, ecx, ebx, eax, edi, no_reg };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, ebx, eax, edi, no_reg };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { edx, ecx, ebx, eax, edi, no_reg };
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, ebx, eax, edi, no_reg };
   return registers;
 }

=======================================
--- /branches/bleeding_edge/src/ic.h    Thu Jun 12 09:58:10 2014 UTC
+++ /branches/bleeding_edge/src/ic.h    Mon Jun 23 13:42:12 2014 UTC
@@ -398,6 +398,15 @@
   class ContextualModeBits: public BitField<ContextualMode, 0, 1> {};
   STATIC_ASSERT(static_cast<int>(NOT_CONTEXTUAL) == 0);

+  enum RegisterInfo {
+    kReceiverIndex,
+    kNameIndex,
+    kRegisterArgumentCount
+  };
+  static Register kReceiverRegister;
+  static Register kNameRegister;
+  static const Register registers[kRegisterArgumentCount];
+
   static ExtraICState ComputeExtraICState(ContextualMode contextual_mode) {
     return ContextualModeBits::encode(contextual_mode);
   }
@@ -497,6 +506,10 @@
       : LoadIC(depth, isolate) {
     ASSERT(target()->is_keyed_load_stub());
   }
+
+  static const Register registers[kRegisterArgumentCount];
+  static Register kReceiverRegister;
+  static Register kNameRegister;

   MUST_USE_RESULT MaybeHandle<Object> Load(Handle<Object> object,
                                            Handle<Object> key);
=======================================
--- /branches/bleeding_edge/src/mips/code-stubs-mips.cc Tue Jun 17 14:10:16 2014 UTC +++ /branches/bleeding_edge/src/mips/code-stubs-mips.cc Mon Jun 23 13:42:12 2014 UTC
@@ -87,26 +87,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { a1, a0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = {a1, a0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
@@ -117,16 +97,6 @@
   descriptor->deoptimization_handler_ =
       Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { a1, a0 };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}


 void LoadFieldStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/mips/ic-mips.cc Fri Jun 20 08:40:11 2014 UTC
+++ /branches/bleeding_edge/src/mips/ic-mips.cc Mon Jun 23 13:42:12 2014 UTC
@@ -558,6 +558,17 @@

   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = a0;
+Register LoadIC::kNameRegister = a2;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = a1;
+Register KeyedLoadIC::kNameRegister = a0;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/mips/stub-cache-mips.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/mips/stub-cache-mips.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1253,14 +1253,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { a0, a2, a3, a1, t0, t1 };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, a3, a1, t0, t1 };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { a1, a0, a2, a3, t0, t1 };
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, a2, a3, t0, t1 };
   return registers;
 }

=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Jun 23 13:42:12 2014 UTC
@@ -87,26 +87,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { rdx, rax };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { rdx, rax };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-    FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
@@ -117,16 +97,6 @@
   descriptor->deoptimization_handler_ =
       Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { rdx, rax };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}


 void LoadFieldStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/x64/ic-x64.cc   Thu Jun 12 16:38:37 2014 UTC
+++ /branches/bleeding_edge/src/x64/ic-x64.cc   Mon Jun 23 13:42:12 2014 UTC
@@ -1050,6 +1050,17 @@
       ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = rax;
+Register LoadIC::kNameRegister = rcx;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = rdx;
+Register KeyedLoadIC::kNameRegister = rax;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1222,14 +1222,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { rax, rcx, rdx, rbx, rdi, r8 };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, rdx, rbx, rdi, r8 };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { rdx, rax, rbx, rcx, rdi, r8 };
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, rbx, rcx, rdi, r8 };
   return registers;
 }

=======================================
--- /branches/bleeding_edge/src/x87/code-stubs-x87.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/x87/code-stubs-x87.cc Mon Jun 23 13:42:12 2014 UTC
@@ -90,26 +90,6 @@
   descriptor->register_params_ = registers;
   descriptor->deoptimization_handler_ = NULL;
 }
-
-
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}
-
-
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
-}


 void RegExpConstructResultStub::InitializeInterfaceDescriptor(
@@ -120,16 +100,6 @@
   descriptor->deoptimization_handler_ =
       Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry;
 }
-
-
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor(
-    CodeStubInterfaceDescriptor* descriptor) {
-  static Register registers[] = { edx, ecx };
-  descriptor->register_param_count_ = 2;
-  descriptor->register_params_ = registers;
-  descriptor->deoptimization_handler_ =
-      Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry;
-}


 void LoadFieldStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/x87/ic-x87.cc   Thu Jun 12 16:38:37 2014 UTC
+++ /branches/bleeding_edge/src/x87/ic-x87.cc   Mon Jun 23 13:42:12 2014 UTC
@@ -1023,6 +1023,17 @@
       ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
   __ TailCallExternalReference(ref, 2, 1);
 }
+
+
+// IC register specifications
+Register LoadIC::kReceiverRegister = edx;
+Register LoadIC::kNameRegister = ecx;
+const Register LoadIC::registers[] = { kReceiverRegister, kNameRegister };
+
+
+Register KeyedLoadIC::kReceiverRegister = LoadIC::kReceiverRegister;
+Register KeyedLoadIC::kNameRegister = LoadIC::kNameRegister;
+const Register KeyedLoadIC::registers[] = { kReceiverRegister, kNameRegister };


 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/x87/stub-cache-x87.cc Fri Jun 20 08:40:11 2014 UTC +++ /branches/bleeding_edge/src/x87/stub-cache-x87.cc Mon Jun 23 13:42:12 2014 UTC
@@ -1282,14 +1282,18 @@

 Register* LoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { edx, ecx, ebx, eax, edi, no_reg };
+  Register receiver = LoadIC::kReceiverRegister;
+  Register name = LoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, ebx, eax, edi, no_reg };
   return registers;
 }


 Register* KeyedLoadStubCompiler::registers() {
   // receiver, name, scratch1, scratch2, scratch3, scratch4.
-  static Register registers[] = { edx, ecx, ebx, eax, edi, no_reg };
+  Register receiver = KeyedLoadIC::kReceiverRegister;
+  Register name = KeyedLoadIC::kNameRegister;
+  static Register registers[] = { receiver, name, ebx, eax, edi, no_reg };
   return registers;
 }

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