@@ -351,6 +351,104 @@ caml_binaryen_unreachable(value _module) {
351
351
CAMLreturn (alloc_BinaryenExpressionRef (exp ));
352
352
}
353
353
354
+ CAMLprim value
355
+ caml_binaryen_simd_extract (value _module , value _op , value _vec , value _index ) {
356
+ CAMLparam4 (_module , _op , _vec , _index );
357
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
358
+ BinaryenOp op = BinaryenOp_val (_op );
359
+ BinaryenExpressionRef vec = BinaryenExpressionRef_val (_vec );
360
+ int index = Int_val (_index );
361
+ BinaryenExpressionRef exp = BinaryenSIMDExtract (module , op , vec , index );
362
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
363
+ }
364
+
365
+ CAMLprim value
366
+ caml_binaryen_simd_replace (value _module , value _op , value _vec , value _index , value _val ) {
367
+ CAMLparam5 (_module , _op , _vec , _index , _val );
368
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
369
+ BinaryenOp op = BinaryenOp_val (_op );
370
+ BinaryenExpressionRef vec = BinaryenExpressionRef_val (_vec );
371
+ int index = Int_val (_index );
372
+ BinaryenExpressionRef val = BinaryenExpressionRef_val (_val );
373
+ BinaryenExpressionRef exp = BinaryenSIMDReplace (module , op , vec , index , val );
374
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
375
+ }
376
+
377
+ CAMLprim value
378
+ caml_binaryen_simd_shuffle (value _module , value _left , value _right , value _mask ) {
379
+ CAMLparam4 (_module , _left , _right , _mask );
380
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
381
+ BinaryenExpressionRef left = BinaryenExpressionRef_val (_left );
382
+ BinaryenExpressionRef right = BinaryenExpressionRef_val (_right );
383
+ uint8_t mask [16 ];
384
+ for (int i = 0 ; i < 16 ; i ++ ) {
385
+ mask [i ] = Int_val (Field (_mask , i ));
386
+ }
387
+ BinaryenExpressionRef exp = BinaryenSIMDShuffle (module , left , right , mask );
388
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
389
+ }
390
+
391
+ CAMLprim value
392
+ caml_binaryen_simd_ternary (value _module , value _op , value _a , value _b , value _c ) {
393
+ CAMLparam5 (_module , _op , _a , _b , _c );
394
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
395
+ BinaryenOp op = BinaryenOp_val (_op );
396
+ BinaryenExpressionRef a = BinaryenExpressionRef_val (_a );
397
+ BinaryenExpressionRef b = BinaryenExpressionRef_val (_b );
398
+ BinaryenExpressionRef c = BinaryenExpressionRef_val (_c );
399
+ BinaryenExpressionRef exp = BinaryenSIMDTernary (module , op , a , b , c );
400
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
401
+ }
402
+
403
+ CAMLprim value
404
+ caml_binaryen_simd_shift (value _module , value _op , value _vec , value _shift ) {
405
+ CAMLparam4 (_module , _op , _vec , _shift );
406
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
407
+ BinaryenOp op = BinaryenOp_val (_op );
408
+ BinaryenExpressionRef vec = BinaryenExpressionRef_val (_vec );
409
+ BinaryenExpressionRef shift = BinaryenExpressionRef_val (_shift );
410
+ BinaryenExpressionRef exp = BinaryenSIMDShift (module , op , vec , shift );
411
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
412
+ }
413
+
414
+ CAMLprim value
415
+ caml_binaryen_simd_load (value _module , value _op , value _offset , value _align , value _ptr , value _memoryName ) {
416
+ CAMLparam5 (_module , _op , _offset , _align , _ptr );
417
+ CAMLxparam1 (_memoryName );
418
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
419
+ BinaryenOp op = BinaryenOp_val (_op );
420
+ int offset = Int_val (_offset );
421
+ int align = Int_val (_align );
422
+ BinaryenExpressionRef ptr = BinaryenExpressionRef_val (_ptr );
423
+ char * memoryName = Safe_String_val (_memoryName );
424
+ BinaryenExpressionRef exp = BinaryenSIMDLoad (module , op , offset , align , ptr , memoryName );
425
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
426
+ }
427
+ CAMLprim value
428
+ caml_binaryen_simd_load__bytecode (value * argv ) {
429
+ return caml_binaryen_simd_load (argv [0 ], argv [1 ], argv [2 ], argv [3 ], argv [4 ], argv [5 ]);
430
+ }
431
+
432
+ CAMLprim value
433
+ caml_binaryen_simd_load_store_lane (value _module , value _op , value _offset , value _align , value _index , value _ptr , value _vec , value _memoryName ) {
434
+ CAMLparam5 (_module , _op , _offset , _align , _index );
435
+ CAMLxparam3 (_ptr , _vec , _memoryName );
436
+ BinaryenModuleRef module = BinaryenModuleRef_val (_module );
437
+ BinaryenOp op = BinaryenOp_val (_op );
438
+ int offset = Int_val (_offset );
439
+ int align = Int_val (_align );
440
+ int index = Int_val (_index );
441
+ BinaryenExpressionRef ptr = BinaryenExpressionRef_val (_ptr );
442
+ BinaryenExpressionRef vec = BinaryenExpressionRef_val (_vec );
443
+ char * memoryName = Safe_String_val (_memoryName );
444
+ BinaryenExpressionRef exp = BinaryenSIMDLoadStoreLane (module , op , offset , align , index , ptr , vec , memoryName );
445
+ CAMLreturn (alloc_BinaryenExpressionRef (exp ));
446
+ }
447
+ CAMLprim value
448
+ caml_binaryen_simd_load_store_lane__bytecode (value * argv ) {
449
+ return caml_binaryen_simd_load_store_lane (argv [0 ], argv [1 ], argv [2 ], argv [3 ], argv [4 ], argv [5 ], argv [6 ], argv [7 ]);
450
+ }
451
+
354
452
CAMLprim value
355
453
caml_binaryen_memory_init (value _module , value _segment , value _dest , value _offset , value _size , value _memoryName ) {
356
454
CAMLparam5 (_module , _segment , _dest , _offset , _size );
0 commit comments