package ocaml-base-compiler
-
bigarray
-
dynlink
-
ocamlbytecomp
-
ocamlcommon
-
ocamlmiddleend
-
ocamloptcomp
-
odoc_info
-
stdlib
-
str
-
unix
Library
Module
Module type
Parameter
Class
Class type
val bind :
string ->
Cmm.expression ->
(Cmm.expression -> Cmm.expression) ->
Cmm.expression
bind name arg fn
is equivalent to let name = arg in fn name
, or simply fn arg
if arg
is simple enough
val bind_load :
string ->
Cmm.expression ->
(Cmm.expression -> Cmm.expression) ->
Cmm.expression
Same as bind
, but also treats loads from a variable as simple
val bind_nonvar :
string ->
Cmm.expression ->
(Cmm.expression -> Cmm.expression) ->
Cmm.expression
Same as bind
, but does not treat variables as simple
Headers
val floatarray_tag : Debuginfo.t -> Cmm.expression
A constant equal to the tag for float arrays
block_header tag size
creates a header with tag tag
for a block of size size
Closure info for a closure of given arity and distance to environment
val alloc_float_header : Debuginfo.t -> Cmm.expression
Wrappers
val alloc_floatarray_header : int -> Debuginfo.t -> Cmm.expression
val alloc_closure_header : int -> Debuginfo.t -> Cmm.expression
val alloc_infix_header : int -> Debuginfo.t -> Cmm.expression
val alloc_closure_info :
arity:int ->
startenv:int ->
Debuginfo.t ->
Cmm.expression
val alloc_boxedint32_header : Debuginfo.t -> Cmm.expression
val alloc_boxedint64_header : Debuginfo.t -> Cmm.expression
val alloc_boxedintnat_header : Debuginfo.t -> Cmm.expression
Integers
Minimal/maximal OCaml integer values whose backend representation fits in a regular OCaml integer
val int_const : Debuginfo.t -> int -> Cmm.expression
Make an integer constant from the given integer (tags the integer)
val cint_const : int -> Cmm.data_item
val targetint_const : int -> Targetint.t
val natint_const_untagged : Debuginfo.t -> Nativeint.t -> Cmm.expression
Make a Cmm constant holding the given nativeint value. Uses Cconst_int
instead of Cconst_nativeint
when possible to preserve peephole optimisations.
val add_const : Cmm.expression -> int -> Debuginfo.t -> Cmm.expression
Add an integer to the given expression
val incr_int : Cmm.expression -> Debuginfo.t -> Cmm.expression
Increment/decrement of integers
val decr_int : Cmm.expression -> Debuginfo.t -> Cmm.expression
val ignore_low_bit_int : Cmm.expression -> Cmm.expression
Simplify the given expression knowing its last bit will be irrelevant
val ignore_high_bit_int : Cmm.expression -> Cmm.expression
Simplify the given expression knowing its first bit will be irrelevant
val add_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
Arithmetical operations on integers
val sub_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
val lsl_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
val mul_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
val lsr_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
val asr_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expression
val div_int :
Cmm.expression ->
Cmm.expression ->
Lambda.is_safe ->
Debuginfo.t ->
Cmm.expression
val mod_int :
Cmm.expression ->
Cmm.expression ->
Lambda.is_safe ->
Debuginfo.t ->
Cmm.expression
val tag_int : Cmm.expression -> Debuginfo.t -> Cmm.expression
Integer tagging. tag_int x = (x lsl 1) + 1
val untag_int : Cmm.expression -> Debuginfo.t -> Cmm.expression
Integer untagging. untag_int x = (x asr 1)
val safe_div_bi :
Lambda.is_safe ->
Cmm.expression ->
Cmm.expression ->
Primitive.boxed_integer ->
Debuginfo.t ->
Cmm.expression
Specific division operations for boxed integers
val safe_mod_bi :
Lambda.is_safe ->
Cmm.expression ->
Cmm.expression ->
Primitive.boxed_integer ->
Debuginfo.t ->
Cmm.expression
val mk_if_then_else :
Debuginfo.t ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expression ->
Cmm.expression
If-Then-Else expression mk_if_then_else dbg cond ifso_dbg ifso ifnot_dbg ifnot
associates dbg
to the global if-then-else expression, ifso_dbg
to the then branch ifso
, and ifnot_dbg
to the else branch ifnot
val mk_not : Debuginfo.t -> Cmm.expression -> Cmm.expression
Boolean negation
val mk_compare_ints :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression
Integer and float comparison that returns int not bool
val mk_compare_floats :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression
val create_loop : Cmm.expression -> Debuginfo.t -> Cmm.expression
Loop construction (while true do expr done). Used to be represented as Cloop.
val raise_symbol : Debuginfo.t -> string -> Cmm.expression
Exception raising
val test_bool : Debuginfo.t -> Cmm.expression -> Cmm.expression
Convert a tagged integer into a raw integer with boolean meaning
val box_float : Debuginfo.t -> Cmm.expression -> Cmm.expression
Float boxing and unboxing
val unbox_float : Debuginfo.t -> Cmm.expression -> Cmm.expression
val box_complex :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression
Complex number creation and access
val complex_re : Cmm.expression -> Debuginfo.t -> Cmm.expression
val complex_im : Cmm.expression -> Debuginfo.t -> Cmm.expression
val return_unit : Debuginfo.t -> Cmm.expression -> Cmm.expression
Make the given expression return a unit value
val remove_unit : Cmm.expression -> Cmm.expression
Remove a trailing unit return if any
Blocks
val field_address : Cmm.expression -> int -> Debuginfo.t -> Cmm.expression
field_address ptr n dbg
returns an expression for the address of the n
th field of the block pointed to by ptr
val get_field_gen :
Asttypes.mutable_flag ->
Cmm.expression ->
int ->
Debuginfo.t ->
Cmm.expression
get_field_gen mut ptr n dbg
returns an expression for the access to the n
th field of the block pointed to by ptr
val set_field :
Cmm.expression ->
int ->
Cmm.expression ->
Lambda.initialization_or_assignment ->
Debuginfo.t ->
Cmm.expression
set_field ptr n newval init dbg
returns an expression for setting the n
th field of the block pointed to by ptr
to newval
val get_header : Cmm.expression -> Debuginfo.t -> Cmm.expression
Load a block's header
val get_header_without_profinfo :
Cmm.expression ->
Debuginfo.t ->
Cmm.expression
Same as get_header
, but also set all profiling bits of the header are to 0 (if profiling is enabled)
val get_tag : Cmm.expression -> Debuginfo.t -> Cmm.expression
Load a block's tag
val get_size : Cmm.expression -> Debuginfo.t -> Cmm.expression
Load a block's size
Arrays