Skip to content

Commit a78c7b9

Browse files
feat: 添加 v25 版本补丁
1 parent 762f0ce commit a78c7b9

1 file changed

Lines changed: 161 additions & 0 deletions

File tree

fix-loong64.patch

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
diff --git a/deps/v8/src/builtins/loong64/builtins-loong64.cc b/deps/v8/src/builtins/loong64/builtins-loong64.cc
2+
index f93e4911..53c4a1c9 100644
3+
--- a/deps/v8/src/builtins/loong64/builtins-loong64.cc
4+
+++ b/deps/v8/src/builtins/loong64/builtins-loong64.cc
5+
@@ -328,7 +328,7 @@ static void GetSharedFunctionInfoBytecodeOrBaseline(
6+
if (v8_flags.debug_code) {
7+
Label not_baseline;
8+
__ GetObjectType(data, scratch1, scratch1);
9+
- __ Branch(&not_baseline, ne, scratch1, Operand(CODETYPE));
10+
+ __ Branch(&not_baseline, ne, scratch1, Operand(CODE_TYPE));
11+
AssertCodeIsBaseline(masm, data, scratch1);
12+
__ Branch(is_baseline);
13+
__ bind(&not_baseline);
14+
diff --git a/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc b/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc
15+
index e5fb03c9..c0e1860f 100644
16+
--- a/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc
17+
+++ b/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc
18+
@@ -2618,12 +2618,12 @@ int32_t MacroAssembler::GetOffset(Label* L, OffsetSize bits) {
19+
}
20+
21+
Register MacroAssembler::GetRkAsRegisterHelper(const Operand& rk,
22+
- Register scratch) {
23+
+ UseScratchRegisterScope temps) {
24+
Register r2 = no_reg;
25+
if (rk.is_reg()) {
26+
r2 = rk.rm();
27+
} else {
28+
- r2 = scratch;
29+
+ r2 = temps.Acquire();
30+
li(r2, rk);
31+
}
32+
33+
@@ -2635,7 +2635,6 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
34+
bool need_link) {
35+
UseScratchRegisterScope temps(this);
36+
BlockTrampolinePoolScope block_trampoline_pool(this);
37+
- Register scratch = temps.Acquire();
38+
DCHECK_NE(rj, zero_reg);
39+
40+
// Be careful to always use shifted_branch_offset only just before the
41+
@@ -2671,7 +2670,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
42+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
43+
if (need_link) pcaddi(ra, 2);
44+
// We don't want any other register but scratch clobbered.
45+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
46+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
47+
offset = GetOffset(L, OffsetSize::kOffset16);
48+
beq(rj, sc, offset);
49+
}
50+
@@ -2693,7 +2692,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
51+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
52+
if (need_link) pcaddi(ra, 2);
53+
// We don't want any other register but scratch clobbered.
54+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
55+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
56+
offset = GetOffset(L, OffsetSize::kOffset16);
57+
bne(rj, sc, offset);
58+
}
59+
@@ -2712,7 +2711,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
60+
} else {
61+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
62+
if (need_link) pcaddi(ra, 2);
63+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
64+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
65+
DCHECK(rj != sc);
66+
offset = GetOffset(L, OffsetSize::kOffset16);
67+
blt(sc, rj, offset);
68+
@@ -2733,7 +2732,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
69+
} else {
70+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
71+
if (need_link) pcaddi(ra, 2);
72+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
73+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
74+
DCHECK(rj != sc);
75+
offset = GetOffset(L, OffsetSize::kOffset16);
76+
bge(rj, sc, offset);
77+
@@ -2751,7 +2750,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
78+
} else {
79+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
80+
if (need_link) pcaddi(ra, 2);
81+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
82+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
83+
DCHECK(rj != sc);
84+
offset = GetOffset(L, OffsetSize::kOffset16);
85+
blt(rj, sc, offset);
86+
@@ -2772,7 +2771,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
87+
} else {
88+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
89+
if (need_link) pcaddi(ra, 2);
90+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
91+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
92+
DCHECK(rj != sc);
93+
offset = GetOffset(L, OffsetSize::kOffset16);
94+
bge(sc, rj, offset);
95+
@@ -2792,7 +2791,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
96+
} else {
97+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
98+
if (need_link) pcaddi(ra, 2);
99+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
100+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
101+
DCHECK(rj != sc);
102+
offset = GetOffset(L, OffsetSize::kOffset16);
103+
bltu(sc, rj, offset);
104+
@@ -2813,7 +2812,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
105+
} else {
106+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
107+
if (need_link) pcaddi(ra, 2);
108+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
109+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
110+
DCHECK(rj != sc);
111+
offset = GetOffset(L, OffsetSize::kOffset16);
112+
bgeu(rj, sc, offset);
113+
@@ -2828,7 +2827,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
114+
} else {
115+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
116+
if (need_link) pcaddi(ra, 2);
117+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
118+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
119+
DCHECK(rj != sc);
120+
offset = GetOffset(L, OffsetSize::kOffset16);
121+
bltu(rj, sc, offset);
122+
@@ -2848,7 +2847,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,
123+
} else {
124+
if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;
125+
if (need_link) pcaddi(ra, 2);
126+
- Register sc = GetRkAsRegisterHelper(rk, scratch);
127+
+ Register sc = GetRkAsRegisterHelper(rk, temps);
128+
DCHECK(rj != sc);
129+
offset = GetOffset(L, OffsetSize::kOffset16);
130+
bgeu(sc, rj, offset);
131+
@@ -3079,10 +3078,12 @@ void MacroAssembler::CompareTaggedRootAndBranch(const Register& obj,
132+
// Some smi roots contain system pointer size values like stack limits.
133+
DCHECK(base::IsInRange(index, RootIndex::kFirstStrongOrReadOnlyRoot,
134+
RootIndex::kLastStrongOrReadOnlyRoot));
135+
- Register temp = temps.Acquire();
136+
- DCHECK(!AreAliased(obj, temp));
137+
- LoadRoot(temp, index);
138+
- CompareTaggedAndBranch(target, cc, obj, Operand(temp));
139+
+ Register scratch1 = temps.Acquire();
140+
+ Register scratch2 = temps.Acquire();
141+
+ DCHECK(!AreAliased(obj, scratch1, scratch2));
142+
+ slli_w(scratch1, obj, 0);
143+
+ LoadTaggedRoot(scratch2, index);
144+
+ Branch(target, cc, scratch1, Operand(scratch2));
145+
}
146+
147+
// Compare the object in a register to a value from the root list.
148+
diff --git a/deps/v8/src/codegen/loong64/macro-assembler-loong64.h b/deps/v8/src/codegen/loong64/macro-assembler-loong64.h
149+
index e08ec7e3..0e352af4 100644
150+
--- a/deps/v8/src/codegen/loong64/macro-assembler-loong64.h
151+
+++ b/deps/v8/src/codegen/loong64/macro-assembler-loong64.h
152+
@@ -1286,7 +1286,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase {
153+
}
154+
155+
protected:
156+
- inline Register GetRkAsRegisterHelper(const Operand& rk, Register scratch);
157+
+ inline Register GetRkAsRegisterHelper(const Operand& rk,
158+
+ UseScratchRegisterScope temps);
159+
inline int32_t GetOffset(Label* L, OffsetSize bits);
160+
161+
private:

0 commit comments

Comments
 (0)