use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addIntAndIntsFromNestedStruct_reverseOrder_1.
@Test
public void test_addIntAndIntsFromNestedStruct_reverseOrder_1() throws Throwable {
GroupLayout nestedStructLayout = MemoryLayout.structLayout(JAVA_INT.withName("elem1"), JAVA_INT.withName("elem2"));
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_INT.withName("elem1"), nestedStructLayout.withName("struct_elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_INT, JAVA_INT, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addIntAndIntsFromNestedStruct_reverseOrder").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt = allocator.allocate(structLayout);
structSegmt.set(JAVA_INT, 0, 21222324);
structSegmt.set(JAVA_INT, 4, 25262728);
structSegmt.set(JAVA_INT, 8, 29303132);
int result = (int) mh.invokeExact(33343536, structSegmt);
Assert.assertEquals(result, 109131720);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addIntAndIntsFromNestedStruct_withoutLayoutName_1.
@Test
public void test_addIntAndIntsFromNestedStruct_withoutLayoutName_1() throws Throwable {
GroupLayout nestedStructLayout = MemoryLayout.structLayout(JAVA_INT, JAVA_INT);
GroupLayout structLayout = MemoryLayout.structLayout(nestedStructLayout, JAVA_INT);
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_INT, JAVA_INT, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addIntAndIntsFromNestedStruct").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt = allocator.allocate(structLayout);
structSegmt.set(JAVA_INT, 0, 21222324);
structSegmt.set(JAVA_INT, 4, 25262728);
structSegmt.set(JAVA_INT, 8, 29303132);
int result = (int) mh.invokeExact(33343536, structSegmt);
Assert.assertEquals(result, 109131720);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_add2ShortStructs_returnStruct_1.
@Test
public void test_add2ShortStructs_returnStruct_1() throws Throwable {
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_SHORT.withName("elem1"), JAVA_SHORT.withName("elem2"));
VarHandle shortHandle1 = structLayout.varHandle(PathElement.groupElement("elem1"));
VarHandle shortHandle2 = structLayout.varHandle(PathElement.groupElement("elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(structLayout, structLayout, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("add2ShortStructs_returnStruct").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt1 = allocator.allocate(structLayout);
shortHandle1.set(structSegmt1, (short) 56);
shortHandle2.set(structSegmt1, (short) 45);
MemorySegment structSegmt2 = allocator.allocate(structLayout);
shortHandle1.set(structSegmt2, (short) 78);
shortHandle2.set(structSegmt2, (short) 67);
MemorySegment resultSegmt = (MemorySegment) mh.invokeExact(allocator, structSegmt1, structSegmt2);
Assert.assertEquals((short) shortHandle1.get(resultSegmt), (short) 134);
Assert.assertEquals((short) shortHandle2.get(resultSegmt), (short) 112);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addFloatAndFloatsFromNestedStruct_reverseOrder_1.
@Test
public void test_addFloatAndFloatsFromNestedStruct_reverseOrder_1() throws Throwable {
GroupLayout nestedStructLayout = MemoryLayout.structLayout(JAVA_FLOAT.withName("elem1"), JAVA_FLOAT.withName("elem2"));
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_FLOAT.withName("elem1"), nestedStructLayout.withName("struct_elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_FLOAT, JAVA_FLOAT, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addFloatAndFloatsFromNestedStruct_reverseOrder").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt = allocator.allocate(structLayout);
structSegmt.set(JAVA_FLOAT, 0, 31.22F);
structSegmt.set(JAVA_FLOAT, 4, 33.44F);
structSegmt.set(JAVA_FLOAT, 8, 35.66F);
float result = (float) mh.invokeExact(37.88F, structSegmt);
Assert.assertEquals(result, 138.2F, 0.01F);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class InvalidDownCallTests method test_invalidMemoryLayoutForReturnType.
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Unsupported layout.*")
public void test_invalidMemoryLayoutForReturnType() throws Throwable {
/* Temporarily disable the default library loading on AIX till we figure out a way
* around to handle the case as the official implementation in OpenJDK17 doesn't
* help to load the static libray (libc.a).
*/
if (isAixOS) {
throw new IllegalArgumentException("Unsupported layout");
} else {
NativeSymbol functionSymbol = clinker.lookup("strlen").get();
FunctionDescriptor fd = FunctionDescriptor.of(MemoryLayout.paddingLayout(64), JAVA_LONG);
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
fail("Failed to throw out IllegalArgumentException in the case of the invalid MemoryLayout");
}
}
Aggregations