use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_add2FloatStructs_returnStructPointer_1.
@Test
public void test_add2FloatStructs_returnStructPointer_1() throws Throwable {
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_FLOAT.withName("elem1"), JAVA_FLOAT.withName("elem2"));
VarHandle floatHandle1 = structLayout.varHandle(PathElement.groupElement("elem1"));
VarHandle floatHandle2 = structLayout.varHandle(PathElement.groupElement("elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(ADDRESS, ADDRESS, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("add2FloatStructs_returnStructPointer").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt1 = allocator.allocate(structLayout);
floatHandle1.set(structSegmt1, 25.12F);
floatHandle2.set(structSegmt1, 11.23F);
MemorySegment structSegmt2 = allocator.allocate(structLayout);
floatHandle1.set(structSegmt2, 24.34F);
floatHandle2.set(structSegmt2, 13.45F);
MemoryAddress resultAddr = (MemoryAddress) mh.invoke(structSegmt1, structSegmt2);
Assert.assertEquals(resultAddr.get(JAVA_FLOAT, 0), 49.46F, 0.01F);
Assert.assertEquals(resultAddr.get(JAVA_FLOAT, 4), 24.68F, 0.01F);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addFloatAndFloatsFromStruct_1.
@Test
public void test_addFloatAndFloatsFromStruct_1() throws Throwable {
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_FLOAT.withName("elem1"), JAVA_FLOAT.withName("elem2"));
VarHandle floatHandle1 = structLayout.varHandle(PathElement.groupElement("elem1"));
VarHandle floatHandle2 = structLayout.varHandle(PathElement.groupElement("elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_FLOAT, JAVA_FLOAT, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addFloatAndFloatsFromStruct").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt = allocator.allocate(structLayout);
floatHandle1.set(structSegmt, 8.12F);
floatHandle2.set(structSegmt, 9.24F);
float result = (float) mh.invokeExact(6.56F, structSegmt);
Assert.assertEquals(result, 23.92F, 0.01F);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addIntAndShortIntFromStruct_1.
@Test
public void test_addIntAndShortIntFromStruct_1() throws Throwable {
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_SHORT.withName("elem1"), MemoryLayout.paddingLayout(JAVA_SHORT.bitSize()), JAVA_INT.withName("elem2"));
VarHandle elemHandle1 = structLayout.varHandle(PathElement.groupElement("elem1"));
VarHandle elemHandle2 = structLayout.varHandle(PathElement.groupElement("elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_INT, JAVA_INT, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addIntAndShortIntFromStruct").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt = allocator.allocate(structLayout);
elemHandle1.set(structSegmt, (short) 32766);
elemHandle2.set(structSegmt, 22446688);
int result = (int) mh.invokeExact(11335577, structSegmt);
Assert.assertEquals(result, 33815031);
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_addCharAndCharsFromStructWithNestedCharArray_1.
@Test
public void test_addCharAndCharsFromStructWithNestedCharArray_1() throws Throwable {
SequenceLayout charArray = MemoryLayout.sequenceLayout(2, JAVA_CHAR);
GroupLayout structLayout = MemoryLayout.structLayout(charArray.withName("array_elem1"), JAVA_CHAR.withName("elem2"), MemoryLayout.paddingLayout(JAVA_CHAR.bitSize()));
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_CHAR, JAVA_CHAR, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("addCharAndCharsFromStructWithNestedCharArray").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_CHAR, 0, 'A');
structSegmt.set(JAVA_CHAR, 2, 'B');
structSegmt.set(JAVA_CHAR, 4, 'C');
char result = (char) mh.invokeExact('D', structSegmt);
Assert.assertEquals(result, 'G');
}
}
use of jdk.incubator.foreign.NativeSymbol in project openj9 by eclipse.
the class StructTests1 method test_add2BoolStructsWithXor_returnStructPointer_1.
@Test
public void test_add2BoolStructsWithXor_returnStructPointer_1() throws Throwable {
GroupLayout structLayout = MemoryLayout.structLayout(JAVA_BOOLEAN.withName("elem1"), JAVA_BOOLEAN.withName("elem2"));
VarHandle boolHandle1 = structLayout.varHandle(PathElement.groupElement("elem1"));
VarHandle boolHandle2 = structLayout.varHandle(PathElement.groupElement("elem2"));
FunctionDescriptor fd = FunctionDescriptor.of(ADDRESS, ADDRESS, structLayout);
NativeSymbol functionSymbol = nativeLibLookup.lookup("add2BoolStructsWithXor_returnStructPointer").get();
MethodHandle mh = clinker.downcallHandle(functionSymbol, fd);
try (ResourceScope scope = ResourceScope.newConfinedScope()) {
SegmentAllocator allocator = SegmentAllocator.nativeAllocator(scope);
MemorySegment structSegmt1 = allocator.allocate(structLayout);
boolHandle1.set(structSegmt1, true);
boolHandle2.set(structSegmt1, false);
MemorySegment structSegmt2 = allocator.allocate(structLayout);
boolHandle1.set(structSegmt2, true);
boolHandle2.set(structSegmt2, true);
MemoryAddress resultAddr = (MemoryAddress) mh.invoke(structSegmt1, structSegmt2);
Assert.assertEquals(resultAddr.get(JAVA_BOOLEAN, 0), false);
Assert.assertEquals(resultAddr.get(JAVA_BOOLEAN, 1), true);
}
}
Aggregations