5#ifndef V8_CODEGEN_MACRO_ASSEMBLER_BASE_H_
6#define V8_CODEGEN_MACRO_ASSEMBLER_BASE_H_
27 std::unique_ptr<AssemblerBuffer> buffer = {})
29 create_code_object,
std::move(buffer)) {}
32 std::unique_ptr<AssemblerBuffer> buffer = {})
34 create_code_object,
std::move(buffer)) {}
36 MacroAssemblerBase(
Isolate* isolate,
const AssemblerOptions& options,
37 CodeObjectRequired create_code_object,
38 std::unique_ptr<AssemblerBuffer> buffer = {});
39 MacroAssemblerBase(Isolate* isolate, MaybeAssemblerZone zone,
40 AssemblerOptions options,
41 CodeObjectRequired create_code_object,
42 std::unique_ptr<AssemblerBuffer> buffer = {});
46 std::unique_ptr<AssemblerBuffer> buffer = {})
53 DCHECK(!code_object_.is_null());
75 Address BuiltinEntry(
Builtin builtin);
78 int constant_index) = 0;
95 static int32_t RootRegisterOffsetForRootIndex(
RootIndex root_index);
96 static int32_t RootRegisterOffsetForBuiltin(
Builtin builtin);
99 static intptr_t RootRegisterOffsetForExternalReference(
104 static int32_t RootRegisterOffsetForExternalReferenceTableEntry(
109 static bool IsAddressableThroughRootRegister(
112#if defined(V8_TARGET_OS_WIN) || defined(V8_TARGET_OS_MACOS)
115 static constexpr int kStackPageSize = 4 *
KB;
120 if (!
v8_flags.code_comments)
return "";
121 std::ostringstream str;
122 str <<
"Inlined Trampoline for " << prefix <<
" to "
123 << Builtins::name(builtin);
136 bool root_array_available_ =
true;
139 bool hard_abort_ =
false;
142 Builtin maybe_builtin_ = Builtin::kNoBuiltinId;
144 bool has_frame_ =
false;
146 int comment_depth_ = 0;
156 :
assembler_(assembler), old_value_(assembler->should_abort_hard()) {
MacroAssemblerBase * assembler_
HardAbortScope(MacroAssemblerBase *assembler)
virtual void LoadRoot(Register destination, RootIndex index)=0
void set_has_frame(bool v)
void set_root_array_available(bool v)
virtual void LoadRootRelative(Register destination, int32_t offset)=0
MacroAssemblerBase(Isolate *isolate, MaybeAssemblerZone zone, CodeObjectRequired create_code_object, std::unique_ptr< AssemblerBuffer > buffer={})
IndirectHandle< HeapObject > CodeObject() const
static constexpr bool CanBeImmediate(RootIndex index)
void set_abort_hard(bool v)
virtual void LoadRootRegisterOffset(Register destination, intptr_t offset)=0
V8_INLINE std::string CommentForOffHeapTrampoline(const char *prefix, Builtin builtin)
virtual void StoreRootRelative(int32_t offset, Register value)=0
void set_builtin(Builtin builtin)
MacroAssemblerBase(Isolate *isolate, CodeObjectRequired create_code_object, std::unique_ptr< AssemblerBuffer > buffer={})
DISALLOW_IMPLICIT_CONSTRUCTORS(MacroAssemblerBase)
Isolate * isolate() const
virtual void LoadFromConstantsTable(Register destination, int constant_index)=0
IndirectHandle< HeapObject > code_object_
bool root_array_available() const
bool should_abort_hard() const
MacroAssemblerBase(MaybeAssemblerZone zone, AssemblerOptions options, CodeObjectRequired create_code_object, std::unique_ptr< AssemblerBuffer > buffer={})
BytecodeAssembler & assembler_
refactor address components for immediate indexing make OptimizeMaglevOnNextCall optimize to turbofan instead of maglev filter for tracing turbofan compilation trace turbo cfg trace TurboFan s graph trimmer trace TurboFan s control equivalence trace TurboFan s register allocator trace stack load store counters for optimized code in run fuzzing &&concurrent_recompilation trace_turbo trace_turbo_scheduled trace_turbo_stack_accesses verify TurboFan machine graph of code stubs enable FixedArray bounds checks print TurboFan statistics of wasm compilations maximum cumulative size of bytecode considered for inlining scale factor of bytecode size used to calculate the inlining budget * KB
InstructionOperand destination
std::variant< Zone *, AccountingAllocator * > MaybeAssemblerZone
V8_EXPORT_PRIVATE FlagValues v8_flags
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE
#define V8_STATIC_ROOTS_BOOL