@@ -351,6 +351,104 @@ caml_binaryen_unreachable(value _module) {
351351 CAMLreturn (alloc_BinaryenExpressionRef (exp ));
352352}
353353
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+
354452CAMLprim value
355453caml_binaryen_memory_init (value _module , value _segment , value _dest , value _offset , value _size , value _memoryName ) {
356454 CAMLparam5 (_module , _segment , _dest , _offset , _size );
0 commit comments