Skip to content

Commit

Permalink
Remove self() calls from private linkage
Browse files Browse the repository at this point in the history
Calls to `self()` in private linkage classes are not needed because
these classes are not extensible. We also take this opportunity to
version a check for 64-bit in the `mapIncomingParms` function.

Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
  • Loading branch information
fjeremic committed May 8, 2020
1 parent 6f51b24 commit 6f09870
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 18 deletions.
6 changes: 3 additions & 3 deletions runtime/compiler/aarch64/codegen/ARM64PrivateLinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ void J9::ARM64::PrivateLinkage::mapStack(TR::ResolvedMethodSymbol *method)
ListIterator<TR::ParameterSymbol> parameterIterator(&method->getParameterList());
TR::ParameterSymbol *parmCursor = parameterIterator.getFirst();

int32_t offsetToFirstParm = self()->getOffsetToFirstParm();
int32_t offsetToFirstParm = getOffsetToFirstParm();
uint32_t sizeOfParameterArea = method->getNumParameterSlots() * TR::Compiler->om.sizeofReferenceAddress();

while (parmCursor != NULL)
Expand Down Expand Up @@ -532,7 +532,7 @@ void J9::ARM64::PrivateLinkage::createPrologue(TR::Instruction *cursor)
// The offset to the first parm is the offset between the entry JavaSP and the first
// mapped parameter. It is a positive (or zero) offset.
//
int32_t outgoingArgsSize = cg()->getLargestOutgoingArgSize() + self()->getOffsetToFirstParm();
int32_t outgoingArgsSize = cg()->getLargestOutgoingArgSize() + getOffsetToFirstParm();

int32_t frameSizeIncludingReturnAddress = preservedRegisterSaveSize + localsSize + outgoingArgsSize;

Expand Down Expand Up @@ -734,7 +734,7 @@ void J9::ARM64::PrivateLinkage::createEpilogue(TR::Instruction *cursor)
TR::RealRegister *javaSP = machine->getRealRegister(properties.getStackPointerRegister()); // x20

// restore preserved GPRs
int32_t preservedRegisterOffsetFromJavaSP = cg()->getLargestOutgoingArgSize() + self()->getOffsetToFirstParm(); // outgoingArgsSize
int32_t preservedRegisterOffsetFromJavaSP = cg()->getLargestOutgoingArgSize() + getOffsetToFirstParm(); // outgoingArgsSize
TR::RealRegister::RegNum firstPreservedGPR = TR::RealRegister::x21;
TR::RealRegister::RegNum lastPreservedGPR = TR::RealRegister::x28;
for (TR::RealRegister::RegNum r = firstPreservedGPR; r <= lastPreservedGPR; r = (TR::RealRegister::RegNum)((uint32_t)r+1))
Expand Down
2 changes: 1 addition & 1 deletion runtime/compiler/arm/codegen/ARMJNILinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ TR::MemoryReference *J9::ARM::JNILinkage::getOutgoingArgumentMemRef(int32_t
printf("JNI: offset %d\n", offset); fflush(stdout);
#endif
const TR::ARMLinkageProperties &jniLinkageProperties = getProperties();
int32_t spOffset = offset + self()->getOffsetToFirstParm();
int32_t spOffset = offset + getOffsetToFirstParm();
TR::RealRegister *sp = cg()->machine()->getRealRegister(jniLinkageProperties.getStackPointerRegister());
TR::MemoryReference *result = new (trHeapMemory()) TR::MemoryReference(sp, spOffset, cg());
memArg.argRegister = argReg;
Expand Down
6 changes: 3 additions & 3 deletions runtime/compiler/arm/codegen/ARMPrivateLinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ void J9::ARM::PrivateLinkage::mapStack(TR::ResolvedMethodSymbol *method)

ListIterator<TR::ParameterSymbol> parameterIterator(&method->getParameterList());
TR::ParameterSymbol *parmCursor = parameterIterator.getFirst();
int32_t offsetToFirstParm = self()->getOffsetToFirstParm();
int32_t offsetToFirstParm = getOffsetToFirstParm();
if (linkage.getRightToLeft())
{
while (parmCursor != NULL)
Expand Down Expand Up @@ -449,7 +449,7 @@ void J9::ARM::PrivateLinkage::createPrologue(TR::Instruction *cursor)

int32_t registerSaveSize = intRegistersSaved * 4 + fpRegistersSaved * 8;

int32_t outgoingArgSize = self()->getOffsetToFirstParm() + codeGen->getLargestOutgoingArgSize();
int32_t outgoingArgSize = getOffsetToFirstParm() + codeGen->getLargestOutgoingArgSize();
int32_t totalFrameSize = localSize + registerSaveSize + outgoingArgSize;

// Align frame to 8-byte boundaries.
Expand Down Expand Up @@ -745,7 +745,7 @@ void J9::ARM::PrivateLinkage::createEpilogue(TR::Instruction *cursor)

int32_t registerSaveSize = intRegistersSaved * 4 + fpRegistersSaved * 8;

int32_t outgoingArgSize = self()->getOffsetToFirstParm() + codeGen->getLargestOutgoingArgSize();
int32_t outgoingArgSize = getOffsetToFirstParm() + codeGen->getLargestOutgoingArgSize();
int32_t totalFrameSize = localSize + registerSaveSize + outgoingArgSize;

if (debug("alignStackFrame"))
Expand Down
5 changes: 3 additions & 2 deletions runtime/compiler/codegen/PrivateLinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,17 @@ J9::PrivateLinkage::entryPointFromInterpretedMethod()
void
J9::PrivateLinkage::mapIncomingParms(TR::ResolvedMethodSymbol *method)
{
int32_t offsetToFirstArg = method->getNumParameterSlots() * TR::Compiler->om.sizeofReferenceAddress() + self()->getOffsetToFirstParm();
int32_t offsetToFirstArg = method->getNumParameterSlots() * TR::Compiler->om.sizeofReferenceAddress() + getOffsetToFirstParm();

const bool is64Bit = cg()->comp()->target().is64Bit();
ListIterator<TR::ParameterSymbol> paramIterator(&method->getParameterList());
for (TR::ParameterSymbol* paramCursor = paramIterator.getFirst(); paramCursor != NULL; paramCursor = paramIterator.getNext())
{
// This is a slightly convoluted way of enforcing the JVM specification which states that long and double
// variables take up two stack slots. A stack slot in OpenJ9 is a `uintptr_t`, so on 64-bit int variables
// are still placed in 64-bit stack slots, hence the need to check for 64-bit in the query below. For more
// details please see eclipse/openj9#8360.
int32_t slotMultiplier = cg()->comp()->target().is64Bit() && paramCursor->getDataType() != TR::Address ? 2 : 1;
int32_t slotMultiplier = is64Bit && paramCursor->getDataType() != TR::Address ? 2 : 1;

paramCursor->setParameterOffset(offsetToFirstArg -
paramCursor->getParameterOffset() -
Expand Down
10 changes: 5 additions & 5 deletions runtime/compiler/p/codegen/PPCPrivateLinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,7 @@ void J9::Power::PrivateLinkage::mapStack(TR::ResolvedMethodSymbol *method)
mapIncomingParms(method);

atlas->setLocalBaseOffset(lowGCOffset - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + self()->getOffsetToFirstParm() - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + getOffsetToFirstParm() - firstLocalOffset);
}

void J9::Power::PrivateLinkage::mapSingleAutomatic(TR::AutomaticSymbol *p, uint32_t &stackIndex)
Expand Down Expand Up @@ -1313,11 +1313,11 @@ void J9::Power::PrivateLinkage::createEpilogue(TR::Instruction *cursor)

if (0 && cg()->comp()->target().is64Bit())
{
saveSize = (cg()->getLargestOutgoingArgSize() * 2) + self()->getOffsetToFirstParm();
saveSize = (cg()->getLargestOutgoingArgSize() * 2) + getOffsetToFirstParm();
}
else
{
saveSize = cg()->getLargestOutgoingArgSize() + self()->getOffsetToFirstParm();
saveSize = cg()->getLargestOutgoingArgSize() + getOffsetToFirstParm();
}

while (savedFirst<=TR::RealRegister::LastGPR && !machine->getRealRegister(savedFirst)->getHasBeenAssignedInMethod())
Expand Down Expand Up @@ -1381,7 +1381,7 @@ int32_t J9::Power::PrivateLinkage::buildPrivateLinkageArgs(TR::Node
TR::PPCMemoryArgument *pushToMemory = NULL;
TR::Register *tempRegister;
int32_t argIndex = 0, memArgs = 0, from, to, step;
int32_t argSize = -self()->getOffsetToFirstParm(), totalSize = 0;
int32_t argSize = -getOffsetToFirstParm(), totalSize = 0;
uint32_t numIntegerArgs = 0;
uint32_t numFloatArgs = 0;
uint32_t firstExplicitArg = 0;
Expand Down Expand Up @@ -2852,7 +2852,7 @@ TR::MemoryReference *J9::Power::PrivateLinkage::getOutgoingArgumentMemRef(int32_
TR::Machine *machine = cg()->machine();

TR::MemoryReference *result=new (trHeapMemory()) TR::MemoryReference(machine->getRealRegister(properties.getNormalStackPointerRegister()),
argSize+self()->getOffsetToFirstParm(), length, cg());
argSize+getOffsetToFirstParm(), length, cg());
memArg.argRegister = argReg;
memArg.argMemory = result;
memArg.opCode = opCode;
Expand Down
8 changes: 4 additions & 4 deletions runtime/compiler/z/codegen/S390PrivateLinkage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ J9::Z::PrivateLinkage::mapCompactedStack(TR::ResolvedMethodSymbol * method)
mapIncomingParms(method);

atlas->setLocalBaseOffset(lowGCOffset - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + self()->getOffsetToFirstParm() - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + getOffsetToFirstParm() - firstLocalOffset);

} // scope of the stack memory region

Expand Down Expand Up @@ -807,7 +807,7 @@ J9::Z::PrivateLinkage::mapStack(TR::ResolvedMethodSymbol * method)
mapIncomingParms(method);

atlas->setLocalBaseOffset(lowGCOffset - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + self()->getOffsetToFirstParm() - firstLocalOffset);
atlas->setParmBaseOffset(atlas->getParmBaseOffset() + getOffsetToFirstParm() - firstLocalOffset);

#ifdef DEBUG
automaticIterator.reset();
Expand Down Expand Up @@ -1155,11 +1155,11 @@ J9::Z::PrivateLinkage::createPrologue(TR::Instruction * cursor)

if (0 && cg()->comp()->target().is64Bit())
{
argSize = cg()->getLargestOutgoingArgSize() * 2 + self()->getOffsetToFirstParm();
argSize = cg()->getLargestOutgoingArgSize() * 2 + getOffsetToFirstParm();
}
else
{
argSize = cg()->getLargestOutgoingArgSize() + self()->getOffsetToFirstParm();
argSize = cg()->getLargestOutgoingArgSize() + getOffsetToFirstParm();
}
size = regSaveSize + localSize + argSize;

Expand Down

0 comments on commit 6f09870

Please sign in to comment.