public SubstrateAMD64AddressLowering(CompressEncoding encoding, SubstrateRegisterConfig registerConfig) { heapBase = encoding.getBase(); heapBaseRegister = registerConfig.getHeapBaseRegister(); }
@Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { assert SubstrateOptions.MultiThreaded.getValue(); SubstrateRegisterConfig threadRegister = (SubstrateRegisterConfig) crb.codeCache.getRegisterConfig(); masm.decrementl(new AMD64Address(threadRegister.getThreadRegister(), Math.toIntExact(Safepoint.getThreadLocalSafepointRequestedOffset())), 1); } }
@Override public void generate(NodeLIRBuilderTool gen) { LIRGeneratorTool tool = gen.getLIRGeneratorTool(); SubstrateRegisterConfig registerConfig = (SubstrateRegisterConfig) tool.getRegisterConfig(); gen.getLIRGeneratorTool().emitMove(registerConfig.getThreadRegister().asValue(tool.getLIRKind(FrameAccess.getWordStamp())), gen.operand(value)); }
private Register getHeapBaseRegister() { return getRegisterConfig().getHeapBaseRegister(); }
protected AMD64LIRInstruction loadObjectConstant(AllocatableValue dst, SubstrateObjectConstant constant) { if (ReferenceAccess.singleton().haveCompressedReferences()) { RegisterValue heapBase = registerConfig.getHeapBaseRegister().asValue(); return new LoadCompressedObjectConstantOp(dst, constant, heapBase, getCompressEncoding(), lirKindTool); } return new MoveFromConstOp(dst, constant); }
@Override public void generate(NodeLIRBuilderTool gen) { LIRGeneratorTool tool = gen.getLIRGeneratorTool(); tool.emitMove(((SubstrateRegisterConfig) tool.getResult().getRegisterConfig()).getHeapBaseRegister().asValue(tool.getLIRKind(FrameAccess.getWordStamp())), gen.operand(value)); }