33 import jdk.incubator.foreign.ForeignLinker;
34 import jdk.incubator.foreign.ValueLayout;
35 import jdk.internal.access.foreign.MemoryAddressProxy;
36 import jdk.internal.foreign.abi.SharedUtils;
37 import jdk.internal.misc.VM;
38 import sun.invoke.util.Wrapper;
39
40 import java.lang.invoke.MethodHandle;
41 import java.lang.invoke.MethodHandles;
42 import java.lang.invoke.MethodType;
43 import java.lang.invoke.VarHandle;
44 import java.util.Optional;
45 import java.util.function.Supplier;
46
47 /**
48 * This class contains misc helper functions to support creation of memory segments.
49 */
50 public final class Utils {
51
52 private static final String foreignRestrictedAccess = Optional.ofNullable(VM.getSavedProperty("foreign.restricted"))
53 .orElse("deny");
54
55 private static final MethodHandle ADDRESS_FILTER;
56
57 static {
58 try {
59 ADDRESS_FILTER = MethodHandles.lookup().findStatic(Utils.class, "filterAddress",
60 MethodType.methodType(MemoryAddressProxy.class, MemoryAddress.class));
61 } catch (Throwable ex) {
62 throw new ExceptionInInitializerError(ex);
63 }
64 }
65
66 public static long alignUp(long n, long alignment) {
67 return (n + alignment - 1) & -alignment;
68 }
69
70 public static MemoryAddress alignUp(MemoryAddress ma, long alignment) {
71 long offset = ma.toRawLongValue();
72 return ma.addOffset(alignUp(offset, alignment) - offset);
73 }
|
33 import jdk.incubator.foreign.ForeignLinker;
34 import jdk.incubator.foreign.ValueLayout;
35 import jdk.internal.access.foreign.MemoryAddressProxy;
36 import jdk.internal.foreign.abi.SharedUtils;
37 import jdk.internal.misc.VM;
38 import sun.invoke.util.Wrapper;
39
40 import java.lang.invoke.MethodHandle;
41 import java.lang.invoke.MethodHandles;
42 import java.lang.invoke.MethodType;
43 import java.lang.invoke.VarHandle;
44 import java.util.Optional;
45 import java.util.function.Supplier;
46
47 /**
48 * This class contains misc helper functions to support creation of memory segments.
49 */
50 public final class Utils {
51
52 private static final String foreignRestrictedAccess = Optional.ofNullable(VM.getSavedProperty("foreign.restricted"))
53 .orElse("permit");
54
55 private static final MethodHandle ADDRESS_FILTER;
56
57 static {
58 try {
59 ADDRESS_FILTER = MethodHandles.lookup().findStatic(Utils.class, "filterAddress",
60 MethodType.methodType(MemoryAddressProxy.class, MemoryAddress.class));
61 } catch (Throwable ex) {
62 throw new ExceptionInInitializerError(ex);
63 }
64 }
65
66 public static long alignUp(long n, long alignment) {
67 return (n + alignment - 1) & -alignment;
68 }
69
70 public static MemoryAddress alignUp(MemoryAddress ma, long alignment) {
71 long offset = ma.toRawLongValue();
72 return ma.addOffset(alignUp(offset, alignment) - offset);
73 }
|