summaryrefslogtreecommitdiff
path: root/deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc')
-rw-r--r--deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc88
1 files changed, 45 insertions, 43 deletions
diff --git a/deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc b/deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc
index ddd7444c25..3269779efa 100644
--- a/deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc
+++ b/deps/v8/src/regexp/riscv64/regexp-macro-assembler-riscv64.cc
@@ -21,7 +21,7 @@ namespace internal {
/* clang-format off
*
* This assembler uses the following register assignment convention
- * - t4 : Temporarily stores the index of capture start after a matching pass
+ * - s3 : kScratchReg. Temporarily stores the index of capture start after a matching pass
* for a global regexp.
* - a5 : Pointer to current Code object including heap object tag.
* - a6 : Current position in input, as negative offset from end of string.
@@ -161,7 +161,7 @@ void RegExpMacroAssemblerRISCV::Backtrack() {
__ Ld(a0, MemOperand(frame_pointer(), kBacktrackCount));
__ Add64(a0, a0, Operand(1));
__ Sd(a0, MemOperand(frame_pointer(), kBacktrackCount));
- __ Branch(&next, ne, a0, Operand(backtrack_limit()));
+ __ BranchShort(&next, ne, a0, Operand(backtrack_limit()));
// Backtrack limit exceeded.
if (can_fallback()) {
@@ -185,7 +185,7 @@ void RegExpMacroAssemblerRISCV::CheckCharacter(uint32_t c, Label* on_equal) {
BranchOrBacktrack(on_equal, eq, current_character(), Operand(c));
}
-void RegExpMacroAssemblerRISCV::CheckCharacterGT(uc16 limit,
+void RegExpMacroAssemblerRISCV::CheckCharacterGT(base::uc16 limit,
Label* on_greater) {
BranchOrBacktrack(on_greater, gt, current_character(), Operand(limit));
}
@@ -206,14 +206,15 @@ void RegExpMacroAssemblerRISCV::CheckNotAtStart(int cp_offset,
BranchOrBacktrack(on_not_at_start, ne, a0, Operand(a1));
}
-void RegExpMacroAssemblerRISCV::CheckCharacterLT(uc16 limit, Label* on_less) {
+void RegExpMacroAssemblerRISCV::CheckCharacterLT(base::uc16 limit,
+ Label* on_less) {
BranchOrBacktrack(on_less, lt, current_character(), Operand(limit));
}
void RegExpMacroAssemblerRISCV::CheckGreedyLoop(Label* on_equal) {
Label backtrack_non_equal;
__ Lw(a0, MemOperand(backtrack_stackpointer(), 0));
- __ Branch(&backtrack_non_equal, ne, current_input_offset(), Operand(a0));
+ __ BranchShort(&backtrack_non_equal, ne, current_input_offset(), Operand(a0));
__ Add64(backtrack_stackpointer(), backtrack_stackpointer(),
Operand(kIntSize));
__ bind(&backtrack_non_equal);
@@ -230,7 +231,7 @@ void RegExpMacroAssemblerRISCV::CheckNotBackReferenceIgnoreCase(
// At this point, the capture registers are either both set or both cleared.
// If the capture length is zero, then the capture is either empty or cleared.
// Fall through in both cases.
- __ Branch(&fallthrough, eq, a1, Operand(zero_reg));
+ __ BranchShort(&fallthrough, eq, a1, Operand(zero_reg));
if (read_backward) {
__ Ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne));
@@ -267,20 +268,20 @@ void RegExpMacroAssemblerRISCV::CheckNotBackReferenceIgnoreCase(
__ Lbu(a4, MemOperand(a2, 0));
__ addi(a2, a2, char_size());
- __ Branch(&loop_check, eq, a4, Operand(a3));
+ __ BranchShort(&loop_check, eq, a4, Operand(a3));
// Mismatch, try case-insensitive match (converting letters to lower-case).
__ Or(a3, a3, Operand(0x20)); // Convert capture character to lower-case.
__ Or(a4, a4, Operand(0x20)); // Also convert input character.
- __ Branch(&fail, ne, a4, Operand(a3));
+ __ BranchShort(&fail, ne, a4, Operand(a3));
__ Sub64(a3, a3, Operand('a'));
- __ Branch(&loop_check, Uless_equal, a3, Operand('z' - 'a'));
+ __ BranchShort(&loop_check, Uless_equal, a3, Operand('z' - 'a'));
// Latin-1: Check for values in range [224,254] but not 247.
__ Sub64(a3, a3, Operand(224 - 'a'));
// Weren't Latin-1 letters.
- __ Branch(&fail, Ugreater, a3, Operand(254 - 224));
+ __ BranchShort(&fail, Ugreater, a3, Operand(254 - 224));
// Check for 247.
- __ Branch(&fail, eq, a3, Operand(247 - 224));
+ __ BranchShort(&fail, eq, a3, Operand(247 - 224));
__ bind(&loop_check);
__ Branch(&loop, lt, a0, Operand(a1));
@@ -374,7 +375,7 @@ void RegExpMacroAssemblerRISCV::CheckNotBackReference(int start_reg,
// At this point, the capture registers are either both set or both cleared.
// If the capture length is zero, then the capture is either empty or cleared.
// Fall through in both cases.
- __ Branch(&fallthrough, eq, a1, Operand(zero_reg));
+ __ BranchShort(&fallthrough, eq, a1, Operand(zero_reg));
if (read_backward) {
__ Ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne));
@@ -444,14 +445,15 @@ void RegExpMacroAssemblerRISCV::CheckNotCharacterAfterAnd(uint32_t c,
}
void RegExpMacroAssemblerRISCV::CheckNotCharacterAfterMinusAnd(
- uc16 c, uc16 minus, uc16 mask, Label* on_not_equal) {
+ base::uc16 c, base::uc16 minus, base::uc16 mask, Label* on_not_equal) {
DCHECK_GT(String::kMaxUtf16CodeUnit, minus);
__ Sub64(a0, current_character(), Operand(minus));
__ And(a0, a0, Operand(mask));
BranchOrBacktrack(on_not_equal, ne, a0, Operand(c));
}
-void RegExpMacroAssemblerRISCV::CheckCharacterInRange(uc16 from, uc16 to,
+void RegExpMacroAssemblerRISCV::CheckCharacterInRange(base::uc16 from,
+ base::uc16 to,
Label* on_in_range) {
__ Sub64(a0, current_character(), Operand(from));
// Unsigned lower-or-same condition.
@@ -459,7 +461,7 @@ void RegExpMacroAssemblerRISCV::CheckCharacterInRange(uc16 from, uc16 to,
}
void RegExpMacroAssemblerRISCV::CheckCharacterNotInRange(
- uc16 from, uc16 to, Label* on_not_in_range) {
+ base::uc16 from, base::uc16 to, Label* on_not_in_range) {
__ Sub64(a0, current_character(), Operand(from));
// Unsigned higher condition.
BranchOrBacktrack(on_not_in_range, Ugreater, a0, Operand(to - from));
@@ -479,7 +481,7 @@ void RegExpMacroAssemblerRISCV::CheckBitInTable(Handle<ByteArray> table,
BranchOrBacktrack(on_bit_set, ne, a0, Operand(zero_reg));
}
-bool RegExpMacroAssemblerRISCV::CheckSpecialCharacterClass(uc16 type,
+bool RegExpMacroAssemblerRISCV::CheckSpecialCharacterClass(base::uc16 type,
Label* on_no_match) {
// Range checks (c in min..max) are generally implemented by an unsigned
// (c - min) <= (max - min) check.
@@ -489,10 +491,10 @@ bool RegExpMacroAssemblerRISCV::CheckSpecialCharacterClass(uc16 type,
if (mode_ == LATIN1) {
// One byte space characters are '\t'..'\r', ' ' and \u00a0.
Label success;
- __ Branch(&success, eq, current_character(), Operand(' '));
+ __ BranchShort(&success, eq, current_character(), Operand(' '));
// Check range 0x09..0x0D.
__ Sub64(a0, current_character(), Operand('\t'));
- __ Branch(&success, Uless_equal, a0, Operand('\r' - '\t'));
+ __ BranchShort(&success, Uless_equal, a0, Operand('\r' - '\t'));
// \u00a0 (NBSP).
BranchOrBacktrack(on_no_match, ne, a0, Operand(0x00A0 - '\t'));
__ bind(&success);
@@ -564,7 +566,7 @@ bool RegExpMacroAssemblerRISCV::CheckSpecialCharacterClass(uc16 type,
Label done;
if (mode_ != LATIN1) {
// Table is 256 entries, so all Latin1 characters can be tested.
- __ Branch(&done, Ugreater, current_character(), Operand('z'));
+ __ BranchShort(&done, Ugreater, current_character(), Operand('z'));
}
ExternalReference map =
ExternalReference::re_word_character_map(isolate());
@@ -644,7 +646,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
// Set frame pointer in space for it if this is not a direct call
// from generated code.
__ Add64(frame_pointer(), sp,
- Operand(NumRegs(argument_registers) * kPointerSize));
+ Operand(NumRegs(argument_registers) * kSystemPointerSize));
STATIC_ASSERT(kSuccessfulCaptures == kInputString - kSystemPointerSize);
__ mv(a0, zero_reg);
@@ -665,11 +667,11 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
__ Ld(a0, MemOperand(a0));
__ Sub64(a0, sp, a0);
// Handle it if the stack pointer is already below the stack limit.
- __ Branch(&stack_limit_hit, le, a0, Operand(zero_reg));
+ __ BranchShort(&stack_limit_hit, le, a0, Operand(zero_reg));
// Check if there is room for the variable number of registers above
// the stack limit.
- __ Branch(&stack_ok, Ugreater_equal, a0,
- Operand(num_registers_ * kPointerSize));
+ __ BranchShort(&stack_ok, Ugreater_equal, a0,
+ Operand(num_registers_ * kSystemPointerSize));
// Exit with OutOfMemory exception. There is not enough space on the stack
// for our working registers.
__ li(a0, Operand(EXCEPTION));
@@ -682,7 +684,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
__ bind(&stack_ok);
// Allocate space on stack for registers.
- __ Sub64(sp, sp, Operand(num_registers_ * kPointerSize));
+ __ Sub64(sp, sp, Operand(num_registers_ * kSystemPointerSize));
// Load string end.
__ Ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd));
// Load input start.
@@ -704,7 +706,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
Label load_char_start_regexp, start_regexp;
// Load newline if index is at start, previous character otherwise.
- __ Branch(&load_char_start_regexp, ne, a1, Operand(zero_reg));
+ __ BranchShort(&load_char_start_regexp, ne, a1, Operand(zero_reg));
__ li(current_character(), Operand('\n'));
__ jmp(&start_regexp);
@@ -724,7 +726,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
Label init_loop;
__ bind(&init_loop);
__ Sd(a0, MemOperand(a1));
- __ Add64(a1, a1, Operand(-kPointerSize));
+ __ Add64(a1, a1, Operand(-kSystemPointerSize));
__ Sub64(a2, a2, Operand(1));
__ Branch(&init_loop, ne, a2, Operand(zero_reg));
} else {
@@ -766,7 +768,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
__ Ld(a3, register_location(i + 1));
if (i == 0 && global_with_zero_length_check()) {
// Keep capture start in a4 for the zero-length check later.
- __ mv(t4, a2);
+ __ mv(s3, a2);
}
if (mode_ == UC16) {
__ srai(a2, a2, 1);
@@ -809,13 +811,13 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
if (global_with_zero_length_check()) {
// Special case for zero-length matches.
- // t4: capture start index
+ // s3: capture start index
// Not a zero-length match, restart.
__ Branch(&load_char_start_regexp, ne, current_input_offset(),
- Operand(t4));
+ Operand(s3));
// Offset from the end is zero if we already reached the end.
- __ Branch(&exit_label_, eq, current_input_offset(),
- Operand(zero_reg));
+ __ BranchShort(&exit_label_, eq, current_input_offset(),
+ Operand(zero_reg));
// Advance current position after a zero-length match.
Label advance;
__ bind(&advance);
@@ -894,7 +896,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
__ MultiPop(regexp_registers);
// If return nullptr, we have failed to grow the stack, and
// must exit with a stack-overflow exception.
- __ Branch(&exit_with_exception, eq, a0, Operand(zero_reg));
+ __ BranchShort(&exit_with_exception, eq, a0, Operand(zero_reg));
// Otherwise use return value as new stack pointer.
__ mv(backtrack_stackpointer(), a0);
// Restore saved registers and continue.
@@ -976,7 +978,7 @@ void RegExpMacroAssemblerRISCV::PushBacktrack(Label* label) {
} else {
Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_);
Label after_constant;
- __ Branch(&after_constant);
+ __ BranchShort(&after_constant);
int offset = masm_->pc_offset();
int cp_offset = offset + Code::kHeaderSize - kHeapObjectTag;
__ emit(0);
@@ -1016,8 +1018,8 @@ void RegExpMacroAssemblerRISCV::ReadStackPointerFromRegister(int reg) {
void RegExpMacroAssemblerRISCV::SetCurrentPositionFromEnd(int by) {
Label after_position;
- __ Branch(&after_position, ge, current_input_offset(),
- Operand(-by * char_size()));
+ __ BranchShort(&after_position, ge, current_input_offset(),
+ Operand(-by * char_size()));
__ li(current_input_offset(), -by * char_size());
// On RegExp code entry (where this operation is used), the character before
// the current position is expected to be already loaded.
@@ -1073,7 +1075,7 @@ void RegExpMacroAssemblerRISCV::CallCheckStackGuardState(Register scratch) {
// Align the stack pointer and save the original sp value on the stack.
__ mv(scratch, sp);
- __ Sub64(sp, sp, Operand(kPointerSize));
+ __ Sub64(sp, sp, Operand(kSystemPointerSize));
DCHECK(base::bits::IsPowerOfTwo(stack_alignment));
__ And(sp, sp, Operand(-stack_alignment));
__ Sd(scratch, MemOperand(sp));
@@ -1083,7 +1085,7 @@ void RegExpMacroAssemblerRISCV::CallCheckStackGuardState(Register scratch) {
__ li(a1, Operand(masm_->CodeObject()), CONSTANT_SIZE);
// We need to make room for the return address on the stack.
- DCHECK(IsAligned(stack_alignment, kPointerSize));
+ DCHECK(IsAligned(stack_alignment, kSystemPointerSize));
__ Sub64(sp, sp, Operand(stack_alignment));
// The stack pointer now points to cell where the return address will be
@@ -1104,8 +1106,8 @@ void RegExpMacroAssemblerRISCV::CallCheckStackGuardState(Register scratch) {
__ li(t6, Operand(stack_guard_check));
EmbeddedData d = EmbeddedData::FromBlob();
- CHECK(Builtins::IsIsolateIndependent(Builtins::kDirectCEntry));
- Address entry = d.InstructionStartOfBuiltin(Builtins::kDirectCEntry);
+ CHECK(Builtins::IsIsolateIndependent(Builtin::kDirectCEntry));
+ Address entry = d.InstructionStartOfBuiltin(Builtin::kDirectCEntry);
__ li(kScratchReg, Operand(entry, RelocInfo::OFF_HEAP_TARGET));
__ Call(kScratchReg);
@@ -1157,7 +1159,7 @@ MemOperand RegExpMacroAssemblerRISCV::register_location(int register_index) {
num_registers_ = register_index + 1;
}
return MemOperand(frame_pointer(),
- kRegisterZero - register_index * kPointerSize);
+ kRegisterZero - register_index * kSystemPointerSize);
}
void RegExpMacroAssemblerRISCV::CheckPosition(int cp_offset,
@@ -1245,9 +1247,9 @@ void RegExpMacroAssemblerRISCV::LoadCurrentCharacterUnchecked(int cp_offset,
int characters) {
Register offset = current_input_offset();
if (cp_offset != 0) {
- // t4 is not being used to store the capture start index at this point.
- __ Add64(t4, current_input_offset(), Operand(cp_offset * char_size()));
- offset = t4;
+ // s3 is not being used to store the capture start index at this point.
+ __ Add64(s3, current_input_offset(), Operand(cp_offset * char_size()));
+ offset = s3;
}
// We assume that we cannot do unaligned loads on RISC-V, so this function
// must only be used to load a single character at a time.