< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLIRGenerator.java

Print this page

        

*** 26,35 **** --- 26,39 ---- import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC; import static org.graalvm.compiler.hotspot.HotSpotBackend.INITIALIZE_KLASS_BY_SYMBOL; import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_KLASS_BY_SYMBOL; import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS; import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_STRING_BY_SYMBOL; + import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_DYNAMIC_INVOKE; + import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.RESOLVE; + import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.INITIALIZE; + import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.LOAD_COUNTERS; import java.util.ArrayList; import java.util.List; import org.graalvm.compiler.asm.amd64.AMD64Address.Scale;
*** 37,46 **** --- 41,51 ---- import org.graalvm.compiler.core.amd64.AMD64LIRGenerator; import org.graalvm.compiler.core.amd64.AMD64LIRKindTool; import org.graalvm.compiler.core.amd64.AMD64MoveFactoryBase.BackupSlotProvider; import org.graalvm.compiler.core.common.CompressEncoding; import org.graalvm.compiler.core.common.LIRKind; + import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor; import org.graalvm.compiler.core.common.spi.ForeignCallLinkage; import org.graalvm.compiler.core.common.spi.LIRKindTool; import org.graalvm.compiler.debug.DebugContext; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
*** 413,465 **** Variable result = newVariable(kind); append(new AMD64HotSpotLoadAddressOp(result, constant, action)); return result; } ! @Override ! public Value emitObjectConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { ! ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(RESOLVE_STRING_BY_SYMBOL); ! Constant[] constants = new Constant[]{constant}; ! AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(constantDescription)}; ! Object[] notes = new Object[]{HotSpotConstantLoadAction.RESOLVE}; append(new AMD64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes)); AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn(); return emitMove(result); } ! @Override ! public Value emitMetaspaceConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { ! ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(RESOLVE_KLASS_BY_SYMBOL); Constant[] constants = new Constant[]{constant}; AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(constantDescription)}; ! Object[] notes = new Object[]{HotSpotConstantLoadAction.RESOLVE}; ! append(new AMD64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes)); ! AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn(); ! return emitMove(result); } @Override ! public Value emitResolveMethodAndLoadCounters(Constant method, Value klassHint, Value methodDescription, LIRFrameState frameState) { ! ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS); ! Constant[] constants = new Constant[]{method}; ! AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(klassHint), asAllocatable(methodDescription)}; ! Object[] notes = new Object[]{HotSpotConstantLoadAction.LOAD_COUNTERS}; ! append(new AMD64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes)); ! AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn(); ! return emitMove(result); } @Override public Value emitKlassInitializationAndRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { ! ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(INITIALIZE_KLASS_BY_SYMBOL); ! Constant[] constants = new Constant[]{constant}; ! AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(constantDescription)}; ! Object[] notes = new Object[]{HotSpotConstantLoadAction.INITIALIZE}; ! append(new AMD64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes)); ! AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn(); ! return emitMove(result); } @Override public Value emitLoadConfigValue(int markId, LIRKind kind) { Variable result = newVariable(kind); --- 418,470 ---- Variable result = newVariable(kind); append(new AMD64HotSpotLoadAddressOp(result, constant, action)); return result; } ! private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, Object[] notes, Constant[] constants, AllocatableValue[] constantDescriptions, LIRFrameState frameState) { ! ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(foreignCall); append(new AMD64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes)); AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn(); return emitMove(result); } ! private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, HotSpotConstantLoadAction action, Constant constant, AllocatableValue[] constantDescriptions, LIRFrameState frameState) { Constant[] constants = new Constant[]{constant}; + Object[] notes = new Object[]{action}; + return emitConstantRetrieval(foreignCall, notes, constants, constantDescriptions, frameState); + } + + private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, HotSpotConstantLoadAction action, Constant constant, Value constantDescription, LIRFrameState frameState) { AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(constantDescription)}; ! return emitConstantRetrieval(foreignCall, action, constant, constantDescriptions, frameState); } @Override ! public Value emitObjectConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { ! return emitConstantRetrieval(RESOLVE_STRING_BY_SYMBOL, RESOLVE, constant, constantDescription, frameState); ! } + @Override + public Value emitMetaspaceConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { + return emitConstantRetrieval(RESOLVE_KLASS_BY_SYMBOL, RESOLVE, constant, constantDescription, frameState); } @Override public Value emitKlassInitializationAndRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) { ! return emitConstantRetrieval(INITIALIZE_KLASS_BY_SYMBOL, INITIALIZE, constant, constantDescription, frameState); ! } ! ! @Override ! public Value emitResolveMethodAndLoadCounters(Constant method, Value klassHint, Value methodDescription, LIRFrameState frameState) { ! AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(klassHint), asAllocatable(methodDescription)}; ! return emitConstantRetrieval(RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS, LOAD_COUNTERS, method, constantDescriptions, frameState); ! } ! ! @Override ! public Value emitResolveDynamicInvoke(Constant appendix, LIRFrameState frameState) { ! AllocatableValue[] constantDescriptions = new AllocatableValue[0]; ! return emitConstantRetrieval(RESOLVE_DYNAMIC_INVOKE, INITIALIZE, appendix, constantDescriptions, frameState); } @Override public Value emitLoadConfigValue(int markId, LIRKind kind) { Variable result = newVariable(kind);
< prev index next >