< prev index next >

src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template

Print this page

        

@@ -48,10 +48,11 @@
     // Cached unsafe-access object
     protected static final Unsafe unsafe = Bits.unsafe();
 
     // Cached array base offset
     private static final long arrayBaseOffset = (long)unsafe.arrayBaseOffset($type$[].class);
+    private static final long arrayIndexScale = (long)unsafe.arrayIndexScale($type$[].class);
 
     // Cached unaligned-access capability
     protected static final boolean unaligned = Bits.unaligned();
 
     // Base address, used in all indexing calculations

@@ -276,11 +277,11 @@
                                           offset << $LG_BYTES_PER_VALUE$,
                                           length << $LG_BYTES_PER_VALUE$);
             else
 #end[!byte]
                 Bits.copyToArray(ix(pos), dst, arrayBaseOffset,
-                                 offset << $LG_BYTES_PER_VALUE$,
+                                 offset * arrayIndexScale,
                                  length << $LG_BYTES_PER_VALUE$);
             position(pos + length);
         } else {
             super.get(dst, offset, length);
         }

@@ -366,11 +367,11 @@
             if (order() != ByteOrder.nativeOrder())
                 Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$,
                                             ix(pos), length << $LG_BYTES_PER_VALUE$);
             else
 #end[!byte]
-                Bits.copyFromArray(src, arrayBaseOffset, offset << $LG_BYTES_PER_VALUE$,
+                Bits.copyFromArray(src, arrayBaseOffset, offset * arrayIndexScale,
                                    ix(pos), length << $LG_BYTES_PER_VALUE$);
             position(pos + length);
         } else {
             super.put(src, offset, length);
         }
< prev index next >