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_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index a299ece..502ff60 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -1070,6 +1070,8 @@
Register temp = temps.AcquireX();
__ Ldrh(temp, MemOperand(kArtMethodRegister, ArtMethod::HotnessCountOffset().Int32Value()));
__ Add(temp, temp, 1);
+ // Subtract one if the counter would overflow.
+ __ Sub(temp, temp, Operand(temp, LSR, 16));
__ Strh(temp, MemOperand(kArtMethodRegister, ArtMethod::HotnessCountOffset().Int32Value()));
}
@@ -3177,6 +3179,8 @@
__ Ldr(temp1, MemOperand(sp, 0));
__ Ldrh(temp2, MemOperand(temp1, ArtMethod::HotnessCountOffset().Int32Value()));
__ Add(temp2, temp2, 1);
+ // Subtract one if the counter would overflow.
+ __ Sub(temp2, temp2, Operand(temp2, LSR, 16));
__ Strh(temp2, MemOperand(temp1, ArtMethod::HotnessCountOffset().Int32Value()));
}
GenerateSuspendCheck(info->GetSuspendCheck(), successor);