diff options
Diffstat (limited to 'src/interface-descriptors.cc')
-rw-r--r-- | src/interface-descriptors.cc | 172 |
1 files changed, 149 insertions, 23 deletions
diff --git a/src/interface-descriptors.cc b/src/interface-descriptors.cc index d14b1a10..d77b1376 100644 --- a/src/interface-descriptors.cc +++ b/src/interface-descriptors.cc @@ -74,6 +74,30 @@ void FastNewFunctionContextDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void FastNewObjectDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {TargetRegister(), NewTargetRegister()}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + +const Register FastNewObjectDescriptor::TargetRegister() { + return kJSFunctionRegister; +} + +const Register FastNewObjectDescriptor::NewTargetRegister() { + return kJavaScriptCallNewTargetRegister; +} + +void FastNewArgumentsDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {TargetRegister()}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + +const Register FastNewArgumentsDescriptor::TargetRegister() { + return kJSFunctionRegister; +} + void LoadDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kReceiver, kName, kSlot @@ -90,24 +114,41 @@ void LoadDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void LoadFieldDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kSmiHandler + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void LoadFieldDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {ReceiverRegister(), SmiHandlerRegister()}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + void LoadGlobalDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - // kSlot - MachineType machine_types[] = {MachineType::TaggedSigned()}; + // kName, kSlot + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } void LoadGlobalDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {LoadWithVectorDescriptor::SlotRegister()}; + Register registers[] = {NameRegister(), SlotRegister()}; data->InitializePlatformSpecific(arraysize(registers), registers); } void LoadGlobalWithVectorDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - // kSlot, kVector - MachineType machine_types[] = {MachineType::TaggedSigned(), + // kName, kSlot, kVector + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned(), MachineType::AnyTagged()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); @@ -115,8 +156,7 @@ void LoadGlobalWithVectorDescriptor::InitializePlatformIndependent( void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {LoadWithVectorDescriptor::SlotRegister(), - LoadWithVectorDescriptor::VectorRegister()}; + Register registers[] = {NameRegister(), SlotRegister(), VectorRegister()}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -183,6 +223,35 @@ void StoreNamedTransitionDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(len, registers); } +void StringCharAtDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kPosition + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::IntPtr()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void StringCharAtDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + DefaultInitializePlatformSpecific(data, kParameterCount); +} + +void StringCharCodeAtDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kPosition + // TODO(turbofan): Allow builtins to return untagged values. + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::IntPtr()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void StringCharCodeAtDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + DefaultInitializePlatformSpecific(data, kParameterCount); +} + void StringCompareDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {LeftRegister(), RightRegister()}; @@ -207,6 +276,19 @@ void MathPowIntegerDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +const Register LoadFieldDescriptor::ReceiverRegister() { + // Reuse the register from the LoadDescriptor, since given the + // LoadFieldDescriptor's usage, it doesn't matter exactly which registers are + // used to pass parameters in. + return LoadDescriptor::ReceiverRegister(); +} +const Register LoadFieldDescriptor::SmiHandlerRegister() { + // Reuse the register from the LoadDescriptor, since given the + // LoadFieldDescriptor's usage, it doesn't matter exactly which registers are + // used to pass parameters in. + return LoadDescriptor::NameRegister(); +} + void LoadWithVectorDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kReceiver, kName, kSlot, kVector @@ -293,6 +375,18 @@ void GrowArrayElementsDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void NewArgumentsElementsDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + MachineType const kMachineTypes[] = {MachineType::IntPtr()}; + data->InitializePlatformIndependent(arraysize(kMachineTypes), 0, + kMachineTypes); +} + +void NewArgumentsElementsDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + DefaultInitializePlatformSpecific(data, 1); +} + void VarArgFunctionDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kActualArgumentsCount @@ -349,6 +443,15 @@ void CallTrampolineDescriptor::InitializePlatformIndependent( machine_types); } +void CallForwardVarargsDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kTarget, kStartIndex + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + void ConstructStubDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kFunction, kNewTarget, kActualArgumentsCount, kAllocationSite @@ -368,36 +471,38 @@ void ConstructTrampolineDescriptor::InitializePlatformIndependent( machine_types); } -void CallFunctionWithFeedbackDescriptor::InitializePlatformIndependent( +void CallICDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - // kFunction, kSlot - MachineType machine_types[] = {MachineType::AnyTagged(), - MachineType::TaggedSigned()}; + // kTarget, kActualArgumentsCount, kSlot, kVector + MachineType machine_types[] = {MachineType::AnyTagged(), MachineType::Int32(), + MachineType::Int32(), + MachineType::AnyTagged()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } -void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformIndependent( +void CallICTrampolineDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - // kFunction, kActualArgumentsCount, kSlot, kVector - MachineType machine_types[] = { - MachineType::TaggedPointer(), MachineType::Int32(), - MachineType::TaggedSigned(), MachineType::AnyTagged()}; + // kTarget, kActualArgumentsCount, kSlot + MachineType machine_types[] = {MachineType::AnyTagged(), MachineType::Int32(), + MachineType::Int32()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } void BuiltinDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - MachineType machine_types[] = {MachineType::AnyTagged(), - MachineType::Int32()}; + // kTarget, kNewTarget, kArgumentsCount + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::Int32()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } void BuiltinDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {NewTargetRegister(), ArgumentsCountRegister()}; + Register registers[] = {TargetRegister(), NewTargetRegister(), + ArgumentsCountRegister()}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -408,6 +513,20 @@ const Register BuiltinDescriptor::NewTargetRegister() { return kJavaScriptCallNewTargetRegister; } +const Register BuiltinDescriptor::TargetRegister() { + return kJSFunctionRegister; +} + +void ArrayConstructorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kTarget, kNewTarget, kActualArgumentsCount, kAllocationSite + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::Int32(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + void ArrayNoArgumentConstructorDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kFunction, kAllocationSite, kActualArgumentsCount, kFunctionParameter @@ -432,9 +551,8 @@ void ArraySingleArgumentConstructorDescriptor::InitializePlatformIndependent( void ArrayNArgumentsConstructorDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { // kFunction, kAllocationSite, kActualArgumentsCount - MachineType machine_types[] = {MachineType::TaggedPointer(), - MachineType::AnyTagged(), - MachineType::Int32()}; + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::Int32()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } @@ -464,7 +582,7 @@ void InterpreterDispatchDescriptor::InitializePlatformIndependent( // kAccumulator, kBytecodeOffset, kBytecodeArray, kDispatchTable MachineType machine_types[] = { MachineType::AnyTagged(), MachineType::IntPtr(), MachineType::AnyTagged(), - MachineType::AnyTagged()}; + MachineType::IntPtr()}; data->InitializePlatformIndependent(arraysize(machine_types), 0, machine_types); } @@ -508,5 +626,13 @@ void InterpreterCEntryDescriptor::InitializePlatformIndependent( machine_types); } +void FrameDropperTrampolineDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // New FP value. + MachineType machine_types[] = {MachineType::Pointer()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + } // namespace internal } // namespace v8 |