summaryrefslogtreecommitdiffstats
path: root/bytecomp
diff options
context:
space:
mode:
Diffstat (limited to 'bytecomp')
-rw-r--r--bytecomp/bytegen.ml1
-rw-r--r--bytecomp/lambda.ml2
-rw-r--r--bytecomp/lambda.mli2
-rw-r--r--bytecomp/printlambda.ml1
-rw-r--r--bytecomp/translcore.ml5
5 files changed, 10 insertions, 1 deletions
diff --git a/bytecomp/bytegen.ml b/bytecomp/bytegen.ml
index 502b15f83..ec528f98f 100644
--- a/bytecomp/bytegen.ml
+++ b/bytecomp/bytegen.ml
@@ -374,6 +374,7 @@ let comp_primitive p args =
| Pbintcomp(bi, Cge) -> Kccall("caml_greaterequal", 2)
| Pbigarrayref(_, n, _, _) -> Kccall("caml_ba_get_" ^ string_of_int n, n + 1)
| Pbigarrayset(_, n, _, _) -> Kccall("caml_ba_set_" ^ string_of_int n, n + 2)
+ | Pbigarraydim(n) -> Kccall("caml_ba_dim_" ^ string_of_int n, 1)
| _ -> fatal_error "Bytegen.comp_primitive"
let is_immed n = immed_min <= n && n <= immed_max
diff --git a/bytecomp/lambda.ml b/bytecomp/lambda.ml
index a8479052c..e2f9e06e1 100644
--- a/bytecomp/lambda.ml
+++ b/bytecomp/lambda.ml
@@ -84,6 +84,8 @@ type primitive =
(* Operations on big arrays: (unsafe, #dimensions, kind, layout) *)
| Pbigarrayref of bool * int * bigarray_kind * bigarray_layout
| Pbigarrayset of bool * int * bigarray_kind * bigarray_layout
+ (* size of the nth dimension of a big array *)
+ | Pbigarraydim of int
and comparison =
Ceq | Cneq | Clt | Cgt | Cle | Cge
diff --git a/bytecomp/lambda.mli b/bytecomp/lambda.mli
index 540fe2f1c..af2a9e6f1 100644
--- a/bytecomp/lambda.mli
+++ b/bytecomp/lambda.mli
@@ -84,6 +84,8 @@ type primitive =
(* Operations on big arrays: (unsafe, #dimensions, kind, layout) *)
| Pbigarrayref of bool * int * bigarray_kind * bigarray_layout
| Pbigarrayset of bool * int * bigarray_kind * bigarray_layout
+ (* size of the nth dimension of a big array *)
+ | Pbigarraydim of int
and comparison =
Ceq | Cneq | Clt | Cgt | Cle | Cge
diff --git a/bytecomp/printlambda.ml b/bytecomp/printlambda.ml
index 4ecf2df38..e6d84309d 100644
--- a/bytecomp/printlambda.ml
+++ b/bytecomp/printlambda.ml
@@ -182,6 +182,7 @@ let primitive ppf = function
print_bigarray "get" unsafe kind ppf layout
| Pbigarrayset(unsafe, n, kind, layout) ->
print_bigarray "set" unsafe kind ppf layout
+ | Pbigarraydim(n) -> fprintf ppf "Bigarray.dim_%i" n
let rec lam ppf = function
| Lvar id ->
diff --git a/bytecomp/translcore.ml b/bytecomp/translcore.ml
index 978813e45..9c2f3646e 100644
--- a/bytecomp/translcore.ml
+++ b/bytecomp/translcore.ml
@@ -272,7 +272,10 @@ let primitives_table = create_hashtable 57 [
"%caml_ba_unsafe_set_2",
Pbigarrayset(true, 2, Pbigarray_unknown, Pbigarray_unknown_layout);
"%caml_ba_unsafe_set_3",
- Pbigarrayset(true, 3, Pbigarray_unknown, Pbigarray_unknown_layout)
+ Pbigarrayset(true, 3, Pbigarray_unknown, Pbigarray_unknown_layout);
+ "%caml_ba_dim_1", Pbigarraydim(1);
+ "%caml_ba_dim_2", Pbigarraydim(2);
+ "%caml_ba_dim_3", Pbigarraydim(3);
]
let prim_makearray =