diff options
Diffstat (limited to 'deps/v8/src/compiler/linkage.h')
-rw-r--r-- | deps/v8/src/compiler/linkage.h | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/deps/v8/src/compiler/linkage.h b/deps/v8/src/compiler/linkage.h index c5cef5e35f..60a21425ee 100644 --- a/deps/v8/src/compiler/linkage.h +++ b/deps/v8/src/compiler/linkage.h @@ -6,15 +6,16 @@ #define V8_COMPILER_LINKAGE_H_ #include "src/base/flags.h" -#include "src/code-stubs.h" #include "src/compiler/frame.h" #include "src/compiler/machine-type.h" -#include "src/compiler/node.h" #include "src/compiler/operator.h" #include "src/zone.h" namespace v8 { namespace internal { + +class CallInterfaceDescriptor; + namespace compiler { // Describes the location for a parameter or a return value to a call. @@ -129,22 +130,24 @@ class CallDescriptor FINAL : public ZoneObject { private: friend class Linkage; - Kind kind_; - MachineType target_type_; - LinkageLocation target_loc_; - MachineSignature* machine_sig_; - LocationSignature* location_sig_; - size_t js_param_count_; - Operator::Properties properties_; - RegList callee_saved_registers_; - Flags flags_; - const char* debug_name_; + const Kind kind_; + const MachineType target_type_; + const LinkageLocation target_loc_; + const MachineSignature* const machine_sig_; + const LocationSignature* const location_sig_; + const size_t js_param_count_; + const Operator::Properties properties_; + const RegList callee_saved_registers_; + const Flags flags_; + const char* const debug_name_; + + DISALLOW_COPY_AND_ASSIGN(CallDescriptor); }; DEFINE_OPERATORS_FOR_FLAGS(CallDescriptor::Flags) -OStream& operator<<(OStream& os, const CallDescriptor& d); -OStream& operator<<(OStream& os, const CallDescriptor::Kind& k); +std::ostream& operator<<(std::ostream& os, const CallDescriptor& d); +std::ostream& operator<<(std::ostream& os, const CallDescriptor::Kind& k); // Defines the linkage for a compilation, including the calling conventions // for incoming parameters and return value(s) as well as the outgoing calling @@ -161,27 +164,32 @@ OStream& operator<<(OStream& os, const CallDescriptor::Kind& k); // Call[Runtime] CEntryStub, arg 1, arg 2, arg 3, [...], fun, #arg, context class Linkage : public ZoneObject { public: - explicit Linkage(CompilationInfo* info); - explicit Linkage(CompilationInfo* info, CallDescriptor* incoming) - : info_(info), incoming_(incoming) {} + Linkage(Zone* zone, CompilationInfo* info) + : zone_(zone), incoming_(ComputeIncoming(zone, info)) {} + Linkage(Zone* zone, CallDescriptor* incoming) + : zone_(zone), incoming_(incoming) {} + + static CallDescriptor* ComputeIncoming(Zone* zone, CompilationInfo* info); // The call descriptor for this compilation unit describes the locations // of incoming parameters and the outgoing return value(s). - CallDescriptor* GetIncomingDescriptor() { return incoming_; } - CallDescriptor* GetJSCallDescriptor(int parameter_count); - static CallDescriptor* GetJSCallDescriptor(int parameter_count, Zone* zone); - CallDescriptor* GetRuntimeCallDescriptor(Runtime::FunctionId function, - int parameter_count, - Operator::Properties properties); + CallDescriptor* GetIncomingDescriptor() const { return incoming_; } + CallDescriptor* GetJSCallDescriptor(int parameter_count, + CallDescriptor::Flags flags) const; + static CallDescriptor* GetJSCallDescriptor(int parameter_count, Zone* zone, + CallDescriptor::Flags flags); + CallDescriptor* GetRuntimeCallDescriptor( + Runtime::FunctionId function, int parameter_count, + Operator::Properties properties) const; static CallDescriptor* GetRuntimeCallDescriptor( Runtime::FunctionId function, int parameter_count, Operator::Properties properties, Zone* zone); CallDescriptor* GetStubCallDescriptor( - CallInterfaceDescriptor descriptor, int stack_parameter_count = 0, - CallDescriptor::Flags flags = CallDescriptor::kNoFlags); + const CallInterfaceDescriptor& descriptor, int stack_parameter_count = 0, + CallDescriptor::Flags flags = CallDescriptor::kNoFlags) const; static CallDescriptor* GetStubCallDescriptor( - CallInterfaceDescriptor descriptor, int stack_parameter_count, + const CallInterfaceDescriptor& descriptor, int stack_parameter_count, CallDescriptor::Flags flags, Zone* zone); // Creates a call descriptor for simplified C calls that is appropriate @@ -192,37 +200,37 @@ class Linkage : public ZoneObject { MachineSignature* sig); // Get the location of an (incoming) parameter to this function. - LinkageLocation GetParameterLocation(int index) { + LinkageLocation GetParameterLocation(int index) const { return incoming_->GetInputLocation(index + 1); // + 1 to skip target. } // Get the machine type of an (incoming) parameter to this function. - MachineType GetParameterType(int index) { + MachineType GetParameterType(int index) const { return incoming_->GetInputType(index + 1); // + 1 to skip target. } // Get the location where this function should place its return value. - LinkageLocation GetReturnLocation() { + LinkageLocation GetReturnLocation() const { return incoming_->GetReturnLocation(0); } // Get the machine type of this function's return value. - MachineType GetReturnType() { return incoming_->GetReturnType(0); } + MachineType GetReturnType() const { return incoming_->GetReturnType(0); } // Get the frame offset for a given spill slot. The location depends on the // calling convention and the specific frame layout, and may thus be // architecture-specific. Negative spill slots indicate arguments on the // caller's frame. The {extra} parameter indicates an additional offset from // the frame offset, e.g. to index into part of a double slot. - FrameOffset GetFrameOffset(int spill_slot, Frame* frame, int extra = 0); - - CompilationInfo* info() const { return info_; } + FrameOffset GetFrameOffset(int spill_slot, Frame* frame, int extra = 0) const; static bool NeedsFrameState(Runtime::FunctionId function); private: - CompilationInfo* info_; - CallDescriptor* incoming_; + Zone* const zone_; + CallDescriptor* const incoming_; + + DISALLOW_COPY_AND_ASSIGN(Linkage); }; } // namespace compiler |