diff --git a/debugtools/DDR_VM/data/superset-constants.dat b/debugtools/DDR_VM/data/superset-constants.dat index 76928a54350..ab1fc9270af 100644 --- a/debugtools/DDR_VM/data/superset-constants.dat +++ b/debugtools/DDR_VM/data/superset-constants.dat @@ -1385,7 +1385,6 @@ C|CFR_BC_vload C|CFR_BC_vreturn C|CFR_BC_vstore C|CFR_BC_vunbox -C|CFR_BC_vwithfield C|CFR_BC_wide S|J9ClassInitFlags|J9ClassInitFlagsPointer| C|J9ClassInitFailed diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/BCNames.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/BCNames.java index 6339b191931..e002a38ddc5 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/BCNames.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/BCNames.java @@ -230,8 +230,6 @@ public class BCNames { public static final int JBifnonnull = 199; public static final int JBgotow = 200; public static final int JBbreakpoint = 202; - public static final int JBaconst_init; - public static final int JBwithfield; public static final int JBiincw; public static final int JBaload0getfield; public static final int JBnewdup; @@ -270,8 +268,6 @@ public class BCNames { static { switch (AlgorithmVersion.getVersionOf(AlgorithmVersion.BYTECODE_VERSION).getAlgorithmVersion()) { case 0: - JBaconst_init = 224; - JBwithfield = 226; JBiloadw = 203; JBlloadw = 204; JBfloadw = 205; @@ -306,8 +302,6 @@ public class BCNames { JBreturnFromJ2I = 251; break; case 1: - JBaconst_init = 203; - JBwithfield = 204; JBiincw = 213; JBaload0getfield = 215; JBnewdup = 216; diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/PCStack.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/PCStack.java index b39f6967231..7efe4a18d0a 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/PCStack.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/PCStack.java @@ -497,8 +497,8 @@ public class PCStack 0x25 /* JBgotow = 200 */, 0x00 /* JBunimplemented = 201 */, 0x71 /* JBbreakpoint = 202 */, - 0x03 /* JBaconst_init = 203 */, - 0x03 /* JBwithfield = 204 */, + 0x00 /* JBunimplemented = 203 */, + 0x00 /* JBunimplemented = 204 */, 0x00 /* JBunimplemented = 205 */, 0x00 /* JBunimplemented = 206 */, 0x00 /* JBunimplemented = 207 */, @@ -1017,8 +1017,8 @@ public class PCStack 0x00 /* JBgotow = 200 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 201 -- pops: 0 pushes: 0*/ , 0x00 /* JBbreakpoint = 202 -- pops: 0 pushes: 0*/ , - 0x50 /* JBaconst_init = 203 -- pops: 0 pushes: 1*/ , - 0x80 /* JBwithfield = 204 -- pops: 2 pushes: 1*/ , + 0x00 /* JBunimplemented = 203 -- pops: 0 pushes: 0*/ , + 0x00 /* JBunimplemented = 204 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 205 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 206 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 207 -- pops: 0 pushes: 0*/ , @@ -1537,8 +1537,8 @@ public class PCStack 0x0 /* JBgotow (16rC8) */, 0x0 /* JBunimplemented (16rC9) */, 0x0 /* JBbreakpoint (16rCA) */, - 0x0 /* JBaconst_init (16rCB) */ , - 0x0 /* JBwithfield (16rCC) */ , + 0x0 /* JBunimplemented (16rCB) */ , + 0x0 /* JBunimplemented (16rCC) */ , 0x0 /* JBunimplemented (16rCD) */, 0x0 /* JBunimplemented (16rCE) */, 0x0 /* JBunimplemented (16rCF) */, diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/VrfyTbl.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/VrfyTbl.java index 0cb79904f2c..1364965fab6 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/VrfyTbl.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/VrfyTbl.java @@ -495,8 +495,8 @@ public class VrfyTbl 0x0E81 /* JBgotow - 200 */, 0x1700 /* JBunimplemented - 201 */, 0x1700 /* JBbreakpoint - 202 */, - 0x1200 /* JBaconst_init = 203 */, - 0x1000 /* JBwithfield = 204 */, + 0x1700 /* JBunimplemented = 203 */, + 0x1700 /* JBunimplemented = 204 */, 0x1700 /* JBunimplemented - 205 */, 0x1700 /* JBunimplemented - 206 */, 0x1700 /* JBunimplemented - 207 */, diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackmap/StackMap.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackmap/StackMap.java index 5469ce4ee8c..661937c15ce 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackmap/StackMap.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackmap/StackMap.java @@ -43,7 +43,6 @@ import static com.ibm.j9ddr.vm29.j9.BCNames.JBldcw; import static com.ibm.j9ddr.vm29.j9.BCNames.JBmultianewarray; import static com.ibm.j9ddr.vm29.j9.BCNames.JBputfield; -import static com.ibm.j9ddr.vm29.j9.BCNames.JBwithfield; import static com.ibm.j9ddr.vm29.j9.BCNames.JBputstatic; import static com.ibm.j9ddr.vm29.j9.BCNames.JBswap; import static com.ibm.j9ddr.vm29.j9.BCNames.JBtableswitch; @@ -524,7 +523,7 @@ private int mapStack(U16 totalStack, byte[] map, PUSH(INT); } } - } else if ((bc == JBputfield) || (bc == JBwithfield)) { + } else if (bc == JBputfield) { POP(); index = PARAM_16(bcIndex, 1).intValue(); utf8Signature = J9ROMFieldRefPointer.cast(pool.add(index)).nameAndSignature().signature(); @@ -533,9 +532,6 @@ private int mapStack(U16 totalStack, byte[] map, if ((signature == 'D') || (signature == 'J')) { POP(); } - if (bc == JBwithfield) { - PUSH(OBJ); - } } else if (bc == JBputstatic) { index = PARAM_16(bcIndex, 1).intValue(); utf8Signature = J9ROMFieldRefPointer.cast(pool.add(index)).nameAndSignature().signature(); diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/RomClassWalker.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/RomClassWalker.java index 9a07bc0b785..a21d9b79ca9 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/RomClassWalker.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/RomClassWalker.java @@ -491,7 +491,6 @@ private void allSlotsInBytecodesDo(J9ROMMethodPointer method) throws CorruptData || (bc == JBputstatic) || (bc == JBgetfield) || (bc == JBputfield) - || (bc == JBwithfield) || (bc == JBinvokevirtual) || (bc == JBinvokespecial) || (bc == JBinvokestatic) @@ -500,7 +499,6 @@ private void allSlotsInBytecodesDo(J9ROMMethodPointer method) throws CorruptData || (bc == JBinvokedynamic) || (bc == JBinvokeinterface) || (bc == JBnew) - || (bc == JBaconst_init) || (bc == JBnewdup) || (bc == JBanewarray) || (bc == JBcheckcast) diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/commands/ByteCodeDumper.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/commands/ByteCodeDumper.java index 4dc976a9d2a..4220b58c108 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/commands/ByteCodeDumper.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/tools/ddrinteractive/commands/ByteCodeDumper.java @@ -37,7 +37,6 @@ import static com.ibm.j9ddr.vm29.j9.BCNames.JBfloadw; import static com.ibm.j9ddr.vm29.j9.BCNames.JBfstore; import static com.ibm.j9ddr.vm29.j9.BCNames.JBfstorew; -import static com.ibm.j9ddr.vm29.j9.BCNames.JBwithfield; import static com.ibm.j9ddr.vm29.j9.BCNames.JBgetfield; import static com.ibm.j9ddr.vm29.j9.BCNames.JBgetstatic; import static com.ibm.j9ddr.vm29.j9.BCNames.JBgoto; @@ -84,7 +83,6 @@ import static com.ibm.j9ddr.vm29.j9.BCNames.JBlstore; import static com.ibm.j9ddr.vm29.j9.BCNames.JBlstorew; import static com.ibm.j9ddr.vm29.j9.BCNames.JBmultianewarray; -import static com.ibm.j9ddr.vm29.j9.BCNames.JBaconst_init; import static com.ibm.j9ddr.vm29.j9.BCNames.JBnew; import static com.ibm.j9ddr.vm29.j9.BCNames.JBnewdup; import static com.ibm.j9ddr.vm29.j9.BCNames.JBnewarray; @@ -398,7 +396,6 @@ private static IDATA j9bcutil_dumpBytecodes(PrintStream out, J9ROMClassPointer r } else if ((bcIntVal == JBgetstatic) || (bcIntVal == JBputstatic) || (bcIntVal == JBgetfield) - || (bcIntVal == JBwithfield) || (bcIntVal == JBputfield) ) { index = new UDATA(_GETNEXT_U16()); @@ -481,7 +478,6 @@ private static IDATA j9bcutil_dumpBytecodes(PrintStream out, J9ROMClassPointer r pc = pc.add(2); } else if ((bcIntVal == JBnew) || (bcIntVal == JBnewdup) - || (bcIntVal == JBaconst_init) || (bcIntVal == JBanewarray) || (bcIntVal == JBcheckcast) || (bcIntVal == JBinstanceof) diff --git a/runtime/codert_vm/decomp.cpp b/runtime/codert_vm/decomp.cpp index 1dba5203397..0edeaee4bec 100644 --- a/runtime/codert_vm/decomp.cpp +++ b/runtime/codert_vm/decomp.cpp @@ -620,14 +620,10 @@ getPendingStackHeight(J9VMThread *currentThread, U_8 *interpreterPC, J9Method *r case JBmultianewarray: /* Dimensions stacked (number of dimensions is 3 bytes from the multianewarray) */ pendingStackHeight -= interpreterPC[3]; break; - case JBwithfield: - /* it will always be two slots since we only ever need to allocate qtype */ - pendingStackHeight -= 2; - break; case JBgetfield: pendingStackHeight -= 1; break; - default: /* JBnew/JBaconst_init - no stacked parameters*/ + default: /* JBnew - no stacked parameters*/ break; } } diff --git a/runtime/compiler/compile/J9Compilation.cpp b/runtime/compiler/compile/J9Compilation.cpp index d14343ac0bb..246fc0cde89 100644 --- a/runtime/compiler/compile/J9Compilation.cpp +++ b/runtime/compiler/compile/J9Compilation.cpp @@ -734,8 +734,8 @@ J9::Compilation::canAllocateInline(TR::Node* node, TR_OpaqueClassBlock* &classIn if (clazz == NULL) return -1; - // Arrays of primitive value type classes must have all their elements initialized with the - // default value of the component type. For now, prevent inline allocation of them. + // Arrays of null-restricted (a.k.a, primitive value type) classes must have all their elements initialized + // with the default value of the component type. For now, prevent inline allocation of them. // if (areValueTypesEnabled && TR::Compiler->cls.isPrimitiveValueTypeClass(reinterpret_cast(clazz))) { diff --git a/runtime/compiler/env/J9ObjectModel.hpp b/runtime/compiler/env/J9ObjectModel.hpp index 150535694c7..496dcc3766f 100644 --- a/runtime/compiler/env/J9ObjectModel.hpp +++ b/runtime/compiler/env/J9ObjectModel.hpp @@ -63,20 +63,23 @@ class ObjectModel : public OMR::ObjectModelConnector bool mayRequireSpineChecks(); /** - * @brief Whether or not value object is enabled - */ + * @brief Whether or not value object is enabled + */ bool areValueTypesEnabled(); + /** - * @brief Whether or not flattenable value object (aka null restricted) type is enabled - */ + * @brief Whether or not flattenable value object (aka null restricted) type is enabled + */ bool areFlattenableValueTypesEnabled(); + /** * @brief Whether the check is enabled on monitor object being value based class type */ bool areValueBasedMonitorChecksEnabled(); + /** - * @brief Whether the array flattening is enabled for value types - */ + * @brief Whether the array flattening is enabled for value types + */ bool isValueTypeArrayFlatteningEnabled(); int32_t sizeofReferenceField(); diff --git a/runtime/compiler/ilgen/J9ByteCode.hpp b/runtime/compiler/ilgen/J9ByteCode.hpp index e66d614095c..3e4a32cde4a 100644 --- a/runtime/compiler/ilgen/J9ByteCode.hpp +++ b/runtime/compiler/ilgen/J9ByteCode.hpp @@ -110,8 +110,6 @@ enum TR_J9ByteCode J9BCmonitorenter, J9BCmonitorexit, J9BCwide, J9BCasyncCheck, - J9BCaconst_init, - J9BCwithfield, J9BCbreakpoint, J9BCunknown }; diff --git a/runtime/compiler/ilgen/J9ByteCodeIlGenerator.hpp b/runtime/compiler/ilgen/J9ByteCodeIlGenerator.hpp index c39058b9d02..3bc1fea2a47 100644 --- a/runtime/compiler/ilgen/J9ByteCodeIlGenerator.hpp +++ b/runtime/compiler/ilgen/J9ByteCodeIlGenerator.hpp @@ -256,12 +256,6 @@ class TR_J9ByteCodeIlGenerator : public TR_IlGenerator, public TR_J9ByteCodeIter void genMonitorEnter(); void genMonitorExit(bool); TR_OpaqueClassBlock *loadValueClass(int32_t classCpIndex); - void genAconst_init(int32_t classCpIndex); - void genAconst_init(TR_OpaqueClassBlock *valueTypeClass, int32_t cpIndex); - void genWithField(int32_t fieldCpIndex); - void genWithField(TR::SymbolReference *, TR_OpaqueClassBlock *); - void genFlattenableWithField(int32_t, TR_OpaqueClassBlock *); - void genFlattenableWithFieldWithHelper(int32_t fieldCpIndex); void genFlush(int32_t nargs); void genFullFence(TR::Node *node); void handlePendingPushSaveSideEffects(TR::Node *, int32_t stackSize = -1); diff --git a/runtime/compiler/ilgen/J9ByteCodeIterator.cpp b/runtime/compiler/ilgen/J9ByteCodeIterator.cpp index 857d098fe0b..728cf7211f9 100644 --- a/runtime/compiler/ilgen/J9ByteCodeIterator.cpp +++ b/runtime/compiler/ilgen/J9ByteCodeIterator.cpp @@ -283,7 +283,6 @@ TR_J9ByteCodeIterator::printByteCode() case J9BCgetstatic: case J9BCgetfield: case J9BCputstatic: case J9BCputfield: case J9BCcheckcast: case J9BCinstanceof: case J9BCnew: case J9BCanewarray: - case J9BCaconst_init: case J9BCwithfield: printCPIndex(next2Bytes()); break; @@ -372,8 +371,8 @@ const TR_J9ByteCode TR_J9ByteCodeIterator::_opCodeToByteCodeEnum[] = /* 198 */ J9BCifnull, J9BCifnonnull, /* 200 */ J9BCgotow, J9BCunknown, /* 202 */ J9BCbreakpoint, - /* 203 */ J9BCaconst_init, - /* 204 */ J9BCwithfield, + /* 203 */ J9BCunknown, + /* 204 */ J9BCunknown, /* 205 */ J9BCunknown, J9BCunknown, J9BCunknown, J9BCunknown, /* 209 */ J9BCunknown, J9BCunknown, J9BCunknown, J9BCunknown, /* 213 */ J9BCiincw, J9BCunknown, @@ -611,8 +610,6 @@ const uint8_t TR_J9ByteCodeIterator::_byteCodeFlags[] = 0x01, // J9BCmonitorexit 0x00, // J9BCwide 0x01, // J9BCasyncCheck --- TODO: Is this the right size? - 0x03, // J9BCaconst_init - 0x03, // J9BCwithfield 0x01, // J9BCbreakpoint --- TODO: Is this the right size? 0x01, // BCunknown }; @@ -835,8 +832,6 @@ const uint8_t TR_J9ByteCodeIterator::_estimatedCodeSize[] = 25, // J9BCmonitorexit 0, // J9BCwide 0, // J9BCasyncCheck - 1, // J9BCaconst_init - 1, // J9BCwithfield 0, // J9BCunknown }; diff --git a/runtime/compiler/ilgen/Walker.cpp b/runtime/compiler/ilgen/Walker.cpp index 3d98941a416..ff51442ba5e 100644 --- a/runtime/compiler/ilgen/Walker.cpp +++ b/runtime/compiler/ilgen/Walker.cpp @@ -551,31 +551,6 @@ TR::Block * TR_J9ByteCodeIlGenerator::walker(TR::Block * prevBlock) case J9BCReturnZ: _bcIndex = genReturn(method()->returnOpCode(), method()->isSynchronized()); break; - - case J9BCaconst_init: - { - if (TR::Compiler->om.areValueTypesEnabled()) - { - genAconst_init(next2Bytes()); - _bcIndex += 3; - } - else - { - fej9()->unsupportedByteCode(comp(), opcode); - } - break; - } - case J9BCwithfield: - if (TR::Compiler->om.areValueTypesEnabled()) - { - genWithField(next2Bytes()); - _bcIndex += 3; - } - else - { - fej9()->unsupportedByteCode(comp(), opcode); - } - break; case J9BCbreakpoint: fej9()->unsupportedByteCode(comp(), opcode); case J9BCunknown: @@ -6296,6 +6271,12 @@ TR_J9ByteCodeIlGenerator::genNew(TR::ILOpCodes opCode) if (!node->getFirstChild()->getSymbolReference()->isUnresolved() && node->getFirstChild()->getSymbol()->isStatic()) { TR_OpaqueClassBlock *clazz = (TR_OpaqueClassBlock*)node->getFirstChild()->getSymbol()->castToStaticSymbol()->getStaticAddress(); + + if (TR::Compiler->cls.isValueTypeClass(clazz)) + { + node->setIdentityless(true); + } + int32_t len; char *sig; sig = TR::Compiler->cls.classSignature_DEPRECATED(comp(), clazz, len, comp()->trMemory()); @@ -6352,138 +6333,6 @@ TR_J9ByteCodeIlGenerator::genNew(TR::ILOpCodes opCode) genFlush(0); } -void -TR_J9ByteCodeIlGenerator::genWithField(int32_t fieldCpIndex) - { - const int32_t bcIndex = currentByteCodeIndex(); - int32_t classCpIndex = method()->classCPIndexOfFieldOrStatic(fieldCpIndex); - TR_OpaqueClassBlock *valueClass = method()->getClassFromConstantPool(comp(), classCpIndex, true); - if (!valueClass) - { - abortForUnresolvedValueTypeOp("withfield", "class"); - } - - TR_ResolvedJ9Method * owningMethod = static_cast(_methodSymbol->getResolvedMethod()); - - if (owningMethod->isFieldNullRestricted(comp(), fieldCpIndex, false /* isStatic */, true /* isStore */)) - { - if (owningMethod->isFieldFlattened(comp(), fieldCpIndex, false /* isStatic */)) - { - return comp()->getOption(TR_UseFlattenedFieldRuntimeHelpers) ? - genFlattenableWithFieldWithHelper(fieldCpIndex) : - genFlattenableWithField(fieldCpIndex, valueClass); - } - else - { - TR::Node *newFieldValue = pop(); - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "%s: fieldCpIndex %d isFieldFlattened 0 newFieldValue n%dn isNonNull %d\n", __FUNCTION__, fieldCpIndex, newFieldValue->getGlobalIndex(), newFieldValue->isNonNull()); - } - - if (!newFieldValue->isNonNull()) - { - TR::Node *passThruNode = TR::Node::create(TR::PassThrough, 1, newFieldValue); - genTreeTop(genNullCheck(passThruNode)); - } - - push(newFieldValue); - } - } - - bool isStore = false; - TR::SymbolReference * symRef = symRefTab()->findOrCreateShadowSymbol(_methodSymbol, fieldCpIndex, isStore); - if (symRef->isUnresolved()) - { - abortForUnresolvedValueTypeOp("withfield", "field"); - } - - genWithField(symRef, valueClass); - } - -void -TR_J9ByteCodeIlGenerator::genWithField(TR::SymbolReference * symRef, TR_OpaqueClassBlock * valueClass) - { - TR::Node *newFieldValue = pop(); - TR::Node *originalObject = pop(); - - if (symRef->getSymbol()->getType().isIntegral()) - { - newFieldValue = narrowIntStoreIfRequired(newFieldValue, symRef); - } - - /* - * Insert nullchk for the original object as requested by the JVM spec. - * Especially in case of value type class with a single field, the nullchk is still - * necessary even though the original object is actually not needed. - */ - TR::Node *passThruNode = TR::Node::create(TR::PassThrough, 1, originalObject); - genTreeTop(genNullCheck(passThruNode)); - - loadClassObject(valueClass); - const TR::TypeLayout *typeLayout = comp()->typeLayout(valueClass); - size_t fieldCount = typeLayout->count(); - - for (size_t idx = 0; idx < fieldCount; idx++) - { - const TR::TypeLayoutEntry &fieldEntry = typeLayout->entry(idx); - if (fieldEntry._offset == symRef->getOffset()) - push(newFieldValue); - else - { - auto* fieldSymRef = comp()->getSymRefTab()->findOrFabricateShadowSymbol(valueClass, - fieldEntry._datatype, - fieldEntry._offset, - fieldEntry._isVolatile, - fieldEntry._isPrivate, - fieldEntry._isFinal, - fieldEntry._fieldname, - fieldEntry._typeSignature - ); - push(originalObject); - loadInstance(fieldSymRef); - } - } - - TR::Node *newValueNode = genNodeAndPopChildren(TR::newvalue, fieldCount+1, symRefTab()->findOrCreateNewValueSymbolRef(_methodSymbol)); - newValueNode->setIdentityless(true); - _methodSymbol->setHasNews(true); - - genTreeTop(newValueNode); - push(newValueNode); - genFlush(0); - } - -void -TR_J9ByteCodeIlGenerator::genFlattenableWithFieldWithHelper(int32_t fieldCpIndex) - { - bool isStore = false; - TR::SymbolReference * symRef = symRefTab()->findOrCreateShadowSymbol(_methodSymbol, fieldCpIndex, isStore); - if (symRef->isUnresolved()) - { - abortForUnresolvedValueTypeOp("withfield", "field"); - } - - TR::Node *newFieldValue = pop(); - TR::Node *originalObject = pop(); - - /* - * Insert nullchk for the original object as requested by the JVM spec. - * Especially in case of value type class with a single field, the nullchk is still - * necessary even though the original object is actually not needed. - */ - TR::Node *passThruNode = TR::Node::create(TR::PassThrough, 1, originalObject); - genTreeTop(genNullCheck(passThruNode)); - - auto* j9ResolvedMethod = static_cast(_methodSymbol->getResolvedMethod()); - auto* ramFieldRef = reinterpret_cast(j9ResolvedMethod->cp()) + fieldCpIndex; - auto* ramFieldRefNode = TR::Node::aconst(reinterpret_cast(ramFieldRef)); - auto* helperCallNode = TR::Node::createWithSymRef(TR::acall, 3, 3, newFieldValue, originalObject, ramFieldRefNode, comp()->getSymRefTab()->findOrCreateWithFlattenableFieldSymbolRef()); - handleSideEffect(helperCallNode); - genTreeTop(helperCallNode); - push(helperCallNode); - } - static TR::SymbolReference * createLoadFieldSymRef(TR::Compilation * comp, TR_OpaqueClassBlock * fieldClass, const char * fieldname, bool nullIfNotFound) { const TR::TypeLayout *fieldClassLayout = comp->typeLayout(fieldClass); @@ -6512,294 +6361,6 @@ static TR::SymbolReference * createLoadFieldSymRef(TR::Compilation * comp, TR_Op return NULL; } -void -TR_J9ByteCodeIlGenerator::genFlattenableWithField(int32_t fieldCpIndex, TR_OpaqueClassBlock * valueClass) - { - /* An example on what the tree with flattened fields would look like - * - * value Point2D { - * public final int x; - * public final int y; - * } - * - * value FlattenedLine2D { - * public final Point2D st; - * public final Point2D en; - * - * public static FlattenedLine2D withSt(FlattenedLine2D line, Point2D st) { - * 0: aload_1 - * 1: aload_0 - * 3: withfield #3 // Field st:QPoint2D; - * 6: astore_2 - * 7: aload_2 - * 8: areturn - * } - * } - * - * method="FlattenedLine2D.withSt(QFlattenedLine2D;QPoint2D;)QFlattenedLine2D;" - * 3: JBwithfield - * /--- trees inserted ------------------------ - * n7n ( 0) NULLCHK on n3n [#32] - * n6n ( 2) iloadi Point2D.x I[#355 final Point2D.x I +4] - * n3n ( 2) aload [#353 Parm] - * n9n ( 0) NULLCHK on n3n [#32] - * n8n ( 2) iloadi Point2D.y I[#356 final Point2D.y I +8] - * n3n ( 2) ==>aload - * n11n ( 0) NULLCHK on n4n [#32] - * n10n ( 2) iloadi FlattenedLine2D.en.x I[#357 final FlattenedLine2D.en.x I +12] - * n4n ( 2) aload [#352 Parm] - * n13n ( 0) NULLCHK on n4n [#32] - * n12n ( 2) iloadi FlattenedLine2D.en.y I[#358 final FlattenedLine2D.en.y I +16] - * n4n ( 2) ==>aload - * n15n ( 0) treetop - * n14n ( 1) newvalue jitNewValue[#100 helper Method] - * n5n ( 1) loadaddr FlattenedLine2D[#354 Static] - * n6n ( 2) ==>iloadi - * n8n ( 2) ==>iloadi - * n10n ( 2) ==>iloadi - * n12n ( 2) ==>iloadi - * /--- stack after ------------------------ - * @0 n14n ( 1) ==>newvalue (Identityless sharedMemory ) - * ============================================================ - */ - TR_ResolvedJ9Method * owningMethod = static_cast(_methodSymbol->getResolvedMethod()); - - if (isFieldResolved(comp(), owningMethod, fieldCpIndex, false)) - { - TR::Node *newFieldValue = pop(); - TR::Node *originalObject = pop(); - - int32_t prefixLen = 0; - char * fieldNamePrefix = getTopLevelPrefixForFlattenedFields(owningMethod, fieldCpIndex, prefixLen, comp()->trMemory()->currentStackRegion()); - - int len; - const char * fieldClassChars = owningMethod->fieldSignatureChars(fieldCpIndex, len); - TR_OpaqueClassBlock * fieldClass = fej9()->getClassFromSignature(fieldClassChars, len, owningMethod); - - loadClassObject(valueClass); - - const TR::TypeLayout *typeLayout = comp()->typeLayout(valueClass); - size_t fieldCount = typeLayout->count(); - - TR_OpaqueClassBlock * containingClass = owningMethod->definingClassFromCPFieldRef(comp(), fieldCpIndex, _methodSymbol->isStatic()); - - for (size_t idx = 0; idx < fieldCount; idx++) - { - const TR::TypeLayoutEntry &fieldEntry = typeLayout->entry(idx); - if (!strncmp(fieldNamePrefix, fieldEntry._fieldname, prefixLen)) - { - const char * fieldNameRemovedTopLevelPrefix = fieldEntry._fieldname + prefixLen; - auto * newFieldValueSymRef = createLoadFieldSymRef(comp(), fieldClass, fieldNameRemovedTopLevelPrefix); - - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "Withfield flattened field %s\n - field[%d] name %s type %d offset %d\n", - comp()->getDebug()->getName(newFieldValueSymRef), idx, fieldEntry._fieldname, - fieldEntry._datatype.getDataType(), fieldEntry._offset); - } - - push(newFieldValue); - loadInstance(newFieldValueSymRef); - } - else - { - auto * fieldSymRef = comp()->getSymRefTab()->findOrFabricateShadowSymbol(valueClass, - fieldEntry._datatype, - fieldEntry._offset, - fieldEntry._isVolatile, - fieldEntry._isPrivate, - fieldEntry._isFinal, - fieldEntry._fieldname, - fieldEntry._typeSignature - ); - push(originalObject); - loadInstance(fieldSymRef); - } - } - - TR::Node *newValueNode = genNodeAndPopChildren(TR::newvalue, fieldCount+1, symRefTab()->findOrCreateNewValueSymbolRef(_methodSymbol)); - newValueNode->setIdentityless(true); - _methodSymbol->setHasNews(true); - - genTreeTop(newValueNode); - push(newValueNode); - genFlush(0); - return; - } - else - { - abortForUnresolvedValueTypeOp("withfield", "field"); - } - } - -void -TR_J9ByteCodeIlGenerator::genAconst_init(int32_t cpIndex) - { - TR_OpaqueClassBlock *valueTypeClass = method()->getClassFromConstantPool(comp(), cpIndex, true /* returnClassForAot */); - - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "%s: cpIndex %d valueTypeClass %p\n", __FUNCTION__, cpIndex, valueTypeClass); - } - genAconst_init(valueTypeClass, cpIndex); - } - -void -TR_J9ByteCodeIlGenerator::genAconst_init(TR_OpaqueClassBlock *valueTypeClass, int32_t cpIndex) - { - // valueTypeClass will be NULL if it is unresolved. Abort the compilation and - // track the failure with a static debug counter - if (valueTypeClass == NULL) - { - abortForUnresolvedValueTypeOp("aconst_init", "class"); - } - - TR::SymbolReference *valueClassSymRef = symRefTab()->findOrCreateClassSymbol(_methodSymbol, cpIndex, valueTypeClass); - - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "Handling aconst_init for valueClass %s\n", comp()->getDebug()->getName(valueClassSymRef)); - } - - TR::Node *newValueNode = NULL; - static const char *disableLoadStaticDefaultValueInstance = feGetEnv("TR_DisableLoadStaticDefaultValueInstance"); - - if (valueClassSymRef->isUnresolved()) - { - // IL generation for aconst_init is currently only able to handle value type classes that have been resolved. - // If the class is still unresolved, abort the compilation and track the failure with a static debug counter. - abortForUnresolvedValueTypeOp("aconst_init", "class"); - } - else if (!disableLoadStaticDefaultValueInstance && - comp()->fej9()->isClassInitialized(valueTypeClass)) - { - /* - * n4n treetop - * n3n aload 0x1d3298[#358 Static] [flags 0x307 0x40 ] - */ - j9object_t *defaultValueSlotAddress = TR::Compiler->cls.getDefaultValueSlotAddress(comp(), valueTypeClass); - - newValueNode = TR::Node::createWithSymRef(TR::aload, 0, comp()->getSymRefTab()->findOrCreateDefaultValueSymbolRef((void *)defaultValueSlotAddress, cpIndex)); - - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "Handling aconst_init for valueClass %s: use pre-allocated defaultValue instance at %p\n", comp()->getDebug()->getName(valueClassSymRef), defaultValueSlotAddress); - } - } - else - { - loadSymbol(TR::loadaddr, valueClassSymRef); - - const TR::TypeLayout *typeLayout = comp()->typeLayout(valueTypeClass); - size_t fieldCount = typeLayout->count(); - - for (size_t idx = 0; idx < fieldCount; idx++) - { - const TR::TypeLayoutEntry &entry = typeLayout->entry(idx); - - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "Handling aconst_init for valueClass %s valueClassSymRef #%d CPIndex %d\n - field[%d] name %s type %d offset %d\n", - comp()->getDebug()->getName(valueClassSymRef), valueClassSymRef->getReferenceNumber(), valueClassSymRef->getCPIndex(), - idx, entry._fieldname, entry._datatype.getDataType(), entry._offset); - } - - // Supply default value that is appropriate for the type of the corresponding field - // All these are gathered up as operands of a newvalue instruction. - // - // For example, if a value type class "Val" has fields of type int, long, double, LIdent; - // and Qval2;, where value type class "Val2" has a field of type boolean, the following - // IL will be generated: - // - // newvalue jitNewValue // Default value of type Val - // loadaddr Val - // iconst 0 // int default value - // lconst 0 // long default value - // dconst 0.0 // double default value - // aconst 0 // default value (null reference) for class Ident - // newvalue jitNewValue // Default value of type Val2 - // loadaddr Val2 - // iconst 0 // boolean default value - // - switch (entry._datatype.getDataType()) - { - case TR::Int8: - case TR::Int16: - case TR::Int32: - { - loadConstant(TR::iconst, 0); - break; - } - case TR::Int64: - { - loadConstant(TR::lconst, (int64_t) 0ll); - break; - } - case TR::Float: - { - loadConstant(TR::fconst, 0.0f); - break; - } - case TR::Double: - { - loadConstant(TR::dconst, 0.0); - break; - } - case TR::Address: - { - const char *fieldSignature = entry._typeSignature; - if (TR::Compiler->om.areFlattenableValueTypesEnabled()) - { - if (entry._isNullRestricted) - { - // In non-SVM AOT compilation, cpIndex is required for AOT relocation. - // In this case, cpindex is unknown for the field. - if (comp()->compileRelocatableCode() && !comp()->getOption(TR_UseSymbolValidationManager)) - { - abortForUnresolvedValueTypeOp("aconst_init", "field"); - } - - TR_OpaqueClassBlock *fieldClass = fej9()->getClassFromSignature(fieldSignature, (int32_t)strlen(fieldSignature), - comp()->getCurrentMethod()); - if (comp()->getOption(TR_TraceILGen)) - { - traceMsg(comp(), "isNullRestricted 1 fieldSignature %s fieldClass %p\n", fieldSignature, fieldClass); - } - - // Set cpIndex as -1 since it's unknown for the field class - genAconst_init(fieldClass, -1 /* cpIndex */); - } - } - - if (!entry._isNullRestricted) - { - if (comp()->target().is64Bit()) - { - loadConstant(TR::aconst, (int64_t)0); - } - else - { - loadConstant(TR::aconst, (int32_t)0); - } - } - break; - } - default: - { - TR_ASSERT_FATAL(false, "Unexpected type for aconst_init field\n"); - } - } - } - - newValueNode = genNodeAndPopChildren(TR::newvalue, fieldCount+1, symRefTab()->findOrCreateNewValueSymbolRef(_methodSymbol)); - newValueNode->setIdentityless(true); - _methodSymbol->setHasNews(true); - } - - genTreeTop(newValueNode); - push(newValueNode); - genFlush(0); - } /** * Check the call chain for the following pattern: StringBuilder.toString() -> String(StringBuilder) @@ -7185,7 +6746,7 @@ TR_J9ByteCodeIlGenerator::narrowIntStoreIfRequired(TR::Node *value, TR::SymbolRe { TR::DataType type = symRef->getSymbol()->getDataType(); - // Per the JVM spec, putstatic/putfield/withfield opcodes must adhere to field type compatibility. + // Per the JVM spec, putstatic/putfield opcodes must adhere to field type compatibility. // Integer values on the stack must be narrowed when stored into smaller types like bool, byte, // char, and short fields. For byte and short fields, narrowing involves conversion from integer // to byte/short, then back to integer. For bool and char types, which are unsigned, narrowing diff --git a/runtime/compiler/optimizer/EscapeAnalysis.cpp b/runtime/compiler/optimizer/EscapeAnalysis.cpp index 335fdfdd355..5743049b49a 100644 --- a/runtime/compiler/optimizer/EscapeAnalysis.cpp +++ b/runtime/compiler/optimizer/EscapeAnalysis.cpp @@ -191,7 +191,15 @@ bool TR_EscapeAnalysis::isImmutableObject(TR::Node *node) return false; } - char *className = getClassName(node->getFirstChild()); + TR::Node *classNode = node->getFirstChild(); + + TR_OpaqueClassBlock *clazz = (TR_OpaqueClassBlock *)classNode->getSymbol()->getStaticSymbol()->getStaticAddress(); + if (TR::Compiler->cls.isValueTypeClass(clazz)) + { + return true; + } + + char *className = getClassName(classNode); if (NULL != className && !strncmp("java/lang/", className, 10) && diff --git a/runtime/jcl/common/java_lang_Class.cpp b/runtime/jcl/common/java_lang_Class.cpp index e8a98e760e1..0924b6aff08 100644 --- a/runtime/jcl/common/java_lang_Class.cpp +++ b/runtime/jcl/common/java_lang_Class.cpp @@ -403,11 +403,11 @@ Java_java_lang_Class_getGenericSignature(JNIEnv *env, jobject recv) } /** - * Determines if a method is a normal method (not , , or ). + * Determines if a method is a normal method (not or ). * * @param romMethod[in] the ROM method * - * @returns true if the method is , or , false if not + * @returns true if the method is or , false if not */ static VMINLINE bool isSpecialMethod(J9ROMMethod *romMethod) @@ -434,7 +434,7 @@ isConstructor(J9ROMMethod *romMethod) * * @param romMethod[in] the ROM method * - * @returns true if this is public, static and not or , false if not + * @returns true if this is public, static and not , false if not */ static VMINLINE bool isNormalStaticMethod(J9ROMMethod *romMethod) diff --git a/runtime/oti/bcnames.h b/runtime/oti/bcnames.h index 2666d516125..9d0d24a8a3a 100644 --- a/runtime/oti/bcnames.h +++ b/runtime/oti/bcnames.h @@ -237,8 +237,6 @@ extern J9_CDATA char * const sunJavaBCNames[]; #define JBifnonnull 199 #define JBgotow 200 #define JBbreakpoint 202 -#define JBaconst_init 203 -#define JBwithfield 204 #define JBiincw 213 #define JBaload0getfield 215 #define JBnewdup 216 diff --git a/runtime/oti/cfr.h b/runtime/oti/cfr.h index edb4150874c..dbd09052117 100644 --- a/runtime/oti/cfr.h +++ b/runtime/oti/cfr.h @@ -930,7 +930,6 @@ typedef struct J9CfrClassFile { #define CFR_ABSTRACT_METHOD_ACCESS_MASK (CFR_ACC_PUBLIC | CFR_ACC_PROTECTED | CFR_ACC_BRIDGE | CFR_ACC_VARARGS | CFR_ACC_ABSTRACT | CFR_ACC_SYNTHETIC) #define CFR_INTERFACE_METHOD_ACCESS_MASK (CFR_ACC_PUBLIC | CFR_ACC_BRIDGE | CFR_ACC_VARARGS | CFR_ACC_ABSTRACT | CFR_ACC_SYNTHETIC) #define CFR_INTERFACE_METHOD_ACCESS_REQUIRED (CFR_ACC_PUBLIC | CFR_ACC_ABSTRACT) -#define CFR_VNEW_METHOD_ACCESS_MASK (CFR_ACC_PUBLIC | CFR_ACC_PRIVATE | CFR_ACC_STATIC | CFR_ACC_SYNTHETIC | CFR_ACC_VARARGS | CFR_ACC_STRICT) #define CFR_INIT_METHOD_ACCESS_MASK (CFR_ACC_PUBLIC | CFR_ACC_PRIVATE | CFR_ACC_PROTECTED | CFR_ACC_SYNTHETIC | CFR_ACC_VARARGS | CFR_ACC_STRICT) #define CFR_CLINIT_METHOD_ACCESS_MASK (CFR_ACC_STRICT | CFR_ACC_STATIC) #define CFR_CLASS_ACCESS_NEWJDK5_MASK (CFR_ACC_SYNTHETIC | CFR_ACC_ANNOTATION | CFR_ACC_ENUM) /* Defines access flags not available prior to JDK 5.0 */ diff --git a/runtime/stackmap/stackmap.c b/runtime/stackmap/stackmap.c index 7ba9f45cab0..d09193675ca 100644 --- a/runtime/stackmap/stackmap.c +++ b/runtime/stackmap/stackmap.c @@ -424,7 +424,6 @@ mapStack(UDATA *scratch, UDATA totalStack, U_8 * map, J9ROMClass * romClass, J9R break; - case JBwithfield: case JBputfield: POP(); /* fall through case !!! */ @@ -435,9 +434,6 @@ mapStack(UDATA *scratch, UDATA totalStack, U_8 * map, J9ROMClass * romClass, J9R ((J9ROMFieldRef *) (&(pool[index])))); signature = (U_8) J9UTF8_DATA(utf8Signature)[0]; stackTop -= (UDATA) argCountCharConversion[signature - 'A']; - if (JBwithfield == bc) { - PUSH(OBJ); - } break; diff --git a/runtime/util/bcnames.c b/runtime/util/bcnames.c index cf8409e6a51..4c2356aaf03 100644 --- a/runtime/util/bcnames.c +++ b/runtime/util/bcnames.c @@ -227,8 +227,8 @@ const char * const JavaBCNames[] = { "JBgotow" /* 200 */, "JBunimplemented" /* 201 */, "JBbreakpoint" /* 202 */, -"JBaconst_init" /* 203 */, -"JBwithfield" /* 204 */, +"JBunimplemented" /* 203 */, +"JBunimplemented" /* 204 */, "JBunimplemented" /* 205 */, "JBunimplemented" /* 206 */, "JBunimplemented" /* 207 */, diff --git a/runtime/util/jbcmap.c b/runtime/util/jbcmap.c index 228b8c5493d..85b5fc12c35 100644 --- a/runtime/util/jbcmap.c +++ b/runtime/util/jbcmap.c @@ -225,8 +225,8 @@ const unsigned char sunJavaInstructionSizeTable[] = { 0x05 /* JBgotow = 200 = 0xC8 */, 0x05 /* JBjsrw = 201 = 0xC9 */, 0x01 /* JBbreakpoint = 202 = 0xCA */, -0x03 /* JBaconst_init = 203 = 0xCB */ , -0x03 /* JBwithfield = 204 = 0xCC */ , +0x00 /* JBunimplemented = 203 = 0xCB */ , +0x00 /* JBunimplemented = 204 = 0xCC */ , 0x00 /* JBunimplemented = 205 = 0xCD */, 0x00 /* JBunimplemented = 206 = 0xCE */, 0x00 /* JBunimplemented = 207 = 0xCF */, diff --git a/runtime/util/pcstack.c b/runtime/util/pcstack.c index ca297479be9..d71816a1b96 100644 --- a/runtime/util/pcstack.c +++ b/runtime/util/pcstack.c @@ -226,8 +226,8 @@ const unsigned char J9JavaInstructionSizeAndBranchActionTable[] = { 0x25 /* JBgotow = 200 */, 0x00 /* JBunimplemented = 201 */, 0x71 /* JBbreakpoint = 202 */, -0x03 /* JBaconst_init = 203 */, -0x03 /* JBwithfield = 204 */, +0x00 /* JBunimplemented = 203 */, +0x00 /* JBunimplemented = 204 */, 0x00 /* JBunimplemented = 205 */, 0x00 /* JBunimplemented = 206 */, 0x00 /* JBunimplemented = 207 */, @@ -491,8 +491,8 @@ const unsigned char JavaStackActionTable[] = { 0x00 /* JBgotow = 200 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 201 -- pops: 0 pushes: 0*/ , 0x00 /* JBbreakpoint = 202 -- pops: 0 pushes: 0*/ , -0x50 /* JBaconst_init = 203 -- pops: 0 pushes: 1*/ , -0x80 /* JBwithfield = 204 -- pops: 2 pushes: 1*/ , +0x00 /* JBunimplemented = 203 -- pops: 0 pushes: 0*/ , +0x00 /* JBunimplemented = 204 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 205 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 206 -- pops: 0 pushes: 0*/ , 0x00 /* JBunimplemented = 207 -- pops: 0 pushes: 0*/ , @@ -759,8 +759,8 @@ const unsigned char J9BytecodeSlotUseTable[] = { 0x0 /* JBgotow (16rC8) */, 0x0 /* JBunimplemented (16rC9) */, 0x0 /* JBbreakpoint (16rCA) */, - 0x0 /* JBaconst_init (16rCB) */, - 0x0 /* JBwithfield (16rCC) */, + 0x0 /* JBunimplemented (16rCB) */, + 0x0 /* JBunimplemented (16rCC) */, 0x0 /* JBunimplemented (16rCD) */, 0x0 /* JBunimplemented (16rCE) */, 0x0 /* JBunimplemented (16rCF) */, diff --git a/runtime/util/rcdump.c b/runtime/util/rcdump.c index de9b3c6855c..50bc163af50 100644 --- a/runtime/util/rcdump.c +++ b/runtime/util/rcdump.c @@ -957,7 +957,7 @@ I_32 j9bcutil_dumpRomMethod( J9ROMMethod *romMethod, J9ROMClass *romClass, J9Por printModifiers(PORTLIB, (U_32)romMethod->modifiers, INCLUDE_INTERNAL_MODIFIERS, MODIFIERSOURCE_METHOD, FALSE); #if defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES) if (J9_ARE_ALL_BITS_SET(romClass->optionalFlags, J9_ROMCLASS_OPTINFO_IMPLICITCREATION_ATTRIBUTE)) { - if (J9UTF8_LITERAL_EQUALS(J9UTF8_DATA(J9ROMMETHOD_NAME(romMethod)), J9UTF8_LENGTH(J9ROMMETHOD_NAME(romMethod)), "")) { + if (J9UTF8_LITERAL_EQUALS(J9UTF8_DATA(J9ROMMETHOD_NAME(romMethod)), J9UTF8_LENGTH(J9ROMMETHOD_NAME(romMethod)), "")) { j9tty_printf(PORTLIB, " implicit"); } } diff --git a/runtime/util/sunbcrel.c b/runtime/util/sunbcrel.c index 45eaad13893..e82b33a4493 100644 --- a/runtime/util/sunbcrel.c +++ b/runtime/util/sunbcrel.c @@ -225,8 +225,8 @@ const unsigned char sunJavaByteCodeRelocation[] = { 0x0D /* JBgotow = 200 */ , 0x0D /* JBjsrw = 201 */ , 0x01 /* JBbreakpoint = 202 */ , -0x0B /* JBaconst_init = 203 */ , -0x0B /* JBwithfield = 204 */ , +0x01 /* JBunimplemented = 203 */ , +0x01 /* JBunimplemented = 204 */ , 0x01 /* JBunimplemented = 205 */ , 0x01 /* JBunimplemented = 206 */ , 0x01 /* JBunimplemented = 207 */ , diff --git a/runtime/util/vrfytbl.c b/runtime/util/vrfytbl.c index e30b10f1cca..4f3e8a254f2 100644 --- a/runtime/util/vrfytbl.c +++ b/runtime/util/vrfytbl.c @@ -226,8 +226,8 @@ const U_16 J9JavaBytecodeVerificationTable[] = { 0x0E85 /* JBgotow - 200 */, 0x1700 /* JBunimplemented - 201 */, 0x1700 /* JBbreakpoint - 202 */, - 0x1200 /* JBaconst_init = 203 */, - 0x1000 /* JBwithfield = 204 */, + 0x1700 /* JBunimplemented = 203 */, + 0x1700 /* JBunimplemented = 204 */, 0x1700 /* JBunimplemented - 205 */, 0x1700 /* JBunimplemented - 206 */, 0x1700 /* JBunimplemented - 207 */, diff --git a/runtime/vm/CRIUHelpers.cpp b/runtime/vm/CRIUHelpers.cpp index 97d6da98ee6..aa1de62e09e 100644 --- a/runtime/vm/CRIUHelpers.cpp +++ b/runtime/vm/CRIUHelpers.cpp @@ -1183,7 +1183,7 @@ notCheckpointSafeOrClinitFrameWalkFunction(J9VMThread *vmThread, J9StackWalkStat J9ROMMethod *romMethod = J9_ROM_METHOD_FROM_RAM_METHOD(method); J9ClassLoader *methodLoader = J9_CLASS_FROM_METHOD(method)->classLoader; J9UTF8 *romMethodName = J9ROMMETHOD_NAME(romMethod); - /* only method names that start with '<' are , and */ + /* only method names that start with '<' are and */ if (0 == strncmp((char*)J9UTF8_DATA(romMethodName), "userData1 = J9VM_DELAYCHECKPOINT_CLINIT; goto fail;