Skip to content

Commit cad42e7

Browse files
luyahantargos
authored andcommitted
deps: V8: cherry-pick 1b471b796022
Original commit message: [riscv] Using s8 as backtrack_stackpointer reg and optimize BranchShortHelper 1. Fix incorrect backtrack_stackpointer reg. 2. Optimize BranchShortHelper when comparing zero immediate. 3. This is a workaround CL fix v8:13836 Bug: v8:13836 Change-Id: I4cfc9df92fcd38ecd448a41ee87d1e251efd4ad9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4394942 Auto-Submit: Yahan Lu <yahan@iscas.ac.cn> Reviewed-by: Ji Qiu <qiuji@iscas.ac.cn> Commit-Queue: Ji Qiu <qiuji@iscas.ac.cn> Cr-Commit-Position: refs/heads/main@{#86889} Refs: v8/v8@1b471b7 PR-URL: #47399 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 6c158e8 commit cad42e7

File tree

4 files changed

+17
-11
lines changed

4 files changed

+17
-11
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# Reset this number to 0 on major V8 upgrades.
3838
# Increment by one for each non-official patch applied to deps/v8.
39-
'v8_embedder_string': '-node.6',
39+
'v8_embedder_string': '-node.7',
4040

4141
##### V8 defaults for Node.js #####
4242

deps/v8/src/codegen/riscv/macro-assembler-riscv.cc

+6-2
Original file line numberDiff line numberDiff line change
@@ -3976,8 +3976,12 @@ bool MacroAssembler::BranchShortHelper(int32_t offset, Label* L, Condition cond,
39763976
BlockTrampolinePoolScope block_trampoline_pool(this);
39773977
Register scratch = no_reg;
39783978
if (!rt.is_reg()) {
3979-
scratch = temps.Acquire();
3980-
li(scratch, rt);
3979+
if (rt.immediate() == 0) {
3980+
scratch = zero_reg;
3981+
} else {
3982+
scratch = temps.Acquire();
3983+
li(scratch, rt);
3984+
}
39813985
} else {
39823986
scratch = rt.rm();
39833987
}

deps/v8/src/regexp/riscv/regexp-macro-assembler-riscv.cc

+5-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace internal {
2424
* - s5 : Currently loaded character. Must be loaded using
2525
* LoadCurrentCharacter before using any of the dispatch methods.
2626
* - s6 : Points to tip of backtrack stack
27-
* - s7 : End of input (points to byte after last character in input).
27+
* - s8 : End of input (points to byte after last character in input).
2828
* - fp : Frame pointer. Used to access arguments, local variables and
2929
* RegExp registers.
3030
* - sp : Points to tip of C stack.
@@ -38,7 +38,7 @@ namespace internal {
3838
* --- sp when called ---
3939
* - fp[72] ra Return from RegExp code (ra). kReturnAddress
4040
* - fp[64] old-fp Old fp, callee saved(s9).
41-
* - fp[0..63] s1..s78 Callee-saved registers fp..s7.
41+
* - fp[0..63] s1..s11 Callee-saved registers fp..s11.
4242
* --- frame pointer ----
4343
* - fp[-8] frame marker
4444
* - fp[-16] Isolate* isolate (address of the current isolate) kIsolate
@@ -672,8 +672,8 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
672672
// Order here should correspond to order of offset constants in header file.
673673
// TODO(plind): we save fp..s11, but ONLY use s3 here - use the regs
674674
// or dont save.
675-
RegList registers_to_retain = {fp, s1, s2, s3, s4,
676-
s5, s6, s7, s8 /*, s9, s10, s11*/};
675+
RegList registers_to_retain = {fp, s1, s2, s3, s4, s5,
676+
s6, s7, s8, s9, s10, s11};
677677
DCHECK(registers_to_retain.Count() == kNumCalleeRegsToRetain);
678678

679679
// The remaining arguments are passed in registers, e.g.by calling the code
@@ -717,7 +717,7 @@ Handle<HeapObject> RegExpMacroAssemblerRISCV::GetCode(Handle<String> source) {
717717

718718
// Initialize backtrack stack pointer. It must not be clobbered from here
719719
// on. Note the backtrack_stackpointer is callee-saved.
720-
static_assert(backtrack_stackpointer() == s7);
720+
static_assert(backtrack_stackpointer() == s8);
721721
LoadRegExpStackPointerFromMemory(backtrack_stackpointer());
722722
// Store the regexp base pointer - we'll later restore it / write it to
723723
// memory when returning from this irregexp code object.

deps/v8/src/regexp/riscv/regexp-macro-assembler-riscv.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ class V8_EXPORT_PRIVATE RegExpMacroAssemblerRISCV
104104
static constexpr int kStoredRegistersOffset = kFramePointerOffset;
105105
// Return address (stored from link register, read into pc on return).
106106

107-
// This 9 is 8 s-regs (s1..s8) plus fp.
108-
static constexpr int kNumCalleeRegsToRetain = 9;
107+
// This 9 is 8 s-regs (s1..s11) plus fp.
108+
static constexpr int kNumCalleeRegsToRetain = 12;
109109
static constexpr int kReturnAddressOffset =
110110
kStoredRegistersOffset + kNumCalleeRegsToRetain * kSystemPointerSize;
111111

@@ -187,7 +187,9 @@ class V8_EXPORT_PRIVATE RegExpMacroAssemblerRISCV
187187

188188
// The register containing the backtrack stack top. Provides a meaningful
189189
// name to the register.
190-
static constexpr Register backtrack_stackpointer() { return s7; }
190+
// s7 should not be used here because baseline sparkplug uses s7 as context
191+
// register.
192+
static constexpr Register backtrack_stackpointer() { return s8; }
191193

192194
// Register holding pointer to the current code object.
193195
static constexpr Register code_pointer() { return s1; }

0 commit comments

Comments
 (0)