コード例 #1
0
 public void lower(ArrayCopyUnrollNode arraycopy, LoweringTool tool) {
   StructuredGraph graph = arraycopy.graph();
   if (!graph.getGuardsStage().areFrameStatesAtDeopts()) {
     // Can't be lowered yet
     return;
   }
   SnippetInfo snippetInfo = arraycopyUnrolledWorkSnippet;
   Arguments args = new Arguments(snippetInfo, graph.getGuardsStage(), tool.getLoweringStage());
   args.add("nonNullSrc", arraycopy.getSource());
   args.add("srcPos", arraycopy.getSourcePosition());
   args.add("nonNullDest", arraycopy.getDestination());
   args.add("destPos", arraycopy.getDestinationPosition());
   args.addConst("length", arraycopy.getUnrollLength());
   args.addConst("elementKind", arraycopy.getElementKind());
   template(args)
       .instantiate(
           providers.getMetaAccess(), arraycopy, SnippetTemplate.DEFAULT_REPLACER, args);
 }
コード例 #2
0
 /** Snippet for unrolled arraycopy. */
 @Snippet
 public static void arraycopyUnrolledIntrinsic(
     Object src,
     int srcPos,
     Object dest,
     int destPos,
     int length,
     @ConstantParameter int unrolledLength,
     @ConstantParameter JavaKind elementKind) {
   Object nonNullSrc = GraalDirectives.guardingNonNull(src);
   Object nonNullDest = GraalDirectives.guardingNonNull(dest);
   checkLimits(nonNullSrc, srcPos, nonNullDest, destPos, length);
   if (length == 0) {
     zeroLengthDynamicCounter.inc();
   } else {
     nonZeroLengthDynamicCounter.inc();
     nonZeroLengthDynamicCopiedCounter.add(length);
   }
   ArrayCopyUnrollNode.arraycopy(
       nonNullSrc, srcPos, nonNullDest, destPos, length, unrolledLength, elementKind);
 }