use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMStructArrayLiteralNode method doVoid.
@Specialization(guards = { "noOffset(addr)" })
@ExplodeLoop
protected Object doVoid(VirtualFrame frame, LLVMTruffleObject addr) {
LLVMTruffleObject currentPtr = addr;
for (int i = 0; i < values.length; i++) {
LLVMTruffleObject currentValue = (LLVMTruffleObject) values[i].executeGeneric(frame);
memMove.executeWithTarget(currentPtr, currentValue, stride);
currentPtr = currentPtr.increment(stride);
}
return addr;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMStoreVectorNode method writeVector.
@Specialization(guards = "address.isManaged()")
@ExplodeLoop
protected Object writeVector(LLVMTruffleObject address, LLVMFunctionVector value, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
assert value.getLength() == vectorLength;
LLVMTruffleObject currentPtr = address;
for (int i = 0; i < vectorLength; i++) {
foreignWrite.execute(currentPtr, value.getValue(i));
currentPtr = currentPtr.increment(I64_SIZE_IN_BYTES);
}
return null;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMStoreVectorNode method writeVector.
@Specialization(guards = "address.isManaged()")
@ExplodeLoop
protected Object writeVector(LLVMTruffleObject address, LLVMI8Vector value, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
assert value.getLength() == vectorLength;
LLVMTruffleObject currentPtr = address;
for (int i = 0; i < vectorLength; i++) {
foreignWrite.execute(currentPtr, value.getValue(i));
currentPtr = currentPtr.increment(I8_SIZE_IN_BYTES);
}
return null;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVM80BitFloatStoreNode method doForeign.
// TODO (chaeubl): we could store this in a more efficient way (short + long)
@Specialization(guards = "address.isManaged()")
protected Object doForeign(LLVMTruffleObject address, LLVM80BitFloat value, @Cached("createForeignWrite()") LLVMForeignWriteNode foreignWrite) {
byte[] bytes = value.getBytes();
LLVMTruffleObject currentPtr = address;
for (int i = 0; i < bytes.length; i++) {
foreignWrite.execute(currentPtr, bytes[i]);
currentPtr = currentPtr.increment(I8_SIZE_IN_BYTES);
}
return null;
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMInteropWriteNode method doKnownType.
@Specialization(guards = "type != null")
void doKnownType(LLVMInteropType.Structured type, TruffleObject foreign, long offset, Object value, @Cached("create()") LLVMInteropAccessNode access) {
AccessLocation location = access.execute(type, foreign, offset);
write(location, value);
}
Aggregations