5#ifndef V8_REGEXP_ARM64_REGEXP_MACRO_ASSEMBLER_ARM64_H_
6#define V8_REGEXP_ARM64_REGEXP_MACRO_ASSEMBLER_ARM64_H_
20 int registers_to_save);
31 Label* on_equal)
override;
35 Label* on_failure,
bool check_end_of_string);
41 Label* on_no_match)
override;
44 Label* on_no_match)
override;
47 Label* on_not_equal)
override;
50 Label* on_not_equal)
override;
52 Label* on_in_range)
override;
54 Label* on_not_in_range)
override;
56 Label* on_in_range)
override;
58 Label* on_not_in_range)
override;
62 int advance_by)
override;
69 Label* on_no_match)
override;
80 int character_count)
override;
101 Address re_frame,
int start_offset,
102 const uint8_t** input_start,
103 const uint8_t** input_end,
104 uintptr_t extra_space);
107 static constexpr int kFramePointerOffset = 0;
110 static constexpr int kReturnAddressOffset =
113 static constexpr int kNumCalleeSavedRegisters = 10;
114 static constexpr int kCalleeSavedRegistersOffset =
118 static constexpr int kFrameTypeOffset =
120 static_assert(kFrameTypeOffset ==
121 CommonFrameConstants::kContextOrFrameTypeOffset);
124 static constexpr int kIsolateOffset =
130 static constexpr int kNumOutputRegistersOffset =
132 static constexpr int kInputStringOffset =
136 static constexpr int kSuccessfulCapturesOffset =
138 static constexpr int kBacktrackCountOffset =
143 static constexpr int kRegExpStackBasePointerOffset =
146 static constexpr int kStackLocalPadding =
148 static constexpr int kNumberOfStackLocals = 4;
152 static constexpr int kFirstRegisterOnStackOffset =
155 static constexpr int kFirstCaptureOnStackOffset =
158 static constexpr int kInitialBufferSize = 1024;
167 static constexpr int kNumRegistersToUnroll = 16;
172 static constexpr int kNumCachedRegisters = 16;
269 if (register_index >= kNumCachedRegisters) {
272 if ((register_index % 2) == 0) {
305 const std::unique_ptr<MacroAssembler>
masm_;
void CheckCharacter(unsigned c, Label *on_equal) override
void ReadStackPointerFromRegister(int reg) override
void AdvanceRegister(int reg, int by) override
bool SkipUntilBitInTableUseSimd(int advance_by) override
void WriteStackPointerToRegister(int reg) override
RegisterState GetRegisterState(int register_index)
IrregexpImplementation Implementation() override
void AdvanceCurrentPosition(int by) override
void StoreRegister(int register_index, Register source)
void PopCurrentPosition() override
void Push(Register source)
const std::unique_ptr< MacroAssembler > masm_
void LoadRegExpStackPointerFromMemory(Register dst)
void CheckNotAtStart(int cp_offset, Label *on_not_at_start) override
static constexpr Register string_start_minus_one()
void Bind(Label *label) override
void PushCachedRegisters()
void IfRegisterEqPos(int reg, Label *if_eq) override
void CheckNotBackReferenceIgnoreCase(int start_reg, bool read_backward, bool unicode, Label *on_no_match) override
bool CheckCharacterNotInRangeArray(const ZoneList< CharacterRange > *ranges, Label *on_not_in_range) override
void WriteCurrentPositionToRegister(int reg, int cp_offset) override
~RegExpMacroAssemblerARM64() override
DirectHandle< HeapObject > GetCode(DirectHandle< String > source, RegExpFlags flags) override
MemOperand register_location(int register_index)
void CheckCharacters(base::Vector< const base::uc16 > str, int cp_offset, Label *on_failure, bool check_end_of_string)
static constexpr Register current_character()
void PopRegExpBasePointer(Register stack_pointer_out, Register scratch)
void CheckNotBackReference(int start_reg, bool read_backward, Label *on_no_match) override
void PushRegister(int register_index, StackCheckFlag check_stack_limit) override
MemOperand capture_location(int register_index, Register scratch)
static constexpr Register twice_non_position_value()
void CheckGreedyLoop(Label *on_tos_equals_current_position) override
int stack_limit_slack_slot_count() override
bool CheckCharacterInRangeArray(const ZoneList< CharacterRange > *ranges, Label *on_in_range) override
Register GetCachedRegister(int register_index)
const NoRootArrayScope no_root_array_scope_
static constexpr Register code_pointer()
bool CheckSpecialClassRanges(StandardCharacterSet type, Label *on_no_match) override
void CheckNotCharacterAfterMinusAnd(base::uc16 c, base::uc16 minus, base::uc16 mask, Label *on_not_equal) override
void Pop(Register target)
void GoTo(Label *label) override
void CheckNotCharacter(unsigned c, Label *on_not_equal) override
void CheckPosition(int cp_offset, Label *on_outside_input) override
static constexpr Register input_end()
static constexpr Register input_start()
void CheckAtStart(int cp_offset, Label *on_at_start) override
RegExpMacroAssemblerARM64(Isolate *isolate, Zone *zone, Mode mode, int registers_to_save)
void IfRegisterLT(int reg, int comparand, Label *if_lt) override
Register GetRegister(int register_index, Register maybe_result)
Label check_preempt_label_
void AbortedCodeGeneration() override
void CallCheckStackGuardState(Register scratch, Operand extra_space=Operand(0))
void SetRegister(int register_index, int to) override
static constexpr Register frame_pointer()
void SetCurrentPositionFromEnd(int by) override
Isolate * isolate() const
void PushBacktrack(Label *label) override
void CheckCharacterAfterAnd(unsigned c, unsigned mask, Label *on_equal) override
void PopCachedRegisters()
void CheckCharacterGT(base::uc16 limit, Label *on_greater) override
void LoadCurrentCharacterUnchecked(int cp_offset, int character_count) override
void ReadCurrentPositionFromRegister(int reg) override
void BindJumpTarget(Label *label=nullptr) override
static constexpr Register current_input_offset()
Label stack_overflow_label_
void StoreRegExpStackPointerToMemory(Register src, Register scratch)
void PopRegister(int register_index) override
void RestoreLinkRegister()
void CheckCharacterInRange(base::uc16 from, base::uc16 to, Label *on_in_range) override
void Backtrack() override
void CallIf(Label *to, Condition condition)
void ClearRegisters(int reg_from, int reg_to) override
void CheckCharacterNotInRange(base::uc16 from, base::uc16 to, Label *on_not_in_range) override
void CheckBitInTable(Handle< ByteArray > table, Label *on_bit_set) override
void CompareAndBranchOrBacktrack(Register reg, int immediate, Condition condition, Label *to)
const int num_saved_registers_
void SkipUntilBitInTable(int cp_offset, Handle< ByteArray > table, Handle< ByteArray > nibble_table, int advance_by) override
void CallIsCharacterInRangeArray(const ZoneList< CharacterRange > *ranges)
void BranchOrBacktrack(Condition condition, Label *to)
void PushRegExpBasePointer(Register stack_pointer, Register scratch)
void PushCurrentPosition() override
static constexpr Register backtrack_stackpointer()
void AssertAboveStackLimitMinusSlack()
void CheckCharacterLT(base::uc16 limit, Label *on_less) override
static constexpr Register start_offset()
void IfRegisterGE(int reg, int comparand, Label *if_ge) override
static constexpr Register output_array()
static int CheckStackGuardState(Address *return_address, Address raw_code, Address re_frame, int start_offset, const uint8_t **input_start, const uint8_t **input_end, uintptr_t extra_space)
void CheckNotCharacterAfterAnd(unsigned c, unsigned mask, Label *on_not_equal) override
void CallCFunctionFromIrregexpCode(ExternalReference function, int num_arguments)
RecordWriteMode const mode_
MaglevAssembler *const masm_
constexpr int kSystemPointerSize
#define DCHECK_LE(v1, v2)
#define V8_EXPORT_PRIVATE