5 #ifndef V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_ 6 #define V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_ 8 #include "src/allocation.h" 9 #include "src/builtins/builtins.h" 10 #include "src/code-stub-assembler.h" 11 #include "src/globals.h" 12 #include "src/interpreter/bytecode-register.h" 13 #include "src/interpreter/bytecodes.h" 14 #include "src/runtime/runtime.h" 18 namespace interpreter {
23 OperandScale operand_scale);
64 compiler::Node* BytecodeOperandNativeContextIndex(
int operand_index);
90 : base_reg_location_(base_reg_location), reg_count_(reg_count) {}
93 compiler::Node* base_reg_location()
const {
return base_reg_location_; }
116 std::pair<compiler::Node*, compiler::Node*> LoadRegisterPairAtOperandIndex(
120 void StoreRegisterAtOperandIndex(
compiler::Node* value,
int operand_index);
137 compiler::Node* LoadConstantPoolEntryAtOperandIndex(
int operand_index);
177 ConvertReceiverMode receiver_mode);
183 template <
class... TArgs>
184 void CallJSAndDispatch(
Node*
function,
Node* context,
Node* arg_count,
185 ConvertReceiverMode receiver_mode, TArgs... args);
221 int return_size = 1);
240 void UpdateInterruptBudgetOnReturn();
249 void DispatchWide(OperandScale operand_scale);
257 void Abort(AbortReason abort_reason);
259 AbortReason abort_reason);
261 void AbortIfRegisterCountInvalid(
compiler::Node* parameters_and_registers,
272 Bytecode bytecode()
const {
return bytecode_; }
273 static bool TargetSupportsUnalignedAccess();
275 void ToNumberOrNumeric(Object::Conversion mode);
309 void TraceBytecode(Runtime::FunctionId function_id);
314 void UpdateInterruptBudget(
compiler::Node* weight,
bool backward);
329 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
334 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
337 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
340 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
343 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
346 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
349 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
354 int operand_index, OperandSize operand_size,
355 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
357 int operand_index, OperandSize operand_size,
358 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
365 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
371 LoadSensitivity needs_poisoning = LoadSensitivity::kCritical);
384 void SaveBytecodeOffset();
386 Node* ReloadBytecodeOffset();
418 int CurrentBytecodeSize()
const;
420 OperandScale operand_scale()
const {
return operand_scale_; }
423 OperandScale operand_scale_;
429 AccumulatorUse accumulator_use_;
431 bool reloaded_frame_ptr_;
432 bool bytecode_array_valid_;
433 bool disable_stack_check_across_call_;
436 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler);
443 #endif // V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_