use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMFloatArrayLiteralNode method foreignWriteFloat.
@Specialization(guards = "addr.isManaged()")
@ExplodeLoop
protected LLVMTruffleObject foreignWriteFloat(VirtualFrame frame, LLVMTruffleObject addr, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
LLVMTruffleObject currentPtr = addr;
for (int i = 0; i < values.length; i++) {
float currentValue = LLVMTypesGen.asFloat(values[i].executeGeneric(frame));
foreignWrite.execute(currentPtr, currentValue);
currentPtr = currentPtr.increment(stride);
}
return addr;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMI1ArrayLiteralNode method foreignWriteI1.
@Specialization(guards = "addr.isManaged()")
@ExplodeLoop
protected LLVMTruffleObject foreignWriteI1(VirtualFrame frame, LLVMTruffleObject addr, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
LLVMTruffleObject currentPtr = addr;
for (int i = 0; i < values.length; i++) {
boolean currentValue = LLVMTypesGen.asBoolean(values[i].executeGeneric(frame));
foreignWrite.execute(currentPtr, currentValue);
currentPtr = currentPtr.increment(stride);
}
return addr;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMI32ArrayLiteralNode method foreignWriteI32.
@Specialization(guards = "addr.isManaged()")
@ExplodeLoop
protected LLVMTruffleObject foreignWriteI32(VirtualFrame frame, LLVMTruffleObject addr, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
LLVMTruffleObject currentPtr = addr;
for (int i = 0; i < values.length; i++) {
int currentValue = LLVMTypesGen.asInteger(values[i].executeGeneric(frame));
foreignWrite.execute(currentPtr, currentValue);
currentPtr = currentPtr.increment(stride);
}
return addr;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMI8ArrayLiteralNode method foreignWriteI8.
@Specialization(guards = "addr.isManaged()")
@ExplodeLoop
protected LLVMTruffleObject foreignWriteI8(VirtualFrame frame, LLVMTruffleObject addr, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
LLVMTruffleObject currentPtr = addr;
for (int i = 0; i < values.length; i++) {
byte currentValue = LLVMTypesGen.asByte(values[i].executeGeneric(frame));
foreignWrite.execute(currentPtr, currentValue);
currentPtr = currentPtr.increment(stride);
}
return addr;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMStructArrayLiteralNode method writeDouble.
@Specialization
@ExplodeLoop
protected LLVMAddress writeDouble(VirtualFrame frame, LLVMAddress addr) {
long currentPtr = addr.getVal();
for (int i = 0; i < values.length; i++) {
try {
LLVMAddress currentValue = values[i].executeLLVMAddress(frame);
memMove.executeWithTarget(LLVMAddress.fromLong(currentPtr), currentValue, stride);
currentPtr += stride;
} catch (UnexpectedResultException e) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException(e);
}
}
return addr;
}
Aggregations