Reviewers: danno, Jakob, Michael Achenbach, paul.l..., balazs.kilvady,
akos.palfi.imgtec, djordje.pesic_imgtec.com,
Message:
PTAL.
Description:
MIPS: Fix unpredictable random failures after direct api function call.
The use of jalr ra is unpredictable if instruction in branch delay slot
is in next page.
This finally fixes random failures in JS debugger and InteruptRequest tests.
TEST=mjsunit/debug-*,
cctest/test-api/RequestInterruptTestWithNativeAccessor
BUG=
Please review this at https://codereview.chromium.org/1220443002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+10, -14 lines):
M src/mips/code-stubs-mips.cc
M src/mips64/code-stubs-mips64.cc
M test/mjsunit/mjsunit.status
Index: src/mips/code-stubs-mips.cc
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
index
6a0527ffa147450bd6eca3e4aff17db0a491d923..2707c9e44b2a5f7518087f922fdf7de80cbf4f6d
100644
--- a/src/mips/code-stubs-mips.cc
+++ b/src/mips/code-stubs-mips.cc
@@ -4051,8 +4051,8 @@ void DirectCEntryStub::GenerateCall(MacroAssembler*
masm,
intptr_t loc =
reinterpret_cast<intptr_t>(GetCode().location());
__ Move(t9, target);
- __ li(ra, Operand(loc, RelocInfo::CODE_TARGET), CONSTANT_SIZE);
- __ Call(ra);
+ __ li(at, Operand(loc, RelocInfo::CODE_TARGET), CONSTANT_SIZE);
+ __ Call(at);
}
Index: src/mips64/code-stubs-mips64.cc
diff --git a/src/mips64/code-stubs-mips64.cc
b/src/mips64/code-stubs-mips64.cc
index
79dc9cb27a5260908be8006408be7a774693d8ea..cf421497943fa933cddd5599cfeb13d335bb34da
100644
--- a/src/mips64/code-stubs-mips64.cc
+++ b/src/mips64/code-stubs-mips64.cc
@@ -4092,8 +4092,8 @@ void DirectCEntryStub::GenerateCall(MacroAssembler*
masm,
intptr_t loc =
reinterpret_cast<intptr_t>(GetCode().location());
__ Move(t9, target);
- __ li(ra, Operand(loc, RelocInfo::CODE_TARGET), CONSTANT_SIZE);
- __ Call(ra);
+ __ li(at, Operand(loc, RelocInfo::CODE_TARGET), CONSTANT_SIZE);
+ __ Call(at);
}
@@ -5356,9 +5356,9 @@ static void CallApiFunctionAndReturn(
__ li(s3, Operand(next_address));
__ ld(s0, MemOperand(s3, kNextOffset));
__ ld(s1, MemOperand(s3, kLimitOffset));
- __ ld(s2, MemOperand(s3, kLevelOffset));
- __ Daddu(s2, s2, Operand(1));
- __ sd(s2, MemOperand(s3, kLevelOffset));
+ __ lw(s2, MemOperand(s3, kLevelOffset));
+ __ Addu(s2, s2, Operand(1));
+ __ sw(s2, MemOperand(s3, kLevelOffset));
if (FLAG_log_timer_events) {
FrameScope frame(masm, StackFrame::MANUAL);
@@ -5399,11 +5399,11 @@ static void CallApiFunctionAndReturn(
// previous handle scope.
__ sd(s0, MemOperand(s3, kNextOffset));
if (__ emit_debug_code()) {
- __ ld(a1, MemOperand(s3, kLevelOffset));
+ __ lw(a1, MemOperand(s3, kLevelOffset));
__ Check(eq, kUnexpectedLevelAfterReturnFromApiCall, a1, Operand(s2));
}
- __ Dsubu(s2, s2, Operand(1));
- __ sd(s2, MemOperand(s3, kLevelOffset));
+ __ Subu(s2, s2, Operand(1));
+ __ sw(s2, MemOperand(s3, kLevelOffset));
__ ld(at, MemOperand(s3, kLimitOffset));
__ Branch(&delete_allocated_handles, ne, s1, Operand(at));
Index: test/mjsunit/mjsunit.status
diff --git a/test/mjsunit/mjsunit.status b/test/mjsunit/mjsunit.status
index
75db63ad4e1d0abfd546569e1d259b1061977e98..ba00e9a17f4e29a439b6ffe84131e37f4059b414
100644
--- a/test/mjsunit/mjsunit.status
+++ b/test/mjsunit/mjsunit.status
@@ -575,10 +575,6 @@
'math-floor-of-div-minus-zero': [SKIP],
}], # 'arch == mips64el'
-['arch == mips64el and simulator_run == False', {
- # Random failures on HW, need investigation.
- 'debug-*': [SKIP],
-}],
##############################################################################
['system == windows', {
# TODO(mstarzinger): Too slow with turbo fan.
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.