Revision: 23573
Author: [email protected]
Date: Mon Sep 1 18:02:35 2014 UTC
Log: MIPS: Multiple stubs can point to the same calling convention.
Port r23546 (068adb0)
BUG=
[email protected]
Review URL: https://codereview.chromium.org/525403003
https://code.google.com/p/v8/source/detail?r=23573
Modified:
/branches/bleeding_edge/src/ic/mips/ic-conventions-mips.cc
/branches/bleeding_edge/src/ic/mips64/ic-conventions-mips64.cc
/branches/bleeding_edge/src/mips/code-stubs-mips.cc
/branches/bleeding_edge/src/mips/interface-descriptors-mips.cc
/branches/bleeding_edge/src/mips64/code-stubs-mips64.cc
/branches/bleeding_edge/src/mips64/interface-descriptors-mips64.cc
=======================================
--- /branches/bleeding_edge/src/ic/mips/ic-conventions-mips.cc Tue Aug 26
17:57:18 2014 UTC
+++ /branches/bleeding_edge/src/ic/mips/ic-conventions-mips.cc Mon Sep 1
18:02:35 2014 UTC
@@ -17,22 +17,20 @@
const Register LoadConvention::NameRegister() { return a2; }
-const Register VectorLoadConvention::SlotRegister() {
- DCHECK(FLAG_vector_ics);
- return a0;
-}
+const Register VectorLoadConvention::SlotRegister() { return a0; }
-const Register FullVectorLoadConvention::VectorRegister() {
- DCHECK(FLAG_vector_ics);
- return a3;
-}
+const Register FullVectorLoadConvention::VectorRegister() { return a3; }
const Register StoreConvention::ReceiverRegister() { return a1; }
const Register StoreConvention::NameRegister() { return a2; }
const Register StoreConvention::ValueRegister() { return a0; }
const Register StoreConvention::MapRegister() { return a3; }
+
+
+const Register InstanceofConvention::left() { return a0; }
+const Register InstanceofConvention::right() { return a1; }
}
} // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/ic/mips64/ic-conventions-mips64.cc Tue Aug
26 17:57:18 2014 UTC
+++ /branches/bleeding_edge/src/ic/mips64/ic-conventions-mips64.cc Mon Sep
1 18:02:35 2014 UTC
@@ -17,22 +17,20 @@
const Register LoadConvention::NameRegister() { return a2; }
-const Register VectorLoadConvention::SlotRegister() {
- DCHECK(FLAG_vector_ics);
- return a0;
-}
+const Register VectorLoadConvention::SlotRegister() { return a0; }
-const Register FullVectorLoadConvention::VectorRegister() {
- DCHECK(FLAG_vector_ics);
- return a3;
-}
+const Register FullVectorLoadConvention::VectorRegister() { return a3; }
const Register StoreConvention::ReceiverRegister() { return a1; }
const Register StoreConvention::NameRegister() { return a2; }
const Register StoreConvention::ValueRegister() { return a0; }
const Register StoreConvention::MapRegister() { return a3; }
+
+
+const Register InstanceofConvention::left() { return a0; }
+const Register InstanceofConvention::right() { return a1; }
}
} // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/mips/code-stubs-mips.cc Fri Aug 29 15:25:41
2014 UTC
+++ /branches/bleeding_edge/src/mips/code-stubs-mips.cc Mon Sep 1 18:02:35
2014 UTC
@@ -17,138 +17,25 @@
namespace v8 {
namespace internal {
-
-
-void FastNewClosureStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry);
-}
-
-
-void FastNewContextStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void ToNumberStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void NumberToStringStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry);
-}
-
-
-void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a3, a2, a1 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Smi(),
- Representation::Tagged() };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
-
Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry,
- representations);
-}
-
-
-void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a3, a2, a1, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry);
-}
-
-
-void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a3 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void CallFunctionStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- UNIMPLEMENTED();
-}
-
-
-void CallConstructStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- UNIMPLEMENTED();
-}
-
-
-void RegExpConstructResultStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a1, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
-}
-
-
-void TransitionElementsKindStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0, a1 };
- Address entry =
- Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry;
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(entry));
-}
-
-
-void CompareNilICStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(CompareNilIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate()));
-}
static void InitializeArrayConstructorDescriptor(
- CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor,
+ Isolate* isolate, CodeStub::Major major,
+ CodeStubInterfaceDescriptor* descriptor,
int constant_stack_parameter_count) {
- // register state
- // cp -- context
- // a0 -- number of arguments
- // a1 -- function
- // a2 -- allocation site with elements kind
Address deopt_handler = Runtime::FunctionForId(
Runtime::kArrayConstructor)->entry;
if (constant_stack_parameter_count == 0) {
- Register registers[] = { cp, a1, a2 };
- descriptor->Initialize(major, arraysize(registers), registers,
- deopt_handler, NULL,
constant_stack_parameter_count,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::ArrayConstructorConstantArgCountCall);
+ descriptor->Initialize(major, call_descriptor, deopt_handler,
+ constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE);
} else {
- // stack param count needs (constructor pointer, and single argument)
- Register registers[] = { cp, a1, a2, a0 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Integer32() };
- descriptor->Initialize(major, arraysize(registers), registers, a0,
- deopt_handler, representations,
+ CallInterfaceDescriptor* call_descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ArrayConstructorCall);
+ descriptor->Initialize(major, call_descriptor, a0, deopt_handler,
constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS);
}
@@ -156,29 +43,22 @@
static void InitializeInternalArrayConstructorDescriptor(
- CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor,
+ Isolate* isolate, CodeStub::Major major,
+ CodeStubInterfaceDescriptor* descriptor,
int constant_stack_parameter_count) {
- // register state
- // cp -- context
- // a0 -- number of arguments
- // a1 -- constructor function
Address deopt_handler = Runtime::FunctionForId(
Runtime::kInternalArrayConstructor)->entry;
if (constant_stack_parameter_count == 0) {
- Register registers[] = { cp, a1 };
- descriptor->Initialize(major, arraysize(registers), registers,
- deopt_handler, NULL,
constant_stack_parameter_count,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorConstantArgCountCall);
+ descriptor->Initialize(major, call_descriptor, deopt_handler,
+ constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE);
} else {
- // stack param count needs (constructor pointer, and single argument)
- Register registers[] = { cp, a1, a0 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Integer32() };
- descriptor->Initialize(major, arraysize(registers), registers, a0,
- deopt_handler, representations,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorCall);
+ descriptor->Initialize(major, call_descriptor, a0, deopt_handler,
constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS);
}
@@ -187,73 +67,40 @@
void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 0);
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
0);
}
void ArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 1);
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
1);
}
void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, -1);
-}
-
-
-void ToBooleanStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(ToBooleanIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
-1);
}
void InternalArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 0);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, 0);
}
void
InternalArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 1);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, 1);
}
void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, -1);
-}
-
-
-void BinaryOpICStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(BinaryOpIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate()));
-}
-
-
-void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite));
-}
-
-
-void StringAddStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
-
Runtime::FunctionForId(Runtime::kStringAdd)->entry);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, -1);
}
@@ -1884,12 +1731,6 @@
PropertyAccessCompiler::TailCallBuiltin(
masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC));
}
-
-
-Register InstanceofStub::left() { return a0; }
-
-
-Register InstanceofStub::right() { return a1; }
void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/mips/interface-descriptors-mips.cc Fri Aug
29 15:25:41 2014 UTC
+++ /branches/bleeding_edge/src/mips/interface-descriptors-mips.cc Mon Sep
1 18:02:35 2014 UTC
@@ -15,6 +15,137 @@
void CallDescriptors::InitializeForIsolate(Isolate* isolate) {
+ InitializeForIsolateAllPlatforms(isolate);
+
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::FastNewClosureCall);
+ Register registers[] = {cp, a2};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::FastNewContextCall);
+ Register registers[] = {cp, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ToNumberCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::NumberToStringCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::FastCloneShallowArrayCall);
+ Register registers[] = {cp, a3, a2, a1};
+ Representation representations[] = {
+ Representation::Tagged(), Representation::Tagged(),
+ Representation::Smi(), Representation::Tagged()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::FastCloneShallowObjectCall);
+ Register registers[] = {cp, a3, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::CreateAllocationSiteCall);
+ Register registers[] = {cp, a2, a3};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::RegExpConstructResultCall);
+ Register registers[] = {cp, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::TransitionElementsKindCall);
+ Register registers[] = {cp, a0, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::ArrayConstructorConstantArgCountCall);
+ // register state
+ // cp -- context
+ // a0 -- number of arguments
+ // a1 -- function
+ // a2 -- allocation site with elements kind
+ Register registers[] = {cp, a1, a2};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ArrayConstructorCall);
+ // stack param count needs (constructor pointer, and single argument)
+ Register registers[] = {cp, a1, a2, a0};
+ Representation representations[] = {
+ Representation::Tagged(), Representation::Tagged(),
+ Representation::Tagged(), Representation::Integer32()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorConstantArgCountCall);
+ // register state
+ // cp -- context
+ // a0 -- number of arguments
+ // a1 -- constructor function
+ Register registers[] = {cp, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorCall);
+ // stack param count needs (constructor pointer, and single argument)
+ Register registers[] = {cp, a1, a0};
+ Representation representations[] = {Representation::Tagged(),
+ Representation::Tagged(),
+ Representation::Integer32()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::CompareNilCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ToBooleanCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::BinaryOpCall);
+ Register registers[] = {cp, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::BinaryOpWithAllocationSiteCall);
+ Register registers[] = {cp, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::StringAddCall);
+ Register registers[] = {cp, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+
{
CallInterfaceDescriptor* descriptor =
isolate->call_descriptor(CallDescriptorKey::ArgumentAdaptorCall);
=======================================
--- /branches/bleeding_edge/src/mips64/code-stubs-mips64.cc Fri Aug 29
15:25:41 2014 UTC
+++ /branches/bleeding_edge/src/mips64/code-stubs-mips64.cc Mon Sep 1
18:02:35 2014 UTC
@@ -17,138 +17,25 @@
namespace v8 {
namespace internal {
-
-
-void FastNewClosureStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry);
-}
-
-
-void FastNewContextStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void ToNumberStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void NumberToStringStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry);
-}
-
-
-void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a3, a2, a1 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Smi(),
- Representation::Tagged() };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
-
Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry,
- representations);
-}
-
-
-void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a3, a2, a1, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry);
-}
-
-
-void CallFunctionStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- UNIMPLEMENTED();
-}
-
-
-void CallConstructStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- UNIMPLEMENTED();
-}
-
-
-void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a3 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers);
-}
-
-
-void RegExpConstructResultStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a1, a0 };
- descriptor->Initialize(
- MajorKey(), arraysize(registers), registers,
- Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
-}
-
-
-void TransitionElementsKindStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0, a1 };
- Address entry =
- Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry;
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(entry));
-}
-
-
-void CompareNilICStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(CompareNilIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate()));
-}
static void InitializeArrayConstructorDescriptor(
- CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor,
+ Isolate* isolate, CodeStub::Major major,
+ CodeStubInterfaceDescriptor* descriptor,
int constant_stack_parameter_count) {
- // register state
- // cp -- context
- // a0 -- number of arguments
- // a1 -- function
- // a2 -- allocation site with elements kind
Address deopt_handler = Runtime::FunctionForId(
Runtime::kArrayConstructor)->entry;
if (constant_stack_parameter_count == 0) {
- Register registers[] = { cp, a1, a2 };
- descriptor->Initialize(major, arraysize(registers), registers,
- deopt_handler, NULL,
constant_stack_parameter_count,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::ArrayConstructorConstantArgCountCall);
+ descriptor->Initialize(major, call_descriptor, deopt_handler,
+ constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE);
} else {
- // stack param count needs (constructor pointer, and single argument)
- Register registers[] = { cp, a1, a2, a0 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Integer32() };
- descriptor->Initialize(major, arraysize(registers), registers, a0,
- deopt_handler, representations,
+ CallInterfaceDescriptor* call_descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ArrayConstructorCall);
+ descriptor->Initialize(major, call_descriptor, a0, deopt_handler,
constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS);
}
@@ -156,29 +43,22 @@
static void InitializeInternalArrayConstructorDescriptor(
- CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor,
+ Isolate* isolate, CodeStub::Major major,
+ CodeStubInterfaceDescriptor* descriptor,
int constant_stack_parameter_count) {
- // register state
- // cp -- context
- // a0 -- number of arguments
- // a1 -- constructor function
Address deopt_handler = Runtime::FunctionForId(
Runtime::kInternalArrayConstructor)->entry;
if (constant_stack_parameter_count == 0) {
- Register registers[] = { cp, a1 };
- descriptor->Initialize(major, arraysize(registers), registers,
- deopt_handler, NULL,
constant_stack_parameter_count,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorConstantArgCountCall);
+ descriptor->Initialize(major, call_descriptor, deopt_handler,
+ constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE);
} else {
- // stack param count needs (constructor pointer, and single argument)
- Register registers[] = { cp, a1, a0 };
- Representation representations[] = {
- Representation::Tagged(),
- Representation::Tagged(),
- Representation::Integer32() };
- descriptor->Initialize(major, arraysize(registers), registers, a0,
- deopt_handler, representations,
+ CallInterfaceDescriptor* call_descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorCall);
+ descriptor->Initialize(major, call_descriptor, a0, deopt_handler,
constant_stack_parameter_count,
JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS);
}
@@ -187,73 +67,40 @@
void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 0);
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
0);
}
void ArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 1);
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
1);
}
void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeArrayConstructorDescriptor(MajorKey(), descriptor, -1);
-}
-
-
-void ToBooleanStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(ToBooleanIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate()));
+ InitializeArrayConstructorDescriptor(isolate(), MajorKey(), descriptor,
-1);
}
void InternalArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 0);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, 0);
}
void
InternalArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 1);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, 1);
}
void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
CodeStubInterfaceDescriptor* descriptor) {
- InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, -1);
-}
-
-
-void BinaryOpICStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(BinaryOpIC_Miss));
- descriptor->SetMissHandler(
- ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate()));
-}
-
-
-void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a2, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
- FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite));
-}
-
-
-void StringAddStub::InitializeInterfaceDescriptor(
- CodeStubInterfaceDescriptor* descriptor) {
- Register registers[] = { cp, a1, a0 };
- descriptor->Initialize(MajorKey(), arraysize(registers), registers,
-
Runtime::FunctionForId(Runtime::kStringAdd)->entry);
+ InitializeInternalArrayConstructorDescriptor(isolate(), MajorKey(),
+ descriptor, -1);
}
@@ -1882,12 +1729,6 @@
PropertyAccessCompiler::TailCallBuiltin(
masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC));
}
-
-
-Register InstanceofStub::left() { return a0; }
-
-
-Register InstanceofStub::right() { return a1; }
void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/mips64/interface-descriptors-mips64.cc Fri
Aug 29 15:25:41 2014 UTC
+++ /branches/bleeding_edge/src/mips64/interface-descriptors-mips64.cc Mon
Sep 1 18:02:35 2014 UTC
@@ -15,6 +15,137 @@
void CallDescriptors::InitializeForIsolate(Isolate* isolate) {
+ InitializeForIsolateAllPlatforms(isolate);
+
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::FastNewClosureCall);
+ Register registers[] = {cp, a2};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::FastNewContextCall);
+ Register registers[] = {cp, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ToNumberCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::NumberToStringCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::FastCloneShallowArrayCall);
+ Register registers[] = {cp, a3, a2, a1};
+ Representation representations[] = {
+ Representation::Tagged(), Representation::Tagged(),
+ Representation::Smi(), Representation::Tagged()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::FastCloneShallowObjectCall);
+ Register registers[] = {cp, a3, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::CreateAllocationSiteCall);
+ Register registers[] = {cp, a2, a3};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::RegExpConstructResultCall);
+ Register registers[] = {cp, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+
isolate->call_descriptor(CallDescriptorKey::TransitionElementsKindCall);
+ Register registers[] = {cp, a0, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::ArrayConstructorConstantArgCountCall);
+ // register state
+ // cp -- context
+ // a0 -- number of arguments
+ // a1 -- function
+ // a2 -- allocation site with elements kind
+ Register registers[] = {cp, a1, a2};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ArrayConstructorCall);
+ // stack param count needs (constructor pointer, and single argument)
+ Register registers[] = {cp, a1, a2, a0};
+ Representation representations[] = {
+ Representation::Tagged(), Representation::Tagged(),
+ Representation::Tagged(), Representation::Integer32()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorConstantArgCountCall);
+ // register state
+ // cp -- context
+ // a0 -- number of arguments
+ // a1 -- constructor function
+ Register registers[] = {cp, a1};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::InternalArrayConstructorCall);
+ // stack param count needs (constructor pointer, and single argument)
+ Register registers[] = {cp, a1, a0};
+ Representation representations[] = {Representation::Tagged(),
+ Representation::Tagged(),
+ Representation::Integer32()};
+ descriptor->Initialize(arraysize(registers), registers,
representations);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::CompareNilCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::ToBooleanCall);
+ Register registers[] = {cp, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::BinaryOpCall);
+ Register registers[] = {cp, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor = isolate->call_descriptor(
+ CallDescriptorKey::BinaryOpWithAllocationSiteCall);
+ Register registers[] = {cp, a2, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+ {
+ CallInterfaceDescriptor* descriptor =
+ isolate->call_descriptor(CallDescriptorKey::StringAddCall);
+ Register registers[] = {cp, a1, a0};
+ descriptor->Initialize(arraysize(registers), registers, NULL);
+ }
+
{
CallInterfaceDescriptor* descriptor =
isolate->call_descriptor(CallDescriptorKey::ArgumentAdaptorCall);
--
--
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.