summaryrefslogtreecommitdiff
path: root/middle_end/clambda_primitives.mli
diff options
context:
space:
mode:
Diffstat (limited to 'middle_end/clambda_primitives.mli')
-rw-r--r--middle_end/clambda_primitives.mli158
1 files changed, 158 insertions, 0 deletions
diff --git a/middle_end/clambda_primitives.mli b/middle_end/clambda_primitives.mli
new file mode 100644
index 0000000000..d534ca9cfa
--- /dev/null
+++ b/middle_end/clambda_primitives.mli
@@ -0,0 +1,158 @@
+(**************************************************************************)
+(* *)
+(* OCaml *)
+(* *)
+(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
+(* *)
+(* Copyright 1996 Institut National de Recherche en Informatique et *)
+(* en Automatique. *)
+(* *)
+(* All rights reserved. This file is distributed under the terms of *)
+(* the GNU Lesser General Public License version 2.1, with the *)
+(* special exception on linking described in the file LICENSE. *)
+(* *)
+(**************************************************************************)
+
+type mutable_flag = Asttypes.mutable_flag
+
+type immediate_or_pointer = Lambda.immediate_or_pointer
+
+type initialization_or_assignment = Lambda.initialization_or_assignment
+
+type is_safe = Lambda.is_safe
+
+type boxed =
+ | Boxed
+ | Unboxed
+
+type memory_access_size =
+ | Sixteen
+ | Thirty_two
+ | Sixty_four
+
+type primitive =
+ | Pread_symbol of string
+ (* Operations on heap blocks *)
+ | Pmakeblock of int * mutable_flag * block_shape
+ | Pfield of int
+ | Pfield_computed
+ | Psetfield of int * immediate_or_pointer * initialization_or_assignment
+ | Psetfield_computed of immediate_or_pointer * initialization_or_assignment
+ | Pfloatfield of int
+ | Psetfloatfield of int * initialization_or_assignment
+ | Pduprecord of Types.record_representation * int
+ (* External call *)
+ | Pccall of Primitive.description
+ (* Exceptions *)
+ | Praise of raise_kind
+ (* Boolean operations *)
+ | Psequand | Psequor | Pnot
+ (* Integer operations *)
+ | Pnegint | Paddint | Psubint | Pmulint
+ | Pdivint of is_safe | Pmodint of is_safe
+ | Pandint | Porint | Pxorint
+ | Plslint | Plsrint | Pasrint
+ | Pintcomp of integer_comparison
+ | Poffsetint of int
+ | Poffsetref of int
+ (* Float operations *)
+ | Pintoffloat | Pfloatofint
+ | Pnegfloat | Pabsfloat
+ | Paddfloat | Psubfloat | Pmulfloat | Pdivfloat
+ | Pfloatcomp of float_comparison
+ (* String operations *)
+ | Pstringlength | Pstringrefu | Pstringrefs
+ | Pbyteslength | Pbytesrefu | Pbytessetu | Pbytesrefs | Pbytessets
+ (* Array operations *)
+ | Pmakearray of array_kind * mutable_flag
+ (** For [Pmakearray], the list of arguments must not be empty. The empty
+ array should be represented by a distinguished constant in the middle
+ end. *)
+ | Pduparray of array_kind * mutable_flag
+ (** For [Pduparray], the argument must be an immutable array.
+ The arguments of [Pduparray] give the kind and mutability of the
+ array being *produced* by the duplication. *)
+ | Parraylength of array_kind
+ | Parrayrefu of array_kind
+ | Parraysetu of array_kind
+ | Parrayrefs of array_kind
+ | Parraysets of array_kind
+ (* Test if the argument is a block or an immediate integer *)
+ | Pisint
+ (* Test if the (integer) argument is outside an interval *)
+ | Pisout
+ (* Operations on boxed integers (Nativeint.t, Int32.t, Int64.t) *)
+ | Pbintofint of boxed_integer
+ | Pintofbint of boxed_integer
+ | Pcvtbint of boxed_integer (*source*) * boxed_integer (*destination*)
+ | Pnegbint of boxed_integer
+ | Paddbint of boxed_integer
+ | Psubbint of boxed_integer
+ | Pmulbint of boxed_integer
+ | Pdivbint of { size : boxed_integer; is_safe : is_safe }
+ | Pmodbint of { size : boxed_integer; is_safe : is_safe }
+ | Pandbint of boxed_integer
+ | Porbint of boxed_integer
+ | Pxorbint of boxed_integer
+ | Plslbint of boxed_integer
+ | Plsrbint of boxed_integer
+ | Pasrbint of boxed_integer
+ | Pbintcomp of boxed_integer * integer_comparison
+ (* 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
+ (* load/set 16,32,64 bits from a string: (unsafe)*)
+ | Pstring_load of (memory_access_size * is_safe)
+ | Pbytes_load of (memory_access_size * is_safe)
+ | Pbytes_set of (memory_access_size * is_safe)
+ (* load/set 16,32,64 bits from a
+ (char, int8_unsigned_elt, c_layout) Bigarray.Array1.t : (unsafe) *)
+ | Pbigstring_load of (memory_access_size * is_safe)
+ | Pbigstring_set of (memory_access_size * is_safe)
+ (* byte swap *)
+ | Pbswap16
+ | Pbbswap of boxed_integer
+ (* Integer to external pointer *)
+ | Pint_as_pointer
+ (* Inhibition of optimisation *)
+ | Popaque
+
+and integer_comparison = Lambda.integer_comparison =
+ Ceq | Cne | Clt | Cgt | Cle | Cge
+
+and float_comparison = Lambda.float_comparison =
+ CFeq | CFneq | CFlt | CFnlt | CFgt | CFngt | CFle | CFnle | CFge | CFnge
+
+and array_kind = Lambda.array_kind =
+ Pgenarray | Paddrarray | Pintarray | Pfloatarray
+
+and value_kind = Lambda.value_kind =
+ (* CR mshinwell: Pfloatval should be renamed to Pboxedfloatval *)
+ Pgenval | Pfloatval | Pboxedintval of boxed_integer | Pintval
+
+and block_shape = Lambda.block_shape
+and boxed_integer = Primitive.boxed_integer =
+ Pnativeint | Pint32 | Pint64
+
+and bigarray_kind = Lambda.bigarray_kind =
+ Pbigarray_unknown
+ | Pbigarray_float32 | Pbigarray_float64
+ | Pbigarray_sint8 | Pbigarray_uint8
+ | Pbigarray_sint16 | Pbigarray_uint16
+ | Pbigarray_int32 | Pbigarray_int64
+ | Pbigarray_caml_int | Pbigarray_native_int
+ | Pbigarray_complex32 | Pbigarray_complex64
+
+and bigarray_layout = Lambda.bigarray_layout =
+ Pbigarray_unknown_layout
+ | Pbigarray_c_layout
+ | Pbigarray_fortran_layout
+
+and raise_kind = Lambda.raise_kind =
+ | Raise_regular
+ | Raise_reraise
+ | Raise_notrace
+
+val equal : primitive -> primitive -> bool