@@ -590,7 +590,7 @@ public static void registerFrameWithoutBoxingPlugins(InvocationPlugins plugins,
590
590
registerFrameAccessors (r , types , JavaKind .Byte );
591
591
592
592
int accessTag = types .FrameSlotKind_javaKindToTagIndex .get (JavaKind .Object );
593
- registerGet (r , JavaKind .Object , accessTag , "unsafeUncheckedGet" , JavaKind .Object .name ());
593
+ registerGet (r , JavaKind .Object , accessTag , "unsafeUncheckedGet" + JavaKind .Object .name (), true );
594
594
595
595
registerOSRFrameTransferMethods (r );
596
596
@@ -621,11 +621,10 @@ private static void registerFrameAccessors(Registration r, KnownTruffleTypes typ
621
621
int accessTag = types .FrameSlotKind_javaKindToTagIndex .get (accessKind );
622
622
String nameSuffix = accessKind .name ();
623
623
boolean isPrimitiveAccess = accessKind .isPrimitive ();
624
- String [] indexedGetPrefixes = new String []{ "get" , "unsafeGet" , "expect" , "unsafeExpect" } ;
625
- for (String prefix : indexedGetPrefixes ) {
626
- registerGet (r , accessKind , accessTag , prefix , nameSuffix );
624
+ registerGet ( r , accessKind , accessTag , "get" + nameSuffix , false ) ;
625
+ for (String prefix : new String []{ "unsafeGet" , "expect" , "unsafeExpect" } ) {
626
+ registerGet (r , accessKind , accessTag , prefix + nameSuffix , true );
627
627
}
628
-
629
628
r .register (new RequiredInvocationPlugin ("get" + nameSuffix + "Static" , Receiver .class , int .class ) {
630
629
@ Override
631
630
public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver frameNode , ValueNode frameSlotNode ) {
@@ -639,20 +638,8 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
639
638
}
640
639
});
641
640
642
- String [] indexedSetPrefixes = new String []{"set" , "unsafeSet" };
643
- for (String prefix : indexedSetPrefixes ) {
644
- r .register (new RequiredInvocationPlugin (prefix + nameSuffix , Receiver .class , int .class , getJavaClass (accessKind )) {
645
- @ Override
646
- public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver frameNode , ValueNode frameSlotNode , ValueNode value ) {
647
- int frameSlotIndex = maybeGetConstantNumberedFrameSlotIndex (frameNode , frameSlotNode );
648
- if (frameSlotIndex >= 0 ) {
649
- b .add (new VirtualFrameSetNode (frameNode , frameSlotIndex , accessTag , value , VirtualFrameAccessType .Indexed , VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
650
- return true ;
651
- }
652
- return false ;
653
- }
654
- });
655
- }
641
+ registerSet (r , accessKind , accessTag , "set" + nameSuffix , false );
642
+ registerSet (r , accessKind , accessTag , "unsafeSet" + nameSuffix , true );
656
643
r .register (new RequiredInvocationPlugin ("set" + nameSuffix + "Static" , Receiver .class , int .class , getJavaClass (accessKind )) {
657
644
@ Override
658
645
public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver frameNode , ValueNode frameSlotNode , ValueNode value ) {
@@ -678,8 +665,8 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
678
665
});
679
666
}
680
667
681
- private static void registerGet (Registration r , JavaKind accessKind , int accessTag , String prefix , String nameSuffix ) {
682
- r .register (new RequiredInvocationPlugin ( prefix + nameSuffix , Receiver .class , int .class ) {
668
+ private static void registerGet (Registration r , JavaKind accessKind , int accessTag , String name , boolean optional ) {
669
+ r .register (new InvocationPlugin ( name , Receiver .class , int .class ) {
683
670
@ Override
684
671
public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver frameNode , ValueNode frameSlotNode ) {
685
672
int frameSlotIndex = maybeGetConstantNumberedFrameSlotIndex (frameNode , frameSlotNode );
@@ -689,6 +676,70 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
689
676
}
690
677
return false ;
691
678
}
679
+
680
+ @ Override
681
+ public boolean isOptional () {
682
+ return optional ;
683
+ }
684
+ });
685
+ }
686
+
687
+ private static void registerSet (Registration r , JavaKind accessKind , int accessTag , String name , boolean optional ) {
688
+ r .register (new InvocationPlugin (name , Receiver .class , int .class , getJavaClass (accessKind )) {
689
+ @ Override
690
+ public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver frameNode , ValueNode frameSlotNode , ValueNode value ) {
691
+ int frameSlotIndex = maybeGetConstantNumberedFrameSlotIndex (frameNode , frameSlotNode );
692
+ if (frameSlotIndex >= 0 ) {
693
+ b .add (new VirtualFrameSetNode (frameNode , frameSlotIndex , accessTag , value , VirtualFrameAccessType .Indexed , VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
694
+ return true ;
695
+ }
696
+ return false ;
697
+ }
698
+
699
+ @ Override
700
+ public boolean isOptional () {
701
+ return optional ;
702
+ }
703
+ });
704
+ }
705
+
706
+ private static void registerCopy (Registration r , String name , boolean optional ) {
707
+ r .register (new InvocationPlugin (name , Receiver .class , int .class , int .class ) {
708
+ @ Override
709
+ public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode frameSlot1 , ValueNode frameSlot2 ) {
710
+ int frameSlot1Index = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot1 );
711
+ int frameSlot2Index = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot2 );
712
+ if (frameSlot1Index >= 0 && frameSlot2Index >= 0 ) {
713
+ b .add (new VirtualFrameCopyNode (receiver , frameSlot1Index , frameSlot2Index , VirtualFrameAccessType .Indexed , VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
714
+ return true ;
715
+ }
716
+ return false ;
717
+ }
718
+
719
+ @ Override
720
+ public boolean isOptional () {
721
+ return optional ;
722
+ }
723
+ });
724
+ }
725
+
726
+ private static void registerClear (Registration r , String name , int illegalTag , boolean optional ) {
727
+ r .register (new InvocationPlugin (name , Receiver .class , int .class ) {
728
+ @ Override
729
+ public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode frameSlot ) {
730
+ int frameSlotIndex = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot );
731
+ if (frameSlotIndex >= 0 ) {
732
+ b .add (new VirtualFrameClearNode (receiver , frameSlotIndex , illegalTag , VirtualFrameAccessType .Indexed ,
733
+ VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
734
+ return true ;
735
+ }
736
+ return false ;
737
+ }
738
+
739
+ @ Override
740
+ public boolean isOptional () {
741
+ return optional ;
742
+ }
692
743
});
693
744
}
694
745
@@ -814,34 +865,10 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
814
865
}
815
866
});
816
867
817
- for (String prefix : new String []{"" , "unsafe" }) {
818
- r .register (new RequiredInvocationPlugin (buildCamelCaseName (prefix , "copy" ), Receiver .class , int .class , int .class ) {
819
- @ Override
820
- public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode frameSlot1 , ValueNode frameSlot2 ) {
821
- int frameSlot1Index = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot1 );
822
- int frameSlot2Index = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot2 );
823
- if (frameSlot1Index >= 0 && frameSlot2Index >= 0 ) {
824
- b .add (new VirtualFrameCopyNode (receiver , frameSlot1Index , frameSlot2Index , VirtualFrameAccessType .Indexed , VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
825
- return true ;
826
- }
827
- return false ;
828
- }
829
- });
830
-
831
- r .register (new RequiredInvocationPlugin (buildCamelCaseName (prefix , "clear" ), Receiver .class , int .class ) {
832
- @ Override
833
- public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode frameSlot ) {
834
- int frameSlotIndex = maybeGetConstantNumberedFrameSlotIndex (receiver , frameSlot );
835
- if (frameSlotIndex >= 0 ) {
836
- b .add (new VirtualFrameClearNode (receiver , frameSlotIndex , illegalTag , VirtualFrameAccessType .Indexed ,
837
- VirtualFrameAccessFlags .NON_STATIC_UPDATE ));
838
- return true ;
839
- }
840
- return false ;
841
- }
842
- });
843
-
844
- }
868
+ registerCopy (r , "copy" , false );
869
+ registerCopy (r , "unsafeCopy" , true );
870
+ registerClear (r , "clear" , illegalTag , false );
871
+ registerClear (r , "unsafeClear" , illegalTag , true );
845
872
846
873
r .register (new RequiredInvocationPlugin ("clearPrimitiveStatic" , Receiver .class , int .class ) {
847
874
@ Override
@@ -968,21 +995,6 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
968
995
});
969
996
}
970
997
971
- private static String buildCamelCaseName (String prefix , String name ) {
972
- if (prefix .isEmpty ()) {
973
- return name ;
974
- } else {
975
- return prefix + firstLetterUpperCase (name );
976
- }
977
- }
978
-
979
- private static String firstLetterUpperCase (String name ) {
980
- if (name == null || name .isEmpty ()) {
981
- return name ;
982
- }
983
- return Character .toUpperCase (name .charAt (0 )) + name .substring (1 , name .length ());
984
- }
985
-
986
998
public static void registerNodePlugins (InvocationPlugins plugins , KnownTruffleTypes types , MetaAccessProvider metaAccess , boolean canDelayIntrinsification ,
987
999
ConstantReflectionProvider constantReflection ) {
988
1000
Registration r = new Registration (plugins , new ResolvedJavaSymbol (types .Node ));
0 commit comments