/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Don't edit this file!  It is auto-generated by frameworks/rs/api/gen_runtime.

#ifndef __rs_core_math_rsh__
#define __rs_core_math_rsh__
#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar __attribute__((const, overloadable))abs(char value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))abs(char2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))abs(char3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))abs(char4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort __attribute__((const, overloadable))abs(short value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))abs(short2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))abs(short3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))abs(short4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint __attribute__((const, overloadable))abs(int value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))abs(int2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))abs(int3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))abs(int4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acos
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))acos(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acos
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))acos(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acos
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))acos(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acos
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))acos(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acosh
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))acosh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acosh
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))acosh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acosh
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))acosh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acosh
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))acosh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acospi
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))acospi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acospi
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))acospi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acospi
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))acospi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * acospi
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))acospi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asin
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))asin(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asin
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))asin(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asin
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))asin(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asin
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))asin(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asinh
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))asinh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asinh
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))asinh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asinh
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))asinh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * asinh
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))asinh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))asinpi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))asinpi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))asinpi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))asinpi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))atan(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))atan(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))atan(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))atan(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))atan2(float y, float x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))atan2(float2 y, float2 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))atan2(float3 y, float3 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))atan2(float4 y, float4 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))atan2pi(float y, float x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))atan2pi(float2 y, float2 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))atan2pi(float3 y, float3 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))atan2pi(float4 y, float4 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))atanh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))atanh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))atanh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))atanh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))atanpi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))atanpi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))atanpi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))atanpi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cube root.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))cbrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cube root.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))cbrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cube root.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))cbrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cube root.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))cbrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not less than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))ceil(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not less than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))ceil(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not less than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))ceil(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not less than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))ceil(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))clamp(float value, float min_value, float max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))clamp(float2 value, float2 min_value, float2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))clamp(float3 value, float3 min_value, float3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))clamp(float4 value, float4 min_value, float4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))clamp(float2 value, float min_value, float max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))clamp(float3 value, float min_value, float max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))clamp(float4 value, float min_value, float max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char __attribute__((const, overloadable))clamp(char value, char min_value, char max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char2 __attribute__((const, overloadable))clamp(char2 value, char2 min_value, char2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char3 __attribute__((const, overloadable))clamp(char3 value, char3 min_value, char3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char4 __attribute__((const, overloadable))clamp(char4 value, char4 min_value, char4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar __attribute__((const, overloadable))clamp(uchar value, uchar min_value, uchar max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar2 __attribute__((const, overloadable))clamp(uchar2 value, uchar2 min_value, uchar2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar3 __attribute__((const, overloadable))clamp(uchar3 value, uchar3 min_value, uchar3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar4 __attribute__((const, overloadable))clamp(uchar4 value, uchar4 min_value, uchar4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short __attribute__((const, overloadable))clamp(short value, short min_value, short max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short2 __attribute__((const, overloadable))clamp(short2 value, short2 min_value, short2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short3 __attribute__((const, overloadable))clamp(short3 value, short3 min_value, short3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short4 __attribute__((const, overloadable))clamp(short4 value, short4 min_value, short4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort __attribute__((const, overloadable))clamp(ushort value, ushort min_value, ushort max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort2 __attribute__((const, overloadable))clamp(ushort2 value, ushort2 min_value, ushort2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort3 __attribute__((const, overloadable))clamp(ushort3 value, ushort3 min_value, ushort3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort4 __attribute__((const, overloadable))clamp(ushort4 value, ushort4 min_value, ushort4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int __attribute__((const, overloadable))clamp(int value, int min_value, int max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int2 __attribute__((const, overloadable))clamp(int2 value, int2 min_value, int2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int3 __attribute__((const, overloadable))clamp(int3 value, int3 min_value, int3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int4 __attribute__((const, overloadable))clamp(int4 value, int4 min_value, int4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint __attribute__((const, overloadable))clamp(uint value, uint min_value, uint max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint2 __attribute__((const, overloadable))clamp(uint2 value, uint2 min_value, uint2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint3 __attribute__((const, overloadable))clamp(uint3 value, uint3 min_value, uint3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint4 __attribute__((const, overloadable))clamp(uint4 value, uint4 min_value, uint4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long __attribute__((const, overloadable))clamp(long value, long min_value, long max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long2 __attribute__((const, overloadable))clamp(long2 value, long2 min_value, long2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long3 __attribute__((const, overloadable))clamp(long3 value, long3 min_value, long3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long4 __attribute__((const, overloadable))clamp(long4 value, long4 min_value, long4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong __attribute__((const, overloadable))clamp(ulong value, ulong min_value, ulong max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong2 __attribute__((const, overloadable))clamp(ulong2 value, ulong2 min_value, ulong2 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong3 __attribute__((const, overloadable))clamp(ulong3 value, ulong3 min_value, ulong3 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong4 __attribute__((const, overloadable))clamp(ulong4 value, ulong4 min_value, ulong4 max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char2 __attribute__((const, overloadable))clamp(char2 value, char min_value, char max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char3 __attribute__((const, overloadable))clamp(char3 value, char min_value, char max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern char4 __attribute__((const, overloadable))clamp(char4 value, char min_value, char max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar2 __attribute__((const, overloadable))clamp(uchar2 value, uchar min_value, uchar max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar3 __attribute__((const, overloadable))clamp(uchar3 value, uchar min_value, uchar max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uchar4 __attribute__((const, overloadable))clamp(uchar4 value, uchar min_value, uchar max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short2 __attribute__((const, overloadable))clamp(short2 value, short min_value, short max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short3 __attribute__((const, overloadable))clamp(short3 value, short min_value, short max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern short4 __attribute__((const, overloadable))clamp(short4 value, short min_value, short max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort2 __attribute__((const, overloadable))clamp(ushort2 value, ushort min_value, ushort max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort3 __attribute__((const, overloadable))clamp(ushort3 value, ushort min_value, ushort max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ushort4 __attribute__((const, overloadable))clamp(ushort4 value, ushort min_value, ushort max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int2 __attribute__((const, overloadable))clamp(int2 value, int min_value, int max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int3 __attribute__((const, overloadable))clamp(int3 value, int min_value, int max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern int4 __attribute__((const, overloadable))clamp(int4 value, int min_value, int max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint2 __attribute__((const, overloadable))clamp(uint2 value, uint min_value, uint max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint3 __attribute__((const, overloadable))clamp(uint3 value, uint min_value, uint max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern uint4 __attribute__((const, overloadable))clamp(uint4 value, uint min_value, uint max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long2 __attribute__((const, overloadable))clamp(long2 value, long min_value, long max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long3 __attribute__((const, overloadable))clamp(long3 value, long min_value, long max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern long4 __attribute__((const, overloadable))clamp(long4 value, long min_value, long max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong2 __attribute__((const, overloadable))clamp(ulong2 value, ulong min_value, ulong max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong3 __attribute__((const, overloadable))clamp(ulong3 value, ulong min_value, ulong max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 19))
/*
 * Clamp a value to a specified high and low bound.
 *
 * @param amount value to be clamped.  Supports 1,2,3,4 components
 * @param min_value Lower bound, must be scalar or matching vector.
 * @param max_value High bound, must match type of low
 *
 * Supported by API versions 19 and newer.
 */
extern ulong4 __attribute__((const, overloadable))clamp(ulong4 value, ulong min_value, ulong max_value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern char __attribute__((const, overloadable))clz(char value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))clz(char2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))clz(char3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))clz(char4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar __attribute__((const, overloadable))clz(uchar value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))clz(uchar2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))clz(uchar3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))clz(uchar4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern short __attribute__((const, overloadable))clz(short value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))clz(short2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))clz(short3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))clz(short4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort __attribute__((const, overloadable))clz(ushort value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))clz(ushort2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))clz(ushort3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))clz(ushort4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern int __attribute__((const, overloadable))clz(int value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))clz(int2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))clz(int3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))clz(int4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint __attribute__((const, overloadable))clz(uint value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))clz(uint2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))clz(uint3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the number of leading 0-bits in a value.
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))clz(uint4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to float2
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to float3
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to float4
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to char2
 *
 * Supported by API versions 9 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to char3
 *
 * Supported by API versions 9 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to char4
 *
 * Supported by API versions 9 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to uchar2
 *
 * Supported by API versions 9 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to uchar3
 *
 * Supported by API versions 9 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to uchar4
 *
 * Supported by API versions 9 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to short2
 *
 * Supported by API versions 9 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to short3
 *
 * Supported by API versions 9 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to short4
 *
 * Supported by API versions 9 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to ushort2
 *
 * Supported by API versions 9 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to ushort3
 *
 * Supported by API versions 9 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to ushort4
 *
 * Supported by API versions 9 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to int2
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to int3
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to int4
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from float4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from char4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uchar4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from short4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from ushort4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from int4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint2 to uint2
 *
 * Supported by API versions 9 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint3 to uint3
 *
 * Supported by API versions 9 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Component wise conversion from uint4 to uint4
 *
 * Supported by API versions 9 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to float2
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to float3
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to float4
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to float2
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to float3
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to float4
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to float2
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))convert_float2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to float3
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))convert_float3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to float4
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))convert_float4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to char2
 *
 * Supported by API versions 21 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to char3
 *
 * Supported by API versions 21 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to char4
 *
 * Supported by API versions 21 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to char2
 *
 * Supported by API versions 21 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to char3
 *
 * Supported by API versions 21 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to char4
 *
 * Supported by API versions 21 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to char2
 *
 * Supported by API versions 21 and newer.
 */
extern char2 __attribute__((const, overloadable))convert_char2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to char3
 *
 * Supported by API versions 21 and newer.
 */
extern char3 __attribute__((const, overloadable))convert_char3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to char4
 *
 * Supported by API versions 21 and newer.
 */
extern char4 __attribute__((const, overloadable))convert_char4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to uchar2
 *
 * Supported by API versions 21 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to uchar3
 *
 * Supported by API versions 21 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to uchar4
 *
 * Supported by API versions 21 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to uchar2
 *
 * Supported by API versions 21 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to uchar3
 *
 * Supported by API versions 21 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to uchar4
 *
 * Supported by API versions 21 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to uchar2
 *
 * Supported by API versions 21 and newer.
 */
extern uchar2 __attribute__((const, overloadable))convert_uchar2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to uchar3
 *
 * Supported by API versions 21 and newer.
 */
extern uchar3 __attribute__((const, overloadable))convert_uchar3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to uchar4
 *
 * Supported by API versions 21 and newer.
 */
extern uchar4 __attribute__((const, overloadable))convert_uchar4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to short2
 *
 * Supported by API versions 21 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to short3
 *
 * Supported by API versions 21 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to short4
 *
 * Supported by API versions 21 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to short2
 *
 * Supported by API versions 21 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to short3
 *
 * Supported by API versions 21 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to short4
 *
 * Supported by API versions 21 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to short2
 *
 * Supported by API versions 21 and newer.
 */
extern short2 __attribute__((const, overloadable))convert_short2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to short3
 *
 * Supported by API versions 21 and newer.
 */
extern short3 __attribute__((const, overloadable))convert_short3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to short4
 *
 * Supported by API versions 21 and newer.
 */
extern short4 __attribute__((const, overloadable))convert_short4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to ushort2
 *
 * Supported by API versions 21 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to ushort3
 *
 * Supported by API versions 21 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to ushort4
 *
 * Supported by API versions 21 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to ushort2
 *
 * Supported by API versions 21 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to ushort3
 *
 * Supported by API versions 21 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to ushort4
 *
 * Supported by API versions 21 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to ushort2
 *
 * Supported by API versions 21 and newer.
 */
extern ushort2 __attribute__((const, overloadable))convert_ushort2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to ushort3
 *
 * Supported by API versions 21 and newer.
 */
extern ushort3 __attribute__((const, overloadable))convert_ushort3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to ushort4
 *
 * Supported by API versions 21 and newer.
 */
extern ushort4 __attribute__((const, overloadable))convert_ushort4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to int2
 *
 * Supported by API versions 21 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to int3
 *
 * Supported by API versions 21 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to int4
 *
 * Supported by API versions 21 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to int2
 *
 * Supported by API versions 21 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to int3
 *
 * Supported by API versions 21 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to int4
 *
 * Supported by API versions 21 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to int2
 *
 * Supported by API versions 21 and newer.
 */
extern int2 __attribute__((const, overloadable))convert_int2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to int3
 *
 * Supported by API versions 21 and newer.
 */
extern int3 __attribute__((const, overloadable))convert_int3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to int4
 *
 * Supported by API versions 21 and newer.
 */
extern int4 __attribute__((const, overloadable))convert_int4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double2 to uint2
 *
 * Supported by API versions 21 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(double2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double3 to uint3
 *
 * Supported by API versions 21 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(double3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from double4 to uint4
 *
 * Supported by API versions 21 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(double4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long2 to uint2
 *
 * Supported by API versions 21 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(long2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long3 to uint3
 *
 * Supported by API versions 21 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(long3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from long4 to uint4
 *
 * Supported by API versions 21 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(long4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong2 to uint2
 *
 * Supported by API versions 21 and newer.
 */
extern uint2 __attribute__((const, overloadable))convert_uint2(ulong2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong3 to uint3
 *
 * Supported by API versions 21 and newer.
 */
extern uint3 __attribute__((const, overloadable))convert_uint3(ulong3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ulong4 to uint4
 *
 * Supported by API versions 21 and newer.
 */
extern uint4 __attribute__((const, overloadable))convert_uint4(ulong4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint2 to double2
 *
 * Supported by API versions 21 and newer.
 */
extern double2 __attribute__((const, overloadable))convert_double2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint3 to double3
 *
 * Supported by API versions 21 and newer.
 */
extern double3 __attribute__((const, overloadable))convert_double3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint4 to double4
 *
 * Supported by API versions 21 and newer.
 */
extern double4 __attribute__((const, overloadable))convert_double4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint2 to long2
 *
 * Supported by API versions 21 and newer.
 */
extern long2 __attribute__((const, overloadable))convert_long2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint3 to long3
 *
 * Supported by API versions 21 and newer.
 */
extern long3 __attribute__((const, overloadable))convert_long3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint4 to long4
 *
 * Supported by API versions 21 and newer.
 */
extern long4 __attribute__((const, overloadable))convert_long4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from float4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(char2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(char3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from char4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(char4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(uchar2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(uchar3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uchar4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(uchar4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(short2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(short3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from short4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(short4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(ushort2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(ushort3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from ushort4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(ushort4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(int2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(int3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from int4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(int4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint2 to ulong2
 *
 * Supported by API versions 21 and newer.
 */
extern ulong2 __attribute__((const, overloadable))convert_ulong2(uint2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint3 to ulong3
 *
 * Supported by API versions 21 and newer.
 */
extern ulong3 __attribute__((const, overloadable))convert_ulong3(uint3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Component wise conversion from uint4 to ulong4
 *
 * Supported by API versions 21 and newer.
 */
extern ulong4 __attribute__((const, overloadable))convert_ulong4(uint4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Copy the sign bit from y to x.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))copysign(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Copy the sign bit from y to x.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))copysign(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Copy the sign bit from y to x.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))copysign(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Copy the sign bit from y to x.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))copysign(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))cos(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))cos(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))cos(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))cos(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))cosh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))cosh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))cosh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))cosh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))cospi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))cospi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))cospi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))cospi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the cross product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))cross(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the cross product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))cross(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from radians to degrees.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))degrees(float value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from radians to degrees.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))degrees(float2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from radians to degrees.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))degrees(float3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from radians to degrees.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))degrees(float4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the distance between two points.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))distance(float lhs, float rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the distance between two points.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))distance(float2 lhs, float2 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the distance between two points.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))distance(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the distance between two points.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))distance(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the dot product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))dot(float lhs, float rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the dot product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))dot(float2 lhs, float2 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the dot product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))dot(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the dot product of two vectors.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))dot(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))erf(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))erf(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))erf(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))erf(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the complementary error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))erfc(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the complementary error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))erfc(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the complementary error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))erfc(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the complementary error function.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))erfc(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return e ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))exp(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return e ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))exp(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return e ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))exp(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return e ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))exp(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 10 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))exp10(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 10 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))exp10(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 10 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))exp10(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 10 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))exp10(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 2 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))exp2(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 2 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))exp2(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 2 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))exp2(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return 2 ^ value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))exp2(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))expm1(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))expm1(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))expm1(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))expm1(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fabs(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fabs(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fabs(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the absolute value of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fabs(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_distance(float lhs, float rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_distance(float2 lhs, float2 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_distance(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_distance(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_length(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_length(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_length(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_length(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Approximately normalize a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))fast_normalize(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Approximately normalize a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float2 __attribute__((const, overloadable))fast_normalize(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Approximately normalize a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float3 __attribute__((const, overloadable))fast_normalize(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Approximately normalize a vector.
 *
 * Supported by API versions 17 and newer.
 */
extern float4 __attribute__((const, overloadable))fast_normalize(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the positive difference between two values.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fdim(float a, float b);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the positive difference between two values.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fdim(float2 a, float2 b);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the positive difference between two values.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fdim(float3 a, float3 b);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the positive difference between two values.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fdim(float4 a, float4 b);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not greater than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))floor(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not greater than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))floor(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not greater than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))floor(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the smallest integer not greater than a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))floor(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (a * b) + c.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fma(float a, float b, float c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (a * b) + c.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fma(float2 a, float2 b, float2 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (a * b) + c.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fma(float3 a, float3 b, float3 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (a * b) + c.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fma(float4 a, float4 b, float4 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fmax(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fmax(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fmax(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fmax(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fmax(float2 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fmax(float3 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x < y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fmax(float4 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fmin(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fmin(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fmin(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fmin(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fmin(float2 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fmin(float3 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x > y ? y : x)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fmin(float4 x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the remainder from x / y
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))fmod(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the remainder from x / y
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))fmod(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the remainder from x / y
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))fmod(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the remainder from x / y
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))fmod(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * @param floor  floor[0] will be set to the floor of the input value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))fract(float v, float* floor);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * @param floor  floor[0] will be set to the floor of the input value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))fract(float2 v, float2* floor);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * @param floor  floor[0] will be set to the floor of the input value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))fract(float3 v, float3* floor);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * @param floor  floor[0] will be set to the floor of the input value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))fract(float4 v, float4* floor);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * Supported by API versions 9 and newer.
 */
static float __attribute__((const, overloadable))fract(float v) {
 float unused;
 return fract(v, &unused);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * Supported by API versions 9 and newer.
 */
static float2 __attribute__((const, overloadable))fract(float2 v) {
 float2 unused;
 return fract(v, &unused);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * Supported by API versions 9 and newer.
 */
static float3 __attribute__((const, overloadable))fract(float3 v) {
 float3 unused;
 return fract(v, &unused);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return fractional part of v
 *
 * Supported by API versions 9 and newer.
 */
static float4 __attribute__((const, overloadable))fract(float4 v) {
 float4 unused;
 return fract(v, &unused);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the mantissa and place the exponent into iptr[0]
 *
 * @param v Supports float, float2, float3, float4.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))frexp(float v, int* iptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the mantissa and place the exponent into iptr[0]
 *
 * @param v Supports float, float2, float3, float4.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))frexp(float2 v, int2* iptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the mantissa and place the exponent into iptr[0]
 *
 * @param v Supports float, float2, float3, float4.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))frexp(float3 v, int3* iptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the mantissa and place the exponent into iptr[0]
 *
 * @param v Supports float, float2, float3, float4.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))frexp(float4 v, int4* iptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))half_recip(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float2 __attribute__((const, overloadable))half_recip(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float3 __attribute__((const, overloadable))half_recip(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float4 __attribute__((const, overloadable))half_recip(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate value of (1.f / sqrt(value)).
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))half_rsqrt(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate value of (1.f / sqrt(value)).
 *
 * Supported by API versions 17 and newer.
 */
extern float2 __attribute__((const, overloadable))half_rsqrt(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate value of (1.f / sqrt(value)).
 *
 * Supported by API versions 17 and newer.
 */
extern float3 __attribute__((const, overloadable))half_rsqrt(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate value of (1.f / sqrt(value)).
 *
 * Supported by API versions 17 and newer.
 */
extern float4 __attribute__((const, overloadable))half_rsqrt(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate square root of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float __attribute__((const, overloadable))half_sqrt(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate square root of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float2 __attribute__((const, overloadable))half_sqrt(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate square root of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float3 __attribute__((const, overloadable))half_sqrt(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
/*
 * Return the approximate square root of a value.
 *
 * Supported by API versions 17 and newer.
 */
extern float4 __attribute__((const, overloadable))half_sqrt(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return sqrt(x*x + y*y)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))hypot(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return sqrt(x*x + y*y)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))hypot(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return sqrt(x*x + y*y)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))hypot(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return sqrt(x*x + y*y)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))hypot(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integer exponent of a value
 *
 * Supported by API versions 9 and newer.
 */
extern int __attribute__((const, overloadable))ilogb(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integer exponent of a value
 *
 * Supported by API versions 9 and newer.
 */
extern int2 __attribute__((const, overloadable))ilogb(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integer exponent of a value
 *
 * Supported by API versions 9 and newer.
 */
extern int3 __attribute__((const, overloadable))ilogb(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integer exponent of a value
 *
 * Supported by API versions 9 and newer.
 */
extern int4 __attribute__((const, overloadable))ilogb(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))ldexp(float x, int y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))ldexp(float2 x, int2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))ldexp(float3 x, int3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))ldexp(float4 x, int4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))ldexp(float2 x, int y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))ldexp(float3 x, int y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (x * 2^y)
 *
 * @param x Supports 1,2,3,4 components
 * @param y Supports single component or matching vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))ldexp(float4 x, int y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the length of a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))length(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the length of a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))length(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the length of a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))length(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the length of a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))length(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))lgamma(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))lgamma(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))lgamma(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))lgamma(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))lgamma(float x, int* y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))lgamma(float2 x, int2* y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))lgamma(float3 x, int3* y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the log gamma and sign
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))lgamma(float4 x, int4* y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))log(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))log(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))log(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))log(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 10 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))log10(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 10 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))log10(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 10 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))log10(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 10 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))log10(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))log1p(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))log1p(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))log1p(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))log1p(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 2 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))log2(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 2 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))log2(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 2 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))log2(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the base 2 logarithm.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))log2(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the exponent of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))logb(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the exponent of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))logb(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the exponent of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))logb(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the exponent of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))logb(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute (a * b) + c
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))mad(float a, float b, float c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute (a * b) + c
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))mad(float2 a, float2 b, float2 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute (a * b) + c
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))mad(float3 a, float3 b, float3 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute (a * b) + c
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))mad(float4 a, float4 b, float4 c);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))max(float, float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))max(float2, float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))max(float3, float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))max(float4, float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char __attribute__((const, overloadable))max(char v1, char v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar __attribute__((const, overloadable))max(uchar v1, uchar v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short __attribute__((const, overloadable))max(short v1, short v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort __attribute__((const, overloadable))max(ushort v1, ushort v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int __attribute__((const, overloadable))max(int v1, int v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint __attribute__((const, overloadable))max(uint v1, uint v2) {
 return (v1 > v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char2 __attribute__((const, overloadable))max(char2 v1, char2 v2) {
 char2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar2 __attribute__((const, overloadable))max(uchar2 v1, uchar2 v2) {
 uchar2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short2 __attribute__((const, overloadable))max(short2 v1, short2 v2) {
 short2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort2 __attribute__((const, overloadable))max(ushort2 v1, ushort2 v2) {
 ushort2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int2 __attribute__((const, overloadable))max(int2 v1, int2 v2) {
 int2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint2 __attribute__((const, overloadable))max(uint2 v1, uint2 v2) {
 uint2 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char3 __attribute__((const, overloadable))max(char3 v1, char3 v2) {
 char3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar3 __attribute__((const, overloadable))max(uchar3 v1, uchar3 v2) {
 uchar3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short3 __attribute__((const, overloadable))max(short3 v1, short3 v2) {
 short3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort3 __attribute__((const, overloadable))max(ushort3 v1, ushort3 v2) {
 ushort3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int3 __attribute__((const, overloadable))max(int3 v1, int3 v2) {
 int3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint3 __attribute__((const, overloadable))max(uint3 v1, uint3 v2) {
 uint3 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char4 __attribute__((const, overloadable))max(char4 v1, char4 v2) {
 char4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar4 __attribute__((const, overloadable))max(uchar4 v1, uchar4 v2) {
 uchar4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short4 __attribute__((const, overloadable))max(short4 v1, short4 v2) {
 short4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort4 __attribute__((const, overloadable))max(ushort4 v1, ushort4 v2) {
 ushort4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int4 __attribute__((const, overloadable))max(int4 v1, int4 v2) {
 int4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the maximum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint4 __attribute__((const, overloadable))max(uint4 v1, uint4 v2) {
 uint4 tmp;
 tmp.x = (v1.x > v2.x ? v1.x : v2.x);
 tmp.y = (v1.y > v2.y ? v1.y : v2.y);
 tmp.z = (v1.z > v2.z ? v1.z : v2.z);
 tmp.w = (v1.w > v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char __attribute__((const, overloadable))max(char v1, char v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char2 __attribute__((const, overloadable))max(char2 v1, char2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char3 __attribute__((const, overloadable))max(char3 v1, char3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char4 __attribute__((const, overloadable))max(char4 v1, char4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar __attribute__((const, overloadable))max(uchar v1, uchar v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar2 __attribute__((const, overloadable))max(uchar2 v1, uchar2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar3 __attribute__((const, overloadable))max(uchar3 v1, uchar3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar4 __attribute__((const, overloadable))max(uchar4 v1, uchar4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short __attribute__((const, overloadable))max(short v1, short v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short2 __attribute__((const, overloadable))max(short2 v1, short2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short3 __attribute__((const, overloadable))max(short3 v1, short3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short4 __attribute__((const, overloadable))max(short4 v1, short4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort __attribute__((const, overloadable))max(ushort v1, ushort v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort2 __attribute__((const, overloadable))max(ushort2 v1, ushort2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort3 __attribute__((const, overloadable))max(ushort3 v1, ushort3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort4 __attribute__((const, overloadable))max(ushort4 v1, ushort4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int __attribute__((const, overloadable))max(int v1, int v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int2 __attribute__((const, overloadable))max(int2 v1, int2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int3 __attribute__((const, overloadable))max(int3 v1, int3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int4 __attribute__((const, overloadable))max(int4 v1, int4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint __attribute__((const, overloadable))max(uint v1, uint v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint2 __attribute__((const, overloadable))max(uint2 v1, uint2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint3 __attribute__((const, overloadable))max(uint3 v1, uint3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint4 __attribute__((const, overloadable))max(uint4 v1, uint4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long __attribute__((const, overloadable))max(long v1, long v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long2 __attribute__((const, overloadable))max(long2 v1, long2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long3 __attribute__((const, overloadable))max(long3 v1, long3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long4 __attribute__((const, overloadable))max(long4 v1, long4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong __attribute__((const, overloadable))max(ulong v1, ulong v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong2 __attribute__((const, overloadable))max(ulong2 v1, ulong2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong3 __attribute__((const, overloadable))max(ulong3 v1, ulong3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the maximum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong4 __attribute__((const, overloadable))max(ulong4 v1, ulong4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))min(float, float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))min(float2, float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))min(float3, float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))min(float4, float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char __attribute__((const, overloadable))min(char v1, char v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar __attribute__((const, overloadable))min(uchar v1, uchar v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short __attribute__((const, overloadable))min(short v1, short v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort __attribute__((const, overloadable))min(ushort v1, ushort v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int __attribute__((const, overloadable))min(int v1, int v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint __attribute__((const, overloadable))min(uint v1, uint v2) {
 return (v1 < v2 ? v1 : v2);
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char2 __attribute__((const, overloadable))min(char2 v1, char2 v2) {
 char2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar2 __attribute__((const, overloadable))min(uchar2 v1, uchar2 v2) {
 uchar2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short2 __attribute__((const, overloadable))min(short2 v1, short2 v2) {
 short2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort2 __attribute__((const, overloadable))min(ushort2 v1, ushort2 v2) {
 ushort2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int2 __attribute__((const, overloadable))min(int2 v1, int2 v2) {
 int2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint2 __attribute__((const, overloadable))min(uint2 v1, uint2 v2) {
 uint2 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char3 __attribute__((const, overloadable))min(char3 v1, char3 v2) {
 char3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar3 __attribute__((const, overloadable))min(uchar3 v1, uchar3 v2) {
 uchar3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short3 __attribute__((const, overloadable))min(short3 v1, short3 v2) {
 short3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort3 __attribute__((const, overloadable))min(ushort3 v1, ushort3 v2) {
 ushort3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int3 __attribute__((const, overloadable))min(int3 v1, int3 v2) {
 int3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint3 __attribute__((const, overloadable))min(uint3 v1, uint3 v2) {
 uint3 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static char4 __attribute__((const, overloadable))min(char4 v1, char4 v2) {
 char4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uchar4 __attribute__((const, overloadable))min(uchar4 v1, uchar4 v2) {
 uchar4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static short4 __attribute__((const, overloadable))min(short4 v1, short4 v2) {
 short4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static ushort4 __attribute__((const, overloadable))min(ushort4 v1, ushort4 v2) {
 ushort4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static int4 __attribute__((const, overloadable))min(int4 v1, int4 v2) {
 int4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
/*
 * Return the minimum value from two arguments
 *
 * Suppored by API versions 9 - 19
 */
static uint4 __attribute__((const, overloadable))min(uint4 v1, uint4 v2) {
 uint4 tmp;
 tmp.x = (v1.x < v2.x ? v1.x : v2.x);
 tmp.y = (v1.y < v2.y ? v1.y : v2.y);
 tmp.z = (v1.z < v2.z ? v1.z : v2.z);
 tmp.w = (v1.w < v2.w ? v1.w : v2.w);
 return tmp;
}
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char __attribute__((const, overloadable))min(char v1, char v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char2 __attribute__((const, overloadable))min(char2 v1, char2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char3 __attribute__((const, overloadable))min(char3 v1, char3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern char4 __attribute__((const, overloadable))min(char4 v1, char4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar __attribute__((const, overloadable))min(uchar v1, uchar v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar2 __attribute__((const, overloadable))min(uchar2 v1, uchar2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar3 __attribute__((const, overloadable))min(uchar3 v1, uchar3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uchar4 __attribute__((const, overloadable))min(uchar4 v1, uchar4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short __attribute__((const, overloadable))min(short v1, short v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short2 __attribute__((const, overloadable))min(short2 v1, short2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short3 __attribute__((const, overloadable))min(short3 v1, short3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern short4 __attribute__((const, overloadable))min(short4 v1, short4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort __attribute__((const, overloadable))min(ushort v1, ushort v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort2 __attribute__((const, overloadable))min(ushort2 v1, ushort2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort3 __attribute__((const, overloadable))min(ushort3 v1, ushort3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ushort4 __attribute__((const, overloadable))min(ushort4 v1, ushort4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int __attribute__((const, overloadable))min(int v1, int v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int2 __attribute__((const, overloadable))min(int2 v1, int2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int3 __attribute__((const, overloadable))min(int3 v1, int3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern int4 __attribute__((const, overloadable))min(int4 v1, int4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint __attribute__((const, overloadable))min(uint v1, uint v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint2 __attribute__((const, overloadable))min(uint2 v1, uint2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint3 __attribute__((const, overloadable))min(uint3 v1, uint3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern uint4 __attribute__((const, overloadable))min(uint4 v1, uint4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long __attribute__((const, overloadable))min(long v1, long v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long2 __attribute__((const, overloadable))min(long2 v1, long2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long3 __attribute__((const, overloadable))min(long3 v1, long3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern long4 __attribute__((const, overloadable))min(long4 v1, long4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong __attribute__((const, overloadable))min(ulong v1, ulong v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong2 __attribute__((const, overloadable))min(ulong2 v1, ulong2 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong3 __attribute__((const, overloadable))min(ulong3 v1, ulong3 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * Return the minimum value from two arguments
 *
 * Supported by API versions 20 and newer.
 */
extern ulong4 __attribute__((const, overloadable))min(ulong4 v1, ulong4 v2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))mix(float start, float stop, float amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))mix(float2 start, float2 stop, float2 amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))mix(float3 start, float3 stop, float3 amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))mix(float4 start, float4 stop, float4 amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))mix(float2 start, float2 stop, float amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))mix(float3 start, float3 stop, float amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * return start + ((stop - start) * amount)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))mix(float4 start, float4 stop, float amount);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integral and fractional components of a number.
 *
 * @param x Source value
 * @param iret iret[0] will be set to the integral portion of the number.
 * @return The floating point portion of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))modf(float x, float* iret);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integral and fractional components of a number.
 *
 * @param x Source value
 * @param iret iret[0] will be set to the integral portion of the number.
 * @return The floating point portion of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))modf(float2 x, float2* iret);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integral and fractional components of a number.
 *
 * @param x Source value
 * @param iret iret[0] will be set to the integral portion of the number.
 * @return The floating point portion of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))modf(float3 x, float3* iret);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the integral and fractional components of a number.
 *
 * @param x Source value
 * @param iret iret[0] will be set to the integral portion of the number.
 * @return The floating point portion of the value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))modf(float4 x, float4* iret);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * generate a nan
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))nan(uint);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acos
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_acos(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acos
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_acos(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acos
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_acos(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acos
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_acos(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acosh
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_acosh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acosh
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_acosh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acosh
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_acosh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acosh
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_acosh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acospi
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_acospi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acospi
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_acospi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acospi
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_acospi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * acospi
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_acospi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asin
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_asin(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asin
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_asin(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asin
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_asin(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asin
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_asin(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asinh
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_asinh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asinh
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_asinh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asinh
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_asinh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * asinh
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_asinh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_asinpi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_asinpi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_asinpi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse sine divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_asinpi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_atan(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_atan(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_atan(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_atan(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_atan2(float y, float x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_atan2(float2 y, float2 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_atan2(float3 y, float3 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_atan2(float4 y, float4 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_atan2pi(float y, float x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_atan2pi(float2 y, float2 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_atan2pi(float3 y, float3 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent of y / x, divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_atan2pi(float4 y, float4 x);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_atanh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_atanh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_atanh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse hyperbolic tangent.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_atanh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_atanpi(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_atanpi(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_atanpi(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the inverse tangent divided by PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_atanpi(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cube root.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_cbrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cube root.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_cbrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cube root.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_cbrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cube root.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_cbrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_cos(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_cos(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_cos(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_cos(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_cosh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_cosh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_cosh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hypebolic cosine.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_cosh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_cospi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_cospi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_cospi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the cosine of the value * PI.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_cospi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_distance(float lhs, float rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_distance(float2 lhs, float2 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_distance(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate distance between two points.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_distance(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate division result of two values.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_divide(float lhs, float rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate division result of two values.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_divide(float2 lhs, float2 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate division result of two values.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_divide(float3 lhs, float3 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate division result of two values.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_divide(float4 lhs, float4 rhs);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp
 * valid for inputs -86.f to 86.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_exp(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp
 * valid for inputs -86.f to 86.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_exp(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp
 * valid for inputs -86.f to 86.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_exp(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp
 * valid for inputs -86.f to 86.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_exp(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp10
 * valid for inputs -37.f to 37.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_exp10(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp10
 * valid for inputs -37.f to 37.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_exp10(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp10
 * valid for inputs -37.f to 37.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_exp10(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp10
 * valid for inputs -37.f to 37.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_exp10(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp2
 * valid for inputs -125.f to 125.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_exp2(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp2
 * valid for inputs -125.f to 125.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_exp2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp2
 * valid for inputs -125.f to 125.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_exp2(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate exp2
 * valid for inputs -125.f to 125.f
 * Max 8192 ulps of error
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_exp2(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_expm1(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_expm1(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_expm1(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (e ^ value) - 1.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_expm1(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return native_sqrt(x*x + y*y)
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_hypot(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return native_sqrt(x*x + y*y)
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_hypot(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return native_sqrt(x*x + y*y)
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_hypot(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return native_sqrt(x*x + y*y)
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_hypot(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_length(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_length(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_length(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the approximate length of a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_length(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_log(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_log(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_log(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_log(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log10
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_log10(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log10
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_log10(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log10
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_log10(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log10
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_log10(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_log1p(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_log1p(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_log1p(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the natural logarithm of (v + 1.0f)
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_log1p(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log2
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_log2(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log2
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_log2(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log2
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_log2(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate log2
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_log2(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Normalize a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_normalize(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Normalize a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_normalize(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Normalize a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_normalize(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Normalize a vector.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_normalize(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate v ^ y
 * v must be between 0.f and 256.f
 * y must be between -15.f and 15.f
 *
 * Supported by API versions 18 and newer.
 */
extern float __attribute__((const, overloadable))native_powr(float v, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate v ^ y
 * v must be between 0.f and 256.f
 * y must be between -15.f and 15.f
 *
 * Supported by API versions 18 and newer.
 */
extern float2 __attribute__((const, overloadable))native_powr(float2 v, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate v ^ y
 * v must be between 0.f and 256.f
 * y must be between -15.f and 15.f
 *
 * Supported by API versions 18 and newer.
 */
extern float3 __attribute__((const, overloadable))native_powr(float3 v, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 18))
/*
 * Fast approximate v ^ y
 * v must be between 0.f and 256.f
 * y must be between -15.f and 15.f
 *
 * Supported by API versions 18 and newer.
 */
extern float4 __attribute__((const, overloadable))native_powr(float4 v, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_recip(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_recip(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_recip(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the approximate reciprocal of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_recip(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_rootn(float v, int n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_rootn(float2 v, int2 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_rootn(float3 v, int3 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_rootn(float4 v, int4 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_rsqrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_rsqrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_rsqrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_rsqrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_sin(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_sin(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_sin(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_sin(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((overloadable))native_sincos(float v, float* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((overloadable))native_sincos(float2 v, float2* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((overloadable))native_sincos(float3 v, float3* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((overloadable))native_sincos(float4 v, float4* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_sinh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_sinh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_sinh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_sinh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_sinpi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_sinpi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_sinpi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_sinpi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the aproximate sqrt(v).
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_sqrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the aproximate sqrt(v).
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_sqrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the aproximate sqrt(v).
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_sqrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the aproximate sqrt(v).
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_sqrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_tan(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_tan(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_tan(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_tan(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_tanh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_tanh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_tanh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_tanh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 21 and newer.
 */
extern float __attribute__((const, overloadable))native_tanpi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 21 and newer.
 */
extern float2 __attribute__((const, overloadable))native_tanpi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 21 and newer.
 */
extern float3 __attribute__((const, overloadable))native_tanpi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 21 and newer.
 */
extern float4 __attribute__((const, overloadable))native_tanpi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the next floating point number from x towards y.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))nextafter(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the next floating point number from x towards y.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))nextafter(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the next floating point number from x towards y.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))nextafter(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the next floating point number from x towards y.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))nextafter(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Normalize a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))normalize(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Normalize a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))normalize(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Normalize a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))normalize(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Normalize a vector.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))normalize(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))pow(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))pow(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))pow(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))pow(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))pown(float x, int y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))pown(float2 x, int2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))pown(float3 x, int3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))pown(float4 x, int4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 * x must be >= 0
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))powr(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 * x must be >= 0
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))powr(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 * x must be >= 0
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))powr(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return x ^ y.
 * x must be >= 0
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))powr(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from degrees to radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))radians(float value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from degrees to radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))radians(float2 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from degrees to radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))radians(float3 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Convert from degrees to radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))radians(float4 value);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return round x/y to the nearest integer then compute the remainder.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))remainder(float x, float y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return round x/y to the nearest integer then compute the remainder.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))remainder(float2 x, float2 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return round x/y to the nearest integer then compute the remainder.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))remainder(float3 x, float3 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return round x/y to the nearest integer then compute the remainder.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))remainder(float4 x, float4 y);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the quotient and the remainder of b/c
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))remquo(float b, float c, int* d);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the quotient and the remainder of b/c
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))remquo(float2 b, float2 c, int2* d);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the quotient and the remainder of b/c
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))remquo(float3 b, float3 c, int3* d);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the quotient and the remainder of b/c
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))remquo(float4 b, float4 c, int4* d);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))rint(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))rint(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))rint(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))rint(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))rootn(float v, int n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))rootn(float2 v, int2 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))rootn(float3 v, int3 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the Nth root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))rootn(float4 v, int4 n);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.  Half values are rounded away from zero.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))round(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.  Half values are rounded away from zero.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))round(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.  Half values are rounded away from zero.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))round(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Round to the nearest integral value.  Half values are rounded away from zero.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))round(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))rsqrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))rsqrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))rsqrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return (1 / sqrt(value)).
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))rsqrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sign of a value.
 *
 * if (v < 0) return -1.f;
 * else if (v > 0) return 1.f;
 * else return 0.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))sign(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sign of a value.
 *
 * if (v < 0) return -1.f;
 * else if (v > 0) return 1.f;
 * else return 0.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))sign(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sign of a value.
 *
 * if (v < 0) return -1.f;
 * else if (v > 0) return 1.f;
 * else return 0.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))sign(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sign of a value.
 *
 * if (v < 0) return -1.f;
 * else if (v > 0) return 1.f;
 * else return 0.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))sign(float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))sin(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))sin(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))sin(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))sin(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((overloadable))sincos(float v, float* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((overloadable))sincos(float2 v, float2* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((overloadable))sincos(float3 v, float3* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sine and cosine of a value.
 *
 * @return sine
 * @param v The incoming value in radians
 * @param *cosptr cosptr[0] will be set to the cosine value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((overloadable))sincos(float4 v, float4* cosptr);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))sinh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))sinh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))sinh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic sine of a value specified in radians.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))sinh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))sinpi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))sinpi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))sinpi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the sin(v * PI).
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))sinpi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the square root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))sqrt(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the square root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))sqrt(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the square root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))sqrt(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the square root of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))sqrt(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))step(float edge, float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))step(float2 edge, float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))step(float3 edge, float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))step(float4 edge, float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))step(float2 edge, float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))step(float3 edge, float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))step(float4 edge, float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 20 and newer.
 */
extern float2 __attribute__((const, overloadable))step(float edge, float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 20 and newer.
 */
extern float3 __attribute__((const, overloadable))step(float edge, float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 20))
/*
 * if (v < edge)
 * return 0.f;
 * else
 * return 1.f;
 *
 * Supported by API versions 20 and newer.
 */
extern float4 __attribute__((const, overloadable))step(float edge, float4 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))tan(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))tan(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))tan(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))tan(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))tanh(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))tanh(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))tanh(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return the hyperbolic tangent of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))tanh(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))tanpi(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))tanpi(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))tanpi(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Return tan(v * PI)
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))tanpi(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the gamma function of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))tgamma(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the gamma function of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))tgamma(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the gamma function of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))tgamma(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * Compute the gamma function of a value.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))tgamma(float4);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * ound to integral using truncation.
 *
 * Supported by API versions 9 and newer.
 */
extern float __attribute__((const, overloadable))trunc(float);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * ound to integral using truncation.
 *
 * Supported by API versions 9 and newer.
 */
extern float2 __attribute__((const, overloadable))trunc(float2);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * ound to integral using truncation.
 *
 * Supported by API versions 9 and newer.
 */
extern float3 __attribute__((const, overloadable))trunc(float3);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 9))
/*
 * ound to integral using truncation.
 *
 * Supported by API versions 9 and newer.
 */
extern float4 __attribute__((const, overloadable))trunc(float4);
#endif

#endif // __rs_core_math_rsh__
