Skip to content

Commit 70819a5

Browse files
authored
flambda-backend: 128-bit load/store primitives for GC'd arrays (#2247)
1 parent e787c94 commit 70819a5

File tree

8 files changed

+280
-2
lines changed

8 files changed

+280
-2
lines changed

bytecomp/bytegen.ml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ let preserve_tailcall_for_prim = function
145145
| Pbytes_set_16 _ | Pbytes_set_32 _ | Pbytes_set_64 _ | Pbytes_set_128 _
146146
| Pbigstring_load_16 _ | Pbigstring_load_32 _ | Pbigstring_load_64 _
147147
| Pbigstring_load_128 _ | Pbigstring_set_16 _ | Pbigstring_set_32 _
148+
| Pfloatarray_load_128 _ | Pfloat_array_load_128 _ | Pint_array_load_128 _
149+
| Punboxed_float_array_load_128 _ | Punboxed_int32_array_load_128 _
150+
| Punboxed_int64_array_load_128 _ | Punboxed_nativeint_array_load_128 _
151+
| Pfloatarray_set_128 _ | Pfloat_array_set_128 _ | Pint_array_set_128 _
152+
| Punboxed_float_array_set_128 _ | Punboxed_int32_array_set_128 _
153+
| Punboxed_int64_array_set_128 _ | Punboxed_nativeint_array_set_128 _
148154
| Pbigstring_set_64 _ | Pbigstring_set_128 _
149155
| Pprobe_is_enabled _ | Pobj_dup
150156
| Pctconst _ | Pbswap16 | Pbbswap _ | Pint_as_pointer _
@@ -593,7 +599,13 @@ let comp_primitive stack_info p sz args =
593599
| Patomic_fetch_add -> Kccall("caml_atomic_fetch_add", 2)
594600
| Pdls_get -> Kccall("caml_domain_dls_get", 1)
595601
| Pstring_load_128 _ | Pbytes_load_128 _ | Pbytes_set_128 _
596-
| Pbigstring_load_128 _ | Pbigstring_set_128 _ ->
602+
| Pbigstring_load_128 _ | Pbigstring_set_128 _
603+
| Pfloatarray_load_128 _ | Pfloat_array_load_128 _ | Pint_array_load_128 _
604+
| Punboxed_float_array_load_128 _ | Punboxed_int32_array_load_128 _
605+
| Punboxed_int64_array_load_128 _ | Punboxed_nativeint_array_load_128 _
606+
| Pfloatarray_set_128 _ | Pfloat_array_set_128 _ | Pint_array_set_128 _
607+
| Punboxed_float_array_set_128 _ | Punboxed_int32_array_set_128 _
608+
| Punboxed_int64_array_set_128 _ | Punboxed_nativeint_array_set_128 _ ->
597609
fatal_error "128-bit load/store is not supported in bytecode mode."
598610
(* The cases below are handled in [comp_expr] before the [comp_primitive] call
599611
(in the order in which they appear below),

lambda/lambda.ml

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,21 @@ type primitive =
253253
| Pbigstring_set_32 of { unsafe : bool; boxed : bool }
254254
| Pbigstring_set_64 of { unsafe : bool; boxed : bool }
255255
| Pbigstring_set_128 of { aligned : bool; unsafe : bool; boxed : bool }
256+
(* load/set SIMD vectors in GC-managed arrays *)
257+
| Pfloatarray_load_128 of { unsafe : bool; mode : alloc_mode }
258+
| Pfloat_array_load_128 of { unsafe : bool; mode : alloc_mode }
259+
| Pint_array_load_128 of { unsafe : bool; mode : alloc_mode }
260+
| Punboxed_float_array_load_128 of { unsafe : bool; mode : alloc_mode }
261+
| Punboxed_int32_array_load_128 of { unsafe : bool; mode : alloc_mode }
262+
| Punboxed_int64_array_load_128 of { unsafe : bool; mode : alloc_mode }
263+
| Punboxed_nativeint_array_load_128 of { unsafe : bool; mode : alloc_mode }
264+
| Pfloatarray_set_128 of { unsafe : bool }
265+
| Pfloat_array_set_128 of { unsafe : bool }
266+
| Pint_array_set_128 of { unsafe : bool }
267+
| Punboxed_float_array_set_128 of { unsafe : bool }
268+
| Punboxed_int32_array_set_128 of { unsafe : bool }
269+
| Punboxed_int64_array_set_128 of { unsafe : bool }
270+
| Punboxed_nativeint_array_set_128 of { unsafe : bool }
256271
(* Compile time constants *)
257272
| Pctconst of compile_time_constant
258273
(* byte swap *)
@@ -402,6 +417,12 @@ let equal_boxed_vector_size v1 v2 =
402417
match v1, v2 with
403418
| Pvec128 _, Pvec128 _ -> true
404419

420+
let compare_boxed_vector = Stdlib.compare
421+
422+
let print_boxed_vector ppf t =
423+
match t with
424+
| Pvec128 v -> Format.pp_print_string ppf (vec128_name v)
425+
405426
let join_vec128_types v1 v2 =
406427
match v1, v2 with
407428
| Unknown128, _ | _, Unknown128 -> Unknown128
@@ -1596,6 +1617,13 @@ let primitive_may_allocate : primitive -> alloc_mode option = function
15961617
| Pstring_load_32 (_, m) | Pbytes_load_32 (_, m)
15971618
| Pstring_load_64 (_, m) | Pbytes_load_64 (_, m)
15981619
| Pstring_load_128 { mode = m; _ } | Pbytes_load_128 { mode = m; _ }
1620+
| Pfloatarray_load_128 { mode = m; _ }
1621+
| Pfloat_array_load_128 { mode = m; _ }
1622+
| Pint_array_load_128 { mode = m; _ }
1623+
| Punboxed_float_array_load_128 { mode = m; _ }
1624+
| Punboxed_int32_array_load_128 { mode = m; _ }
1625+
| Punboxed_int64_array_load_128 { mode = m; _ }
1626+
| Punboxed_nativeint_array_load_128 { mode = m; _ }
15991627
| Pget_header m -> Some m
16001628
| Pbytes_set_16 _ | Pbytes_set_32 _ | Pbytes_set_64 _ | Pbytes_set_128 _ -> None
16011629
| Pbigstring_load_16 _ -> None
@@ -1606,7 +1634,10 @@ let primitive_may_allocate : primitive -> alloc_mode option = function
16061634
| Pbigstring_load_64 { boxed = false; _ }
16071635
| Pbigstring_load_128 { boxed = false; _ } -> None
16081636
| Pbigstring_set_16 _ | Pbigstring_set_32 _
1609-
| Pbigstring_set_64 _ | Pbigstring_set_128 _ -> None
1637+
| Pbigstring_set_64 _ | Pbigstring_set_128 _
1638+
| Pfloatarray_set_128 _ | Pfloat_array_set_128 _ | Pint_array_set_128 _
1639+
| Punboxed_float_array_set_128 _ | Punboxed_int32_array_set_128 _
1640+
| Punboxed_int64_array_set_128 _ | Punboxed_nativeint_array_set_128 _ -> None
16101641
| Pctconst _ -> None
16111642
| Pbswap16 -> None
16121643
| Pbbswap (_, m) -> Some m
@@ -1677,6 +1708,9 @@ let primitive_result_layout (p : primitive) =
16771708
| Pbytessetu | Pbytessets | Parraysetu _ | Parraysets _ | Pbigarrayset _
16781709
| Pbytes_set_16 _ | Pbytes_set_32 _ | Pbytes_set_64 _ | Pbytes_set_128 _
16791710
| Pbigstring_set_16 _ | Pbigstring_set_32 _ | Pbigstring_set_64 _ | Pbigstring_set_128 _
1711+
| Pfloatarray_set_128 _ | Pfloat_array_set_128 _ | Pint_array_set_128 _
1712+
| Punboxed_float_array_set_128 _ | Punboxed_int32_array_set_128 _
1713+
| Punboxed_int64_array_set_128 _ | Punboxed_nativeint_array_set_128 _
16801714
-> layout_unit
16811715
| Pgetglobal _ | Psetglobal _ | Pgetpredef _ -> layout_module_field
16821716
| Pmakeblock _ | Pmakefloatblock _ | Pmakearray _ | Pduprecord _
@@ -1732,6 +1766,16 @@ let primitive_result_layout (p : primitive) =
17321766
| Pbigstring_load_64 { boxed = false; _ } -> layout_unboxed_int Pint64
17331767
| Pbigstring_load_128 { boxed = false; _ } ->
17341768
layout_unboxed_vector (Pvec128 Int8x16)
1769+
| Pfloatarray_load_128 _ | Pfloat_array_load_128 _
1770+
| Punboxed_float_array_load_128 _ ->
1771+
layout_boxed_vector (Pvec128 Float64x2)
1772+
| Pint_array_load_128 _ | Punboxed_int64_array_load_128 _
1773+
| Punboxed_nativeint_array_load_128 _ ->
1774+
(* 128-bit types are only supported in the x86_64 backend, so we may
1775+
assume that nativeint is 64 bits. *)
1776+
layout_boxed_vector (Pvec128 Int64x2)
1777+
| Punboxed_int32_array_load_128 _ ->
1778+
layout_boxed_vector (Pvec128 Int32x4)
17351779
| Pbigarrayref (_, _, kind, _) ->
17361780
begin match kind with
17371781
| Pbigarray_unknown -> layout_any_value

lambda/lambda.mli

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,21 @@ type primitive =
215215
| Pbigstring_set_32 of { unsafe : bool; boxed : bool }
216216
| Pbigstring_set_64 of { unsafe : bool; boxed : bool }
217217
| Pbigstring_set_128 of { aligned : bool; unsafe : bool; boxed : bool }
218+
(* load/set SIMD vectors in GC-managed arrays *)
219+
| Pfloatarray_load_128 of { unsafe : bool; mode : alloc_mode }
220+
| Pfloat_array_load_128 of { unsafe : bool; mode : alloc_mode }
221+
| Pint_array_load_128 of { unsafe : bool; mode : alloc_mode }
222+
| Punboxed_float_array_load_128 of { unsafe : bool; mode : alloc_mode }
223+
| Punboxed_int32_array_load_128 of { unsafe : bool; mode : alloc_mode }
224+
| Punboxed_int64_array_load_128 of { unsafe : bool; mode : alloc_mode }
225+
| Punboxed_nativeint_array_load_128 of { unsafe : bool; mode : alloc_mode }
226+
| Pfloatarray_set_128 of { unsafe : bool }
227+
| Pfloat_array_set_128 of { unsafe : bool }
228+
| Pint_array_set_128 of { unsafe : bool }
229+
| Punboxed_float_array_set_128 of { unsafe : bool }
230+
| Punboxed_int32_array_set_128 of { unsafe : bool }
231+
| Punboxed_int64_array_set_128 of { unsafe : bool }
232+
| Punboxed_nativeint_array_set_128 of { unsafe : bool }
218233
(* Compile time constants *)
219234
| Pctconst of compile_time_constant
220235
(* byte swap *)
@@ -380,6 +395,10 @@ val equal_boxed_integer : boxed_integer -> boxed_integer -> bool
380395

381396
val equal_boxed_vector_size : boxed_vector -> boxed_vector -> bool
382397

398+
val compare_boxed_vector : boxed_vector -> boxed_vector -> int
399+
400+
val print_boxed_vector : Format.formatter -> boxed_vector -> unit
401+
383402
val must_be_value : layout -> value_kind
384403

385404
(* This is the layout of ocaml values used as arguments to or returned from

lambda/printlambda.ml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,48 @@ let primitive ppf = function
612612
fprintf ppf "bigarray.array1.unaligned_set128"
613613
| Pbigstring_set_128 {unsafe = false; aligned = true} ->
614614
fprintf ppf "bigarray.array1.aligned_set128"
615+
| Pfloatarray_load_128 {unsafe; mode} ->
616+
if unsafe then fprintf ppf "floatarray.unsafe_get128%s" (alloc_kind mode)
617+
else fprintf ppf "floatarray.get128%s" (alloc_kind mode)
618+
| Pfloat_array_load_128 {unsafe; mode} ->
619+
if unsafe then fprintf ppf "float_array.unsafe_get128%s" (alloc_kind mode)
620+
else fprintf ppf "float_array.get128%s" (alloc_kind mode)
621+
| Pint_array_load_128 {unsafe; mode} ->
622+
if unsafe then fprintf ppf "int_array.unsafe_get128%s" (alloc_kind mode)
623+
else fprintf ppf "int_array.get128%s" (alloc_kind mode)
624+
| Punboxed_float_array_load_128 {unsafe; mode} ->
625+
if unsafe then fprintf ppf "unboxed_float_array.unsafe_get128%s" (alloc_kind mode)
626+
else fprintf ppf "unboxed_float_array.get128%s" (alloc_kind mode)
627+
| Punboxed_int32_array_load_128 {unsafe; mode} ->
628+
if unsafe then fprintf ppf "unboxed_int32_array.unsafe_get128%s" (alloc_kind mode)
629+
else fprintf ppf "unboxed_int32_array.get128%s" (alloc_kind mode)
630+
| Punboxed_int64_array_load_128 {unsafe; mode} ->
631+
if unsafe then fprintf ppf "unboxed_int64_array.unsafe_get128%s" (alloc_kind mode)
632+
else fprintf ppf "unboxed_int64_array.get128%s" (alloc_kind mode)
633+
| Punboxed_nativeint_array_load_128 {unsafe; mode} ->
634+
if unsafe then fprintf ppf "unboxed_nativeint_array.unsafe_get128%s" (alloc_kind mode)
635+
else fprintf ppf "unboxed_nativeint_array.get128%s" (alloc_kind mode)
636+
| Pfloatarray_set_128 {unsafe} ->
637+
if unsafe then fprintf ppf "floatarray.unsafe_set128"
638+
else fprintf ppf "floatarray.set128"
639+
| Pfloat_array_set_128 {unsafe} ->
640+
if unsafe then fprintf ppf "float_array.unsafe_set128"
641+
else fprintf ppf "float_array.set128"
642+
| Pint_array_set_128 {unsafe} ->
643+
if unsafe then fprintf ppf "int_array.unsafe_set128"
644+
else fprintf ppf "int_array.set128"
645+
| Punboxed_float_array_set_128 {unsafe} ->
646+
if unsafe then fprintf ppf "unboxed_float_array.unsafe_set128"
647+
else fprintf ppf "unboxed_float_array.set128"
648+
| Punboxed_int32_array_set_128 {unsafe} ->
649+
if unsafe then fprintf ppf "unboxed_int32_array.unsafe_set128"
650+
else fprintf ppf "unboxed_int32_array.set128"
651+
| Punboxed_int64_array_set_128 {unsafe} ->
652+
if unsafe then fprintf ppf "unboxed_int64_array.unsafe_set128"
653+
else fprintf ppf "unboxed_int64_array.set128"
654+
| Punboxed_nativeint_array_set_128 {unsafe} ->
655+
if unsafe then fprintf ppf "unboxed_nativeint_array.unsafe_set128"
656+
else fprintf ppf "unboxed_nativeint_array.set128"
615657
| Pbswap16 -> fprintf ppf "bswap16"
616658
| Pbbswap(bi,m) -> print_boxed_integer "bswap" ppf bi m
617659
| Pint_as_pointer m -> fprintf ppf "int_as_pointer%s" (alloc_kind m)
@@ -750,6 +792,20 @@ let name_of_primitive = function
750792
| Pbigstring_set_32 _ -> "Pbigstring_set_32"
751793
| Pbigstring_set_64 _ -> "Pbigstring_set_64"
752794
| Pbigstring_set_128 _ -> "Pbigstring_set_128"
795+
| Pfloatarray_load_128 _ -> "Pfloatarray_load_128"
796+
| Pfloat_array_load_128 _ -> "Pfloat_array_load_128"
797+
| Pint_array_load_128 _ -> "Pint_array_load_128"
798+
| Punboxed_float_array_load_128 _ -> "Punboxed_float_array_load_128"
799+
| Punboxed_int32_array_load_128 _ -> "Punboxed_int32_array_load_128"
800+
| Punboxed_int64_array_load_128 _ -> "Punboxed_int64_array_load_128"
801+
| Punboxed_nativeint_array_load_128 _ -> "Punboxed_nativeint_array_load_128"
802+
| Pfloatarray_set_128 _ -> "Pfloatarray_set_128"
803+
| Pfloat_array_set_128 _ -> "Pfloat_array_set_128"
804+
| Pint_array_set_128 _ -> "Pint_array_set_128"
805+
| Punboxed_float_array_set_128 _ -> "Punboxed_float_array_set_128"
806+
| Punboxed_int32_array_set_128 _ -> "Punboxed_int32_array_set_128"
807+
| Punboxed_int64_array_set_128 _ -> "Punboxed_int64_array_set_128"
808+
| Punboxed_nativeint_array_set_128 _ -> "Punboxed_nativeint_array_set_128"
753809
| Pbswap16 -> "Pbswap16"
754810
| Pbbswap _ -> "Pbbswap"
755811
| Pint_as_pointer _ -> "Pint_as_pointer"

lambda/tmc.ml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,20 @@ let rec choice ctx t =
942942
| Pbigstring_load_16 _ | Pbigstring_load_32 _ | Pbigstring_load_64 _
943943
| Pbigstring_load_128 _ | Pbigstring_set_16 _ | Pbigstring_set_32 _
944944
| Pbigstring_set_64 _ | Pbigstring_set_128 _
945+
| Pfloatarray_load_128 _
946+
| Pfloat_array_load_128 _
947+
| Pint_array_load_128 _
948+
| Punboxed_float_array_load_128 _
949+
| Punboxed_int32_array_load_128 _
950+
| Punboxed_int64_array_load_128 _
951+
| Punboxed_nativeint_array_load_128 _
952+
| Pfloatarray_set_128 _
953+
| Pfloat_array_set_128 _
954+
| Pint_array_set_128 _
955+
| Punboxed_float_array_set_128 _
956+
| Punboxed_int32_array_set_128 _
957+
| Punboxed_int64_array_set_128 _
958+
| Punboxed_nativeint_array_set_128 _
945959
| Pget_header _
946960
| Pctconst _
947961
| Pbswap16

lambda/translprim.ml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,62 @@ let lookup_primitive loc ~poly_mode ~poly_sort pos p =
548548
| "%caml_bigstring_seta128u#" ->
549549
Primitive ((Pbigstring_set_128 {aligned = true; unsafe = true;
550550
boxed = false}), 3)
551+
| "%caml_float_array_get128" ->
552+
Primitive ((Pfloat_array_load_128 {unsafe = false; mode}), 2)
553+
| "%caml_float_array_get128u" ->
554+
Primitive ((Pfloat_array_load_128 {unsafe = true; mode}), 2)
555+
| "%caml_floatarray_get128" ->
556+
Primitive ((Pfloatarray_load_128 {unsafe = false; mode}), 2)
557+
| "%caml_floatarray_get128u" ->
558+
Primitive ((Pfloatarray_load_128 {unsafe = true; mode}), 2)
559+
| "%caml_unboxed_float_array_get128" ->
560+
Primitive ((Punboxed_float_array_load_128 {unsafe = false; mode}), 2)
561+
| "%caml_unboxed_float_array_get128u" ->
562+
Primitive ((Punboxed_float_array_load_128 {unsafe = true; mode}), 2)
563+
| "%caml_int_array_get128" ->
564+
Primitive ((Pint_array_load_128 {unsafe = false; mode}), 2)
565+
| "%caml_int_array_get128u" ->
566+
Primitive ((Pint_array_load_128 {unsafe = true; mode}), 2)
567+
| "%caml_unboxed_int64_array_get128" ->
568+
Primitive ((Punboxed_int64_array_load_128 {unsafe = false; mode}), 2)
569+
| "%caml_unboxed_int64_array_get128u" ->
570+
Primitive ((Punboxed_int64_array_load_128 {unsafe = true; mode}), 2)
571+
| "%caml_unboxed_int32_array_get128" ->
572+
Primitive ((Punboxed_int32_array_load_128 {unsafe = false; mode}), 2)
573+
| "%caml_unboxed_int32_array_get128u" ->
574+
Primitive ((Punboxed_int32_array_load_128 {unsafe = true; mode}), 2)
575+
| "%caml_unboxed_nativeint_array_get128" ->
576+
Primitive ((Punboxed_nativeint_array_load_128 {unsafe = false; mode}), 2)
577+
| "%caml_unboxed_nativeint_array_get128u" ->
578+
Primitive ((Punboxed_nativeint_array_load_128 {unsafe = true; mode}), 2)
579+
| "%caml_float_array_set128" ->
580+
Primitive ((Pfloat_array_set_128 {unsafe = false}), 3)
581+
| "%caml_float_array_set128u" ->
582+
Primitive ((Pfloat_array_set_128 {unsafe = true}), 3)
583+
| "%caml_floatarray_set128" ->
584+
Primitive ((Pfloatarray_set_128 {unsafe = false}), 3)
585+
| "%caml_floatarray_set128u" ->
586+
Primitive ((Pfloatarray_set_128 {unsafe = true}), 3)
587+
| "%caml_unboxed_float_array_set128" ->
588+
Primitive ((Punboxed_float_array_set_128 {unsafe = false}), 3)
589+
| "%caml_unboxed_float_array_set128u" ->
590+
Primitive ((Punboxed_float_array_set_128 {unsafe = true}), 3)
591+
| "%caml_int_array_set128" ->
592+
Primitive ((Pint_array_set_128 {unsafe = false}), 3)
593+
| "%caml_int_array_set128u" ->
594+
Primitive ((Pint_array_set_128 {unsafe = true}), 3)
595+
| "%caml_unboxed_int64_array_set128" ->
596+
Primitive ((Punboxed_int64_array_set_128 {unsafe = false}), 3)
597+
| "%caml_unboxed_int64_array_set128u" ->
598+
Primitive ((Punboxed_int64_array_set_128 {unsafe = true}), 3)
599+
| "%caml_unboxed_int32_array_set128" ->
600+
Primitive ((Punboxed_int32_array_set_128 {unsafe = false}), 3)
601+
| "%caml_unboxed_int32_array_set128u" ->
602+
Primitive ((Punboxed_int32_array_set_128 {unsafe = true}), 3)
603+
| "%caml_unboxed_nativeint_array_set128" ->
604+
Primitive ((Punboxed_nativeint_array_set_128 {unsafe = false}), 3)
605+
| "%caml_unboxed_nativeint_array_set128u" ->
606+
Primitive ((Punboxed_nativeint_array_set_128 {unsafe = true}), 3)
551607
| "%bswap16" -> Primitive (Pbswap16, 1)
552608
| "%bswap_int32" -> Primitive ((Pbbswap(Pint32, mode)), 1)
553609
| "%bswap_int64" -> Primitive ((Pbbswap(Pint64, mode)), 1)
@@ -1248,6 +1304,12 @@ let lambda_primitive_needs_event_after = function
12481304
| Pbytes_set_32 _ | Pbytes_set_64 _ | Pbytes_set_128 _ | Pbigstring_load_16 _
12491305
| Pbigstring_load_32 _ | Pbigstring_load_64 _ | Pbigstring_load_128 _
12501306
| Pbigstring_set_16 _ | Pbigstring_set_32 _ | Pbigstring_set_64 _ | Pbigstring_set_128 _
1307+
| Pfloatarray_load_128 _ | Pfloat_array_load_128 _ | Pint_array_load_128 _
1308+
| Punboxed_float_array_load_128 _ | Punboxed_int32_array_load_128 _
1309+
| Punboxed_int64_array_load_128 _ | Punboxed_nativeint_array_load_128 _
1310+
| Pfloatarray_set_128 _ | Pfloat_array_set_128 _ | Pint_array_set_128 _
1311+
| Punboxed_float_array_set_128 _ | Punboxed_int32_array_set_128 _
1312+
| Punboxed_int64_array_set_128 _ | Punboxed_nativeint_array_set_128 _
12511313
| Prunstack | Pperform | Preperform | Presume
12521314
| Pbbswap _ | Pobj_dup | Pget_header _ -> true
12531315

middle_end/convert_primitives.ml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,20 @@ let convert (prim : Lambda.primitive) : Clambda_primitives.primitive =
205205
| Pstring_load_128 _
206206
| Pbytes_load_128 _
207207
| Pbytes_set_128 _
208+
| Pfloatarray_load_128 _
209+
| Pfloat_array_load_128 _
210+
| Pint_array_load_128 _
211+
| Punboxed_float_array_load_128 _
212+
| Punboxed_int32_array_load_128 _
213+
| Punboxed_int64_array_load_128 _
214+
| Punboxed_nativeint_array_load_128 _
215+
| Pfloatarray_set_128 _
216+
| Pfloat_array_set_128 _
217+
| Pint_array_set_128 _
218+
| Punboxed_float_array_set_128 _
219+
| Punboxed_int32_array_set_128 _
220+
| Punboxed_int64_array_set_128 _
221+
| Punboxed_nativeint_array_set_128 _
208222
->
209223
Misc.fatal_errorf "lambda primitive %a can't be converted to \
210224
clambda primitive"

0 commit comments

Comments
 (0)