@@ -208,6 +208,34 @@ static void doManaged(byte[] dest, int destOffset, int len, IntrinsifiedPMemoryV
208
208
}
209
209
}
210
210
211
+ @ GenerateUncached
212
+ static abstract class WriteBytesAtNode extends Node {
213
+ public abstract void execute (byte [] src , int srcOffset , int len , IntrinsifiedPMemoryView self , Object ptr , int offset );
214
+
215
+ @ Specialization (guards = "ptr != null" )
216
+ static void doNative (byte [] src , int srcOffset , int len , @ SuppressWarnings ("unused" ) IntrinsifiedPMemoryView self , Object ptr , int offset ,
217
+ @ CachedLibrary (limit = "1" ) InteropLibrary lib ) {
218
+ try {
219
+ for (int i = 0 ; i < len ; i ++) {
220
+ lib .writeArrayElement (ptr , offset + i , src [srcOffset + i ]);
221
+ }
222
+ } catch (UnsupportedMessageException | InvalidArrayIndexException | UnsupportedTypeException e ) {
223
+ throw CompilerDirectives .shouldNotReachHere ("native buffer read failed" );
224
+ }
225
+ }
226
+
227
+ @ Specialization (guards = "ptr == null" )
228
+ static void doManaged (byte [] src , int srcOffset , int len , IntrinsifiedPMemoryView self , @ SuppressWarnings ("unused" ) Object ptr , int offset ,
229
+ @ Cached SequenceNodes .GetSequenceStorageNode getStorageNode ,
230
+ @ Cached SequenceStorageNodes .SetItemScalarNode setItemNode ) {
231
+ // TODO assumes byte storage
232
+ SequenceStorage storage = getStorageNode .execute (self .getOwner ());
233
+ for (int i = 0 ; i < len ; i ++) {
234
+ setItemNode .execute (storage , offset + i , src [srcOffset + i ]);
235
+ }
236
+ }
237
+ }
238
+
211
239
static abstract class ReadItemAtNode extends Node {
212
240
public abstract Object execute (IntrinsifiedPMemoryView self , Object ptr , int offset );
213
241
@@ -274,74 +302,6 @@ static void doManaged(IntrinsifiedPMemoryView self, @SuppressWarnings("unused")
274
302
}
275
303
}
276
304
277
- static abstract class CopyBytesNode extends Node {
278
- public abstract void execute (IntrinsifiedPMemoryView dest , Object destPtr , int destOffset , IntrinsifiedPMemoryView src , Object srcPtr , int srcOffset , int nbytes );
279
-
280
- @ Specialization (guards = {"destPtr == null" , "srcPtr == null" })
281
- @ SuppressWarnings ("unused" )
282
- static void managedToManaged (IntrinsifiedPMemoryView dest , Object destPtr , int destOffset , IntrinsifiedPMemoryView src , Object srcPtr , int srcOffset , int nbytes ,
283
- @ Cached SequenceNodes .GetSequenceStorageNode getSequenceStorageNode ,
284
- @ Cached SequenceStorageNodes .MemCopyNode memCopyNode ) {
285
- // TODO assumes bytes storage
286
- SequenceStorage destStorage = getSequenceStorageNode .execute (dest .getOwner ());
287
- SequenceStorage srcStorage = getSequenceStorageNode .execute (src .getOwner ());
288
- memCopyNode .execute (destStorage , destOffset , srcStorage , srcOffset , nbytes );
289
- }
290
-
291
- @ Specialization (guards = {"destPtr != null" , "srcPtr == null" })
292
- @ SuppressWarnings ("unused" )
293
- static void managedToNative (IntrinsifiedPMemoryView dest , Object destPtr , int destOffset , IntrinsifiedPMemoryView src , Object srcPtr , int srcOffset , int nbytes ,
294
- @ Cached SequenceNodes .GetSequenceStorageNode getSequenceStorageNode ,
295
- @ Cached SequenceStorageNodes .GetItemScalarNode getItemNode ,
296
- @ Shared ("lib" ) @ CachedLibrary (limit = "1" ) InteropLibrary lib ) {
297
- // TODO assumes bytes storage
298
- // TODO avoid byte->int conversion
299
- // TODO explode?
300
- SequenceStorage srcStorage = getSequenceStorageNode .execute (src .getOwner ());
301
- try {
302
- for (int i = 0 ; i < nbytes ; i ++) {
303
- lib .writeArrayElement (destPtr , destOffset + i , (byte ) getItemNode .executeInt (srcStorage , srcOffset + i ));
304
- }
305
- } catch (UnsupportedMessageException | UnsupportedTypeException | InvalidArrayIndexException e ) {
306
- throw CompilerDirectives .shouldNotReachHere (e );
307
- }
308
- }
309
-
310
- @ Specialization (guards = {"destPtr == null" , "srcPtr != null" })
311
- @ SuppressWarnings ("unused" )
312
- static void nativeToManaged (IntrinsifiedPMemoryView dest , Object destPtr , int destOffset , IntrinsifiedPMemoryView src , Object srcPtr , int srcOffset , int nbytes ,
313
- @ Cached SequenceNodes .GetSequenceStorageNode getSequenceStorageNode ,
314
- @ Cached SequenceStorageNodes .SetItemScalarNode setItemNode ,
315
- @ Shared ("lib" ) @ CachedLibrary (limit = "1" ) InteropLibrary lib ) {
316
- // TODO assumes bytes storage
317
- // TODO avoid byte->int conversion
318
- // TODO explode?
319
- SequenceStorage destStorage = getSequenceStorageNode .execute (dest .getOwner ());
320
- try {
321
- for (int i = 0 ; i < nbytes ; i ++) {
322
- setItemNode .execute (destStorage , (byte ) lib .readArrayElement (srcPtr , srcOffset + i ) & 0xFF , destOffset + i );
323
- }
324
- } catch (UnsupportedMessageException | InvalidArrayIndexException e ) {
325
- throw CompilerDirectives .shouldNotReachHere (e );
326
- }
327
- }
328
-
329
- @ Specialization (guards = {"destPtr != null" , "srcPtr != null" })
330
- @ SuppressWarnings ("unused" )
331
- static void nativeToNative (IntrinsifiedPMemoryView dest , Object destPtr , int destOffset , IntrinsifiedPMemoryView src , Object srcPtr , int srcOffset , int nbytes ,
332
- @ Shared ("lib" ) @ CachedLibrary (limit = "1" ) InteropLibrary lib ) {
333
- // TODO call native memcpy?
334
- // TODO explode?
335
- try {
336
- for (int i = 0 ; i < nbytes ; i ++) {
337
- lib .writeArrayElement (destPtr , destOffset + i , lib .readArrayElement (srcPtr , srcOffset + i ));
338
- }
339
- } catch (UnsupportedMessageException | UnsupportedTypeException | InvalidArrayIndexException e ) {
340
- throw CompilerDirectives .shouldNotReachHere (e );
341
- }
342
- }
343
- }
344
-
345
305
@ ValueType
346
306
static class MemoryPointer {
347
307
public Object ptr ;
0 commit comments