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