private void encodeRun(int gap, int refsCount, boolean compressed) { assert gap >= 0 && refsCount >= 0; writeBuffer.putUV(gap); writeBuffer.putSV(compressed ? -refsCount : refsCount); }
protected void writeObjectId(Object object) { writer.putUV(objects.getIndex(object)); }
protected void writeOrderId(Node node, NodeOrder nodeOrder) { writer.putUV(node == null ? NULL_ORDER_ID : nodeOrder.orderIds.get(node)); }
private void encodeValues(ValueInfo[] valueInfos, UnsafeArrayTypeWriter encodingBuffer) { encodingBuffer.putUV(valueInfos.length); for (ValueInfo valueInfo : valueInfos) { if (valueInfo.type == ValueType.Constant) { if (valueInfo.kind == JavaKind.Object) { valueInfo.data = objectConstants.getIndex(valueInfo.value); } else { valueInfo.data = encodePrimitiveConstant(valueInfo.value); } } encodingBuffer.putU1(encodeFlags(valueInfo.type, valueInfo.kind, valueInfo.isCompressedReference)); if (valueInfo.type.hasData) { encodingBuffer.putSV(valueInfo.data); } } }
encodingBuffer.putUV(cur.numLocks); encodingBuffer.putUV(cur.numLocals); encodingBuffer.putUV(cur.numStack); encodingBuffer.putUV(cur.virtualObjects.length); for (ValueInfo[] virtualObject : cur.virtualObjects) { encodeValues(virtualObject, encodingBuffer); for (ValueInfo valueInfo : cur.valueInfos) { valueInfo.nameIndex = names.getIndex(valueInfo.name); encodingBuffer.putUV(valueInfo.nameIndex);
private long encodeSourcePositions(NodeSourcePosition sourcePosition, EconomicMap<NodeSourcePosition, Long> sourcePositionStartOffsets, UnsafeArrayTypeWriter encodingBuffer) { Long existingAbsoluteOffset = sourcePositionStartOffsets.get(sourcePosition); if (existingAbsoluteOffset != null) { return existingAbsoluteOffset; } long callerAbsoluteOffset = -1; if (sourcePosition.getCaller() != null) { callerAbsoluteOffset = encodeSourcePositions(sourcePosition.getCaller(), sourcePositionStartOffsets, encodingBuffer); } long startAbsoluteOffset = encodingBuffer.getBytesWritten(); long callerRelativeOffset = DeoptimizationSourcePositionDecoder.NO_CALLER; if (sourcePosition.getCaller() != null) { callerRelativeOffset = startAbsoluteOffset - callerAbsoluteOffset; assert callerRelativeOffset > DeoptimizationSourcePositionDecoder.NO_CALLER; } encodingBuffer.putUV(callerRelativeOffset); encodingBuffer.putSV(sourcePosition.getBCI()); encodingBuffer.putUV(objectConstants.getIndex(sourcePosition.getMethod())); sourcePositionStartOffsets.put(sourcePosition, startAbsoluteOffset); return startAbsoluteOffset; }
@Platforms(Platform.HOSTED_ONLY.class) public static byte[] encode(LineNumberTable table) { if (table == null) { return null; } int[] lineNumbers = table.getLineNumbers(); int[] bcis = table.getBcis(); assert lineNumbers.length == bcis.length; UnsafeArrayTypeWriter encodingBuffer = UnsafeArrayTypeWriter.create(ByteArrayReader.supportsUnalignedMemoryAccess()); int lastLineNumber = 0; int lastBci = 0; encodingBuffer.putUV(lineNumbers.length); for (int i = 0; i < lineNumbers.length; i++) { encodingBuffer.putSV(lineNumbers[i] - lastLineNumber); encodingBuffer.putSV(bcis[i] - lastBci); lastLineNumber = lineNumbers[i]; lastBci = bcis[i]; } byte[] encodedTable = encodingBuffer.toArray(new byte[TypeConversion.asS4(encodingBuffer.getBytesWritten())]); assert verifyTable(table, decode(encodedTable)); return encodedTable; }
writer.putUV(nodeClasses.getIndex(nodeClass)); writeEdges(node, nodeClass.getEdges(Edges.Type.Inputs), nodeOrder); writeProperties(node, nodeClass.getData()); writer.putUV(merge.phis().count()); for (PhiNode phi : merge.phis()) { writeOrderId(phi.valueAt(end), nodeOrder); writeOrderId(exit.stateAfter(), nodeOrder); writer.putUV(exit.proxies().count()); for (ProxyNode proxy : exit.proxies()) { writeOrderId(proxy, nodeOrder); writer.putUV(nodeOrder.maxFixedNodeOrderId); writer.putUV(nodeCount); for (int i = 0; i < nodeCount; i++) { writer.putUV(metadataStart - nodeStartOffsets[i]);