From 38f5e415e7b7710dd9992181a57fbf0708209315 Mon Sep 17 00:00:00 2001 From: Akira Saitoh Date: Wed, 22 Nov 2023 12:07:52 +0900 Subject: [PATCH] AArch64: Fix String.hashCode() implementation This commit fixes `inlineStringHashCode` so that `savedLengthReg` is copied to `lengthReg` when the reference count of`lengthNode` is > 1. Signed-off-by: Akira Saitoh --- runtime/compiler/aarch64/codegen/J9TreeEvaluator.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/runtime/compiler/aarch64/codegen/J9TreeEvaluator.cpp b/runtime/compiler/aarch64/codegen/J9TreeEvaluator.cpp index 351e9d58e56..e5ef66846c6 100644 --- a/runtime/compiler/aarch64/codegen/J9TreeEvaluator.cpp +++ b/runtime/compiler/aarch64/codegen/J9TreeEvaluator.cpp @@ -6097,6 +6097,12 @@ static TR::Register *inlineStringHashCode(TR::Node *node, bool isCompressed, TR: TR_ARM64ScratchRegisterManager *srm = cg->generateScratchRegisterManager(12); TR::Register *dataAddrReg = (arrayNode->getReferenceCount() > 1) ? srm->findOrCreateScratchRegister() : arrayReg; TR::Register *lengthReg = (lengthNode->getReferenceCount() > 1) ? srm->findOrCreateScratchRegister() : savedLengthReg; + + if (lengthNode->getReferenceCount() > 1) + { + generateMovInstruction(cg, node, lengthReg, savedLengthReg, false); + } + TR::Compilation *comp = cg->comp(); if (comp->getOptions()->enableDebugCounters()) {