Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(586)

Unified Diff: src/interpreter/bytecode-array-builder.h

Issue 2369873002: [Interpreter] Replace BytecodeRegisterAllocator with a simple bump pointer. (Closed)
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « BUILD.gn ('k') | src/interpreter/bytecode-array-builder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/interpreter/bytecode-array-builder.h
diff --git a/src/interpreter/bytecode-array-builder.h b/src/interpreter/bytecode-array-builder.h
index b54365a68899be19c648c5ba7c73e063cfde2ce1..efee1f4e1ba07e85d340c8e9aaf32efa689575c3 100644
--- a/src/interpreter/bytecode-array-builder.h
+++ b/src/interpreter/bytecode-array-builder.h
@@ -61,23 +61,14 @@ class BytecodeArrayBuilder final : public ZoneObject {
int fixed_register_count() const { return context_count() + locals_count(); }
// Returns the number of fixed and temporary registers.
- int fixed_and_temporary_register_count() const {
- return fixed_register_count() + temporary_register_count();
- }
-
- int temporary_register_count() const {
- return temporary_register_allocator()->allocation_count();
+ int total_register_count() const {
+ DCHECK_LE(fixed_register_count(),
+ register_allocator()->maximum_register_count());
+ return register_allocator()->maximum_register_count();
}
Register Parameter(int parameter_index) const;
- // Return true if the register |reg| represents a parameter or a
- // local.
- bool RegisterIsParameterOrLocal(Register reg) const;
-
- // Returns true if the register |reg| is a live temporary register.
- bool TemporaryRegisterIsLive(Register reg) const;
-
// Constant loads to accumulator.
BytecodeArrayBuilder& LoadConstantPoolEntry(size_t entry);
BytecodeArrayBuilder& LoadLiteral(v8::internal::Smi* value);
@@ -191,46 +182,39 @@ class BytecodeArrayBuilder final : public ZoneObject {
BytecodeArrayBuilder& PopContext(Register context);
// Call a JS function. The JSFunction or Callable to be called should be in
- // |callable|, the receiver should be in |receiver_args| and all subsequent
- // arguments should be in registers <receiver_args + 1> to
- // <receiver_args + receiver_arg_count - 1>. Type feedback is recorded in
- // the |feedback_slot| in the type feedback vector.
+ // |callable|. The arguments should be in |args|, with the receiver in
+ // |args[0]|. Type feedback is recorded in the |feedback_slot| in the type
+ // feedback vector.
BytecodeArrayBuilder& Call(
- Register callable, Register receiver_args, size_t receiver_arg_count,
- int feedback_slot, TailCallMode tail_call_mode = TailCallMode::kDisallow);
-
- BytecodeArrayBuilder& TailCall(Register callable, Register receiver_args,
- size_t receiver_arg_count, int feedback_slot) {
- return Call(callable, receiver_args, receiver_arg_count, feedback_slot,
- TailCallMode::kAllow);
- }
+ Register callable, RegisterList args, int feedback_slot,
+ TailCallMode tail_call_mode = TailCallMode::kDisallow);
// Call the new operator. The accumulator holds the |new_target|.
- // The |constructor| is in a register followed by |arg_count|
- // consecutive arguments starting at |first_arg| for the constuctor
- // invocation.
- BytecodeArrayBuilder& New(Register constructor, Register first_arg,
- size_t arg_count, int feedback_slot);
-
- // Call the runtime function with |function_id|. The first argument should be
- // in |first_arg| and all subsequent arguments should be in registers
- // <first_arg + 1> to <first_arg + arg_count - 1>.
+ // The |constructor| is in a register and arguments are in |args|.
+ BytecodeArrayBuilder& New(Register constructor, RegisterList args,
+ int feedback_slot);
+
+ // Call the runtime function with |function_id| and arguments |args|.
BytecodeArrayBuilder& CallRuntime(Runtime::FunctionId function_id,
- Register first_arg, size_t arg_count);
+ RegisterList args);
+ // Call the runtime function with |function_id| with single argument |arg|.
+ BytecodeArrayBuilder& CallRuntime(Runtime::FunctionId function_id,
+ Register arg);
+ // Call the runtime function with |function_id| with no arguments.
+ BytecodeArrayBuilder& CallRuntime(Runtime::FunctionId function_id);
- // Call the runtime function with |function_id| that returns a pair of values.
- // The first argument should be in |first_arg| and all subsequent arguments
- // should be in registers <first_arg + 1> to <first_arg + arg_count - 1>. The
- // return values will be returned in <first_return> and <first_return + 1>.
+ // Call the runtime function with |function_id| and arguments |args|, that
+ // returns a pair of values. The return values will be returned in
+ // <first_return> and <first_return + 1>.
BytecodeArrayBuilder& CallRuntimeForPair(Runtime::FunctionId function_id,
- Register first_arg, size_t arg_count,
+ RegisterList args,
Register first_return);
+ // Call the runtime function with |function_id| with single argument |arg|.
+ BytecodeArrayBuilder& CallRuntimeForPair(Runtime::FunctionId function_id,
+ Register arg, Register first_return);
- // Call the JS runtime function with |context_index|. The the receiver should
- // be in |receiver_args| and all subsequent arguments should be in registers
- // <receiver + 1> to <receiver + receiver_args_count - 1>.
- BytecodeArrayBuilder& CallJSRuntime(int context_index, Register receiver_args,
- size_t receiver_args_count);
+ // Call the JS runtime function with |context_index| and arguments |args|.
+ BytecodeArrayBuilder& CallJSRuntime(int context_index, RegisterList args);
// Operators (register holds the lhs value, accumulator holds the rhs value).
// Type feedback will be recorded in the |feedback_slot|
@@ -328,34 +312,16 @@ class BytecodeArrayBuilder final : public ZoneObject {
latest_source_info_.MakeStatementPosition(expr->position());
}
- // Accessors
- TemporaryRegisterAllocator* temporary_register_allocator() {
- return &temporary_allocator_;
- }
- const TemporaryRegisterAllocator* temporary_register_allocator() const {
- return &temporary_allocator_;
- }
- Zone* zone() const { return zone_; }
-
void EnsureReturn();
- static uint32_t RegisterOperand(Register reg) {
- return static_cast<uint32_t>(reg.ToOperand());
- }
-
- static uint32_t SignedOperand(int value) {
- return static_cast<uint32_t>(value);
- }
-
- static uint32_t UnsignedOperand(int value) {
- DCHECK_GE(value, 0);
- return static_cast<uint32_t>(value);
+ // Accessors
+ BytecodeRegisterAllocator* register_allocator() {
+ return &register_allocator_;
}
-
- static uint32_t UnsignedOperand(size_t value) {
- DCHECK_LE(value, kMaxUInt32);
- return static_cast<uint32_t>(value);
+ const BytecodeRegisterAllocator* register_allocator() const {
+ return &register_allocator_;
}
+ Zone* zone() const { return zone_; }
private:
friend class BytecodeRegisterAllocator;
@@ -377,6 +343,24 @@ class BytecodeArrayBuilder final : public ZoneObject {
uint32_t operand0 = 0, uint32_t operand1 = 0,
uint32_t operand2 = 0, uint32_t operand3 = 0) const;
+ static uint32_t RegisterOperand(Register reg) {
+ return static_cast<uint32_t>(reg.ToOperand());
+ }
+
+ static uint32_t SignedOperand(int value) {
+ return static_cast<uint32_t>(value);
+ }
+
+ static uint32_t UnsignedOperand(int value) {
+ DCHECK_GE(value, 0);
+ return static_cast<uint32_t>(value);
+ }
+
+ static uint32_t UnsignedOperand(size_t value) {
+ DCHECK_LE(value, kMaxUInt32);
+ return static_cast<uint32_t>(value);
+ }
+
// Set position for return.
void SetReturnPosition();
@@ -413,7 +397,7 @@ class BytecodeArrayBuilder final : public ZoneObject {
int local_register_count_;
int context_register_count_;
int return_position_;
- TemporaryRegisterAllocator temporary_allocator_;
+ BytecodeRegisterAllocator register_allocator_;
BytecodeArrayWriter bytecode_array_writer_;
BytecodePipelineStage* pipeline_;
BytecodeSourceInfo latest_source_info_;
« no previous file with comments | « BUILD.gn ('k') | src/interpreter/bytecode-array-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698