Cmm_helpersmodule Unboxed_or_untagged_array_tags : sig ... endTags for unboxed or untagged arrays using mixed block headers with scannable_prefix = 0
type arity = {function_kind : Lambda.function_kind;params_layout : Lambda.layout list;return_layout : Lambda.layout;}val bind :
string ->
Cmm.expression ->
(Cmm.expression -> Cmm.expression) ->
Cmm.expressionbind name arg fn is equivalent to let name = arg in fn name, or simply fn arg if arg is simple enough
Headers
val floatarray_tag : Debuginfo.t -> Cmm.expressionA constant equal to the tag for float arrays
block_header tag size creates a header with tag tag for a block of size size
Same as black_block_header, but for a mixed block
val closure_info : arity:arity -> startenv:int -> is_last:bool -> nativeintClosure info for a closure of given arity and distance to environment
val closure_info' :
arity:(Lambda.function_kind * 'a list) ->
startenv:int ->
is_last:bool ->
nativeintval alloc_infix_header : int -> Debuginfo.t -> Cmm.expressionWrappers
val int_const : Debuginfo.t -> int -> Cmm.expressionMake an integer constant from the given integer (tags the integer)
val add_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionArithmetical operations on integers
val sub_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval neg_int : Cmm.expression -> Debuginfo.t -> Cmm.expressionval lsl_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval mul_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval lsr_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval asr_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval and_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval or_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval xor_int : Cmm.expression -> Cmm.expression -> Debuginfo.t -> Cmm.expressionval add_int_ptr :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionSimilar to add_int but produces a result with machtype Addr iff ptr_out_of_heap is false.
val tag_int : Cmm.expression -> Debuginfo.t -> Cmm.expressionInteger tagging. tag_int x = (x lsl 1) + 1
val untag_int : Cmm.expression -> Debuginfo.t -> Cmm.expressionInteger untagging. untag_int x = (x asr 1)
val div_int :
?dividend_cannot_be_min_int:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionsigned division of two register-width integers
val mod_int :
?dividend_cannot_be_min_int:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionsigned remainder of two register-width integers
val mk_not : Debuginfo.t -> Cmm.expression -> Cmm.expressionBoolean negation
val mk_compare_ints :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionInteger and float comparison that returns int not bool. The untagged versions do not tag the result and do not optimise known-constant cases.
val mk_compare_floats :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval mk_compare_ints_untagged :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval mk_unsigned_compare_ints_untagged :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval mk_compare_floats_untagged :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval mk_compare_float32s_untagged :
Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval test_bool : Debuginfo.t -> Cmm.expression -> Cmm.expressionConvert a tagged integer into a raw integer with boolean meaning
val float_of_float16 : Debuginfo.t -> Cmm.expression -> Cmm.expressionConversions for 16-bit floats
val float16_of_float : Debuginfo.t -> Cmm.expression -> Cmm.expressionval box_float32 :
Debuginfo.t ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionFloat boxing and unboxing
val unbox_float32 : Debuginfo.t -> Cmm.expression -> Cmm.expressionval box_float :
Debuginfo.t ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionval unbox_float : Debuginfo.t -> Cmm.expression -> Cmm.expressionval box_vec128 :
Debuginfo.t ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionVector boxing and unboxing
val unbox_vec128 : Debuginfo.t -> Cmm.expression -> Cmm.expressionval box_vec256 :
Debuginfo.t ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionval unbox_vec256 : Debuginfo.t -> Cmm.expression -> Cmm.expressionval box_vec512 :
Debuginfo.t ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionval unbox_vec512 : Debuginfo.t -> Cmm.expression -> Cmm.expressionval return_unit : Debuginfo.t -> Cmm.expression -> Cmm.expressionMake the given expression return a unit value
Blocks
val mk_load_mut : Cmm.memory_chunk -> Cmm.operationNon-atomic load of a mutable field
val strided_field_address :
Cmm.expression ->
index:int ->
stride:int ->
Debuginfo.t ->
Cmm.expressionstrided_field_address ptr ~index ~stride dbg returns an expression for the address of the indexth field of the block pointed to by ptr. The field width is determined by stride.
val field_address :
?memory_chunk:Cmm.memory_chunk ->
Cmm.expression ->
int ->
Debuginfo.t ->
Cmm.expressionfield_address ptr n dbg returns an expression for the address of the nth field of the block pointed to by ptr. memory_chunk is only used for computation of the field width; it defaults to a memory chunk matching the machine width.
val get_field_gen :
Asttypes.mutable_flag ->
Cmm.expression ->
int ->
Debuginfo.t ->
Cmm.expressionget_field_gen mut ptr n dbg returns an expression for the access to the nth field of the block pointed to by ptr. The memory_chunk used is always Word_val.
val get_field_gen_given_memory_chunk :
Cmm.memory_chunk ->
Asttypes.mutable_flag ->
Cmm.expression ->
int ->
Debuginfo.t ->
Cmm.expressionLike get_field_gen but allows use of a different memory_chunk.
val get_field_computed :
Lambda.immediate_or_pointer ->
Asttypes.mutable_flag ->
block:Cmm.expression ->
index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionGet the field of the given block whose index is specified by the Cmm expresson index (in words).
val field_address_computed :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionfield_address_computed ptr ofs dbg returns an expression for the address at offset ofs (in machine words) of the block pointed to by ptr. The resulting expression is a derived pointer of type Addr.
val get_header : Cmm.expression -> Debuginfo.t -> Cmm.expressionLoad a block's header
val get_tag : Cmm.expression -> Debuginfo.t -> Cmm.expressionLoad a block's tag
Arrays
val addr_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionArray loads and stores
unboxed_float_array_ref and float_array_ref differ in the boxing of the result; float_array_set takes an unboxed float
val int_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unboxed_float_array_ref :
Asttypes.mutable_flag ->
block:Cmm.expression ->
index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval float_array_ref :
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval addr_array_set_heap :
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval addr_array_set_local :
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval addr_array_initialize :
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval addr_array_set :
Lambda.modify_mode ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval int_array_set :
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval float_array_set :
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionStrings
val string_length : Cmm.expression -> Debuginfo.t -> Cmm.expressionval bigstring_get_alignment :
Cmm.expression ->
Cmm.expression ->
int ->
Debuginfo.t ->
Cmm.expressionmodule Extended_machtype_component : sig ... endmodule Extended_machtype : sig ... endAllocations
val make_alloc :
mode:Cmm.Alloc_mode.t ->
Debuginfo.t ->
tag:int ->
Cmm.expression list ->
Cmm.expressionAllocate a block of regular values with the given tag
val make_float_alloc :
mode:Cmm.Alloc_mode.t ->
Debuginfo.t ->
tag:int ->
Cmm.expression list ->
Cmm.expressionAllocate a block of unboxed floats with the given tag
val make_closure_alloc :
mode:Cmm.Alloc_mode.t ->
Debuginfo.t ->
tag:int ->
Cmm.expression list ->
Cmm.memory_chunk list ->
Cmm.expressionAllocate a closure block, to hold a set of closures.
This takes a list of expressions exprs and a list of memory_chunks that correspond pairwise. Both lists must be the same length.
The list of expressions includes _all_ fields of the closure block, including the code pointers and closure information fields.
val make_mixed_alloc :
mode:Cmm.Alloc_mode.t ->
Debuginfo.t ->
tag:int ->
value_prefix_size:int ->
Cmm.expression list ->
Cmm.memory_chunk list ->
Cmm.expressionAllocate an mixed block of the corresponding tag and scannable prefix size. The memory_chunk list should give the memory_chunk corresponding to each element from the expression list.
val opaque : Cmm.expression -> Debuginfo.t -> Cmm.expressionSys.opaque_identity
Generic application functions
val machtype_identifier : Cmm.machtype -> stringGet an identifier for a given machtype, used in the name of the generic functions.
val curry_function_sym :
Lambda.function_kind ->
Cmm.machtype list ->
Cmm.machtype ->
Cmm.symbolGet the symbol for the generic currying or tuplifying wrapper with n arguments, and ensure its presence in the set of defined symbols.
val fail_if_called_indirectly_sym : Cmm.symbolBigarrays
val bigarray_elt_size_in_bytes : Lambda.bigarray_kind -> intReturns the size (in number of bytes) of a single element contained in a bigarray.
val bigarray_word_kind : Lambda.bigarray_kind -> Cmm.memory_chunkReturns the memory chunk corresponding to the kind of elements stored in a bigarray.
Operations on n-bit integers
val ignore_low_bit_int : Cmm.expression -> Cmm.expressionSimplify the given expression knowing the low bit of the argument will be irrelevant
val low_bits : bits:int -> dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionSimplify the given expression knowing that bits other than the low bits bits will be irrelevant
val sign_extend :
bits:int ->
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expressionsign-extend a given integer expression from bits bits to an entire register
val zero_extend :
bits:int ->
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expressionzero-extend a given integer expression from bits bits to an entire register
val box_int_gen :
Debuginfo.t ->
Primitive.boxed_integer ->
Cmm.Alloc_mode.t ->
Cmm.expression ->
Cmm.expressionBox a given integer, without sharing of constants
val unbox_int :
Debuginfo.t ->
Primitive.boxed_integer ->
Cmm.expression ->
Cmm.expressionUnbox a given boxed integer
val bit_count : Primitive.unboxed_or_untagged_integer -> intFor example, bit_count Unboxed_int32 is 32
val make_unsigned_int :
Primitive.unboxed_or_untagged_integer ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUsed to prepare small integers for a bitwise operations
val unaligned_load_16 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_16 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_32 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_32 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_f32 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_f32 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_64 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_64 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_128 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_128 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_load_128 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_set_128 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_256 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_256 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_load_256 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_set_256 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_load_512 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval unaligned_set_512 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_load_512 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval aligned_set_512 :
ptr_out_of_heap:bool ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionPrimitives
type unary_primitive = Cmm.expression -> Debuginfo.t -> Cmm.expressionval int_as_pointer : unary_primitiveInt_as_pointer primitive
val raise_prim :
Lambda.raise_kind ->
extra_args:Cmm.expression list ->
unary_primitiveRaise primitive
val negint : unary_primitiveUnary negation of an OCaml integer
val addr_array_length : unary_primitiveReturn the length of the array argument, as an OCaml integer
val bbswap : Cmm.bswap_bitwidth -> unary_primitiveByte swap primitive Operates on Cmm integers (unboxed values)
type binary_primitive =
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval setfield :
int ->
Lambda.immediate_or_pointer ->
Lambda.initialization_or_assignment ->
binary_primitivesetfield offset value_is_ptr init ptr value dbg
val add_int_caml : binary_primitiveOperations on OCaml integers
val sub_int_caml : binary_primitiveval mul_int_caml : binary_primitiveval div_int_caml : binary_primitiveval mod_int_caml : binary_primitiveval and_int_caml : binary_primitiveval or_int_caml : binary_primitiveval xor_int_caml : binary_primitivetype ternary_primitive =
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionval setfield_computed :
Lambda.immediate_or_pointer ->
Lambda.initialization_or_assignment ->
ternary_primitiveSame as setfield, except the offset is one of the arguments. Args: pointer (structure/array/...), index, value
val transl_switch_clambda :
Debuginfo.t ->
Cmm.expression ->
int array ->
Cmm.expression array ->
Cmm.expressiontransl_switch_clambda loc kind arg index cases
val send :
Lambda.meth_kind ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression list ->
Extended_machtype.t list ->
Extended_machtype.t ->
(Lambda.region_close * Cmx_format.alloc_mode) ->
Debuginfo.t ->
Cmm.expressionMethod call : send kind met obj args dbg
met is a method identifier, which can be a hashed variant or an index in obj's method table, depending on kindobj is the object whose method is being calledargs is the extra arguments to the method call (Note: I'm not aware of any way for the frontend to generate any arguments other than the cache and cache position)val entry_point : Compilation_unit.t list -> Cmm.phrase listEntry point
val global_table : Compilation_unit.t list -> Cmm.phraseGenerate the caml_globals table
val unit_deps_table :
(Compilation_unit.t * Import_info.t list) list ->
Cmm.phraseGenerate the caml_unit_deps_table for shared objects / complete objects. Maps compilation unit names to their entry functions, gc_roots, and dependencies.
val reference_symbols : Cmm.symbol list -> Cmm.phraseAdd references to the given symbols
val globals_map :
(Compilation_unit.t * Digest.t option * Digest.t option * Symbol.t list) list ->
Cmm.phraseGenerate the caml_globals_map structure, as a marshalled string constant. The runtime representation of the type here must match that of type global_map in the natdynlink code.
val frame_table : Compilation_unit.t list -> Cmm.phraseGenerate the caml_frametable table, referencing the frametables from the given compilation units
val data_segment_table : Compilation_unit.t list -> Cmm.phraseGenerate the tables for data and code positions respectively of the given compilation units
val code_segment_table : Compilation_unit.t list -> Cmm.phraseval predef_exception : int -> string -> Cmm.phraseGenerate data for a predefined exception
val plugin_header : Cmxs_format.dynunit list -> Cmm.phraseEmit constant symbols
val cdefine_symbol : Cmm.symbol -> Cmm.data_item listProduce the data_item list corresponding to a symbol definition
val emit_block :
Cmm.symbol ->
nativeint ->
Cmm.data_item list ->
Cmm.data_item listemit_block symb white_header cont prepends to cont the header and symbol for the block. cont must already contain the fields of the block (and may contain additional data items afterwards).
val emit_float32_constant :
Cmm.symbol ->
float ->
Cmm.data_item list ->
Cmm.data_item listEmit specific kinds of constant blocks as data items
val emit_float_constant :
Cmm.symbol ->
float ->
Cmm.data_item list ->
Cmm.data_item listval emit_string_constant :
Cmm.symbol ->
string ->
Cmm.data_item list ->
Cmm.data_item listval emit_int32_constant :
Cmm.symbol ->
int32 ->
Cmm.data_item list ->
Cmm.data_item listval emit_int64_constant :
Cmm.symbol ->
int64 ->
Cmm.data_item list ->
Cmm.data_item listval emit_nativeint_constant :
Cmm.symbol ->
nativeint ->
Cmm.data_item list ->
Cmm.data_item listval emit_vec128_constant :
Cmm.symbol ->
Cmm.vec128_bits ->
Cmm.data_item list ->
Cmm.data_item listval emit_vec256_constant :
Cmm.symbol ->
Cmm.vec256_bits ->
Cmm.data_item list ->
Cmm.data_item listval emit_vec512_constant :
Cmm.symbol ->
Cmm.vec512_bits ->
Cmm.data_item list ->
Cmm.data_item listval emit_float_array_constant :
Cmm.symbol ->
float list ->
Cmm.data_item list ->
Cmm.data_item listval void : Cmm.expressionThe void (i.e. empty tuple) cmm value. Not to be confused with () : unit.
val unit : dbg:Debuginfo.t -> Cmm.expressionCreate the single unit value.
val var : Backend_var.t -> Cmm.expressionCreate an expression from a variable.
val symbol : dbg:Debuginfo.t -> Cmm.symbol -> Cmm.expressionCreate an expression that gives the value of an object file symbol.
val float : dbg:Debuginfo.t -> float -> Cmm.expressionCreate a constant float expression.
val float32 : dbg:Debuginfo.t -> float -> Cmm.expressionCreate a constant float32 expression.
val int : dbg:Debuginfo.t -> int -> Cmm.expressionCreate a constant int expression.
val int32 : dbg:Debuginfo.t -> int32 -> Cmm.expressionCreate a constant int expression from an int32.
val int64 : dbg:Debuginfo.t -> int64 -> Cmm.expressionCreate a constant int expression from an int64.
val vec128 : dbg:Debuginfo.t -> Cmm.vec128_bits -> Cmm.expressionCreate a constant vec128 expression from two int64s.
val vec256 : dbg:Debuginfo.t -> Cmm.vec256_bits -> Cmm.expressionCreate a constant vec256 expression from four int64s.
val vec512 : dbg:Debuginfo.t -> Cmm.vec512_bits -> Cmm.expressionCreate a constant vec512 expression from eight int64s.
val nativeint : dbg:Debuginfo.t -> Nativeint.t -> Cmm.expressionCreate a constant int expression from a nativeint.
val letin :
Backend_var.With_provenance.t ->
defining_expr:Cmm.expression ->
body:Cmm.expression ->
Cmm.expressionCreate a Clet, except if the body just returns the bound variable, in which case the Clet is elided.
val sequence : Cmm.expression -> Cmm.expression -> Cmm.expressionCreate a sequence of expressions. Will erase void expressions as needed.
val ite :
dbg:Debuginfo.t ->
then_dbg:Debuginfo.t ->
then_:Cmm.expression ->
else_dbg:Debuginfo.t ->
else_:Cmm.expression ->
Cmm.expression ->
Cmm.expressionCreates a conditional branching on the given condition.
val trywith :
dbg:Debuginfo.t ->
body:Cmm.expression ->
exn_var:Backend_var.With_provenance.t ->
extra_args:(Backend_var.With_provenance.t * Cmm.machtype) list ->
handler_cont:Cmm.trywith_shared_label ->
handler:Cmm.expression ->
unit ->
Cmm.expressionCreate a try-with structure. The exn_var is the variable bound to the caught exception in the handler.
val handler :
dbg:Debuginfo.t ->
Lambda.static_label ->
(Backend_var.With_provenance.t * Cmm.machtype) list ->
Cmm.expression ->
bool ->
Cmm.static_handlerhandler id vars body is_cold creates a static handler for exit number id, binding variables vars in body.
val cexit :
Lambda.static_label ->
Cmm.expression list ->
Cmm.trap_action list ->
Cmm.expressioncexit id args creates the cmm expression for static to a static handler with exit number id, with arguments args.
val trap_return : Cmm.expression -> Cmm.trap_action list -> Cmm.expressiontrap_return res traps creates the cmm expression for returning res after applying the trap actions in traps.
val create_ccatch :
rec_flag:bool ->
handlers:Cmm.static_handler list ->
body:Cmm.expression ->
Cmm.expressionEnclose a body with some static handlers.
Shift operations. Inputs: a tagged caml integer and an untagged machine integer. Outputs: a tagged caml integer. Takes as first argument a tagged caml integer, and as second argument an untagged machine intger which is the amount to shift the first argument by.
val lsl_int_caml_raw :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval lsr_int_caml_raw :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval asr_int_caml_raw :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionReinterpret cast functions
val int64_as_float : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float_as_int64 : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionConversions functions between integers and floats.
val int_of_float : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float_of_int : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval int_of_float32 : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float32_of_int : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float32_of_float : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float_of_float32 : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval eq : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval neq : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionInteger arithmetic (dis)equality of cmm expressions. Returns an untagged integer (either 0 or 1) to represent the result of the comparison.
val lt : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval le : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval gt : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval ge : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionInteger arithmetic signed comparisons on cmm expressions. Returns an untagged integer (either 0 or 1) to represent the result of the comparison.
val ult : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval ule : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval ugt : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionval uge : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expression -> Cmm.expressionInteger arithmetic unsigned comparisons on cmm expressions. Returns an untagged integer (either 0 or 1) to represent the result of the comparison.
val float_abs : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionAsbolute value on floats.
val float32_abs : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float_neg : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionArithmetic negation on floats.
val float_add :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_sub :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_mul :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_neg : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval float32_add :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_sub :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_mul :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_div :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionFloat arithmetic operations.
val float_eq :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_div :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_eq :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_neq :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionFloat arithmetic (dis)equality of cmm expressions. Returns an untagged integer (either 0 or 1) to represent the result of the comparison.
val float_lt :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_le :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_gt :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_neq :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_lt :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_le :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float32_gt :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval float_ge :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionFloat arithmetic comparisons on cmm expressions. Returns an untagged integer (either 0 or 1) to represent the result of the comparison.
val float32_ge :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval beginregion : dbg:Debuginfo.t -> Cmm.expressionval endregion : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval probe :
dbg:Debuginfo.t ->
name:string ->
handler_code_linkage_name:string ->
enabled_at_init:bool ->
args:Cmm.expression list ->
Cmm.expressionval load :
dbg:Debuginfo.t ->
Cmm.memory_chunk ->
Asttypes.mutable_flag ->
addr:Cmm.expression ->
Cmm.expressionval store :
dbg:Debuginfo.t ->
Cmm.memory_chunk ->
Cmm.initialization_or_assignment ->
addr:Cmm.expression ->
new_value:Cmm.expression ->
Cmm.expressionval caml_modify :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval caml_modify_local :
dbg:Debuginfo.t ->
Cmm.expression ->
Cmm.expression ->
Cmm.expression ->
Cmm.expressionval direct_call :
dbg:Debuginfo.t ->
Cmm.machtype ->
Lambda.region_close ->
Cmm.symbol ->
Cmm.expression list ->
Cmm.expressiondirect_call ty f_code args creates a direct call to the function code f_code with arguments args, with a return value of type ty.
If a closure needs to be passed, it must be included in args.
val indirect_call :
dbg:Debuginfo.t ->
Extended_machtype.t ->
Lambda.region_close ->
Cmx_format.alloc_mode ->
Cmm.expression ->
Extended_machtype.t list ->
Cmm.expression list ->
Cmm.expressionSame as direct_call but for an indirect call.
val indirect_full_call :
dbg:Debuginfo.t ->
Extended_machtype.t ->
Lambda.region_close ->
Cmm.expression ->
callees:Cmm.symbol list option ->
Extended_machtype.t list ->
Cmm.expression list ->
Cmm.expressionSame as direct_call but for an indirect call that is know to be a full application (since this enables a few optimisations).
val bigarray_load :
dbg:Debuginfo.t ->
elt_kind:Lambda.bigarray_kind ->
elt_size:int ->
elt_chunk:Cmm.memory_chunk ->
bigarray:Cmm.expression ->
index:Cmm.expression ->
Cmm.expressionval bigarray_store :
dbg:Debuginfo.t ->
elt_kind:Lambda.bigarray_kind ->
elt_size:int ->
elt_chunk:Cmm.memory_chunk ->
bigarray:Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Cmm.expressionval infix_field_address :
dbg:Debuginfo.t ->
Cmm.expression ->
int ->
Cmm.expressioninfix_field_address ptr n dbg returns an expression for the address of the n-th field of the set of closures block pointed to by ptr. This function assumes that the n-1-th field of the block is an infix header, so that the returned address is in fact a correct ocaml value.
val cint : nativeint -> Cmm.data_itemStatic integer.
val cint32 : int32 -> Cmm.data_itemStatic 32-bit integer.
val cfloat32 : float -> Cmm.data_itemStatic float32.
val cfloat : float -> Cmm.data_itemStatic float.
val cvec128 : Cmm.vec128_bits -> Cmm.data_itemStatic 128-bit vector.
val cvec256 : Cmm.vec256_bits -> Cmm.data_itemStatic 256-bit vector.
val cvec512 : Cmm.vec512_bits -> Cmm.data_itemStatic 512-bit vector.
val symbol_address : Cmm.symbol -> Cmm.data_itemStatic symbol.
val symbol_offset : Cmm.symbol -> int -> Cmm.data_itemval define_symbol : Cmm.symbol -> Cmm.data_item listDefinition for a static symbol.
val fundecl :
Cmm.symbol ->
(Backend_var.With_provenance.t * Cmm.machtype) list ->
Cmm.expression ->
Cmm.codegen_option list ->
Debuginfo.t ->
Lambda.poll_attribute ->
Cmm.machtype ->
Cmm.fundeclfundecl name args body codegen_options dbg creates a cmm function declaration for a function name with binding args over body.
val cfunction : Cmm.fundecl -> Cmm.phraseCreate a cmm phrase for a function declaration.
val cdata : Cmm.data_item list -> Cmm.phraseCreate a cmm phrase for a static data item.
val gc_root_table : Cmm.symbol list -> Cmm.phraseCreate the gc root table from a list of root symbols.
val cmm_arith_size : Cmm.expression -> int optionval make_symbol : ?compilation_unit:Compilation_unit.t -> string -> stringval machtype_of_layout : Lambda.layout -> Cmm.machtypeval machtype_of_layout_changing_tagged_int_to_val :
Lambda.layout ->
Cmm.machtypeval make_tuple : Cmm.expression list -> Cmm.expressionval tuple_field :
Cmm.expression ->
component_tys:Cmm.machtype array ->
int ->
Debuginfo.t ->
Cmm.expressionval curry_function :
(Lambda.function_kind * Cmm.machtype list * Cmm.machtype) ->
Cmm.phrase listval send_function :
(Cmm.machtype list * Cmm.machtype * Cmx_format.alloc_mode) ->
Cmm.phraseval apply_function :
(Cmm.machtype list * Cmm.machtype * Cmx_format.alloc_mode) ->
Cmm.phraseval fail_if_called_indirectly_function : unit -> Cmm.phrase listval atomic_load_field :
dbg:Debuginfo.t ->
Lambda.immediate_or_pointer ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expressionval atomic_exchange_field :
dbg:Debuginfo.t ->
Lambda.immediate_or_pointer ->
Cmm.expression ->
field:Cmm.expression ->
new_value:Cmm.expression ->
Cmm.expressionval atomic_fetch_and_add_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_add_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_sub_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_land_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_lor_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_lxor_field :
dbg:Debuginfo.t ->
Cmm.expression ->
field:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval atomic_compare_and_set_field :
dbg:Debuginfo.t ->
Lambda.immediate_or_pointer ->
Cmm.expression ->
field:Cmm.expression ->
old_value:Cmm.expression ->
new_value:Cmm.expression ->
Cmm.expressionval atomic_compare_exchange_field :
dbg:Debuginfo.t ->
Lambda.immediate_or_pointer ->
Cmm.expression ->
field:Cmm.expression ->
old_value:Cmm.expression ->
new_value:Cmm.expression ->
Cmm.expressionval emit_gc_roots_table :
symbols:Cmm.symbol list ->
Cmm.phrase list ->
Cmm.phrase listval perform : dbg:Debuginfo.t -> Cmm.expression -> Cmm.expressionval with_stack :
dbg:Debuginfo.t ->
valuec:Cmm.expression ->
exnc:Cmm.expression ->
effc:Cmm.expression ->
f:Cmm.expression ->
arg:Cmm.expression ->
Cmm.expressionval with_stack_bind :
dbg:Debuginfo.t ->
valuec:Cmm.expression ->
exnc:Cmm.expression ->
effc:Cmm.expression ->
dyn:Cmm.expression ->
bind:Cmm.expression ->
f:Cmm.expression ->
arg:Cmm.expression ->
Cmm.expressionval resume :
dbg:Debuginfo.t ->
cont:Cmm.expression ->
f:Cmm.expression ->
arg:Cmm.expression ->
Cmm.expressionval reperform :
dbg:Debuginfo.t ->
eff:Cmm.expression ->
cont:Cmm.expression ->
last_fiber:Cmm.expression ->
Cmm.expressionval allocate_unboxed_float32_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed float32 array for the given number of elements.
val allocate_untagged_int_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an untagged int array for the given number of elements.
val allocate_untagged_int8_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an untagged int8 array for the given number of elements.
val allocate_untagged_int16_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an untagged int16 array for the given number of elements.
val allocate_unboxed_int32_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed int32 array for the given number of elements.
val allocate_unboxed_int64_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed int64 array for the given number of elements.
val allocate_unboxed_nativeint_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed nativeint array for the given number of elements.
val allocate_unboxed_vec128_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed vec128 array for the given number of elements.
val allocate_unboxed_vec256_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed vec256 array for the given number of elements.
val allocate_unboxed_vec512_array :
elements:Cmm.expression list ->
Cmm.Alloc_mode.t ->
Debuginfo.t ->
Cmm.expressionAllocate a block to hold an unboxed vec512 array for the given number of elements.
val unboxed_float32_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an unboxed float32 array.
val untagged_int8_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an untagged int8 array.
val untagged_int16_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an untagged int16 array.
val unboxed_int32_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an unboxed int32 array.
val unboxed_or_untagged_int_or_int64_or_nativeint_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an untagged int or unboxed int64 or unboxed nativeint array.
val unboxed_vec128_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an unboxed vec128 array.
val unboxed_vec256_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an unboxed vec256 array.
val unboxed_vec512_array_length :
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionCompute the length of an unboxed vec512 array.
val unboxed_float32_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead from an unboxed float32 array (without bounds check).
val unboxed_mutable_float32_unboxed_product_array_ref :
Cmm.expression ->
array_index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead an unboxed float32 from a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The float32 is expected to be in the least significant bits of the 64-bit field. The most significant 32 bits of such field are ignored.
The zero-indexed element number is specified as a tagged immediate.
val unboxed_mutable_float32_unboxed_product_array_set :
Cmm.expression ->
array_index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionWrite an unboxed float32 into a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The float32 will be written to the least significant bits of the 64-bit field. The top 32 bits of the written word will be initialized to zero. Note that two writes are involved.
val untagged_int8_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead from an untagged int8 array (without bounds check).
val untagged_int16_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead from an untagged int16 array (without bounds check).
val unboxed_int32_array_ref :
Cmm.expression ->
Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead from an unboxed int32 array (without bounds check).
val untagged_mutable_int8_unboxed_product_array_ref :
Cmm.expression ->
array_index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead an untagged int8 from (the least significant bits of) a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The returned value is always sign extended, but it is not assumed that the 64-bit field in the array contains a sign-extended representation.
val untagged_mutable_int16_unboxed_product_array_ref :
Cmm.expression ->
array_index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead an untagged int16 from (the least significant bits of) a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The returned value is always sign extended, but it is not assumed that the 64-bit field in the array contains a sign-extended representation.
val unboxed_mutable_int32_unboxed_product_array_ref :
Cmm.expression ->
array_index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead an unboxed int32 from (the least significant bits of) a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The returned value is always sign extended, but it is not assumed that the 64-bit field in the array contains a sign-extended representation.
val untagged_mutable_int8_unboxed_product_array_set :
Cmm.expression ->
array_index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionWrite an untagged int8 into a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The write is done as a 64-bit write of a sign-extended version of the supplied new_value.
val untagged_mutable_int16_unboxed_product_array_set :
Cmm.expression ->
array_index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionWrite an untagged int16 into a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The write is done as a 64-bit write of a sign-extended version of the supplied new_value.
val unboxed_mutable_int32_unboxed_product_array_set :
Cmm.expression ->
array_index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionWrite an unboxed int32 into a 64-bit field in an array represented as a mixed block (with tag zero), as used for unboxed product arrays.
The zero-indexed element number is specified as a tagged immediate.
The write is done as a 64-bit write of a sign-extended version of the supplied new_value.
val unboxed_or_untagged_int_or_int64_or_nativeint_array_ref :
Cmm.expression ->
array_index:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionRead from an untagged int, unboxed int64, or unboxed nativeint array (without bounds check).
The zero-indexed element number is specified as a tagged immediate.
A better name would be `naked_int_or_int64_or_nativeint_array_ref`, but this name was chosen for consistency.
val unboxed_float32_array_set :
Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUpdate an unboxed float32 array (without bounds check).
val untagged_int8_array_set :
Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUpdate an untagged int8 array (without bounds check).
val untagged_int16_array_set :
Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUpdate an untagged int16 array (without bounds check).
val unboxed_int32_array_set :
Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUpdate an unboxed int32 array (without bounds check).
val unboxed_or_untagged_int_or_int64_or_nativeint_array_set :
Cmm.expression ->
index:Cmm.expression ->
new_value:Cmm.expression ->
Debuginfo.t ->
Cmm.expressionUpdate an unboxed int64 or unboxed nativeint or untagged int array (without bounds check).
The first argument is the heap block to modify a field of. The index_in_words should be an untagged integer.
In contrast to setfield and setfield_computed, immediate_or_pointer is not needed as the layout is known from the memory_chunk argument, and initialization_or_assignment is not needed as unboxed ints can always be assigned without caml_modify (etc.).
val get_field_unboxed :
dbg:Debuginfo.t ->
Cmm.memory_chunk ->
Asttypes.mutable_flag ->
Cmm.expression ->
index_in_words:Cmm.expression ->
Cmm.expressionval set_field_unboxed :
dbg:Debuginfo.t ->
Cmm.memory_chunk ->
Cmm.expression ->
index_in_words:Cmm.expression ->
Cmm.expression ->
Cmm.expressionval dls_get : dbg:Debuginfo.t -> Cmm.expressionval tls_get : dbg:Debuginfo.t -> Cmm.expressionval domain_index : dbg:Debuginfo.t -> Cmm.expressionval cpu_relax : dbg:Debuginfo.t -> Cmm.expressionval poll : dbg:Debuginfo.t -> Cmm.expressionmodule Scalar_type : sig ... endThis module defines the various kinds of scalars usable in Cmm. It also provides ways to generate expressions to cast between them.