| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_COMPILER_LINKAGE_H_ | 5 #ifndef V8_COMPILER_LINKAGE_H_ |
| 6 #define V8_COMPILER_LINKAGE_H_ | 6 #define V8_COMPILER_LINKAGE_H_ |
| 7 | 7 |
| 8 #include "src/base/flags.h" | 8 #include "src/base/flags.h" |
| 9 #include "src/compiler/frame.h" | 9 #include "src/compiler/frame.h" |
| 10 #include "src/compiler/machine-type.h" | 10 #include "src/compiler/machine-type.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 }; | 103 }; |
| 104 | 104 |
| 105 typedef Signature<LinkageLocation> LocationSignature; | 105 typedef Signature<LinkageLocation> LocationSignature; |
| 106 | 106 |
| 107 // Describes a call to various parts of the compiler. Every call has the notion | 107 // Describes a call to various parts of the compiler. Every call has the notion |
| 108 // of a "target", which is the first input to the call. | 108 // of a "target", which is the first input to the call. |
| 109 class CallDescriptor final : public ZoneObject { | 109 class CallDescriptor final : public ZoneObject { |
| 110 public: | 110 public: |
| 111 // Describes the kind of this call, which determines the target. | 111 // Describes the kind of this call, which determines the target. |
| 112 enum Kind { | 112 enum Kind { |
| 113 kCallCodeObject, // target is a Code object | 113 kCallCodeObject, // target is a Code object |
| 114 kCallJSFunction, // target is a JSFunction object | 114 kCallJSFunction, // target is a JSFunction object |
| 115 kCallAddress, // target is a machine pointer | 115 kCallAddress, // target is a machine pointer |
| 116 kLazyBailout // the call is no-op, only used for lazy bailout |
| 116 }; | 117 }; |
| 117 | 118 |
| 118 enum Flag { | 119 enum Flag { |
| 119 kNoFlags = 0u, | 120 kNoFlags = 0u, |
| 120 kNeedsFrameState = 1u << 0, | 121 kNeedsFrameState = 1u << 0, |
| 121 kPatchableCallSite = 1u << 1, | 122 kPatchableCallSite = 1u << 1, |
| 122 kNeedsNopAfterCall = 1u << 2, | 123 kNeedsNopAfterCall = 1u << 2, |
| 123 kHasExceptionHandler = 1u << 3, | 124 kHasExceptionHandler = 1u << 3, |
| 124 kHasLocalCatchHandler = 1u << 4, | 125 kHasLocalCatchHandler = 1u << 4, |
| 125 kSupportsTailCalls = 1u << 5, | 126 kSupportsTailCalls = 1u << 5, |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 explicit Linkage(CallDescriptor* incoming) : incoming_(incoming) {} | 265 explicit Linkage(CallDescriptor* incoming) : incoming_(incoming) {} |
| 265 | 266 |
| 266 static CallDescriptor* ComputeIncoming(Zone* zone, CompilationInfo* info); | 267 static CallDescriptor* ComputeIncoming(Zone* zone, CompilationInfo* info); |
| 267 | 268 |
| 268 // The call descriptor for this compilation unit describes the locations | 269 // The call descriptor for this compilation unit describes the locations |
| 269 // of incoming parameters and the outgoing return value(s). | 270 // of incoming parameters and the outgoing return value(s). |
| 270 CallDescriptor* GetIncomingDescriptor() const { return incoming_; } | 271 CallDescriptor* GetIncomingDescriptor() const { return incoming_; } |
| 271 static CallDescriptor* GetJSCallDescriptor(Zone* zone, bool is_osr, | 272 static CallDescriptor* GetJSCallDescriptor(Zone* zone, bool is_osr, |
| 272 int parameter_count, | 273 int parameter_count, |
| 273 CallDescriptor::Flags flags); | 274 CallDescriptor::Flags flags); |
| 275 |
| 274 static CallDescriptor* GetRuntimeCallDescriptor( | 276 static CallDescriptor* GetRuntimeCallDescriptor( |
| 275 Zone* zone, Runtime::FunctionId function, int parameter_count, | 277 Zone* zone, Runtime::FunctionId function, int parameter_count, |
| 276 Operator::Properties properties, bool needs_frame_state = true); | 278 Operator::Properties properties, bool needs_frame_state = true); |
| 277 | 279 |
| 280 static CallDescriptor* GetLazyBailoutDescriptor(Zone* zone); |
| 281 |
| 278 static CallDescriptor* GetStubCallDescriptor( | 282 static CallDescriptor* GetStubCallDescriptor( |
| 279 Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, | 283 Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, |
| 280 int stack_parameter_count, CallDescriptor::Flags flags, | 284 int stack_parameter_count, CallDescriptor::Flags flags, |
| 281 Operator::Properties properties = Operator::kNoProperties, | 285 Operator::Properties properties = Operator::kNoProperties, |
| 282 MachineType return_type = kMachAnyTagged); | 286 MachineType return_type = kMachAnyTagged); |
| 283 | 287 |
| 284 // Creates a call descriptor for simplified C calls that is appropriate | 288 // Creates a call descriptor for simplified C calls that is appropriate |
| 285 // for the host platform. This simplified calling convention only supports | 289 // for the host platform. This simplified calling convention only supports |
| 286 // integers and pointers of one word size each, i.e. no floating point, | 290 // integers and pointers of one word size each, i.e. no floating point, |
| 287 // structs, pointers to members, etc. | 291 // structs, pointers to members, etc. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 CallDescriptor* const incoming_; | 347 CallDescriptor* const incoming_; |
| 344 | 348 |
| 345 DISALLOW_COPY_AND_ASSIGN(Linkage); | 349 DISALLOW_COPY_AND_ASSIGN(Linkage); |
| 346 }; | 350 }; |
| 347 | 351 |
| 348 } // namespace compiler | 352 } // namespace compiler |
| 349 } // namespace internal | 353 } // namespace internal |
| 350 } // namespace v8 | 354 } // namespace v8 |
| 351 | 355 |
| 352 #endif // V8_COMPILER_LINKAGE_H_ | 356 #endif // V8_COMPILER_LINKAGE_H_ |
| OLD | NEW |