Revert^2 "Prevent overflow for AOT hotness counters"
Fixed bug where sbc usage was incorrect. sbc does -1 + carry.
Test: test/run-test --always-clean --runtime-option -Xcheck:jni --64 674-hotness-compiled
Test: test/run-test --always-clean --runtime-option -Xcheck:jni 674-hotness-compiled
Bug: 139883463
This reverts commit 7ab07777b08db86dda2891f3e7ae15df8f25a599.
Change-Id: I6f8ac0320592a94314386b04cdb0c7e0e6da6994
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index 4ab398e..797fe32 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -1078,8 +1078,15 @@
DCHECK(GetCompilerOptions().GetImplicitStackOverflowChecks());
if (GetCompilerOptions().CountHotnessInCompiledCode()) {
- __ addw(Address(kMethodRegisterArgument, ArtMethod::HotnessCountOffset().Int32Value()),
+ NearLabel overflow;
+ __ cmpw(Address(kMethodRegisterArgument,
+ ArtMethod::HotnessCountOffset().Int32Value()),
+ Immediate(ArtMethod::MaxCounter()));
+ __ j(kEqual, &overflow);
+ __ addw(Address(kMethodRegisterArgument,
+ ArtMethod::HotnessCountOffset().Int32Value()),
Immediate(1));
+ __ Bind(&overflow);
}
if (!skip_overflow_check) {
@@ -1385,7 +1392,13 @@
if (codegen_->GetCompilerOptions().CountHotnessInCompiledCode()) {
__ pushl(EAX);
__ movl(EAX, Address(ESP, kX86WordSize));
- __ addw(Address(EAX, ArtMethod::HotnessCountOffset().Int32Value()), Immediate(1));
+ NearLabel overflow;
+ __ cmpw(Address(EAX, ArtMethod::HotnessCountOffset().Int32Value()),
+ Immediate(ArtMethod::MaxCounter()));
+ __ j(kEqual, &overflow);
+ __ addw(Address(EAX, ArtMethod::HotnessCountOffset().Int32Value()),
+ Immediate(1));
+ __ Bind(&overflow);
__ popl(EAX);
}
GenerateSuspendCheck(info->GetSuspendCheck(), successor);