1d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// found in the LICENSE file. 4d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 5d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ 6d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#define V8_CALL_INTERFACE_DESCRIPTOR_H_ 7d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 8d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "src/assembler.h" 9d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "src/macro-assembler.h" 10d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 11d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.orgnamespace v8 { 12d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.orgnamespace internal { 13d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 14d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.orgclass PlatformInterfaceDescriptor; 15d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 169aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#define INTERFACE_DESCRIPTOR_LIST(V) \ 179aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(Load) \ 189aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(Store) \ 199aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ElementTransitionAndStore) \ 209aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(Instanceof) \ 216313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(VectorLoadICTrampoline) \ 229aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(VectorLoadIC) \ 239aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(FastNewClosure) \ 249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(FastNewContext) \ 259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ToNumber) \ 269aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(NumberToString) \ 279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(FastCloneShallowArray) \ 289aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(FastCloneShallowObject) \ 299aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(CreateAllocationSite) \ 309aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(CallFunction) \ 316313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(CallFunctionWithFeedback) \ 329aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(CallConstruct) \ 339aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(RegExpConstructResult) \ 349aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(TransitionElementsKind) \ 359aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ArrayConstructorConstantArgCount) \ 369aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ArrayConstructor) \ 379aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(InternalArrayConstructorConstantArgCount) \ 389aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(InternalArrayConstructor) \ 399aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(CompareNil) \ 409aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ToBoolean) \ 419aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(BinaryOp) \ 429aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(BinaryOpWithAllocationSite) \ 439aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(StringAdd) \ 449aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(Keyed) \ 459aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(Named) \ 469aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(CallHandler) \ 479aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org V(ArgumentAdaptor) \ 486313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(ApiGetter) \ 496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(ApiFunction) \ 506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(ArgumentsAccessRead) \ 516313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(StoreArrayLiteralElement) \ 526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(MathPowTagged) \ 536313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(MathPowInteger) \ 546313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org V(ContextOnly) 559aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 569aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 579aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallInterfaceDescriptorData { 58d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org public: 599aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallInterfaceDescriptorData() : register_param_count_(-1) {} 60ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org 61ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org // A copy of the passed in registers and param_representations is made 629aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // and owned by the CallInterfaceDescriptorData. 63ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org 64ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org // TODO(mvstanton): Instead of taking parallel arrays register and 65ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org // param_representations, how about a struct that puts the representation 66ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org // and register side by side (eg, RegRep(r1, Representation::Tagged()). 67e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org // The same should go for the CodeStubDescriptor class. 68ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org void Initialize(int register_parameter_count, Register* registers, 69ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org Representation* param_representations, 70ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org PlatformInterfaceDescriptor* platform_descriptor = NULL); 71ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org 72d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org bool IsInitialized() const { return register_param_count_ >= 0; } 73d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org int register_param_count() const { return register_param_count_; } 759aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Register register_param(int index) const { return register_params_[index]; } 769aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Register* register_params() const { return register_params_.get(); } 779aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Representation register_param_representation(int index) const { 789aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return register_param_representations_[index]; 799aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org } 809aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Representation* register_param_representations() const { 819aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return register_param_representations_.get(); 829aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org } 839aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org PlatformInterfaceDescriptor* platform_specific_descriptor() const { 849aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return platform_specific_descriptor_; 859aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org } 869aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 879aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org private: 889aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org int register_param_count_; 899aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // The Register params are allocated dynamically by the 919aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // InterfaceDescriptor, and freed on destruction. This is because static 929aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // arrays of Registers cause creation of runtime static initializers 939aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // which we don't want. 949aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org SmartArrayPointer<Register> register_params_; 959aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // Specifies Representations for the stub's parameter. Points to an array of 969aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // Representations of the same length of the numbers of parameters to the 979aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // stub, or if NULL (the default value), Representation of each parameter 989aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org // assumed to be Tagged(). 999aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org SmartArrayPointer<Representation> register_param_representations_; 1009aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1019aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org PlatformInterfaceDescriptor* platform_specific_descriptor_; 1029aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1039aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); 1049aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 1059aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1069aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1079aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallDescriptors { 1089aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 1099aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org enum Key { 1109aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#define DEF_ENUM(name) name, 1119aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) 1129aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#undef DEF_ENUM 1139aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org NUMBER_OF_DESCRIPTORS 1149aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org }; 1159aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 116d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 1179aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1189aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallInterfaceDescriptor { 1199aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 1209aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallInterfaceDescriptor() : data_(NULL) {} 1219aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1229aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) 1239aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org : data_(isolate->call_descriptor_data(key)) {} 1249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org int GetEnvironmentLength() const { return data()->register_param_count(); } 1269aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org int GetRegisterParameterCount() const { 1289aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return data()->register_param_count(); 1299aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org } 130d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 131d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org Register GetParameterRegister(int index) const { 1329aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return data()->register_param(index); 133d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 134d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 135d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org Representation GetParameterRepresentation(int index) const { 1369aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DCHECK(index < data()->register_param_count()); 1379aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org if (data()->register_param_representations() == NULL) { 138d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org return Representation::Tagged(); 139d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 140d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 1419aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return data()->register_param_representation(index); 142d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 143d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 144d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org // "Environment" versions of parameter functions. The first register 145d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org // parameter (context) is not included. 146d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org int GetEnvironmentParameterCount() const { 147d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org return GetEnvironmentLength() - 1; 148d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 149d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 150d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org Register GetEnvironmentParameterRegister(int index) const { 151d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org return GetParameterRegister(index + 1); 152d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 153d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 154d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org Representation GetEnvironmentParameterRepresentation(int index) const { 155d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org return GetParameterRepresentation(index + 1); 156d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 157d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 158d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org // Some platforms have extra information to associate with the descriptor. 159d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org PlatformInterfaceDescriptor* platform_specific_descriptor() const { 1609aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return data()->platform_specific_descriptor(); 161d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org } 162d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 163d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org static const Register ContextRegister(); 164d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 165e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org const char* DebugName(Isolate* isolate); 166e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org 1679aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org protected: 1689aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org const CallInterfaceDescriptorData* data() const { return data_; } 1699aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 170d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org private: 1719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org const CallInterfaceDescriptorData* data_; 1729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 173d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 174d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 1756313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#define DECLARE_DESCRIPTOR(name, base) \ 1766313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org explicit name(Isolate* isolate) : base(isolate, key()) { \ 1776313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org if (!data()->IsInitialized()) \ 1786313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Initialize(isolate->call_descriptor_data(key())); \ 1796313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org } \ 1806313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org \ 1816313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org protected: \ 1826313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org void Initialize(CallInterfaceDescriptorData* data); \ 1836313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \ 1846313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org \ 1856313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: \ 1866313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static inline CallDescriptors::Key key(); 1879aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 188d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 1896313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. 1909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass LoadDescriptor : public CallInterfaceDescriptor { 1919aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 1926313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(LoadDescriptor, CallInterfaceDescriptor) 1939aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 1949aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org enum ParameterIndices { kReceiverIndex, kNameIndex }; 1959aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register ReceiverRegister(); 1969aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register NameRegister(); 197d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org}; 198d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 199d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 2009aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass StoreDescriptor : public CallInterfaceDescriptor { 201d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org public: 2026313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(StoreDescriptor, CallInterfaceDescriptor) 203ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org 2049aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org enum ParameterIndices { 2059aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kReceiverIndex, 2069aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kNameIndex, 2079aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kValueIndex, 2089aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kParameterCount 2099aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org }; 2109aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register ReceiverRegister(); 2119aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register NameRegister(); 2129aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register ValueRegister(); 2139aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2149aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2159aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2166313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass ElementTransitionAndStoreDescriptor : public StoreDescriptor { 2179aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2186313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ElementTransitionAndStoreDescriptor, StoreDescriptor) 2199aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2209aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register MapRegister(); 2219aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2229aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2239aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass InstanceofDescriptor : public CallInterfaceDescriptor { 2259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2266313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(InstanceofDescriptor, CallInterfaceDescriptor) 2279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2289aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org enum ParameterIndices { kLeftIndex, kRightIndex, kParameterCount }; 2299aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register left(); 2309aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register right(); 2319aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2329aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2339aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2346313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass VectorLoadICTrampolineDescriptor : public LoadDescriptor { 2356313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 2366313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(VectorLoadICTrampolineDescriptor, LoadDescriptor) 2376313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 2386313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex }; 2396313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 2406313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register SlotRegister(); 2416313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 2426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 2436313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 2446313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass VectorLoadICDescriptor : public VectorLoadICTrampolineDescriptor { 2459aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2466313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(VectorLoadICDescriptor, VectorLoadICTrampolineDescriptor) 2479aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2489aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org enum ParameterIndices { 2499aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kReceiverIndex, 2509aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kNameIndex, 2519aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org kSlotIndex, 2526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org kVectorIndex 2539aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org }; 2549aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2559aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org static const Register VectorRegister(); 2569aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2579aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2589aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2599aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass FastNewClosureDescriptor : public CallInterfaceDescriptor { 2609aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2616313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(FastNewClosureDescriptor, CallInterfaceDescriptor) 2629aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2639aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2649aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass FastNewContextDescriptor : public CallInterfaceDescriptor { 2669aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2676313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(FastNewContextDescriptor, CallInterfaceDescriptor) 2689aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2699aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2709aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ToNumberDescriptor : public CallInterfaceDescriptor { 2729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2736313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ToNumberDescriptor, CallInterfaceDescriptor) 2749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2759aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2769aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2779aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass NumberToStringDescriptor : public CallInterfaceDescriptor { 2789aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2796313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(NumberToStringDescriptor, CallInterfaceDescriptor) 2809aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2819aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2829aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2839aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass FastCloneShallowArrayDescriptor : public CallInterfaceDescriptor { 2849aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2856313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(FastCloneShallowArrayDescriptor, CallInterfaceDescriptor) 2869aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2879aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2889aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2899aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass FastCloneShallowObjectDescriptor : public CallInterfaceDescriptor { 2909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2916313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(FastCloneShallowObjectDescriptor, CallInterfaceDescriptor) 2929aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2939aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2949aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 2959aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CreateAllocationSiteDescriptor : public CallInterfaceDescriptor { 2969aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 2976313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CreateAllocationSiteDescriptor, CallInterfaceDescriptor) 2989aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 2999aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3009aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3019aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallFunctionDescriptor : public CallInterfaceDescriptor { 3029aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3036313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CallFunctionDescriptor, CallInterfaceDescriptor) 3046313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 3056313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 3066313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 3076313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass CallFunctionWithFeedbackDescriptor : public CallInterfaceDescriptor { 3086313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 3096313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CallFunctionWithFeedbackDescriptor, 3106313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 3119aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3129aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3139aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3149aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallConstructDescriptor : public CallInterfaceDescriptor { 3159aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3166313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CallConstructDescriptor, CallInterfaceDescriptor) 317d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org}; 3189aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3199aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3209aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass RegExpConstructResultDescriptor : public CallInterfaceDescriptor { 3219aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3226313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(RegExpConstructResultDescriptor, CallInterfaceDescriptor) 3239aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3269aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass TransitionElementsKindDescriptor : public CallInterfaceDescriptor { 3279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3286313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) 3299aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3309aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3319aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3329aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ArrayConstructorConstantArgCountDescriptor 3339aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org : public CallInterfaceDescriptor { 3349aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3356313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor, 3366313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 3379aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3389aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3399aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3409aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ArrayConstructorDescriptor : public CallInterfaceDescriptor { 3419aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ArrayConstructorDescriptor, CallInterfaceDescriptor) 3439aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3449aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3459aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3469aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass InternalArrayConstructorConstantArgCountDescriptor 3479aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org : public CallInterfaceDescriptor { 3489aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor, 3506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 3519aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3529aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3539aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3549aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass InternalArrayConstructorDescriptor : public CallInterfaceDescriptor { 3559aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3566313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(InternalArrayConstructorDescriptor, 3576313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 3589aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3599aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3609aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3619aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CompareNilDescriptor : public CallInterfaceDescriptor { 3629aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3636313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CompareNilDescriptor, CallInterfaceDescriptor) 3649aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3669aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3679aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ToBooleanDescriptor : public CallInterfaceDescriptor { 3689aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3696313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ToBooleanDescriptor, CallInterfaceDescriptor) 3709aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3739aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass BinaryOpDescriptor : public CallInterfaceDescriptor { 3749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3756313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(BinaryOpDescriptor, CallInterfaceDescriptor) 3769aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3779aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3789aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3799aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass BinaryOpWithAllocationSiteDescriptor : public CallInterfaceDescriptor { 3809aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3816313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(BinaryOpWithAllocationSiteDescriptor, 3826313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 3839aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3849aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3859aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3869aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass StringAddDescriptor : public CallInterfaceDescriptor { 3879aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3886313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(StringAddDescriptor, CallInterfaceDescriptor) 3899aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3919aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3929aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass KeyedDescriptor : public CallInterfaceDescriptor { 3939aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 3946313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(KeyedDescriptor, CallInterfaceDescriptor) 3959aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 3969aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3979aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 3989aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass NamedDescriptor : public CallInterfaceDescriptor { 3999aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 4006313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(NamedDescriptor, CallInterfaceDescriptor) 4019aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 4029aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4039aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4049aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass CallHandlerDescriptor : public CallInterfaceDescriptor { 4059aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 4066313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) 4079aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 4089aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4099aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4109aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { 4119aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 4126313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ArgumentAdaptorDescriptor, CallInterfaceDescriptor) 4139aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 4149aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4159aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4169aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass ApiFunctionDescriptor : public CallInterfaceDescriptor { 4179aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org public: 4186313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ApiFunctionDescriptor, CallInterfaceDescriptor) 4196313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4206313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4216313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4226313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass ApiGetterDescriptor : public CallInterfaceDescriptor { 4236313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4246313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) 4256313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4266313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register function_address(); 4276313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4286313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4296313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4306313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass ArgumentsAccessReadDescriptor : public CallInterfaceDescriptor { 4316313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4326313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ArgumentsAccessReadDescriptor, CallInterfaceDescriptor) 4336313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4346313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register index(); 4356313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register parameter_count(); 4366313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4376313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4386313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4396313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass StoreArrayLiteralElementDescriptor : public CallInterfaceDescriptor { 4406313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4416313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(StoreArrayLiteralElementDescriptor, 4426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor) 4436313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4446313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4456313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4466313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass MathPowTaggedDescriptor : public CallInterfaceDescriptor { 4476313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4486313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(MathPowTaggedDescriptor, CallInterfaceDescriptor) 4496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register exponent(); 4516313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4536313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4546313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass MathPowIntegerDescriptor : public CallInterfaceDescriptor { 4556313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4566313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor) 4576313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4586313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static const Register exponent(); 4596313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 4606313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4616313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 4626313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass ContextOnlyDescriptor : public CallInterfaceDescriptor { 4636313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 4646313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor) 4659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}; 4669aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4679aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#undef DECLARE_DESCRIPTOR 4689aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4699aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 4709aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// We define the association between CallDescriptors::Key and the specialized 4719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// descriptor here to reduce boilerplate and mistakes. 4729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#define DEF_KEY(name) \ 4739aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } 4749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgINTERFACE_DESCRIPTOR_LIST(DEF_KEY) 4759aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#undef DEF_KEY 476d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org} 477d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org} // namespace v8::internal 478d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 4799aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org 480d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#if V8_TARGET_ARCH_ARM64 481d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "src/arm64/interface-descriptors-arm64.h" 482d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#elif V8_TARGET_ARCH_ARM 483d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "src/arm/interface-descriptors-arm.h" 484d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#endif 485d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org 486d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ 487