24
24
*/
25
25
package com .oracle .svm .core .jdk ;
26
26
27
+ import java .util .stream .Collectors ;
28
+
29
+ import org .graalvm .nativeimage .ImageSingletons ;
30
+
27
31
import com .oracle .svm .core .AlwaysInline ;
32
+ import com .oracle .svm .core .SubstrateTargetDescription ;
28
33
import com .oracle .svm .core .annotate .Alias ;
29
34
import com .oracle .svm .core .annotate .AnnotateOriginal ;
30
35
import com .oracle .svm .core .annotate .Delete ;
33
38
import com .oracle .svm .core .annotate .TargetClass ;
34
39
import com .oracle .svm .core .annotate .TargetElement ;
35
40
41
+ import jdk .graal .compiler .api .replacements .Fold ;
42
+ import jdk .vm .ci .code .CPUFeatureName ;
43
+
36
44
@ TargetClass (className = "jdk.internal.vm.vector.VectorSupport" )
37
45
final class Target_jdk_internal_vm_vector_VectorSupport {
38
46
@ Delete
@@ -43,6 +51,24 @@ final class Target_jdk_internal_vm_vector_VectorSupport {
43
51
private static int getMaxLaneCount (Class <?> etype ) {
44
52
return VectorAPISupport .singleton ().getMaxLaneCount (etype );
45
53
}
54
+
55
+ /**
56
+ * Substitutes the native method with a constant string defined at build time.
57
+ */
58
+ @ Substitute
59
+ @ TargetElement (onlyWith = JDKLatest .class )
60
+ public static String getCPUFeatures () {
61
+ return Helper_jdk_internal_vm_vector_VectorSupport .getCPUFeatures ();
62
+ }
63
+ }
64
+
65
+ final class Helper_jdk_internal_vm_vector_VectorSupport {
66
+ @ Fold
67
+ public static String getCPUFeatures () {
68
+ return ImageSingletons .lookup (SubstrateTargetDescription .class ).arch .getFeatures ().stream ()
69
+ .map (CPUFeatureName ::name )
70
+ .collect (Collectors .joining ("," ));
71
+ }
46
72
}
47
73
48
74
@ TargetClass (className = "jdk.incubator.vector.LaneType" , onlyWith = VectorAPIEnabled .class )
0 commit comments