--- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java 2018-04-13 11:28:39.724635266 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java 2018-04-13 11:28:39.444632683 -0700 @@ -381,13 +381,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -772,13 +772,13 @@ @Override public ByteVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public ByteVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -803,14 +803,14 @@ @Override public ByteVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); ByteBuffer fb = bb; return op(i -> fb.get(i)); } @Override public ByteVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); ByteBuffer fb = bb; return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java 2018-04-13 11:28:40.780645008 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java 2018-04-13 11:28:40.496642388 -0700 @@ -488,13 +488,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -859,13 +859,13 @@ @Override public DoubleVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public DoubleVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -890,14 +890,14 @@ @Override public DoubleVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); DoubleBuffer fb = bb.asDoubleBuffer(); return op(i -> fb.get(i)); } @Override public DoubleVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); DoubleBuffer fb = bb.asDoubleBuffer(); return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java 2018-04-13 11:28:41.828654674 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java 2018-04-13 11:28:41.544652054 -0700 @@ -488,13 +488,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -859,13 +859,13 @@ @Override public FloatVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public FloatVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -890,14 +890,14 @@ @Override public FloatVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); FloatBuffer fb = bb.asFloatBuffer(); return op(i -> fb.get(i)); } @Override public FloatVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); FloatBuffer fb = bb.asFloatBuffer(); return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java 2018-04-13 11:28:42.880664379 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java 2018-04-13 11:28:42.600661796 -0700 @@ -403,13 +403,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -794,13 +794,13 @@ @Override public IntVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public IntVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -825,14 +825,14 @@ @Override public IntVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); IntBuffer fb = bb.asIntBuffer(); return op(i -> fb.get(i)); } @Override public IntVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); IntBuffer fb = bb.asIntBuffer(); return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java 2018-04-13 11:28:43.932674083 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java 2018-04-13 11:28:43.648671463 -0700 @@ -403,13 +403,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -794,13 +794,13 @@ @Override public LongVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public LongVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -825,14 +825,14 @@ @Override public LongVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); LongBuffer fb = bb.asLongBuffer(); return op(i -> fb.get(i)); } @Override public LongVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); LongBuffer fb = bb.asLongBuffer(); return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java 2018-04-13 11:28:44.980683749 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java 2018-04-13 11:28:44.700681167 -0700 @@ -382,13 +382,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -773,13 +773,13 @@ @Override public ShortVector fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public ShortVector fromByteArray(byte[] a, int ix, Mask m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -804,14 +804,14 @@ @Override public ShortVector fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); ShortBuffer fb = bb.asShortBuffer(); return op(i -> fb.get(i)); } @Override public ShortVector fromByteBuffer(ByteBuffer bb, int ix, Mask m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); ShortBuffer fb = bb.asShortBuffer(); return op(m, i -> fb.get(i)); } --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Vector.java 2018-04-13 11:28:46.032693454 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Vector.java 2018-04-13 11:28:45.748690833 -0700 @@ -1049,14 +1049,24 @@ * size, or appended to with zero bits if the vector bit size is less * than this species bit size. *

- * The method behaves as if the input vector is stored into a byte array - * and then the returned vector is loaded from the byte array. + * The method behaves as if the input vector is stored into a byte buffer + * and then the returned vector is loaded from the byte buffer using + * native byte ordering. The implication is that ByteBuffer reads bytes + * and then composes them based on the byte ordering so the result + * depends on this composition. + *

+ * For example, on a system with ByteOrder.LITTLE_ENDIAN, loading from + * byte array with values {0,1,2,3} and reshaping to int, leads to bytes + * being composed in order 0x3 0x2 0x1 0x0 which is decimal value 50462976. + * On a system with ByteOrder.BIG_ENDIAN, the value is instead 66051 because + * bytes are composed in order 0x0 0x1 0x2 0x3. + *

* The following pseudocode expresses the behaviour: *

{@code
-         * int alen = Math.max(v.bitSize(), this.bitSize()) / Byte.SIZE;
-         * byte[] a = new byte[alen];
-         * v.intoByteArray(a, 0);
-         * return this.fromByteArray(a, 0);
+         * int blen = Math.max(v.bitSize(), bitSize()) / Byte.SIZE;
+         * ByteBuffer bb = ByteBuffer.allocate(blen).order(ByteOrder.nativeOrder());
+         * v.intoByteBuffer(bb, 0);
+         * return fromByteBuffer(bb, 0);
          * }
* * @param v the input vector @@ -1075,13 +1085,23 @@ * The underlying bits of the input vector are copied without * modification to the resulting vector. *

- * The method behaves as if the input vector is stored into a byte array - * and then the returned vector is loaded from the byte array. + * The method behaves as if the input vector is stored into a byte buffer + * and then the returned vector is loaded from the byte buffer using + * native byte ordering. The implication is that ByteBuffer reads bytes + * and then composes them based on the byte ordering so the result + * depends on this composition. + *

+ * For example, on a system with ByteOrder.LITTLE_ENDIAN, loading from + * byte array with values {0,1,2,3} and rebracketing to int, leads to bytes + * being composed in order 0x3 0x2 0x1 0x0 which is decimal value 50462976. + * On a system with ByteOrder.BIG_ENDIAN, the value is instead 66051 because + * bytes are composed in order 0x0 0x1 0x2 0x3. + *

* The following pseudocode expresses the behaviour: *

{@code
-         * byte[] a = new byte[v.bitSize() / Byte.SIZE];
-         * v.intoByteArray(a, 0);
-         * return this.fromByteArray(a, 0);
+         * ByteBuffer bb = ByteBuffer.allocate(v.bitSize()).order(ByteOrder.nativeOrder());
+         * v.intoByteBuffer(bb, 0);
+         * return fromByteBuffer(bb, 0);
          * }
* * @param v the input vector --- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template 2018-04-13 11:28:47.088703194 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template 2018-04-13 11:28:46.808700611 -0700 @@ -602,13 +602,13 @@ @Override public void intoByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb); } @Override public void intoByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); intoByteBuffer(bb, m); } @@ -1011,13 +1011,13 @@ @Override public $abstractvectortype$ fromByteArray(byte[] a, int ix) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb); } @Override public $abstractvectortype$ fromByteArray(byte[] a, int ix, Mask<$Boxtype$, S> m) { - ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix); + ByteBuffer bb = ByteBuffer.wrap(a, ix, a.length - ix).order(ByteOrder.nativeOrder()); return fromByteBuffer(bb, m); } @@ -1042,14 +1042,14 @@ @Override public $abstractvectortype$ fromByteBuffer(ByteBuffer bb, int ix) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();} return op(i -> fb.get(i)); } @Override public $abstractvectortype$ fromByteBuffer(ByteBuffer bb, int ix, Mask<$Boxtype$, S> m) { - bb = bb.duplicate().position(ix); + bb = bb.duplicate().order(ByteOrder.nativeOrder()).position(ix); $Type$Buffer fb = bb{#if[byte]?;:.as$Type$Buffer();} return op(m, i -> fb.get(i)); }