@@ -291,6 +291,7 @@ let transform_primitive env (prim : L.primitive) args loc =
291
291
Primitive
292
292
(L. Pnot , [L. Lprim (Punboxed_float_comp (bf, CFge ), args, loc)], loc)
293
293
| Pbigarrayref (_unsafe , num_dimensions , kind , layout ), args -> (
294
+ (* CR mshinwell: factor out with the [Pbigarrayset] case *)
294
295
match
295
296
P.Bigarray_kind. from_lambda kind, P.Bigarray_layout. from_lambda layout
296
297
with
@@ -299,7 +300,19 @@ let transform_primitive env (prim : L.primitive) args loc =
299
300
if 1 < = num_dimensions && num_dimensions < = 3
300
301
then
301
302
let arity = 1 + num_dimensions in
302
- let name = " caml_ba_get_" ^ string_of_int num_dimensions in
303
+ let is_float32_t =
304
+ match kind with
305
+ | Pbigarray_float32_t -> " float32_"
306
+ | Pbigarray_unknown | Pbigarray_float32 | Pbigarray_float64
307
+ | Pbigarray_sint8 | Pbigarray_uint8 | Pbigarray_sint16
308
+ | Pbigarray_uint16 | Pbigarray_int32 | Pbigarray_int64
309
+ | Pbigarray_caml_int | Pbigarray_native_int | Pbigarray_complex32
310
+ | Pbigarray_complex64 ->
311
+ " "
312
+ in
313
+ let name =
314
+ " caml_ba_" ^ is_float32_t ^ " get_" ^ string_of_int num_dimensions
315
+ in
303
316
let desc = Lambda. simple_prim_on_values ~name ~arity ~alloc: true in
304
317
Primitive (L. Pccall desc, args, loc)
305
318
else
@@ -316,7 +329,19 @@ let transform_primitive env (prim : L.primitive) args loc =
316
329
if 1 < = num_dimensions && num_dimensions < = 3
317
330
then
318
331
let arity = 2 + num_dimensions in
319
- let name = " caml_ba_set_" ^ string_of_int num_dimensions in
332
+ let is_float32_t =
333
+ match kind with
334
+ | Pbigarray_float32_t -> " float32_"
335
+ | Pbigarray_unknown | Pbigarray_float32 | Pbigarray_float64
336
+ | Pbigarray_sint8 | Pbigarray_uint8 | Pbigarray_sint16
337
+ | Pbigarray_uint16 | Pbigarray_int32 | Pbigarray_int64
338
+ | Pbigarray_caml_int | Pbigarray_native_int | Pbigarray_complex32
339
+ | Pbigarray_complex64 ->
340
+ " "
341
+ in
342
+ let name =
343
+ " caml_ba_" ^ is_float32_t ^ " set_" ^ string_of_int num_dimensions
344
+ in
320
345
let desc = Lambda. simple_prim_on_values ~name ~arity ~alloc: true in
321
346
Primitive (L. Pccall desc, args, loc)
322
347
else
@@ -589,22 +614,27 @@ let primitive_can_raise (prim : Lambda.primitive) =
589
614
| Pstringrefs | Pbytesrefs | Pbytessets
590
615
| Pstring_load_16 false
591
616
| Pstring_load_32 (false , _)
617
+ | Pstring_load_f32 (false , _)
592
618
| Pstring_load_64 (false , _)
593
619
| Pstring_load_128 { unsafe = false ; _ }
594
620
| Pbytes_load_16 false
595
621
| Pbytes_load_32 (false , _)
622
+ | Pbytes_load_f32 (false , _)
596
623
| Pbytes_load_64 (false , _)
597
624
| Pbytes_load_128 { unsafe = false ; _ }
598
625
| Pbytes_set_16 false
599
626
| Pbytes_set_32 false
627
+ | Pbytes_set_f32 false
600
628
| Pbytes_set_64 false
601
629
| Pbytes_set_128 { unsafe = false ; _ }
602
630
| Pbigstring_load_16 { unsafe = false }
603
631
| Pbigstring_load_32 { unsafe = false ; mode = _; boxed = _ }
632
+ | Pbigstring_load_f32 { unsafe = false ; mode = _; boxed = _ }
604
633
| Pbigstring_load_64 { unsafe = false ; mode = _; boxed = _ }
605
634
| Pbigstring_load_128 { unsafe = false ; _ }
606
635
| Pbigstring_set_16 { unsafe = false }
607
636
| Pbigstring_set_32 { unsafe = false ; boxed = _ }
637
+ | Pbigstring_set_f32 { unsafe = false ; boxed = _ }
608
638
| Pbigstring_set_64 { unsafe = false ; boxed = _ }
609
639
| Pbigstring_set_128 { unsafe = false ; _ }
610
640
| Pfloatarray_load_128 { unsafe = false ; _ }
@@ -662,37 +692,44 @@ let primitive_can_raise (prim : Lambda.primitive) =
662
692
| Pbigarrayref
663
693
( true ,
664
694
_,
665
- ( Pbigarray_float32 | Pbigarray_float64 | Pbigarray_sint8
666
- | Pbigarray_uint8 | Pbigarray_sint16 | Pbigarray_uint16
667
- | Pbigarray_int32 | Pbigarray_int64 | Pbigarray_caml_int
668
- | Pbigarray_native_int | Pbigarray_complex32 | Pbigarray_complex64 ),
695
+ ( Pbigarray_float32 | Pbigarray_float32_t | Pbigarray_float64
696
+ | Pbigarray_sint8 | Pbigarray_uint8 | Pbigarray_sint16
697
+ | Pbigarray_uint16 | Pbigarray_int32 | Pbigarray_int64
698
+ | Pbigarray_caml_int | Pbigarray_native_int | Pbigarray_complex32
699
+ | Pbigarray_complex64 ),
669
700
_ )
670
701
| Pbigarrayset
671
702
( true ,
672
703
_,
673
- ( Pbigarray_float32 | Pbigarray_float64 | Pbigarray_sint8
674
- | Pbigarray_uint8 | Pbigarray_sint16 | Pbigarray_uint16
675
- | Pbigarray_int32 | Pbigarray_int64 | Pbigarray_caml_int
676
- | Pbigarray_native_int | Pbigarray_complex32 | Pbigarray_complex64 ),
704
+ ( Pbigarray_float32 | Pbigarray_float32_t | Pbigarray_float64
705
+ | Pbigarray_sint8 | Pbigarray_uint8 | Pbigarray_sint16
706
+ | Pbigarray_uint16 | Pbigarray_int32 | Pbigarray_int64
707
+ | Pbigarray_caml_int | Pbigarray_native_int | Pbigarray_complex32
708
+ | Pbigarray_complex64 ),
677
709
(Pbigarray_c_layout | Pbigarray_fortran_layout ) )
678
710
| Pstring_load_16 true
679
711
| Pstring_load_32 (true , _)
712
+ | Pstring_load_f32 (true , _)
680
713
| Pstring_load_64 (true , _)
681
714
| Pstring_load_128 { unsafe = true ; _ }
682
715
| Pbytes_load_16 true
683
716
| Pbytes_load_32 (true , _)
717
+ | Pbytes_load_f32 (true , _)
684
718
| Pbytes_load_64 (true , _)
685
719
| Pbytes_load_128 { unsafe = true ; _ }
686
720
| Pbytes_set_16 true
687
721
| Pbytes_set_32 true
722
+ | Pbytes_set_f32 true
688
723
| Pbytes_set_64 true
689
724
| Pbytes_set_128 { unsafe = true ; _ }
690
725
| Pbigstring_load_16 { unsafe = true }
691
726
| Pbigstring_load_32 { unsafe = true ; mode = _; boxed = _ }
727
+ | Pbigstring_load_f32 { unsafe = true ; mode = _; boxed = _ }
692
728
| Pbigstring_load_64 { unsafe = true ; mode = _; boxed = _ }
693
729
| Pbigstring_load_128 { unsafe = true ; _ }
694
730
| Pbigstring_set_16 { unsafe = true }
695
731
| Pbigstring_set_32 { unsafe = true ; boxed = _ }
732
+ | Pbigstring_set_f32 { unsafe = true ; boxed = _ }
696
733
| Pbigstring_set_64 { unsafe = true ; boxed = _ }
697
734
| Pbigstring_set_128 { unsafe = true ; _ }
698
735
| Pfloatarray_load_128 { unsafe = true ; _ }
0 commit comments