5#ifndef V8_REGEXP_X64_REGEXP_MACRO_ASSEMBLER_X64_H_
6#define V8_REGEXP_X64_REGEXP_MACRO_ASSEMBLER_X64_H_
19 int registers_to_save);
29 Label* on_equal)
override;
37 Label* on_no_match)
override;
40 Label* on_no_match)
override;
43 Label* on_not_equal)
override;
46 Label* on_not_equal)
override;
48 Label* on_in_range)
override;
50 Label* on_not_in_range)
override;
52 Label* on_in_range)
override;
54 Label* on_not_in_range)
override;
58 int advance_by)
override;
65 Label* on_no_match)
override;
78 int character_count)
override;
99 Address re_frame, uintptr_t extra_space);
103 static constexpr int kFramePointerOffset = 0;
105 static constexpr int kReturnAddressOffset =
109 static constexpr int kFrameTypeOffset =
111 static_assert(kFrameTypeOffset ==
112 CommonFrameConstants::kContextOrFrameTypeOffset);
114#ifdef V8_TARGET_OS_WIN
119 static constexpr int kInputStringOffset = kFrameAlign;
121 static constexpr int kStartIndexOffset =
123 static constexpr int kInputStartOffset =
126 static constexpr int kRegisterOutputOffset =
132 static constexpr int kNumOutputRegistersOffset =
135 static constexpr int kDirectCallOffset =
142 static constexpr int kInputStringOffset =
144 static constexpr int kStartIndexOffset =
146 static constexpr int kInputStartOffset =
149 static constexpr int kRegisterOutputOffset =
154 static constexpr int kNumOutputRegistersOffset =
157 static constexpr int kDirectCallOffset = kFrameAlign;
163#ifdef V8_TARGET_OS_WIN
167 static constexpr int kNumCalleeSaveRegisters = 3;
168 static constexpr int kLastCalleeSaveRegister = kBackupRbxOffset;
170 static constexpr int kBackupRbxOffset =
172 static constexpr int kNumCalleeSaveRegisters = 1;
173 static constexpr int kLastCalleeSaveRegister = kBackupRbxOffset;
178 static constexpr int kSuccessfulCapturesOffset =
180 static constexpr int kStringStartMinusOneOffset =
182 static constexpr int kBacktrackCountOffset =
187 static constexpr int kRegExpStackBasePointerOffset =
191 static constexpr int kRegisterZeroOffset =
195 static constexpr int kRegExpCodeSize = 1024;
232 return ScaleFactor::times_1;
234 return ScaleFactor::times_2;
248 code_relative_fixup_positions_.push_back(
masm_.pc_offset());
Operand register_location(int register_index)
void CallCheckStackGuardState(Immediate extra_space=Immediate(0))
void CheckNotBackReference(int start_reg, bool read_backward, Label *on_no_match) override
void IfRegisterEqPos(int reg, Label *if_eq) override
void CheckCharacterNotInRange(base::uc16 from, base::uc16 to, Label *on_not_in_range) override
void CheckAtStart(int cp_offset, Label *on_at_start) override
void PushCurrentPosition() override
void Pop(Register target)
void LoadCurrentCharacterUnchecked(int cp_offset, int character_count) override
void PushCallerSavedRegisters()
void CheckPosition(int cp_offset, Label *on_outside_input) override
void CheckNotCharacterAfterMinusAnd(base::uc16 c, base::uc16 minus, base::uc16 mask, Label *on_not_equal) override
RegExpMacroAssemblerX64(Isolate *isolate, Zone *zone, Mode mode, int registers_to_save)
bool CheckCharacterNotInRangeArray(const ZoneList< CharacterRange > *ranges, Label *on_not_in_range) override
void StoreRegExpStackPointerToMemory(Register src, Register scratch)
void BindJumpTarget(Label *label) override
void PushBacktrack(Label *label) override
void BranchOrBacktrack(Label *to)
Label check_preempt_label_
void Bind(Label *label) override
void IfRegisterGE(int reg, int comparand, Label *if_ge) override
void SetCurrentPositionFromEnd(int by) override
void PopCallerSavedRegisters()
static constexpr Register backtrack_stackpointer()
void CheckCharacterInRange(base::uc16 from, base::uc16 to, Label *on_in_range) override
void FixupCodeRelativePositions()
void AdvanceRegister(int reg, int by) override
void PopCurrentPosition() override
void SkipUntilBitInTable(int cp_offset, Handle< ByteArray > table, Handle< ByteArray > nibble_table, int advance_by) override
void Push(Register source)
static int CheckStackGuardState(Address *return_address, Address raw_code, Address re_frame, uintptr_t extra_space)
void CallCFunctionFromIrregexpCode(ExternalReference function, int num_arguments)
void LoadRegExpStackPointerFromMemory(Register dst)
void CheckCharacterLT(base::uc16 limit, Label *on_less) override
void IfRegisterLT(int reg, int comparand, Label *if_lt) override
int stack_limit_slack_slot_count() override
Isolate * isolate() const
const int num_saved_registers_
void PushRegExpBasePointer(Register scratch_pointer, Register scratch)
void GoTo(Label *label) override
void PushRegister(int register_index, StackCheckFlag check_stack_limit) override
void ClearRegisters(int reg_from, int reg_to) override
void Push(Immediate value)
const NoRootArrayScope no_root_array_scope_
DirectHandle< HeapObject > GetCode(DirectHandle< String > source, RegExpFlags flags) override
void AdvanceCurrentPosition(int by) override
void Backtrack() override
Label stack_overflow_label_
void AssertAboveStackLimitMinusSlack()
static constexpr Register current_character()
void ReadCurrentPositionFromRegister(int reg) override
void CheckBitInTable(Handle< ByteArray > table, Label *on_bit_set) override
void CheckNotCharacter(uint32_t c, Label *on_not_equal) override
void WriteStackPointerToRegister(int reg) override
ZoneChunkList< int > code_relative_fixup_positions_
void CheckNotCharacterAfterAnd(uint32_t c, uint32_t mask, Label *on_not_equal) override
bool SkipUntilBitInTableUseSimd(int advance_by) override
void CheckCharacterAfterAnd(uint32_t c, uint32_t mask, Label *on_equal) override
static constexpr Register code_object_pointer()
void PopRegister(int register_index) override
void CheckNotBackReferenceIgnoreCase(int start_reg, bool read_backward, bool unicode, Label *on_no_match) override
~RegExpMacroAssemblerX64() override
bool CheckSpecialClassRanges(StandardCharacterSet type, Label *on_no_match) override
void SafeCallTarget(Label *label)
void CheckCharacterGT(base::uc16 limit, Label *on_greater) override
void PopRegExpBasePointer(Register scratch_pointer_out, Register scratch)
void BranchOrBacktrack(Condition condition, Label *to)
void SetRegister(int register_index, int to) override
void CheckGreedyLoop(Label *on_tos_equals_current_position) override
void CheckNotAtStart(int cp_offset, Label *on_not_at_start) override
bool CheckCharacterInRangeArray(const ZoneList< CharacterRange > *ranges, Label *on_in_range) override
void CheckCharacter(uint32_t c, Label *on_equal) override
void CallIsCharacterInRangeArray(const ZoneList< CharacterRange > *ranges)
IrregexpImplementation Implementation() override
void ReadStackPointerFromRegister(int reg) override
ScaleFactor CharSizeScaleFactor()
void ReadPositionFromRegister(Register dst, int reg)
void WriteCurrentPositionToRegister(int reg, int cp_offset) override
void MarkPositionForCodeRelativeFixup()
RecordWriteMode const mode_
MaglevAssembler *const masm_
constexpr int kSystemPointerSize
#define V8_EXPORT_PRIVATE