< prev index next >

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template

Print this page
rev 49878 : ByteBuffers need to use native order

All ByteBuffers need to use native order since intrinsification leads
to use of vector operations with native order. Additionally, using
native order means there is no preferential treatment to ordering
that would create unnecessary overheads.


 585     public $abstractvectortype$<S> ashiftR(Vector<$Boxtype$,S> o) {
 586         return bOp(o, (i, a, b) -> ($type$) (a >> b));
 587     }
 588 
 589     public $abstractvectortype$<S> ashiftR(Vector<$Boxtype$,S> o, Mask<$Boxtype$, S> m) {
 590         return bOp(o, m, (i, a, b) -> ($type$) (a >> b));
 591     }
 592 #end[intOrLong]
 593 
 594     public $abstractvectortype$<S> rotateL(int j) {
 595         return uOp((i, a) -> ($type$) $Wideboxtype$.rotateLeft(a, j));
 596     }
 597 
 598     public $abstractvectortype$<S> rotateR(int j) {
 599         return uOp((i, a) -> ($type$) $Wideboxtype$.rotateRight(a, j));
 600     }
 601 #end[BITWISE]
 602 
 603     @Override
 604     public void intoByteArray(byte[] a, int ix) {
 605         ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix);
 606         intoByteBuffer(bb);
 607     }
 608 
 609     @Override
 610     public void intoByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) {
 611         ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix);
 612         intoByteBuffer(bb, m);
 613     }
 614 
 615     @Override
 616     public void intoByteBuffer(ByteBuffer bb) {
 617         $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
 618         forEach((i, a) -> fb.put(a));
 619     }
 620 
 621     @Override
 622     public void intoByteBuffer(ByteBuffer bb, Mask<$Boxtype$, S> m) {
 623         $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
 624         forEach((i, a) -> {
 625             if (m.getElement(i))
 626                 fb.put(a);
 627             else
 628                 fb.position(fb.position() + 1);
 629         });
 630     }
 631 


 994          *
 995          * @param a the array
 996          * @param i the offset into the array, may be negative if relative
 997          * indexes in the index map compensate to produce a value within the
 998          * array bounds
 999          * @param indexMap the index map
1000          * @param j the offset into the index map
1001          * @return the vector loaded from an array
1002          * @throws IndexOutOfBoundsException if {@code j < 0}, or
1003          * {@code j > indexMap.length - this.length()},
1004          * or for any vector lane index {@code N} where the mask at lane
1005          * {@code N} is set the result of {@code i + indexMap[j + N]} is
1006          * {@code < 0} or {@code >= a.length}
1007          */
1008         public $abstractvectortype$<S> fromArray($type$[] a, int i, Mask<$Boxtype$, S> m, int[] indexMap, int j) {
1009             return op(m, n -> a[i + indexMap[j + n]]);
1010         }
1011 
1012         @Override
1013         public $abstractvectortype$<S> fromByteArray(byte[] a, int ix) {
1014             ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix);
1015             return fromByteBuffer(bb);
1016         }
1017 
1018         @Override
1019         public $abstractvectortype$<S> fromByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) {
1020             ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix);
1021             return fromByteBuffer(bb, m);
1022         }
1023 
1024         @Override
1025         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb) {
1026             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1027             return op(i -> fb.get());
1028         }
1029 
1030         @Override
1031         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, Mask<$Boxtype$, S> m) {
1032             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1033             return op(i -> {
1034                 if(m.getElement(i))
1035                     return fb.get();
1036                 else {
1037                     fb.position(fb.position() + 1);
1038                     return ($type$) 0;
1039                 }
1040             });
1041         }
1042 
1043         @Override
1044         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, int ix) {
1045             bb = bb.duplicate().position(ix);
1046             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1047             return op(i -> fb.get(i));
1048         }
1049 
1050         @Override
1051         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, int ix, Mask<$Boxtype$, S> m) {
1052             bb = bb.duplicate().position(ix);
1053             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1054             return op(m, i -> fb.get(i));
1055         }
1056 
1057         @Override
1058         public <F, T extends Shape> $abstractvectortype$<S> reshape(Vector<F, T> o) {
1059             int blen = Math.max(o.species().bitSize(), bitSize()) / Byte.SIZE;
1060             ByteBuffer bb = ByteBuffer.allocate(blen).order(ByteOrder.nativeOrder());
1061             o.intoByteBuffer(bb, 0);
1062             return fromByteBuffer(bb, 0);
1063         }
1064 
1065         @Override
1066         @ForceInline
1067         public <F> $abstractvectortype$<S> rebracket(Vector<F, S> o) {
1068             return reshape(o);
1069         }
1070 
1071         @Override
1072         @ForceInline




 585     public $abstractvectortype$<S> ashiftR(Vector<$Boxtype$,S> o) {
 586         return bOp(o, (i, a, b) -> ($type$) (a >> b));
 587     }
 588 
 589     public $abstractvectortype$<S> ashiftR(Vector<$Boxtype$,S> o, Mask<$Boxtype$, S> m) {
 590         return bOp(o, m, (i, a, b) -> ($type$) (a >> b));
 591     }
 592 #end[intOrLong]
 593 
 594     public $abstractvectortype$<S> rotateL(int j) {
 595         return uOp((i, a) -> ($type$) $Wideboxtype$.rotateLeft(a, j));
 596     }
 597 
 598     public $abstractvectortype$<S> rotateR(int j) {
 599         return uOp((i, a) -> ($type$) $Wideboxtype$.rotateRight(a, j));
 600     }
 601 #end[BITWISE]
 602 
 603     @Override
 604     public void intoByteArray(byte[] a, int ix) {
 605         ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder());
 606         intoByteBuffer(bb);
 607     }
 608 
 609     @Override
 610     public void intoByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) {
 611         ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder());
 612         intoByteBuffer(bb, m);
 613     }
 614 
 615     @Override
 616     public void intoByteBuffer(ByteBuffer bb) {
 617         $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
 618         forEach((i, a) -> fb.put(a));
 619     }
 620 
 621     @Override
 622     public void intoByteBuffer(ByteBuffer bb, Mask<$Boxtype$, S> m) {
 623         $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
 624         forEach((i, a) -> {
 625             if (m.getElement(i))
 626                 fb.put(a);
 627             else
 628                 fb.position(fb.position() + 1);
 629         });
 630     }
 631 


 994          *
 995          * @param a the array
 996          * @param i the offset into the array, may be negative if relative
 997          * indexes in the index map compensate to produce a value within the
 998          * array bounds
 999          * @param indexMap the index map
1000          * @param j the offset into the index map
1001          * @return the vector loaded from an array
1002          * @throws IndexOutOfBoundsException if {@code j < 0}, or
1003          * {@code j > indexMap.length - this.length()},
1004          * or for any vector lane index {@code N} where the mask at lane
1005          * {@code N} is set the result of {@code i + indexMap[j + N]} is
1006          * {@code < 0} or {@code >= a.length}
1007          */
1008         public $abstractvectortype$<S> fromArray($type$[] a, int i, Mask<$Boxtype$, S> m, int[] indexMap, int j) {
1009             return op(m, n -> a[i + indexMap[j + n]]);
1010         }
1011 
1012         @Override
1013         public $abstractvectortype$<S> fromByteArray(byte[] a, int ix) {
1014             ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder());
1015             return fromByteBuffer(bb);
1016         }
1017 
1018         @Override
1019         public $abstractvectortype$<S> fromByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) {
1020             ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder());
1021             return fromByteBuffer(bb, m);
1022         }
1023 
1024         @Override
1025         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb) {
1026             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1027             return op(i -> fb.get());
1028         }
1029 
1030         @Override
1031         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, Mask<$Boxtype$, S> m) {
1032             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1033             return op(i -> {
1034                 if(m.getElement(i))
1035                     return fb.get();
1036                 else {
1037                     fb.position(fb.position() + 1);
1038                     return ($type$) 0;
1039                 }
1040             });
1041         }
1042 
1043         @Override
1044         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, int ix) {
1045             bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix);
1046             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1047             return op(i -> fb.get(i));
1048         }
1049 
1050         @Override
1051         public $abstractvectortype$<S> fromByteBuffer(ByteBuffer bb, int ix, Mask<$Boxtype$, S> m) {
1052             bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix);
1053             $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();}
1054             return op(m, i -> fb.get(i));
1055         }
1056 
1057         @Override
1058         public <F, T extends Shape> $abstractvectortype$<S> reshape(Vector<F, T> o) {
1059             int blen = Math.max(o.species().bitSize(), bitSize()) / Byte.SIZE;
1060             ByteBuffer bb = ByteBuffer.allocate(blen).order(ByteOrder.nativeOrder());
1061             o.intoByteBuffer(bb, 0);
1062             return fromByteBuffer(bb, 0);
1063         }
1064 
1065         @Override
1066         @ForceInline
1067         public <F> $abstractvectortype$<S> rebracket(Vector<F, S> o) {
1068             return reshape(o);
1069         }
1070 
1071         @Override
1072         @ForceInline


< prev index next >