The header file <cruntime.h> defines the interface to functions that the C compiler calls when generating code. For instance, it contains the runtime routines for all floating point operators and conversion, and shifts, multiplies, and divides.for each of the integer types.

In general, you do not need to call these routines yourself directly, but they are documented here should you need to call them from assembly language. These functions abide by the standard calling conventions of the compiler.

Integer multiplication
__int16_mul | Multiply two 16-bit signed or unsigned integers forming a 16-bit product
__int32_mul | Multiply two 32-bit signed or unsigned integers forming a 32-bit product
__int64_mul | Multiply two 64-bit signed or unsigned integers forming a 64-bit product
__int16_mul_asgn | Multiply a 16-bit signed or unsigned integer in memory by a 16-bit integer
__int32_mul_asgn | Multiply a 32-bit signed or unsigned integer in memory by a 32-bit integer
__int64_mul_asgn | Multiply a 64-bit signed or unsigned integer in memory by a 64-bit integer
__int16_mul_8x8 | Multiply two 8-bit signed integers forming a 16-bit signed product
__int32_mul_16x16 | Multiply two 16-bit signed integers forming a 32-bit signed product
__int64_mul_32x32 | Multiply two 32-bit signed integers forming a 64-bit signed product
__uint16_mul_8x8 | Multiply two 8-bit unsigned integers forming a 16-bit unsigned product
__uint32_mul_16x16 | Multiply two 16-bit unsigned integers forming a 32-bit unsigned product
__uint64_mul_32x32 | Multiply two 32-bit unsigned integers forming a 64-bit unsigned product
Integer division
__int16_div | Divide two 16-bit signed integers and return the 16-bit signed quotient
__int32_div | Divide two 32-bit signed integers and return the 32-bit signed quotient
__int64_div | Divide two 64-bit signed integers and return the 64-bit signed quotient
__int16_div_asgn | Divide a 16-bit signed integer in memory by a 16-bit signed integer
__int32_div_asgn | Divide a 32-bit signed integer in memory by a 32-bit signed integer
__int64_div_asgn | Divide a 64-bit signed integer in memory by a 64-bit signed integer
__int16_mod | Divide two 16-bit signed integers and return the 16-bit signed remainder after division
__int32_mod | Divide two 32-bit signed integers and return the 32-bit signed remainder after division
__int64_mod | Divide two 64-bit signed integers and return the 64-bit signed remainder after division
__int16_mod_asgn | Divide a 16-bit signed integer in memory by a 16-bit signed integer and assign it the 16-bit remainder
__int32_mod_asgn | Divide a 32-bit signed integer in memory by a 32-bit signed integer and assign it the 32-bit remainder
__int64_mod_asgn | Divide a 64-bit signed integer in memory by a 64-bit signed integer and assign it the 64-bit remainder
__uint16_div | Divide two 16-bit unsigned integers forming a 16-bit quotient
__uint32_div | Divide two 32-bit unsigned integers forming a 32-bit quotient
__uint64_div | Divide two 64-bit unsigned integers forming a 64-bit quotient
__uint16_div_asgn | Divide a 16-bit unsigned integer in memory by a 16-bit unsigned integer
__uint32_div_asgn | Divide a 32-bit unsigned integer in memory by a 32-bit unsigned integer
__uint64_div_asgn | Divide a 64-bit unsigned integer in memory by a 64-bit unsigned integer
__uint16_mod | Divide two 16-bit unsigned integers and return the 16-bit unsigned remainder after division
__uint32_mod | Divide two 32-bit unsigned integers and return the 32-bit unsigned remainder after division
__uint64_mod | Divide two 64-bit unsigned integers and return the 64-bit unsigned remainder after division
__uint16_mod_asgn | Divide a 16-bit unsigned integer in memory by a 16-bit unsigned integer and assign it the 16-bit remainder
__uint32_mod_asgn | Divide a 32-bit unsigned integer in memory by a 32-bit unsigned integer and assign it the 32-bit remainder
__uint64_mod_asgn | Divide a 64-bit unsigned integer in memory by a 64-bit unsigned integer and assign it the 64-bit remainder
Integer shifts
__int16_asr | Shift a 16-bit signed integer arithmetically right by a number of bit positions
__int32_asr | Shift a 32-bit signed integer arithmetically right by a number of bit positions
__int64_asr | Shift a 64-bit signed integer arithmetically right by a number of bit positions
__int16_asr_asgn | Shift a 16-bit integer in memory arithmetically right by a number of bit positions
__int32_asr_asgn | Shift a 32-bit integer in memory arithmetically right by a number of bit positions
__int64_asr_asgn | Shift a 64-bit integer in memory arithmetically right by a number of bit positions
__int16_lsl | Shift a 16-bit integer left by a number of bit positions
__int32_lsl | Shift a 32-bit integer left by a number of bit positions
__int64_lsl | Shift a 64-bit integer left by a number of bit positions
__int16_lsl_asgn | Shift a 16-bit integer in memory left by a number of bit positions
__int32_lsl_asgn | Shift a 32-bit integer in memory left by a number of bit positions
__int64_lsl_asgn | Shift a 64-bit integer in memory left by a number of bit positions
__int16_lsr | Shift a 16-bit unsigned integer logically right by a number of bit positions
__int32_lsr | Shift a 32-bit unsigned integer logically right by a number of bit positions
__int64_lsr | Shift a 64-bit unsigned integer logically right by a number of bit positions
__int16_lsr_asgn | Shift a 16-bit integer in memory logically right by a number of bit positions
__int32_lsr_asgn | Shift a 32-bit integer in memory logically right by a number of bit positions
__int64_lsr_asgn | Shift a 64-bit integer in memory logically right by a number of bit positions
Floating point arithmetic
__float32_add | Add two 32-bit floating point values
__float32_add_1 | Add one to a 32-bit floating point values
__float32_add_asgn | Add a 32-bit floating point value to a 32-bit floating point value stored in memory
__float32_div | Divide two 32-bit floating point values
__float32_div_asgn | Divide a 32-bit floating point value into a 32-bit floating point value stored in memory
__float32_mul | Multiply two 32-bit floating point values
__float32_mul_asgn | Multiply a 32-bit floating point value in memory by a 32-bit floating point value
__float32_neg | Negates a 32-bit floating point value
__float32_sqr | Squares a 32-bit floating point value
__float32_sub | Subtract two 32-bit floating point values
__float32_sub_asgn | Subtract a 32-bit floating point value from a 32-bit floating point value stored in memory
__float64_add | Add two 64-bit floating point values
__float64_add_1 | Add one to a 64-bit floating point value
__float64_add_asgn | Add a 64-bit floating point value to a 64-bit floating point value stored in memory
__float64_div | Divide two 64-bit floating point values
__float64_div_asgn | Divide a 64-bit floating point value into a 64-bit floating point value stored in memory
__float64_mul | Multiply two 64-bit floating point values
__float64_mul_asgn | Multiply a 64-bit floating point value in memory by a 64-bit floating point value
__float64_neg | Negates a 64-bit floating point value
__float64_sqr | Squares a 64-bit floating point value
__float64_sub | Subtract two 64-bit floating point values
__float64_sub_asgn | Subtract a 64-bit floating point value from a 64-bit floating point value stored in memory
Floating point comparison
__float32_eq | Compare two 32-bit floating point values for equality
__float32_eq_0 | Compare a 32-bit floating point values for equality to zero
__float32_lt | Compare two 32-bit floating point values
__float32_lt_0 | Compare a 32-bit floating point value with zero
__float64_eq | Compare two 64-bit floating point values for equality
__float64_eq_0 | Compare a 64-bit floating point values for equality to zero
__float64_lt | Compare two 64-bit floating point values
__float64_lt_0 | Compare a 64-bit floating point value with zero
Floating point to integer conversions
__float32_to_int16 | Convert a 32-bit floating point value to a 16-bit signed integer
__float32_to_int32 | Convert a 32-bit floating point value to a 32-bit signed integer
__float32_to_int64 | Convert a 32-bit floating point value to a 64-bit signed integer
__float32_to_uint16 | Convert a 32-bit floating point value to a 16-bit unsigned integer
__float32_to_uint32 | Convert a 32-bit floating point value to a 32-bit unsigned integer
__float32_to_uint64 | Convert a 32-bit floating point value to a 64-bit unsigned integer
Integer to floating point conversions
__int16_to_float32 | Convert a 16-bit signed integer to a 32-bit floating point value
__int32_to_float32 | Convert a 32-bit signed integer to a 32-bit floating point value
__int64_to_float32 | Convert a 64-bit signed integer to a 32-bit floating point value
__uint16_to_float32 | Convert a 16-bit unsigned integer to a 32-bit floating point value
__uint32_to_float32 | Convert a 32-bit unsigned integer to a 32-bit floating point value
__uint64_to_float32 | Convert a 64-bit unsigned integer to a 32-bit floating point value
Floating point conversions
__float32_to_float64 | Convert a 32-bit floating point value to a 64-bit floating point value
__float64_to_float32 | Convert a 64-bit floating point value to a 32-bit floating point value