Revision: 22359
Author: [email protected]
Date: Fri Jul 11 14:50:59 2014 UTC
Log: Revert "Use the same registers for StoreIC and KeyedStoreIC."
This reverts commit r22358 due to release mode arm64 test failures.
[email protected]
Review URL: https://codereview.chromium.org/385073007
http://code.google.com/p/v8/source/detail?r=22359
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/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/arm/code-stubs-arm.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Fri Jul 11 14:50:59
2014 UTC
@@ -219,6 +219,14 @@
CodeStubInterfaceDescriptor* descriptor) {
InitializeInternalArrayConstructorDescriptor(descriptor, -1);
}
+
+
+void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
+ CodeStubInterfaceDescriptor* descriptor) {
+ Register registers[] = { r0, r3, r1, r2 };
+ descriptor->Initialize(ARRAY_SIZE(registers), registers,
+ FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
+}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/arm/ic-arm.cc Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/arm/ic-arm.cc Fri Jul 11 14:50:59 2014 UTC
@@ -500,8 +500,8 @@
Register receiver = ReceiverRegister();
Register key = NameRegister();
Register value = ValueRegister();
- ASSERT(receiver.is(r1));
- ASSERT(key.is(r2));
+ ASSERT(receiver.is(r2));
+ ASSERT(key.is(r1));
ASSERT(value.is(r0));
Label slow, notin;
@@ -552,24 +552,9 @@
const Register StoreIC::ValueRegister() { return r0; }
-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 r3;
-}
+const Register KeyedStoreIC::ReceiverRegister() { return r2; }
+const Register KeyedStoreIC::NameRegister() { return r1; }
+const Register KeyedStoreIC::ValueRegister() { return r0; }
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
@@ -1043,8 +1028,8 @@
Register value = ValueRegister();
Register key = NameRegister();
Register receiver = ReceiverRegister();
- ASSERT(receiver.is(r1));
- ASSERT(key.is(r2));
+ ASSERT(receiver.is(r2));
+ ASSERT(key.is(r1));
ASSERT(value.is(r0));
Register receiver_map = r3;
Register elements_map = r6;
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Fri Jul 11 14:50:59
2014 UTC
@@ -1294,11 +1294,10 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1/map, scratch2, scratch3.
+ // receiver, name, scratch1, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- Register map = KeyedStoreIC::MapRegister();
- static Register registers[] = { receiver, name, map, r4, r5 };
+ static Register registers[] = { receiver, name, r3, r4, r5 };
return registers;
}
@@ -1398,10 +1397,7 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target);
- // Polymorphic keyed stores may use the map register
Register map_reg = scratch1();
- 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/arm64/code-stubs-arm64.cc Fri Jul 11
13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/arm64/code-stubs-arm64.cc Fri Jul 11
14:50:59 2014 UTC
@@ -236,6 +236,18 @@
descriptor->SetMissHandler(
ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
}
+
+
+void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
+ CodeStubInterfaceDescriptor* descriptor) {
+ // x0: value
+ // x3: target map
+ // x1: key
+ // x2: receiver
+ Register registers[] = { x0, x3, x1, x2 };
+ descriptor->Initialize(ARRAY_SIZE(registers), registers,
+ FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
+}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/arm64/ic-arm64.cc Fri Jul 11 13:53:19 2014
UTC
+++ /branches/bleeding_edge/src/arm64/ic-arm64.cc Fri Jul 11 14:50:59 2014
UTC
@@ -506,8 +506,8 @@
Register value = ValueRegister();
Register key = NameRegister();
Register receiver = ReceiverRegister();
- ASSERT(receiver.is(x1));
- ASSERT(key.is(x2));
+ ASSERT(receiver.is(x2));
+ ASSERT(key.is(x1));
ASSERT(value.is(x0));
Register map = x3;
@@ -574,24 +574,9 @@
const Register StoreIC::ValueRegister() { return x0; }
-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 x3;
-}
+const Register KeyedStoreIC::ReceiverRegister() { return x2; }
+const Register KeyedStoreIC::NameRegister() { return x1; }
+const Register KeyedStoreIC::ValueRegister() { return x0; }
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
@@ -1082,8 +1067,8 @@
Register value = ValueRegister();
Register key = NameRegister();
Register receiver = ReceiverRegister();
- ASSERT(receiver.is(x1));
- ASSERT(key.is(x2));
+ ASSERT(receiver.is(x2));
+ ASSERT(key.is(x1));
ASSERT(value.is(x0));
Register receiver_map = x3;
=======================================
--- /branches/bleeding_edge/src/arm64/stub-cache-arm64.cc Fri Jul 11
13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/arm64/stub-cache-arm64.cc Fri Jul 11
14:50:59 2014 UTC
@@ -1276,11 +1276,10 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1/map, scratch2, scratch3.
+ // receiver, name, scratch1, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- Register map = KeyedStoreIC::MapRegister();
- static Register registers[] = { receiver, name, map, x4, x5 };
+ static Register registers[] = { receiver, name, x3, x4, x5 };
return registers;
}
@@ -1371,10 +1370,7 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target);
- // Polymorphic keyed stores may use the map register
Register map_reg = scratch1();
- ASSERT(kind() != Code::KEYED_STORE_IC ||
- map_reg.is(KeyedStoreIC::MapRegister()));
__ Ldr(map_reg, FieldMemOperand(receiver(), HeapObject::kMapOffset));
int receiver_count = types->length();
int number_of_handled_maps = 0;
=======================================
--- /branches/bleeding_edge/src/code-stubs-hydrogen.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/code-stubs-hydrogen.cc Fri Jul 11 14:50:59
2014 UTC
@@ -1077,10 +1077,10 @@
template<>
HValue*
CodeStubGraphBuilder<ElementsTransitionAndStoreStub>::BuildCodeStub() {
- HValue* value =
GetParameter(ElementsTransitionAndStoreStub::kValueIndex);
- HValue* map = GetParameter(ElementsTransitionAndStoreStub::kMapIndex);
- HValue* key = GetParameter(ElementsTransitionAndStoreStub::kKeyIndex);
- HValue* object =
GetParameter(ElementsTransitionAndStoreStub::kObjectIndex);
+ HValue* value = GetParameter(0);
+ HValue* map = GetParameter(1);
+ HValue* key = GetParameter(2);
+ HValue* object = GetParameter(3);
if (FLAG_trace_elements_transitions) {
// Tracing elements transitions is the job of the runtime.
=======================================
--- /branches/bleeding_edge/src/code-stubs.cc Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/code-stubs.cc Fri Jul 11 14:50:59 2014 UTC
@@ -642,17 +642,6 @@
ARRAY_SIZE(registers), registers,
FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure));
}
-
-
-void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { ValueRegister(),
- MapRegister(),
- KeyRegister(),
- ObjectRegister() };
- descriptor->Initialize(ARRAY_SIZE(registers), registers,
- FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
-}
void StoreGlobalStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/code-stubs.h Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/code-stubs.h Fri Jul 11 14:50:59 2014 UTC
@@ -2454,24 +2454,6 @@
virtual void InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
-
- // Parameters accessed via CodeStubGraphBuilder::GetParameter()
- enum RegisterInfo {
- kValueIndex,
- kMapIndex,
- kKeyIndex,
- kObjectIndex,
- kRegisterArgumentCount
- };
-
- static const Register ValueRegister() {
- return KeyedStoreIC::ValueRegister();
- }
- static const Register MapRegister() { return
KeyedStoreIC::MapRegister(); }
- static const Register KeyRegister() { return
KeyedStoreIC::NameRegister(); }
- static const Register ObjectRegister() {
- return KeyedStoreIC::ReceiverRegister();
- }
private:
class FromBits: public BitField<ElementsKind, 0, 8> {};
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Fri Jul 11 14:50:59
2014 UTC
@@ -223,6 +223,14 @@
descriptor->SetMissHandler(
ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
}
+
+
+void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
+ CodeStubInterfaceDescriptor* descriptor) {
+ Register registers[] = { eax, ebx, ecx, edx };
+ descriptor->Initialize(ARRAY_SIZE(registers), registers,
+ FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
+}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/ia32/ic-ia32.cc Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/ia32/ic-ia32.cc Fri Jul 11 14:50:59 2014 UTC
@@ -1037,11 +1037,6 @@
const Register KeyedStoreIC::ValueRegister() {
return StoreIC::ValueRegister();
}
-
-
-const Register KeyedStoreIC::MapRegister() {
- return ebx;
-}
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Fri Jul 11 14:50:59
2014 UTC
@@ -1314,11 +1314,10 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1/map, scratch2, scratch3.
+ // receiver, name, scratch1, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- Register map = KeyedStoreIC::MapRegister();
- static Register registers[] = { receiver, name, map, edi, no_reg };
+ static Register registers[] = { receiver, name, ebx, edi, no_reg };
return registers;
}
@@ -1419,10 +1418,7 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target);
- // Polymorphic keyed stores may use the map register
Register map_reg = scratch1();
- ASSERT(kind() != Code::KEYED_STORE_IC ||
- map_reg.is(KeyedStoreIC::MapRegister()));
__ mov(map_reg, FieldOperand(receiver(), HeapObject::kMapOffset));
int receiver_count = types->length();
int number_of_handled_maps = 0;
=======================================
--- /branches/bleeding_edge/src/ic.h Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/ic.h Fri Jul 11 14:50:59 2014 UTC
@@ -705,11 +705,6 @@
static const Register NameRegister();
static const Register ValueRegister();
- // The map register isn't part of the normal call specification, but
- // ElementsTransitionAndStoreStub, used in polymorphic keyed store
- // stub implementations requires it to be initialized.
- static const Register MapRegister();
-
KeyedStoreIC(FrameDepth depth, Isolate* isolate)
: StoreIC(depth, isolate) {
ASSERT(target()->is_keyed_store_stub());
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Jul 11 14:50:59
2014 UTC
@@ -220,6 +220,14 @@
descriptor->SetMissHandler(
ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
}
+
+
+void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor(
+ CodeStubInterfaceDescriptor* descriptor) {
+ Register registers[] = { rax, rbx, rcx, rdx };
+ descriptor->Initialize(ARRAY_SIZE(registers), registers,
+ FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss));
+}
void BinaryOpICStub::InitializeInterfaceDescriptor(
=======================================
--- /branches/bleeding_edge/src/x64/ic-x64.cc Fri Jul 11 13:53:19 2014 UTC
+++ /branches/bleeding_edge/src/x64/ic-x64.cc Fri Jul 11 14:50:59 2014 UTC
@@ -1063,11 +1063,6 @@
const Register KeyedStoreIC::ValueRegister() {
return StoreIC::ValueRegister();
}
-
-
-const Register KeyedStoreIC::MapRegister() {
- return rbx;
-}
void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Fri Jul 11 13:53:19
2014 UTC
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Fri Jul 11 14:50:59
2014 UTC
@@ -1253,11 +1253,10 @@
Register* KeyedStoreStubCompiler::registers() {
- // receiver, name, scratch1/map, scratch2, scratch3.
+ // receiver, name, scratch1, scratch2, scratch3.
Register receiver = KeyedStoreIC::ReceiverRegister();
Register name = KeyedStoreIC::NameRegister();
- Register map = KeyedStoreIC::MapRegister();
- static Register registers[] = { receiver, name, map, rdi, r8 };
+ static Register registers[] = { receiver, name, rbx, rdi, r8 };
return registers;
}
@@ -1362,10 +1361,7 @@
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
__ JumpIfSmi(receiver(), smi_target);
- // Polymorphic keyed stores may use the map register
Register map_reg = scratch1();
- ASSERT(kind() != Code::KEYED_STORE_IC ||
- map_reg.is(KeyedStoreIC::MapRegister()));
__ movp(map_reg, FieldOperand(receiver(), HeapObject::kMapOffset));
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.