From c566ee527cc2ecd1541008badc287227da1ce262 Mon Sep 17 00:00:00 2001 From: R2steven <91508326+R2steven@users.noreply.github.com> Date: Thu, 9 May 2024 14:12:49 -0700 Subject: [PATCH] Use 32-bit XORRegReg to zero registers on x64 swept through x/codegen and replaced XORRegReg(64 bit) with XOR4RegReg(32 bit) when used to zero a register. Closes: #7295 Signed-off-by: Ryan Stevens --- compiler/x/codegen/BinaryEvaluator.cpp | 4 ++-- compiler/x/codegen/FPTreeEvaluator.cpp | 2 +- compiler/x/codegen/OMRTreeEvaluator.cpp | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/x/codegen/BinaryEvaluator.cpp b/compiler/x/codegen/BinaryEvaluator.cpp index 756f5c3d89b..34937ec1b6c 100644 --- a/compiler/x/codegen/BinaryEvaluator.cpp +++ b/compiler/x/codegen/BinaryEvaluator.cpp @@ -2151,7 +2151,7 @@ TR::Register *OMR::X86::TreeEvaluator::signedIntegerDivOrRemAnalyser(TR::Node *n // MIN_INT or MIN_LONG divisor // TR::Register *quotientRegister = cg->allocateRegister(); - generateRegRegInstruction(TR::InstOpCode::XORRegReg(nodeIs64Bit), node, quotientRegister, quotientRegister, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, quotientRegister, quotientRegister, cg); if (nodeIs64Bit) { @@ -2387,7 +2387,7 @@ TR::Register *OMR::X86::TreeEvaluator::integerDivOrRemEvaluator(TR::Node *node, // if (!nodeIs64Bit && node->isUnsigned()) { - generateRegRegInstruction(TR::InstOpCode::XORRegReg(nodeIs64Bit), node, edxRegister, edxRegister, edxDeps, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, edxRegister, edxRegister, edxDeps, cg); if (divisorRegister) { diff --git a/compiler/x/codegen/FPTreeEvaluator.cpp b/compiler/x/codegen/FPTreeEvaluator.cpp index 194e5f06fb8..b8c74720b7d 100644 --- a/compiler/x/codegen/FPTreeEvaluator.cpp +++ b/compiler/x/codegen/FPTreeEvaluator.cpp @@ -284,7 +284,7 @@ TR::Register *OMR::X86::TreeEvaluator::floatingPointStoreEvaluator(TR::Node *nod TR::Register *floatConstReg = cg->allocateRegister(TR_GPR); if (valueChild->getLongInt() == 0) { - generateRegRegInstruction(TR::InstOpCode::XOR8RegReg, node, floatConstReg, floatConstReg, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, floatConstReg, floatConstReg, cg); } else { diff --git a/compiler/x/codegen/OMRTreeEvaluator.cpp b/compiler/x/codegen/OMRTreeEvaluator.cpp index afd5567392a..d26ff6660df 100644 --- a/compiler/x/codegen/OMRTreeEvaluator.cpp +++ b/compiler/x/codegen/OMRTreeEvaluator.cpp @@ -2441,7 +2441,7 @@ static void arraySetToZeroForShortConstantArrays(TR::Node* node, TR::Register* a if (size < 16) { tempReg = cg->allocateRegister(); - generateRegRegInstruction(TR::InstOpCode::XOR8RegReg, node, tempReg, tempReg, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, tempReg, tempReg, cg); int32_t index = 0; int8_t packs[4] = {8, 4, 2, 1}; @@ -4714,7 +4714,7 @@ OMR::X86::TreeEvaluator::bitpermuteEvaluator(TR::Node *node, TR::CodeGenerator * // Zero result reg TR::Register *resultReg = cg->allocateRegister(TR_GPR); - generateRegRegInstruction(TR::InstOpCode::XORRegReg(nodeIs64Bit), node, resultReg, resultReg, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, resultReg, resultReg, cg); if (length->getOpCode().isLoadConst()) { @@ -4724,7 +4724,7 @@ OMR::X86::TreeEvaluator::bitpermuteEvaluator(TR::Node *node, TR::CodeGenerator * { // Zero tmpReg if SET won't do it if (x >= 8) - generateRegRegInstruction(TR::InstOpCode::XORRegReg(nodeIs64Bit), node, tmpReg, tmpReg, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, tmpReg, tmpReg, cg); TR::MemoryReference *sourceMR = generateX86MemoryReference(addrReg, x, cg); generateRegMemInstruction(TR::InstOpCode::L1RegMem, node, tmpReg, sourceMR, cg); @@ -4768,7 +4768,7 @@ OMR::X86::TreeEvaluator::bitpermuteEvaluator(TR::Node *node, TR::CodeGenerator * generateRegImmInstruction(TR::InstOpCode::SUB4RegImm4, node, indexReg, 1, cg); // Load the byte, test the bit and set - generateRegRegInstruction(TR::InstOpCode::XORRegReg(nodeIs64Bit), node, tmpReg, tmpReg, cg); + generateRegRegInstruction(TR::InstOpCode::XOR4RegReg, node, tmpReg, tmpReg, cg); TR::MemoryReference *sourceMR = generateX86MemoryReference(addrReg, indexReg, 0, 0, cg); generateRegMemInstruction(TR::InstOpCode::L1RegMem, node, tmpReg, sourceMR, cg); generateRegRegInstruction(TR::InstOpCode::BTRegReg(nodeIs64Bit), node, valueReg, tmpReg, cg);