< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeReader.java
Print this page
@@ -22,11 +22,12 @@
*/
package org.graalvm.compiler.core.common.util;
-import static org.graalvm.compiler.core.common.util.UnsafeAccess.UNSAFE;
+import static org.graalvm.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe;
+
import sun.misc.Unsafe;
/**
* Provides low-level read access from a byte[] array for signed and unsigned values of size 1, 2,
* 4, and 8 bytes.
@@ -39,10 +40,12 @@
* architectures that support unaligned memory accesses; the value {@code false} is the safe
* fallback that works on every hardware.
*/
public abstract class UnsafeArrayTypeReader implements TypeReader {
+ private static final Unsafe UNSAFE = getUnsafe();
+
public static int getS1(byte[] data, long byteIndex) {
return UNSAFE.getByte(data, readOffset(data, byteIndex, Byte.BYTES));
}
public static int getU1(byte[] data, long byteIndex) {
@@ -140,10 +143,12 @@
return getS4() & 0xFFFFFFFFL;
}
}
final class UnalignedUnsafeArrayTypeReader extends UnsafeArrayTypeReader {
+ private static final Unsafe UNSAFE = getUnsafe();
+
protected static int getS2(byte[] data, long byteIndex) {
return UNSAFE.getShort(data, readOffset(data, byteIndex, Short.BYTES));
}
protected static int getS4(byte[] data, long byteIndex) {
@@ -179,10 +184,12 @@
return result;
}
}
class AlignedUnsafeArrayTypeReader extends UnsafeArrayTypeReader {
+ private static final Unsafe UNSAFE = getUnsafe();
+
protected static int getS2(byte[] data, long byteIndex) {
long offset = readOffset(data, byteIndex, Short.BYTES);
return ((UNSAFE.getByte(data, offset + 0) & 0xFF) << 0) | //
(UNSAFE.getByte(data, offset + 1) << 8);
}
< prev index next >