summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ulya Trofimovich <skvadrik@google.com> 2024-11-18 08:56:10 +0000
committer Ulya Trofimovich <skvadrik@google.com> 2024-11-18 15:36:36 +0000
commit7a97baeb4f553cdf6c9b4db2f9bae39cb0b74e6d (patch)
treece19145bab271ae95cddf203aaaaebeeb8ef5c8a
parent35e5520291f491f41c725949203537c15d3b7656 (diff)
riscv64: Use `Stored()` insted of `Sd()` as the offset is too large.
Using `Sd()` triggered debug check failure in 597-deopt-busy-loop: `assembler_riscv64.h:2403 Check failed: IsInt<12>(imm12) 2616` Test: 597-deopt-busy-loop passed in debug mode: export SOONG_ALLOW_MISSING_DEPENDENCIES=true export ART_TEST_SSH_USER=ubuntu export ART_TEST_SSH_HOST=localhost export ART_TEST_SSH_PORT=10002 export ART_TEST_ON_VM=true . ./build/envsetup.sh lunch riscv64-trunk_staging-eng art/tools/buildbot-build.sh --target -j72 #--installclean . art/tools/buildbot-utils.sh art/tools/buildbot-cleanup-device.sh art/tools/buildbot-setup-device.sh art/tools/buildbot-sync.sh art/test/run-test --chroot $ART_TEST_CHROOT \ --64 --optimizing 597-deopt-busy-loop Change-Id: I30f4b90ac3b041d713960411e6670f4129beadf9
-rw-r--r--compiler/optimizing/code_generator_riscv64.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/optimizing/code_generator_riscv64.cc b/compiler/optimizing/code_generator_riscv64.cc
index d6f0d59bda..c2d82b8033 100644
--- a/compiler/optimizing/code_generator_riscv64.cc
+++ b/compiler/optimizing/code_generator_riscv64.cc
@@ -2666,8 +2666,10 @@ void InstructionCodeGeneratorRISCV64::GenerateMethodEntryExitHook(HInstruction*
__ Addi(tmp, tmp, -dchecked_integral_cast<int32_t>(kNumEntriesForWallClock * sizeof(void*)));
__ Blt(tmp, tmp2, slow_path->GetEntryLabel());
- // Update the index in the `Thread`.
- __ Sd(tmp, TR, trace_buffer_curr_entry_offset);
+ // Update the index in the `Thread`. Temporarily free `tmp2` to be used by `Stored()`.
+ temps.FreeXRegister(tmp2);
+ __ Stored(tmp, TR, trace_buffer_curr_entry_offset);
+ tmp2 = temps.AllocateXRegister();
// Record method pointer and trace action.
__ Ld(tmp2, SP, 0);