summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/linkage.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/compiler/linkage.h')
-rw-r--r--chromium/v8/src/compiler/linkage.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/chromium/v8/src/compiler/linkage.h b/chromium/v8/src/compiler/linkage.h
index b55f3cdcb7c..346e9bda0cc 100644
--- a/chromium/v8/src/compiler/linkage.h
+++ b/chromium/v8/src/compiler/linkage.h
@@ -237,6 +237,7 @@ class V8_EXPORT_PRIVATE CallDescriptor final
RegList callee_saved_registers,
RegList callee_saved_fp_registers, Flags flags,
const char* debug_name = "",
+ StackArgumentOrder stack_order = StackArgumentOrder::kDefault,
const RegList allocatable_registers = 0,
size_t stack_return_count = 0)
: kind_(kind),
@@ -250,6 +251,7 @@ class V8_EXPORT_PRIVATE CallDescriptor final
callee_saved_fp_registers_(callee_saved_fp_registers),
allocatable_registers_(allocatable_registers),
flags_(flags),
+ stack_order_(stack_order),
debug_name_(debug_name) {}
// Returns the kind of this call.
@@ -292,6 +294,19 @@ class V8_EXPORT_PRIVATE CallDescriptor final
return stack_param_count_;
}
+ int GetStackIndexFromSlot(int slot_index) const {
+#ifdef V8_REVERSE_JSARGS
+ switch (GetStackArgumentOrder()) {
+ case StackArgumentOrder::kDefault:
+ return -slot_index - 1;
+ case StackArgumentOrder::kJS:
+ return slot_index + static_cast<int>(StackParameterCount());
+ }
+#else
+ return -slot_index - 1;
+#endif
+ }
+
// The total number of inputs to this call, which includes the target,
// receiver, context, etc.
// TODO(titzer): this should input the framestate input too.
@@ -338,6 +353,8 @@ class V8_EXPORT_PRIVATE CallDescriptor final
return location_sig_->GetParam(index).GetType();
}
+ StackArgumentOrder GetStackArgumentOrder() const { return stack_order_; }
+
// Operator properties describe how this call can be optimized, if at all.
Operator::Properties properties() const { return properties_; }
@@ -391,6 +408,7 @@ class V8_EXPORT_PRIVATE CallDescriptor final
// register allocator to use.
const RegList allocatable_registers_;
const Flags flags_;
+ const StackArgumentOrder stack_order_;
const char* const debug_name_;
const CFunctionInfo* c_function_info_ = nullptr;
@@ -438,7 +456,8 @@ class V8_EXPORT_PRIVATE Linkage : public NON_EXPORTED_BASE(ZoneObject) {
static CallDescriptor* GetCEntryStubCallDescriptor(
Zone* zone, int return_count, int js_parameter_count,
const char* debug_name, Operator::Properties properties,
- CallDescriptor::Flags flags);
+ CallDescriptor::Flags flags,
+ StackArgumentOrder stack_order = StackArgumentOrder::kDefault);
static CallDescriptor* GetStubCallDescriptor(
Zone* zone, const CallInterfaceDescriptor& descriptor,