Builtins
The compiler offers builtin constants and functions. Some are only available on certain targets. All builtins use the $$
name prefix.
Builtin constants
These can all safely be used by the user.
$$DATE
The current date.
$$FILE
The current file name.
$$FILEPATH
The current file with path.
$$FUNC
The current function name, will return "
$$FUNCTION
The current function as an expression.
$$LINE
The current line as an integer.
$$LINE_RAW
Usually the same as $$LINE, but in case of a macro inclusion it returns the line in the macro rather than the line where the macro was included.
$$MODULE
The current module name.
$$TEST_NAMES
An array of names of the test functions.
$$TEST_FNS
An array of addresses to the test functions.
$$TIME
The current time.
Builtin functions
These functions are not guaranteed to exist on all platforms. They are intended for standard library internal use, and typically the standard library has macros that wrap these builtins, so they should not be used on its own.
$$trap
Emits a trap instruction.
$$unreachable
Inserts an "unreachable" annotation.
$$stacktrace
Returns the current "callstack" reference if available. Compiler dependent.
$$volatile_store
Takes a variable and a value and stores the value as a volatile store.
$$volatile_load
Takes a variable and returns the value using a volatile load.
$$memcpy
Builtin memcpy instruction.
$$memset
Builtin memset instruction.
$$prefetch
Prefetch a memory location.
$$sysclock
Access to the cycle counter register (or similar low latency clock) on supported architectures (e.g. RDTSC on x86), otherwise $$sysclock will yield 0.
$$syscall
Makes a syscall according to the platform convention on platforms where it is supported.
Math functions
Functions $$ceil
, $$trunc
, $$sin
, $$cos
, $$log
, $$log2
, $$log10
, $$rint
, $$round
$$sqrt
, $$roundeven
, $$floor
, $$sqrt
, $$pow
, $$exp
, $$fma
and $$fabs
, $$copysign
,
$$round
, $$nearbyint
.
Can be applied to float vectors or numbers. Returns the same type.
Functions $$min
, $$abs
and $$max
can be applied to any integer or float number or vector.
Function $pow_int takes a float or floating vector + an integer and returns the same type as the first parameter.
Saturated addition, subtraction and left shift for integers and integer vectors:
$$sat_add
, $$sat_shl
, $$sat_sub
.
Bit functions
$$fshl and $$fshr
Funnel shift left and right, takes either two integers or two integer vectors.
$$ctz, $$clz, $$bitreverse, $$bswap, $$popcount
Bit functions work on an integer or an integer vector.
Vector functions
$$reduce_add
, $$reduce_mul
, $$reduce_and
, $$reduce_or
, $$reduce_xor
work on integer vectors.
$$reduce_fadd
, $$reduce_fmul
works on float vectors.
$$reduce_max
, $$reduce_min
works on any vector.
$$reverse
reverses the values in any vector.
$$shufflevector
rearranges the values of two vectors using a fixed mask into
a resulting vector.