diff options
Diffstat (limited to 'deps/v8/src/mips64/interface-descriptors-mips64.cc')
-rw-r--r-- | deps/v8/src/mips64/interface-descriptors-mips64.cc | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/deps/v8/src/mips64/interface-descriptors-mips64.cc b/deps/v8/src/mips64/interface-descriptors-mips64.cc new file mode 100644 index 0000000000..8759bdd9bd --- /dev/null +++ b/deps/v8/src/mips64/interface-descriptors-mips64.cc @@ -0,0 +1,303 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/v8.h" + +#if V8_TARGET_ARCH_MIPS64 + +#include "src/interface-descriptors.h" + +namespace v8 { +namespace internal { + +const Register CallInterfaceDescriptor::ContextRegister() { return cp; } + + +const Register LoadDescriptor::ReceiverRegister() { return a1; } +const Register LoadDescriptor::NameRegister() { return a2; } + + +const Register VectorLoadICTrampolineDescriptor::SlotRegister() { return a0; } + + +const Register VectorLoadICDescriptor::VectorRegister() { return a3; } + + +const Register StoreDescriptor::ReceiverRegister() { return a1; } +const Register StoreDescriptor::NameRegister() { return a2; } +const Register StoreDescriptor::ValueRegister() { return a0; } + + +const Register ElementTransitionAndStoreDescriptor::MapRegister() { return a3; } + + +const Register InstanceofDescriptor::left() { return a0; } +const Register InstanceofDescriptor::right() { return a1; } + + +const Register ArgumentsAccessReadDescriptor::index() { return a1; } +const Register ArgumentsAccessReadDescriptor::parameter_count() { return a0; } + + +const Register ApiGetterDescriptor::function_address() { return a2; } + + +const Register MathPowTaggedDescriptor::exponent() { return a2; } + + +const Register MathPowIntegerDescriptor::exponent() { + return MathPowTaggedDescriptor::exponent(); +} + + +void FastNewClosureDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a2}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void FastNewContextDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a1}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void ToNumberDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void NumberToStringDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void FastCloneShallowArrayDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a3, a2, a1}; + Representation representations[] = { + Representation::Tagged(), Representation::Tagged(), Representation::Smi(), + Representation::Tagged()}; + data->Initialize(arraysize(registers), registers, representations); +} + + +void FastCloneShallowObjectDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a3, a2, a1, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void CreateAllocationSiteDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a2, a3}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void StoreArrayLiteralElementDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a3, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void CallFunctionWithFeedbackDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a1, a3}; + Representation representations[] = {Representation::Tagged(), + Representation::Tagged(), + Representation::Smi()}; + data->Initialize(arraysize(registers), registers, representations); +} + + +void CallFunctionDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a1}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void CallConstructDescriptor::Initialize(CallInterfaceDescriptorData* data) { + // a0 : number of arguments + // a1 : the function to call + // a2 : feedback vector + // a3 : (only if a2 is not the megamorphic symbol) slot in feedback + // vector (Smi) + // TODO(turbofan): So far we don't gather type feedback and hence skip the + // slot parameter, but ArrayConstructStub needs the vector to be undefined. + Register registers[] = {cp, a0, a1, a2}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void RegExpConstructResultDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a2, a1, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void TransitionElementsKindDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a0, a1}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void ArrayConstructorConstantArgCountDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + // register state + // cp -- context + // a0 -- number of arguments + // a1 -- function + // a2 -- allocation site with elements kind + Register registers[] = {cp, a1, a2}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void ArrayConstructorDescriptor::Initialize(CallInterfaceDescriptorData* data) { + // 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()}; + data->Initialize(arraysize(registers), registers, representations); +} + + +void InternalArrayConstructorConstantArgCountDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + // register state + // cp -- context + // a0 -- number of arguments + // a1 -- constructor function + Register registers[] = {cp, a1}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void InternalArrayConstructorDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + // stack param count needs (constructor pointer, and single argument) + Register registers[] = {cp, a1, a0}; + Representation representations[] = {Representation::Tagged(), + Representation::Tagged(), + Representation::Integer32()}; + data->Initialize(arraysize(registers), registers, representations); +} + + +void CompareNilDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void ToBooleanDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void BinaryOpDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a1, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void BinaryOpWithAllocationSiteDescriptor::Initialize( + CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a2, a1, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void StringAddDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = {cp, a1, a0}; + data->Initialize(arraysize(registers), registers, NULL); +} + + +void KeyedDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = { + cp, // context + a2, // key + }; + Representation representations[] = { + Representation::Tagged(), // context + Representation::Tagged(), // key + }; + data->Initialize(arraysize(registers), registers, representations); +} + + +void NamedDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = { + cp, // context + a2, // name + }; + Representation representations[] = { + Representation::Tagged(), // context + Representation::Tagged(), // name + }; + data->Initialize(arraysize(registers), registers, representations); +} + + +void CallHandlerDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = { + cp, // context + a0, // receiver + }; + Representation representations[] = { + Representation::Tagged(), // context + Representation::Tagged(), // receiver + }; + data->Initialize(arraysize(registers), registers, representations); +} + + +void ArgumentAdaptorDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = { + cp, // context + a1, // JSFunction + a0, // actual number of arguments + a2, // expected number of arguments + }; + Representation representations[] = { + Representation::Tagged(), // context + Representation::Tagged(), // JSFunction + Representation::Integer32(), // actual number of arguments + Representation::Integer32(), // expected number of arguments + }; + data->Initialize(arraysize(registers), registers, representations); +} + + +void ApiFunctionDescriptor::Initialize(CallInterfaceDescriptorData* data) { + Register registers[] = { + cp, // context + a0, // callee + a4, // call_data + a2, // holder + a1, // api_function_address + }; + Representation representations[] = { + Representation::Tagged(), // context + Representation::Tagged(), // callee + Representation::Tagged(), // call_data + Representation::Tagged(), // holder + Representation::External(), // api_function_address + }; + data->Initialize(arraysize(registers), registers, representations); +} +} +} // namespace v8::internal + +#endif // V8_TARGET_ARCH_MIPS64 |