< prev index next >

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java

Print this page
rev 58165 : Fix the issue that unslice modifies the argument vector
Summary: Change the name of getElements() to vec() and clone argument value to
avoid it being modified

@@ -87,11 +87,11 @@
     // and lazy version of C++ templates.
 
     // Virtualized getter
 
     /*package-private*/
-    abstract int[] getElements();
+    abstract int[] vec();
 
     // Virtualized constructors
 
     /**
      * Build a vector directly using my own constructor.

@@ -151,11 +151,11 @@
     abstract
     IntVector uOp(FUnOp f);
     @ForceInline
     final
     IntVector uOpTemplate(FUnOp f) {
-        int[] vec = getElements();
+        int[] vec = vec();
         int[] res = new int[length()];
         for (int i = 0; i < res.length; i++) {
             res[i] = f.apply(i, vec[i]);
         }
         return vectorFactory(res);

@@ -167,11 +167,11 @@
                              FUnOp f);
     @ForceInline
     final
     IntVector uOpTemplate(VectorMask<Integer> m,
                                      FUnOp f) {
-        int[] vec = getElements();
+        int[] vec = vec();
         int[] res = new int[length()];
         boolean[] mbits = ((AbstractMask<Integer>)m).getBits();
         for (int i = 0; i < res.length; i++) {
             res[i] = mbits[i] ? f.apply(i, vec[i]) : vec[i];
         }

@@ -192,12 +192,12 @@
     @ForceInline
     final
     IntVector bOpTemplate(Vector<Integer> o,
                                      FBinOp f) {
         int[] res = new int[length()];
-        int[] vec1 = this.getElements();
-        int[] vec2 = ((IntVector)o).getElements();
+        int[] vec1 = this.vec();
+        int[] vec2 = ((IntVector)o).vec();
         for (int i = 0; i < res.length; i++) {
             res[i] = f.apply(i, vec1[i], vec2[i]);
         }
         return vectorFactory(res);
     }

@@ -211,12 +211,12 @@
     final
     IntVector bOpTemplate(Vector<Integer> o,
                                      VectorMask<Integer> m,
                                      FBinOp f) {
         int[] res = new int[length()];
-        int[] vec1 = this.getElements();
-        int[] vec2 = ((IntVector)o).getElements();
+        int[] vec1 = this.vec();
+        int[] vec2 = ((IntVector)o).vec();
         boolean[] mbits = ((AbstractMask<Integer>)m).getBits();
         for (int i = 0; i < res.length; i++) {
             res[i] = mbits[i] ? f.apply(i, vec1[i], vec2[i]) : vec1[i];
         }
         return vectorFactory(res);

@@ -238,13 +238,13 @@
     final
     IntVector tOpTemplate(Vector<Integer> o1,
                                      Vector<Integer> o2,
                                      FTriOp f) {
         int[] res = new int[length()];
-        int[] vec1 = this.getElements();
-        int[] vec2 = ((IntVector)o1).getElements();
-        int[] vec3 = ((IntVector)o2).getElements();
+        int[] vec1 = this.vec();
+        int[] vec2 = ((IntVector)o1).vec();
+        int[] vec3 = ((IntVector)o2).vec();
         for (int i = 0; i < res.length; i++) {
             res[i] = f.apply(i, vec1[i], vec2[i], vec3[i]);
         }
         return vectorFactory(res);
     }

@@ -260,13 +260,13 @@
     IntVector tOpTemplate(Vector<Integer> o1,
                                      Vector<Integer> o2,
                                      VectorMask<Integer> m,
                                      FTriOp f) {
         int[] res = new int[length()];
-        int[] vec1 = this.getElements();
-        int[] vec2 = ((IntVector)o1).getElements();
-        int[] vec3 = ((IntVector)o2).getElements();
+        int[] vec1 = this.vec();
+        int[] vec2 = ((IntVector)o1).vec();
+        int[] vec3 = ((IntVector)o2).vec();
         boolean[] mbits = ((AbstractMask<Integer>)m).getBits();
         for (int i = 0; i < res.length; i++) {
             res[i] = mbits[i] ? f.apply(i, vec1[i], vec2[i], vec3[i]) : vec1[i];
         }
         return vectorFactory(res);

@@ -278,11 +278,11 @@
     abstract
     int rOp(int v, FBinOp f);
     @ForceInline
     final
     int rOpTemplate(int v, FBinOp f) {
-        int[] vec = getElements();
+        int[] vec = vec();
         for (int i = 0; i < vec.length; i++) {
             v = f.apply(i, v, vec[i]);
         }
         return v;
     }

@@ -297,11 +297,11 @@
     /*package-private*/
     @ForceInline
     final
     <M> IntVector ldOp(M memory, int offset,
                                   FLdOp<M> f) {
-        //dummy; no vec = getElements();
+        //dummy; no vec = vec();
         int[] res = new int[length()];
         for (int i = 0; i < res.length; i++) {
             res[i] = f.apply(memory, offset, i);
         }
         return vectorFactory(res);

@@ -311,11 +311,11 @@
     @ForceInline
     final
     <M> IntVector ldOp(M memory, int offset,
                                   VectorMask<Integer> m,
                                   FLdOp<M> f) {
-        //int[] vec = getElements();
+        //int[] vec = vec();
         int[] res = new int[length()];
         boolean[] mbits = ((AbstractMask<Integer>)m).getBits();
         for (int i = 0; i < res.length; i++) {
             if (mbits[i]) {
                 res[i] = f.apply(memory, offset, i);

@@ -331,11 +331,11 @@
     /*package-private*/
     @ForceInline
     final
     <M> void stOp(M memory, int offset,
                   FStOp<M> f) {
-        int[] vec = getElements();
+        int[] vec = vec();
         for (int i = 0; i < vec.length; i++) {
             f.apply(memory, offset, i, vec[i]);
         }
     }
 

@@ -343,11 +343,11 @@
     @ForceInline
     final
     <M> void stOp(M memory, int offset,
                   VectorMask<Integer> m,
                   FStOp<M> f) {
-        int[] vec = getElements();
+        int[] vec = vec();
         boolean[] mbits = ((AbstractMask<Integer>)m).getBits();
         for (int i = 0; i < vec.length; i++) {
             if (mbits[i]) {
                 f.apply(memory, offset, i, vec[i]);
             }

@@ -365,12 +365,12 @@
     @ForceInline
     final
     AbstractMask<Integer> bTest(int cond,
                                   Vector<Integer> o,
                                   FBinTest f) {
-        int[] vec1 = getElements();
-        int[] vec2 = ((IntVector)o).getElements();
+        int[] vec1 = vec();
+        int[] vec2 = ((IntVector)o).vec();
         boolean[] bits = new boolean[length()];
         for (int i = 0; i < length(); i++){
             bits[i] = f.apply(cond, i, vec1[i], vec2[i]);
         }
         return maskFactory(bits);

@@ -2044,12 +2044,12 @@
     final
     @ForceInline
     IntVector sliceTemplate(int origin, Vector<Integer> v1) {
         IntVector that = (IntVector) v1;
         that.check(this);
-        int[] a0 = this.getElements();
-        int[] a1 = that.getElements();
+        int[] a0 = this.vec();
+        int[] a1 = that.vec();
         int[] res = new int[a0.length];
         int vlen = res.length;
         int firstPart = vlen - origin;
         System.arraycopy(a0, origin, res, 0, firstPart);
         System.arraycopy(a1, 0, res, firstPart, origin);

@@ -2087,12 +2087,12 @@
     @ForceInline
     IntVector
     unsliceTemplate(int origin, Vector<Integer> w, int part) {
         IntVector that = (IntVector) w;
         that.check(this);
-        int[] slice = this.getElements();
-        int[] res = that.getElements();
+        int[] slice = this.vec();
+        int[] res = that.vec().clone();
         int vlen = res.length;
         int firstPart = vlen - origin;
         switch (part) {
         case 0:
             System.arraycopy(slice, 0, res, origin, firstPart);
< prev index next >