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 floating point operations and conversion, with shifts, multiplies, and divides for each of the integer types. In general, you do not need to call these routines directly from your own C code. These functions are are documented here should you need to call them from assembly language. These functions abide by the standard calling conventions of the compiler. Not every implementation of CrossWorks will provide all these functions.

API Summary

Integer multiplication
__int16_mul Multiply two 16-bit signed or unsigned integers forming a 16-bit product
__int16_mul_8x8 Multiply two 8-bit signed integers forming a 16-bit signed product
__int16_mul_asgn Multiply a 16-bit signed or unsigned integer in memory by a 16-bit integer
__int32_mul Multiply two 32-bit signed or unsigned integers forming a 32-bit product
__int32_mul_16x16 Multiply two 16-bit signed integers forming a 32-bit signed product
__int32_mul_asgn Multiply a 32-bit signed or unsigned integer in memory by a 32-bit integer
__int64_mul Multiply two 64-bit signed or unsigned integers forming a 64-bit product
__int64_mul_32x32 Multiply two 32-bit signed integers forming a 64-bit signed product
__int64_mul_asgn Multiply a 64-bit signed or unsigned integer in memory by a 64-bit integer
__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
__int16_div_asgn Divide a 16-bit signed integer in memory by a 16-bit signed integer
__int16_mod Divide two 16-bit signed integers and return the 16-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_div Divide two 32-bit signed integers and return the 32-bit signed quotient
__int32_div_asgn Divide a 32-bit signed integer in memory by a 32-bit signed integer
__int32_mod Divide two 32-bit signed integers and return the 32-bit signed remainder after division
__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_div Divide two 64-bit signed integers and return the 64-bit signed quotient
__int64_div_asgn Divide a 64-bit signed integer in memory by a 64-bit signed integer
__int64_mod Divide two 64-bit signed integers and return the 64-bit signed remainder after division
__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 and return the 16-bit unsigned quotient
__uint16_div_asgn Divide a 16-bit unsigned integer in memory by a 16-bit unsigned integer
__uint16_mod Divide two 16-bit unsigned integers and return the 16-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_div Divide two 32-bit unsigned integers and return the 32-bit unsigned quotient
__uint32_div_asgn Divide a 32-bit unsigned integer in memory by a 32-bit unsigned integer
__uint32_mod Divide two 32-bit unsigned integers and return the 32-bit unsigned remainder after division
__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_div Divide two 64-bit unsigned integers and return the 64-bit unsigned quotient
__uint64_div_asgn Divide a 64-bit unsigned integer in memory by a 64-bit unsigned integer
__uint64_mod Divide two 64-bit unsigned integers and return the 64-bit unsigned remainder after division
__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 variable number of bit positions
__int16_asr_asgn Shift a 16-bit signed integer in memory arithmetically right by a variable number of bit positions
__int16_lsl Shift a 16-bit signed integer left by a variable number of bit positions
__int16_lsl_asgn Shift a 16-bit signed integer in memory left by a variable number of bit positions
__int16_lsr Shift a 16-bit unsigned integer logically right by a variable number of bit positions
__int16_lsr_asgn Shift a 16-bit unsigned integer in memory logically right by a variable number of bit positions
__int32_asr Shift a 32-bit signed integer arithmetically right by a variable number of bit positions
__int32_asr_asgn Shift a 32-bit signed integer in memory arithmetically right by a variable number of bit positions
__int32_lsl Shift a 32-bit signed integer left by a variable number of bit positions
__int32_lsl_asgn Shift a 32-bit signed integer in memory left by a variable number of bit positions
__int32_lsr Shift a 32-bit unsigned integer logically right by a variable number of bit positions
__int32_lsr_asgn Shift a 32-bit unsigned integer in memory logically right by a variable number of bit positions
__int64_asr Shift a 64-bit signed integer arithmetically right by a variable number of bit positions
__int64_asr_asgn Shift a 64-bit signed integer in memory arithmetically right by a variable number of bit positions
__int64_lsl Shift a 64-bit signed integer left by a variable number of bit positions
__int64_lsl_asgn Shift a 64-bit signed integer in memory left by a variable number of bit positions
__int64_lsr Shift a 64-bit unsigned integer logically right by a variable number of bit positions
__int64_lsr_asgn Shift a 64-bit unsigned integer in memory logically right by a variable 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 value
__float32_add_asgn Add a 32-bit floating point value to a 32-bit floating point value in memory
__float32_div Divide two 32-bit floating point values
__float32_div_asgn Divide a 32-bit floating point value in memory by a 32-bit floating point value
__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 Negate a 32-bit floating point value
__float32_sqr Square 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 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 in memory
__float64_div Divide two 64-bit floating point values
__float64_div_asgn Divide a 64-bit floating point value in memory by a 64-bit floating point value
__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 Negate a 64-bit floating point value
__float64_sqr Square 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 in memory
Floating point comparison
__float32_eq Compare two 32-bit floating point values for equality
__float32_eq_0 Compare 32-bit floating point value to zero
__float32_lt Compare two 32-bit floating point values
__float32_lt_0 Compare 32-bit floating point value with zero
__float64_eq Compare two 64-bit floating point values for equality
__float64_eq_0 Compare 64-bit floating point value to zero
__float64_lt Compare two 64-bit floating point values
__float64_lt_0 Compare 64-bit floating point value with zero
Integer to floating point conversions
__int16_to_float32 Convert a 16-bit signed integer to a 32-bit floating point value
__int16_to_float64 Convert a 16-bit signed integer to a 64-bit floating point value
__int32_to_float32 Convert a 32-bit signed integer to a 32-bit floating point value
__int32_to_float64 Convert a 32-bit signed integer to a 64-bit floating point value
__int64_to_float32 Convert a 64-bit signed integer to a 32-bit floating point value
__int64_to_float64 Convert a 64-bit signed integer to a 64-bit floating point value
__uint16_to_float32 Convert a 16-bit unsigned integer to a 32-bit floating point value
__uint16_to_float64 Convert a 16-bit unsigned integer to a 64-bit floating point value
__uint32_to_float32 Convert a 32-bit unsigned integer to a 32-bit floating point value
__uint32_to_float64 Convert a 32-bit unsigned integer to a 64-bit floating point value
__uint64_to_float32 Convert a 64-bit unsigned integer to a 32-bit floating point value
__uint64_to_float64 Convert a 64-bit unsigned integer to a 64-bit floating point value
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
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