diff --git a/docs/ispc.rst b/docs/ispc.rst index 2c41301c..18663942 100644 --- a/docs/ispc.rst +++ b/docs/ispc.rst @@ -3615,6 +3615,41 @@ normalized exponent as a power of two in the ``pw2`` parameter. uniform int * uniform pw2) +Saturating Arithmetic +--------------------- +A saturation addition, substraction, multiplication and division of all integer +types is provided by the ``ispc`` standard library. + +:: + + int8 saturating_add(uniform int8 a, uniform int8 b) + int8 saturating_add(varying int8 a, varying int8 b) + unsigned int8 saturating_add(uniform unsigned int8 a, uniform unsigned int8 b) + unsigned int8 saturating_add(varying unsigned int8 a, varying unsigned int8 b) + + int8 saturating_sub(uniform int8 a, uniform int8 b) + int8 saturating_sub(varying int8 a, varying int8 b) + unsigned int8 saturating_sub(uniform unsigned int8 a, uniform unsigned int8 b) + unsigned int8 saturating_sub(varying unsigned int8 a, varying unsigned int8 b) + + int8 saturating_mul(uniform int8 a, uniform int8 b) + int8 saturating_mul(varying int8 a, varying int8 b) + unsigned int8 saturating_mul(uniform unsigned int8 a, uniform unsigned int8 b) + unsigned int8 saturating_mul(varying unsigned int8 a, varying unsigned int8 b) + + int8 saturating_div(uniform int8 a, uniform int8 b) + int8 saturating_div(varying int8 a, varying int8 b) + unsigned int8 saturating_div(uniform unsigned int8 a, uniform unsigned int8 b) + unsigned int8 saturating_div(varying unsigned int8 a,varying unsigned int8 b) + + +In addition to the ``int8`` variants of saturating arithmetic functions listed +above, there are versions that supports ``int16``, ``int32`` and ``int64`` +values as well. Functions that have best high-speed performance are functions +that support ``varying signed/unsined int8/int16`` on IntelĀ® SSE and IntelĀ® AVX, +because they have hardware implementation. + + Pseudo-Random Numbers ---------------------