diff --git a/api/rs_core_math.spec b/api/rs_core_math.spec
index 4645cea..47ba154 100644
--- a/api/rs_core_math.spec
+++ b/api/rs_core_math.spec
@@ -19,9 +19,9 @@
 t: i8, i16, i32
 name: abs
 ret: u#2#1
-arg: #2#1 n
+arg: #2#1 v
 comment:
- Returns the absolute value of the integer n.
+ Returns the absolute value of an integer.
 
  For floats, use fabs().
 version: 9
@@ -43,7 +43,7 @@
 t: f32
 name: acosh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the inverse hyperbolic cosine, in radians.
 version: 9
@@ -78,7 +78,7 @@
 t: f32
 name: asinh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the inverse hyperbolic sine, in radians.
 version: 9
@@ -113,12 +113,12 @@
 t: f32
 name: atan2
 ret: #2#1
-arg: #2#1 y
-arg: #2#1 x
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the inverse tangent of y / x, in radians.
+ Returns the inverse tangent of (numerator / denominator), in radians.
 
- x can be 0.
+ denominator can be 0.
 version: 9
 end:
 
@@ -127,14 +127,14 @@
 t: f32
 name: atan2pi
 ret: #2#1
-arg: #2#1 y
-arg: #2#1 x
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the inverse tangent of y / x, in radians, divided by pi.
+ Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
 
- To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
 
- x can be 0.
+ denominator can be 0.
 version: 9
 end:
 
@@ -167,7 +167,7 @@
 t: f32
 name: cbrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the cube root.
 version: 9
@@ -178,7 +178,7 @@
 t: f32
 name: ceil
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the smallest integer not less than a value.
 
@@ -352,12 +352,12 @@
 t: f32
 name: copysign
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 magnitude_value
+arg: #2#1 sign_value
 comment:
- Copies the sign from y to x.
+ Copies the sign from sign_value to magnitude_value.
 
- The value returned is either x or -x.
+ The value returned is either magnitude_value or -magnitude_value.
 
  For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
 version: 9
@@ -368,7 +368,7 @@
 t: f32
 name: cos
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the cosine of an angle measured in radians.
 version: 9
@@ -379,9 +379,9 @@
 t: f32
 name: cosh
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the hypebolic cosine of x, where x is measured in radians.
+ Returns the hypebolic cosine of v, where v is measured in radians.
 version: 9
 end:
 
@@ -390,11 +390,11 @@
 t: f32
 name: cospi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the cosine of (x * pi), where (x * pi) is measured in radians.
+ Returns the cosine of (v * pi), where (v * pi) is measured in radians.
 
- To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ To get the cosine of a value measured in degrees, call cospi(v / 180.f).
 version: 9
 end:
 
@@ -403,8 +403,8 @@
 t: f32
 name: cross
 ret: #2#1
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Computes the cross product of two vectors.
 version: 9
@@ -416,7 +416,7 @@
 t: f32
 name: degrees
 ret: #2#1
-arg: #2#1 value
+arg: #2#1 v
 comment:
  Converts from radians to degrees.
 version: 9
@@ -427,8 +427,8 @@
 t: f32
 name: distance
 ret: #2
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Compute the distance between two points.
 version: 9
@@ -440,8 +440,8 @@
 t: f32
 name: dot
 ret: #2
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Computes the dot product of two vectors.
 version: 9
@@ -453,7 +453,7 @@
 t: f32
 name: erf
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the error function.
 version: 9
@@ -464,7 +464,7 @@
 t: f32
 name: erfc
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the complementary error function.
 version: 9
@@ -475,9 +475,9 @@
 t: f32
 name: exp
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns e raised to x, i.e. e ^ x.
+ Returns e raised to v, i.e. e ^ v.
 version: 9
 end:
 
@@ -486,9 +486,9 @@
 t: f32
 name: exp10
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns 10 raised to x, i.e. 10.f ^ x.
+ Returns 10 raised to v, i.e. 10.f ^ v.
 version: 9
 end:
 
@@ -497,9 +497,9 @@
 t: f32
 name: exp2
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns 2 raised to x, i.e. 2.f ^ x.
+ Returns 2 raised to v, i.e. 2.f ^ v.
 version: 9
 end:
 
@@ -508,9 +508,9 @@
 t: f32
 name: expm1
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns e raised to x minus 1, i.e. (e ^ x) - 1.
+ Returns e raised to v minus 1, i.e. (e ^ v) - 1.
 version: 9
 end:
 
@@ -519,9 +519,9 @@
 t: f32
 name: fabs
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the absolute value of the float x.
+ Returns the absolute value of the float v.
 
  For integers, use abs().
 version: 9
@@ -532,8 +532,8 @@
 t: f32
 name: fast_distance
 ret: #2
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Computes the approximate distance between two points.
 
@@ -591,7 +591,7 @@
 t: f32
 name: floor
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the smallest integer not greater than a value.
 version: 9
@@ -602,11 +602,11 @@
 t: f32
 name: fma
 ret: #2#1
-arg: #2#1 a
-arg: #2#1 b
-arg: #2#1 c
+arg: #2#1 multiplicand1
+arg: #2#1 multiplicand2
+arg: #2#1 offset
 comment:
- Multiply and add.  Returns (a * b) + c.
+ Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
 
  This function is identical to mad().
 version: 9
@@ -617,10 +617,10 @@
 t: f32
 name: fmax
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum of x and y, i.e. (x < y ? y : x).
+ Returns the maximum of a and b, i.e. (a < b ? b : a).
 
  The max() function returns identical results but can be applied to more data types.
 version: 9
@@ -631,12 +631,12 @@
 t: f32
 name: fmax
 ret: #2#1
-arg: #2#1 x
-arg: #2 y
+arg: #2#1 a
+arg: #2 b
 comment:
- Returns the maximum of x and y, i.e. (x < y ? y : x).
+ Returns the maximum of a and b, i.e. (a < b ? b : a).
 
- Unlike the other variants of fmax() and max(), this function compare each element of x to the scalar y.
+ Unlike the other variants of fmax() and max(), this function compare each element of a to the scalar b.
 version: 9
 end:
 
@@ -645,10 +645,10 @@
 t: f32
 name: fmin
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum of x and y, i.e. (x > y ? y : x).
+ Returns the minimum of a and b, i.e. (a > b ? b : a).
 
  The min() function returns identical results but can be applied to more data types.
 version: 9
@@ -659,12 +659,12 @@
 t: f32
 name: fmin
 ret: #2#1
-arg: #2#1 x
-arg: #2 y
+arg: #2#1 a
+arg: #2 b
 comment:
- Returns the minimum of x and y, i.e. (x > y ? y : x)
+ Returns the minimum of a and b, i.e. (a > b ? b : a)
 
- Unlike the other variants of fmin() and min(), this function compare each element of x to the scalar y.
+ Unlike the other variants of fmin() and min(), this function compare each element of a to the scalar b.
 version: 9
 end:
 
@@ -673,10 +673,10 @@
 t: f32
 name: fmod
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the remainder of x / y, where the quotient is rounded towards zero.
+ Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
 
  The function remainder() is similar but rounds toward the closest interger.
  For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -725,7 +725,7 @@
 name: frexp
 ret: #2#1
 arg: #2#1 v
-arg: int#1 *expo
+arg: int#1 *exponent
 comment:
  Returns the binary mantissa and exponent of v, e.g. v == mantissa * 2 ^ exponent.
 
@@ -733,7 +733,7 @@
  See ldexp() for the reverse operation.
 
  @param v Supports float, float2, float3, float4.
- @param expo  If expo is not null, each element of expo will be set to the exponent of the corresponding element of v.
+ @param exponent  If exponent is not null, each element of exponent will be set to the exponent of the corresponding element of v.
 version: 9
 end:
 
@@ -781,10 +781,10 @@
 t: f32
 name: hypot
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the hypotenuse, i.e. sqrt(x * x + y * y).
+ Returns the hypotenuse, i.e. sqrt(a * a + b * b).
 version: 9
 end:
 
@@ -793,7 +793,7 @@
 t: f32
 name: ilogb
 ret: int#1
-arg: float#1
+arg: float#1 v
 comment:
  Returns the base two exponent of a value, where the mantissa is between 1.f (inclusive) and 2.f (exclusive).
 
@@ -853,9 +853,9 @@
 t: f32
 name: lgamma
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
- Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(value))).
+ Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
 version: 9
 end:
 
@@ -864,15 +864,15 @@
 t: f32
 name: lgamma
 ret: #2#1
-arg: #2#1 x
-arg: int#1 *sign
+arg: #2#1 v
+arg: int#1 *sign_of_gamma
 comment:
- Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(x))).
+ Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
 
  Can also return the sign of the gamma function.
 
- @param x Input value.
- @param sign  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of x is negative, otherwise to 1.f.
+ @param v Input value.
+ @param sign_of_gamma  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of v is negative, otherwise to 1.f.
 
 version: 9
 #TODO Temporary until bionic & associated drivers are fixed
@@ -884,7 +884,7 @@
 t: f32
 name: log
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the natural logarithm.
 version: 9
@@ -895,7 +895,7 @@
 t: f32
 name: log10
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the base 10 logarithm.
 version: 9
@@ -917,7 +917,7 @@
 t: f32
 name: log2
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the base 2 logarithm.
 version: 9
@@ -928,7 +928,7 @@
 t: f32
 name: logb
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the base two exponent of a value, where the mantissa is between 1.f (inclusive) and 2.f (exclusive).
 
@@ -944,11 +944,11 @@
 t: f32
 name: mad
 ret: #2#1
-arg: #2#1 a
-arg: #2#1 b
-arg: #2#1 c
+arg: #2#1 multiplicand1
+arg: #2#1 multiplicand2
+arg: #2#1 offset
 comment:
- Multiply and add.  Returns (a * b) + c.
+ Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
 
  This function is identical to fma().
 version: 9
@@ -959,10 +959,10 @@
 t: f32
 name: max
 ret: #2#1
-arg: #2#1
-arg: #2#1
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 version: 9
 end:
 
@@ -971,12 +971,12 @@
 t: i8 i16 i32 u8 u16 u32
 name: max
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 inline:
- return (v1 > v2 ? v1 : v2);
+ return (a > b ? a : b);
 version: 9 19
 end:
 
@@ -985,14 +985,14 @@
 t: i8 i16 i32 u8 u16 u32
 name: max
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 inline:
  #2#1 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 version: 9 19
 end:
@@ -1002,15 +1002,15 @@
 t: i8 i16 i32 u8 u16 u32
 name: max
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 inline:
  #2#1 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.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 version: 9 19
 end:
@@ -1020,16 +1020,16 @@
 t: i8 i16 i32 u8 u16 u32
 name: max
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 inline:
  #2#1 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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 version: 9 19
 end:
@@ -1039,10 +1039,10 @@
 t: i8 i16 i32 i64 u8 u16 u32 u64
 name: max
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the maximum value from two arguments
+ Returns the maximum value of two arguments.
 version: 21
 end:
 
@@ -1051,10 +1051,10 @@
 t: f32
 name: min
 ret: #2#1
-arg: #2#1
-arg: #2#1
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 version: 9
 end:
 
@@ -1063,12 +1063,12 @@
 t: i8 i16 i32 u8 u16 u32
 name: min
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 inline:
- return (v1 < v2 ? v1 : v2);
+ return (a < b ? a : b);
 version: 9 19
 end:
 
@@ -1077,14 +1077,14 @@
 t: i8 i16 i32 u8 u16 u32
 name: min
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 inline:
  #2#1 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 version: 9 19
 end:
@@ -1094,15 +1094,15 @@
 t: i8 i16 i32 u8 u16 u32
 name: min
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 inline:
  #2#1 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.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 version: 9 19
 end:
@@ -1112,16 +1112,16 @@
 t: i8 i16 i32 u8 u16 u32
 name: min
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 inline:
  #2#1 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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 version: 9 19
 end:
@@ -1131,10 +1131,10 @@
 t: i8 i16 i32 i64 u8 u16 u32 u64
 name: min
 ret: #2#1
-arg: #2#1 v1
-arg: #2#1 v2
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the minimum value from two arguments
+ Returns the minimum value of two arguments.
 version: 21
 end:
 
@@ -1145,9 +1145,11 @@
 ret: #2#1
 arg: #2#1 start
 arg: #2#1 stop
-arg: #2#1 amount
+arg: #2#1 fraction
 comment:
- Returns start + ((stop - start) * amount).
+ Returns start + ((stop - start) * fraction).
+
+ This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
 version: 9
 end:
 
@@ -1158,9 +1160,9 @@
 ret: #2#1
 arg: #2#1 start
 arg: #2#1 stop
-arg: #2 amount
+arg: #2 fraction
 comment:
- Returns start + ((stop - start) * amount).
+ Returns start + ((stop - start) * fraction).
 
  This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
 version: 9
@@ -1171,15 +1173,15 @@
 t: f32
 name: modf
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 *iret
+arg: #2#1 v
+arg: #2#1 *integral_part
 comment:
  Returns the integral and fractional components of a number.
 
  Both components will have the same sign as x.  For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
 
- @param x Source value
- @param iret iret[0] will be set to the integral portion of the number.
+ @param v Source value
+ @param integral_part integral_part[0] will be set to the integral portion of the number.
  @return The floating point portion of the value.
 version: 9
 end:
@@ -1189,11 +1191,13 @@
 t: f32
 name: nan
 ret: #2#1
-arg: uint#1
+arg: uint#1 v
 comment:
  Returns a NaN value (Not a Number).
 
- The argument is embedded into the return value and can be used to distinguish various NaNs.
+ @param v Not used.
+#TODO We're not using the argument.  Once we do, add this documentation line:
+# The argument is embedded into the return value and can be used to distinguish various NaNs.
 version: 9
 end:
 
@@ -1215,7 +1219,7 @@
 t: f32
 name: native_acosh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate inverse hyperbolic cosine, in radians.
 version: 21
@@ -1256,7 +1260,7 @@
 t: f32
 name: native_asinh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate inverse hyperbolic sine, in radians.
 version: 21
@@ -1297,12 +1301,12 @@
 t: f32
 name: native_atan2
 ret: #2#1
-arg: #2#1 y
-arg: #2#1 x
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the approximate inverse tangent of y / x, in radians.
+ Returns the approximate inverse tangent of numerator / denominator, in radians.
 
- x can be 0.
+ denominator can be 0.
 version: 21
 # TODO Temporary
 test: limited(0.0005)
@@ -1313,14 +1317,14 @@
 t: f32
 name: native_atan2pi
 ret: #2#1
-arg: #2#1 y
-arg: #2#1 x
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the approximate inverse tangent of y / x, in radians, divided by pi.
+ Returns the approximate inverse tangent of numerator / denominator, in radians, divided by pi.
 
- To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
 
- x can be 0.
+ denominator can be 0.
 version: 21
 # TODO Temporary
 test: limited(0.0005)
@@ -1331,7 +1335,7 @@
 t: f32
 name: native_atanh
 ret: #2#1
-arg: #2#1 in range(-1,1)
+arg: #2#1 v range(-1,1)
 comment:
  Returns the approximate inverse hyperbolic tangent, in radians.
 version: 21
@@ -1359,7 +1363,7 @@
 t: f32
 name: native_cbrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate cubic root.
 version: 21
@@ -1370,7 +1374,7 @@
 t: f32
 name: native_cos
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate cosine of an angle measured in radians.
 version: 21
@@ -1381,7 +1385,7 @@
 t: f32
 name: native_cosh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate hypebolic cosine.
 version: 21
@@ -1392,11 +1396,11 @@
 t: f32
 name: native_cospi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the approximate cosine of (x * pi), where (x * pi) is measured in radians.
+ Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
 
- To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ To get the cosine of a value measured in degrees, call cospi(v / 180.f).
 version: 21
 end:
 
@@ -1405,8 +1409,8 @@
 t: f32
 name: native_distance
 ret: #2
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Computes the approximate distance between two points.
 version: 21
@@ -1418,8 +1422,8 @@
 t: f32
 name: native_divide
 ret: #2#1
-arg: #2#1 lhs
-arg: #2#1 rhs
+arg: #2#1 left_vector
+arg: #2#1 right_vector
 comment:
  Computes the approximate division result of two values.
 version: 21
@@ -1472,9 +1476,9 @@
 t: f32
 name: native_expm1
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
- Returns the approximate (e ^ value) - 1.
+ Returns the approximate (e ^ v) - 1.
 version: 21
 end:
 
@@ -1483,10 +1487,10 @@
 t: f32
 name: native_hypot
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 a
+arg: #2#1 b
 comment:
- Returns the approximate native_sqrt(x*x + y*y)
+ Returns the approximate native_sqrt(a * a + b * b)
 version: 21
 end:
 
@@ -1535,7 +1539,7 @@
 t: f32
 name: native_log1p
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate natural logarithm of (v + 1.0f)
 version: 21
@@ -1572,15 +1576,13 @@
 t: f32
 name: native_powr
 ret: #2#1
-arg: #2#1 v range(0,256)
-arg: #2#1 y range(-15,15)
+arg: #2#1 base range(0,256)
+arg: #2#1 exponent range(-15,15)
 comment:
- Fast approximate v ^ y.
+ Fast approximate (base ^ exponent).
 
- v must be between 0.f and 256.f.
- y must be between -15.f and 15.f.
-
- It is not accurate for values of v very close to zero.
+ @param base Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
+ @param exponent Must be between -15.f and 15.f.
 version: 18
 test: limited
 end:
@@ -1613,9 +1615,9 @@
 t: f32
 name: native_rsqrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
- Returns approximate (1 / sqrt(value)).
+ Returns approximate (1 / sqrt(v)).
 version: 21
 end:
 
@@ -1624,7 +1626,7 @@
 t: f32
 name: native_sin
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate sine of an angle measured in radians.
 version: 21
@@ -1636,13 +1638,13 @@
 name: native_sincos
 ret: #2#1
 arg: #2#1 v
-arg: #2#1 *cosptr
+arg: #2#1 *cos
 comment:
  Returns the approximate 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.
+ @param *cos cos[0] will be set to the cosine value.
 version: 21
 # TODO Temporary
 test: limited(0.0005)
@@ -1653,7 +1655,7 @@
 t: f32
 name: native_sinh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate hyperbolic sine of a value specified in radians.
 version: 21
@@ -1664,11 +1666,11 @@
 t: f32
 name: native_sinpi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the approximate sine of (x * pi), where (x * pi) is measured in radians.
+ Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
 
- To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ To get the sine of a value measured in degrees, call sinpi(v / 180.f).
 version: 21
 end:
 
@@ -1677,7 +1679,7 @@
 t: f32
 name: native_sqrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate sqrt(v).
 version: 21
@@ -1688,7 +1690,7 @@
 t: f32
 name: native_tan
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate tangent of an angle measured in radians.
 version: 21
@@ -1699,7 +1701,7 @@
 t: f32
 name: native_tanh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the approximate hyperbolic tangent of a value.
 version: 21
@@ -1710,11 +1712,11 @@
 t: f32
 name: native_tanpi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the approximate tangent of (x * pi), where (x * pi) is measured in radians.
+ Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
 
- To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
 version: 21
 end:
 
@@ -1723,10 +1725,10 @@
 t: f32
 name: nextafter
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 v
+arg: #2#1 target
 comment:
- Returns the next floating point number from x towards y.
+ Returns the next floating point number from v towards target.
 version: 9
 end:
 
@@ -1749,10 +1751,10 @@
 t: f32
 name: pow
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 base
+arg: #2#1 exponent
 comment:
- Returns x raised to the power y, i.e. x ^ y.
+ Returns base raised to the power exponent, i.e. base ^ exponent.
 
  pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the base to be non-negative.
 version: 9
@@ -1763,10 +1765,10 @@
 t: f32
 name: pown
 ret: #2#1
-arg: #2#1 x
-arg: int#1 y
+arg: #2#1 base
+arg: int#1 exponent
 comment:
- Returns x raised to the power y, i.e. x ^ y.
+ Returns base raised to the power exponent, i.e. base ^ exponent.
 
  pow() and powr() are similar.  The both take a float exponent. powr() also assumes the base to be non-negative.
 version: 9
@@ -1777,10 +1779,10 @@
 t: f32
 name: powr
 ret: #2#1
-arg: #2#1 x range(0,3000)
-arg: #2#1 y
+arg: #2#1 base range(0,3000)
+arg: #2#1 exponent
 comment:
- Returns x raised to the power y, i.e. x ^ y.  x must be >= 0.
+ Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
 
  pow() and pown() are similar.  They both make no assumptions about the base.  pow() takes a float exponent while pown() take an integer.
 version: 9
@@ -1791,7 +1793,7 @@
 t: f32
 name: radians
 ret: #2#1
-arg: #2#1 value
+arg: #2#1 v
 comment:
  Converts from degrees to radians.
 version: 9
@@ -1802,10 +1804,10 @@
 t: f32
 name: remainder
 ret: #2#1
-arg: #2#1 x
-arg: #2#1 y
+arg: #2#1 numerator
+arg: #2#1 denominator
 comment:
- Returns the remainder of x / y, where the quotient is rounded towards the nearest integer.
+ Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
 
  The function fmod() is similar but rounds toward the closest interger.
  For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -1818,11 +1820,11 @@
 t: f32
 name: remquo
 ret: #2#1
-arg: #2#1 b
-arg: #2#1 c
-arg: int#1 *d
+arg: #2#1 numerator
+arg: #2#1 denominator
+arg: int#1 *quotient
 comment:
- Returns the quotient and the remainder of b / c.
+ Returns the quotient and the remainder of (numerator / denominator).
 
  Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
 
@@ -1830,9 +1832,9 @@
 
  Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative.  It returns 0.5f.
 
- @param b The numerator.
- @param c The denominator.
- @param *d d[0] will be set to the integer quotient.
+ @param numerator The numerator.
+ @param denominator The denominator.
+ @param *quotient quotient[0] will be set to the integer quotient.
  @return The remainder, precise only for the low three bits.
 version: 9
 test: custom
@@ -1843,7 +1845,7 @@
 t: f32
 name: rint
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Rounds to the nearest integral value.
 
@@ -1870,7 +1872,7 @@
 t: f32
 name: round
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Round to the nearest integral value.
 
@@ -1885,9 +1887,9 @@
 t: f32
 name: rsqrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
- Returns (1 / sqrt(value)).
+ Returns (1 / sqrt(v)).
 version: 9
 end:
 
@@ -1911,7 +1913,7 @@
 t: f32
 name: sin
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the sine of an angle measured in radians.
 version: 9
@@ -1923,13 +1925,13 @@
 name: sincos
 ret: #2#1
 arg: #2#1 v
-arg: #2#1 *cosptr
+arg: #2#1 *cos
 comment:
  Returns the sine and cosine of a value.
 
  @return sine of v
  @param v The incoming value in radians
- @param *cosptr cosptr[0] will be set to the cosine value.
+ @param *cos cosptr[0] will be set to the cosine value.
 version: 9
 end:
 
@@ -1938,9 +1940,9 @@
 t: f32
 name: sinh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
- Returns the hyperbolic sine of x, where x is measured in radians.
+ Returns the hyperbolic sine of v, where v is measured in radians.
 version: 9
 end:
 
@@ -1949,11 +1951,11 @@
 t: f32
 name: sinpi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the sine of (x * pi), where (x * pi) is measured in radians.
+ Returns the sine of (v * pi), where (v * pi) is measured in radians.
 
- To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ To get the sine of a value measured in degrees, call sinpi(v / 180.f).
 version: 9
 end:
 
@@ -1962,7 +1964,7 @@
 t: f32
 name: sqrt
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the square root of a value.
 version: 9
@@ -2015,7 +2017,7 @@
 t: f32
 name: tan
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
  Returns the tangent of an angle measured in radians.
 version: 9
@@ -2026,7 +2028,7 @@
 t: f32
 name: tanh
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the hyperbolic tangent of a value.
 version: 9
@@ -2037,11 +2039,11 @@
 t: f32
 name: tanpi
 ret: #2#1
-arg: #2#1 x
+arg: #2#1 v
 comment:
- Returns the tangent of (x * pi), where (x * pi) is measured in radians.
+ Returns the tangent of (v * pi), where (v * pi) is measured in radians.
 
- To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
 version: 9
 end:
 
@@ -2050,7 +2052,7 @@
 t: f32
 name: tgamma
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Returns the gamma function of a value.
 version: 9
@@ -2061,7 +2063,7 @@
 t: f32
 name: trunc
 ret: #2#1
-arg: #2#1
+arg: #2#1 v
 comment:
  Rounds to integral using truncation.
 
diff --git a/scriptc/rs_core_math.rsh b/scriptc/rs_core_math.rsh
index ab1f7ee..c8a1701 100644
--- a/scriptc/rs_core_math.rsh
+++ b/scriptc/rs_core_math.rsh
@@ -24,134 +24,134 @@
 #define __rs_core_math_rsh__
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar __attribute__((const, overloadable))abs(char n);
+extern uchar __attribute__((const, overloadable))abs(char v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))abs(char2 n);
+extern uchar2 __attribute__((const, overloadable))abs(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))abs(char3 n);
+extern uchar3 __attribute__((const, overloadable))abs(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))abs(char4 n);
+extern uchar4 __attribute__((const, overloadable))abs(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort __attribute__((const, overloadable))abs(short n);
+extern ushort __attribute__((const, overloadable))abs(short v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))abs(short2 n);
+extern ushort2 __attribute__((const, overloadable))abs(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))abs(short3 n);
+extern ushort3 __attribute__((const, overloadable))abs(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))abs(short4 n);
+extern ushort4 __attribute__((const, overloadable))abs(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uint __attribute__((const, overloadable))abs(int n);
+extern uint __attribute__((const, overloadable))abs(int v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))abs(int2 n);
+extern uint2 __attribute__((const, overloadable))abs(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))abs(int3 n);
+extern uint3 __attribute__((const, overloadable))abs(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the integer n.
+ * Returns the absolute value of an integer.
  *
  * For floats, use fabs().
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))abs(int4 n);
+extern uint4 __attribute__((const, overloadable))abs(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -196,7 +196,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))acosh(float);
+extern float __attribute__((const, overloadable))acosh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -205,7 +205,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))acosh(float2);
+extern float2 __attribute__((const, overloadable))acosh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -214,7 +214,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))acosh(float3);
+extern float3 __attribute__((const, overloadable))acosh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -223,7 +223,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))acosh(float4);
+extern float4 __attribute__((const, overloadable))acosh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -312,7 +312,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))asinh(float);
+extern float __attribute__((const, overloadable))asinh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -321,7 +321,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))asinh(float2);
+extern float2 __attribute__((const, overloadable))asinh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -330,7 +330,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))asinh(float3);
+extern float3 __attribute__((const, overloadable))asinh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -339,7 +339,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))asinh(float4);
+extern float4 __attribute__((const, overloadable))asinh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -424,98 +424,98 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians.
+ * Returns the inverse tangent of (numerator / denominator), in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))atan2(float y, float x);
+extern float __attribute__((const, overloadable))atan2(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians.
+ * Returns the inverse tangent of (numerator / denominator), in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))atan2(float2 y, float2 x);
+extern float2 __attribute__((const, overloadable))atan2(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians.
+ * Returns the inverse tangent of (numerator / denominator), in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))atan2(float3 y, float3 x);
+extern float3 __attribute__((const, overloadable))atan2(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians.
+ * Returns the inverse tangent of (numerator / denominator), in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))atan2(float4 y, float4 x);
+extern float4 __attribute__((const, overloadable))atan2(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians, divided by pi.
+ * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))atan2pi(float y, float x);
+extern float __attribute__((const, overloadable))atan2pi(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians, divided by pi.
+ * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))atan2pi(float2 y, float2 x);
+extern float2 __attribute__((const, overloadable))atan2pi(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians, divided by pi.
+ * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))atan2pi(float3 y, float3 x);
+extern float3 __attribute__((const, overloadable))atan2pi(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the inverse tangent of y / x, in radians, divided by pi.
+ * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))atan2pi(float4 y, float4 x);
+extern float4 __attribute__((const, overloadable))atan2pi(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -604,7 +604,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))cbrt(float);
+extern float __attribute__((const, overloadable))cbrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -613,7 +613,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))cbrt(float2);
+extern float2 __attribute__((const, overloadable))cbrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -622,7 +622,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))cbrt(float3);
+extern float3 __attribute__((const, overloadable))cbrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -631,7 +631,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))cbrt(float4);
+extern float4 __attribute__((const, overloadable))cbrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -642,7 +642,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))ceil(float);
+extern float __attribute__((const, overloadable))ceil(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -653,7 +653,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))ceil(float2);
+extern float2 __attribute__((const, overloadable))ceil(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -664,7 +664,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))ceil(float3);
+extern float3 __attribute__((const, overloadable))ceil(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -675,7 +675,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))ceil(float4);
+extern float4 __attribute__((const, overloadable))ceil(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -5915,54 +5915,54 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Copies the sign from y to x.
+ * Copies the sign from sign_value to magnitude_value.
  *
- * The value returned is either x or -x.
+ * The value returned is either magnitude_value or -magnitude_value.
  *
  * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))copysign(float x, float y);
+extern float __attribute__((const, overloadable))copysign(float magnitude_value, float sign_value);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Copies the sign from y to x.
+ * Copies the sign from sign_value to magnitude_value.
  *
- * The value returned is either x or -x.
+ * The value returned is either magnitude_value or -magnitude_value.
  *
  * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))copysign(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))copysign(float2 magnitude_value, float2 sign_value);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Copies the sign from y to x.
+ * Copies the sign from sign_value to magnitude_value.
  *
- * The value returned is either x or -x.
+ * The value returned is either magnitude_value or -magnitude_value.
  *
  * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))copysign(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))copysign(float3 magnitude_value, float3 sign_value);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Copies the sign from y to x.
+ * Copies the sign from sign_value to magnitude_value.
  *
- * The value returned is either x or -x.
+ * The value returned is either magnitude_value or -magnitude_value.
  *
  * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))copysign(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))copysign(float4 magnitude_value, float4 sign_value);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -5971,7 +5971,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))cos(float);
+extern float __attribute__((const, overloadable))cos(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -5980,7 +5980,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))cos(float2);
+extern float2 __attribute__((const, overloadable))cos(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -5989,7 +5989,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))cos(float3);
+extern float3 __attribute__((const, overloadable))cos(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -5998,87 +5998,87 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))cos(float4);
+extern float4 __attribute__((const, overloadable))cos(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypebolic cosine of x, where x is measured in radians.
+ * Returns the hypebolic cosine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))cosh(float x);
+extern float __attribute__((const, overloadable))cosh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypebolic cosine of x, where x is measured in radians.
+ * Returns the hypebolic cosine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))cosh(float2 x);
+extern float2 __attribute__((const, overloadable))cosh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypebolic cosine of x, where x is measured in radians.
+ * Returns the hypebolic cosine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))cosh(float3 x);
+extern float3 __attribute__((const, overloadable))cosh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypebolic cosine of x, where x is measured in radians.
+ * Returns the hypebolic cosine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))cosh(float4 x);
+extern float4 __attribute__((const, overloadable))cosh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))cospi(float x);
+extern float __attribute__((const, overloadable))cospi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))cospi(float2 x);
+extern float2 __attribute__((const, overloadable))cospi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))cospi(float3 x);
+extern float3 __attribute__((const, overloadable))cospi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))cospi(float4 x);
+extern float4 __attribute__((const, overloadable))cospi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6087,7 +6087,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))cross(float3 lhs, float3 rhs);
+extern float3 __attribute__((const, overloadable))cross(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6096,7 +6096,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))cross(float4 lhs, float4 rhs);
+extern float4 __attribute__((const, overloadable))cross(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6105,7 +6105,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))degrees(float value);
+extern float __attribute__((const, overloadable))degrees(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6114,7 +6114,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))degrees(float2 value);
+extern float2 __attribute__((const, overloadable))degrees(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6123,7 +6123,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))degrees(float3 value);
+extern float3 __attribute__((const, overloadable))degrees(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6132,7 +6132,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))degrees(float4 value);
+extern float4 __attribute__((const, overloadable))degrees(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6141,7 +6141,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))distance(float lhs, float rhs);
+extern float __attribute__((const, overloadable))distance(float left_vector, float right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6150,7 +6150,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))distance(float2 lhs, float2 rhs);
+extern float __attribute__((const, overloadable))distance(float2 left_vector, float2 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6159,7 +6159,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))distance(float3 lhs, float3 rhs);
+extern float __attribute__((const, overloadable))distance(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6168,7 +6168,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))distance(float4 lhs, float4 rhs);
+extern float __attribute__((const, overloadable))distance(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6177,7 +6177,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))dot(float lhs, float rhs);
+extern float __attribute__((const, overloadable))dot(float left_vector, float right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6186,7 +6186,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))dot(float2 lhs, float2 rhs);
+extern float __attribute__((const, overloadable))dot(float2 left_vector, float2 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6195,7 +6195,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))dot(float3 lhs, float3 rhs);
+extern float __attribute__((const, overloadable))dot(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6204,7 +6204,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))dot(float4 lhs, float4 rhs);
+extern float __attribute__((const, overloadable))dot(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6213,7 +6213,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))erf(float);
+extern float __attribute__((const, overloadable))erf(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6222,7 +6222,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))erf(float2);
+extern float2 __attribute__((const, overloadable))erf(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6231,7 +6231,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))erf(float3);
+extern float3 __attribute__((const, overloadable))erf(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6240,7 +6240,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))erf(float4);
+extern float4 __attribute__((const, overloadable))erf(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6249,7 +6249,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))erfc(float);
+extern float __attribute__((const, overloadable))erfc(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6258,7 +6258,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))erfc(float2);
+extern float2 __attribute__((const, overloadable))erfc(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6267,7 +6267,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))erfc(float3);
+extern float3 __attribute__((const, overloadable))erfc(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6276,195 +6276,195 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))erfc(float4);
+extern float4 __attribute__((const, overloadable))erfc(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x, i.e. e ^ x.
+ * Returns e raised to v, i.e. e ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))exp(float x);
+extern float __attribute__((const, overloadable))exp(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x, i.e. e ^ x.
+ * Returns e raised to v, i.e. e ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))exp(float2 x);
+extern float2 __attribute__((const, overloadable))exp(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x, i.e. e ^ x.
+ * Returns e raised to v, i.e. e ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))exp(float3 x);
+extern float3 __attribute__((const, overloadable))exp(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x, i.e. e ^ x.
+ * Returns e raised to v, i.e. e ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))exp(float4 x);
+extern float4 __attribute__((const, overloadable))exp(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 10 raised to x, i.e. 10.f ^ x.
+ * Returns 10 raised to v, i.e. 10.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))exp10(float x);
+extern float __attribute__((const, overloadable))exp10(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 10 raised to x, i.e. 10.f ^ x.
+ * Returns 10 raised to v, i.e. 10.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))exp10(float2 x);
+extern float2 __attribute__((const, overloadable))exp10(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 10 raised to x, i.e. 10.f ^ x.
+ * Returns 10 raised to v, i.e. 10.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))exp10(float3 x);
+extern float3 __attribute__((const, overloadable))exp10(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 10 raised to x, i.e. 10.f ^ x.
+ * Returns 10 raised to v, i.e. 10.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))exp10(float4 x);
+extern float4 __attribute__((const, overloadable))exp10(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 2 raised to x, i.e. 2.f ^ x.
+ * Returns 2 raised to v, i.e. 2.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))exp2(float x);
+extern float __attribute__((const, overloadable))exp2(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 2 raised to x, i.e. 2.f ^ x.
+ * Returns 2 raised to v, i.e. 2.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))exp2(float2 x);
+extern float2 __attribute__((const, overloadable))exp2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 2 raised to x, i.e. 2.f ^ x.
+ * Returns 2 raised to v, i.e. 2.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))exp2(float3 x);
+extern float3 __attribute__((const, overloadable))exp2(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 2 raised to x, i.e. 2.f ^ x.
+ * Returns 2 raised to v, i.e. 2.f ^ v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))exp2(float4 x);
+extern float4 __attribute__((const, overloadable))exp2(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x minus 1, i.e. (e ^ x) - 1.
+ * Returns e raised to v minus 1, i.e. (e ^ v) - 1.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))expm1(float x);
+extern float __attribute__((const, overloadable))expm1(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x minus 1, i.e. (e ^ x) - 1.
+ * Returns e raised to v minus 1, i.e. (e ^ v) - 1.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))expm1(float2 x);
+extern float2 __attribute__((const, overloadable))expm1(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x minus 1, i.e. (e ^ x) - 1.
+ * Returns e raised to v minus 1, i.e. (e ^ v) - 1.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))expm1(float3 x);
+extern float3 __attribute__((const, overloadable))expm1(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns e raised to x minus 1, i.e. (e ^ x) - 1.
+ * Returns e raised to v minus 1, i.e. (e ^ v) - 1.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))expm1(float4 x);
+extern float4 __attribute__((const, overloadable))expm1(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the float x.
+ * Returns the absolute value of the float v.
  *
  * For integers, use abs().
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))fabs(float x);
+extern float __attribute__((const, overloadable))fabs(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the float x.
+ * Returns the absolute value of the float v.
  *
  * For integers, use abs().
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fabs(float2 x);
+extern float2 __attribute__((const, overloadable))fabs(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the float x.
+ * Returns the absolute value of the float v.
  *
  * For integers, use abs().
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fabs(float3 x);
+extern float3 __attribute__((const, overloadable))fabs(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the absolute value of the float x.
+ * Returns the absolute value of the float v.
  *
  * For integers, use abs().
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fabs(float4 x);
+extern float4 __attribute__((const, overloadable))fabs(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -6475,7 +6475,7 @@
  *
  * Supported by API versions 17 and newer.
  */
-extern float __attribute__((const, overloadable))fast_distance(float lhs, float rhs);
+extern float __attribute__((const, overloadable))fast_distance(float left_vector, float right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -6486,7 +6486,7 @@
  *
  * Supported by API versions 17 and newer.
  */
-extern float __attribute__((const, overloadable))fast_distance(float2 lhs, float2 rhs);
+extern float __attribute__((const, overloadable))fast_distance(float2 left_vector, float2 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -6497,7 +6497,7 @@
  *
  * Supported by API versions 17 and newer.
  */
-extern float __attribute__((const, overloadable))fast_distance(float3 lhs, float3 rhs);
+extern float __attribute__((const, overloadable))fast_distance(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -6508,7 +6508,7 @@
  *
  * Supported by API versions 17 and newer.
  */
-extern float __attribute__((const, overloadable))fast_distance(float4 lhs, float4 rhs);
+extern float __attribute__((const, overloadable))fast_distance(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -6657,7 +6657,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))floor(float);
+extern float __attribute__((const, overloadable))floor(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6666,7 +6666,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))floor(float2);
+extern float2 __attribute__((const, overloadable))floor(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6675,7 +6675,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))floor(float3);
+extern float3 __attribute__((const, overloadable))floor(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -6684,210 +6684,210 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))floor(float4);
+extern float4 __attribute__((const, overloadable))floor(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to mad().
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))fma(float a, float b, float c);
+extern float __attribute__((const, overloadable))fma(float multiplicand1, float multiplicand2, float offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to mad().
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fma(float2 a, float2 b, float2 c);
+extern float2 __attribute__((const, overloadable))fma(float2 multiplicand1, float2 multiplicand2, float2 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to mad().
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fma(float3 a, float3 b, float3 c);
+extern float3 __attribute__((const, overloadable))fma(float3 multiplicand1, float3 multiplicand2, float3 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to mad().
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fma(float4 a, float4 b, float4 c);
+extern float4 __attribute__((const, overloadable))fma(float4 multiplicand1, float4 multiplicand2, float4 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
  * The max() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))fmax(float x, float y);
+extern float __attribute__((const, overloadable))fmax(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
  * The max() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fmax(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))fmax(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
  * The max() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fmax(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))fmax(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
  * The max() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fmax(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))fmax(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
- * Unlike the other variants of fmax() and max(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmax() and max(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fmax(float2 x, float y);
+extern float2 __attribute__((const, overloadable))fmax(float2 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
- * Unlike the other variants of fmax() and max(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmax() and max(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fmax(float3 x, float y);
+extern float3 __attribute__((const, overloadable))fmax(float3 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum of x and y, i.e. (x < y ? y : x).
+ * Returns the maximum of a and b, i.e. (a < b ? b : a).
  *
- * Unlike the other variants of fmax() and max(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmax() and max(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fmax(float4 x, float y);
+extern float4 __attribute__((const, overloadable))fmax(float4 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x).
+ * Returns the minimum of a and b, i.e. (a > b ? b : a).
  *
  * The min() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))fmin(float x, float y);
+extern float __attribute__((const, overloadable))fmin(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x).
+ * Returns the minimum of a and b, i.e. (a > b ? b : a).
  *
  * The min() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fmin(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))fmin(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x).
+ * Returns the minimum of a and b, i.e. (a > b ? b : a).
  *
  * The min() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fmin(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))fmin(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x).
+ * Returns the minimum of a and b, i.e. (a > b ? b : a).
  *
  * The min() function returns identical results but can be applied to more data types.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fmin(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))fmin(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x)
+ * Returns the minimum of a and b, i.e. (a > b ? b : a)
  *
- * Unlike the other variants of fmin() and min(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmin() and min(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fmin(float2 x, float y);
+extern float2 __attribute__((const, overloadable))fmin(float2 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x)
+ * Returns the minimum of a and b, i.e. (a > b ? b : a)
  *
- * Unlike the other variants of fmin() and min(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmin() and min(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fmin(float3 x, float y);
+extern float3 __attribute__((const, overloadable))fmin(float3 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum of x and y, i.e. (x > y ? y : x)
+ * Returns the minimum of a and b, i.e. (a > b ? b : a)
  *
- * Unlike the other variants of fmin() and min(), this function compare each element of x to the scalar y.
+ * Unlike the other variants of fmin() and min(), this function compare each element of a to the scalar b.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fmin(float4 x, float y);
+extern float4 __attribute__((const, overloadable))fmin(float4 a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards zero.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
  *
  * The function remainder() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -6895,12 +6895,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))fmod(float x, float y);
+extern float __attribute__((const, overloadable))fmod(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards zero.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
  *
  * The function remainder() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -6908,12 +6908,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))fmod(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))fmod(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards zero.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
  *
  * The function remainder() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -6921,12 +6921,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))fmod(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))fmod(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards zero.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
  *
  * The function remainder() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -6934,7 +6934,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))fmod(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))fmod(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7065,11 +7065,11 @@
  * See ldexp() for the reverse operation.
  *
  * @param v Supports float, float2, float3, float4.
- * @param expo  If expo is not null, each element of expo will be set to the exponent of the corresponding element of v.
+ * @param exponent  If exponent is not null, each element of exponent will be set to the exponent of the corresponding element of v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((overloadable))frexp(float v, int* expo);
+extern float __attribute__((overloadable))frexp(float v, int* exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7080,11 +7080,11 @@
  * See ldexp() for the reverse operation.
  *
  * @param v Supports float, float2, float3, float4.
- * @param expo  If expo is not null, each element of expo will be set to the exponent of the corresponding element of v.
+ * @param exponent  If exponent is not null, each element of exponent will be set to the exponent of the corresponding element of v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((overloadable))frexp(float2 v, int2* expo);
+extern float2 __attribute__((overloadable))frexp(float2 v, int2* exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7095,11 +7095,11 @@
  * See ldexp() for the reverse operation.
  *
  * @param v Supports float, float2, float3, float4.
- * @param expo  If expo is not null, each element of expo will be set to the exponent of the corresponding element of v.
+ * @param exponent  If exponent is not null, each element of exponent will be set to the exponent of the corresponding element of v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((overloadable))frexp(float3 v, int3* expo);
+extern float3 __attribute__((overloadable))frexp(float3 v, int3* exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7110,11 +7110,11 @@
  * See ldexp() for the reverse operation.
  *
  * @param v Supports float, float2, float3, float4.
- * @param expo  If expo is not null, each element of expo will be set to the exponent of the corresponding element of v.
+ * @param exponent  If exponent is not null, each element of exponent will be set to the exponent of the corresponding element of v.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((overloadable))frexp(float4 v, int4* expo);
+extern float4 __attribute__((overloadable))frexp(float4 v, int4* exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
@@ -7251,38 +7251,38 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypotenuse, i.e. sqrt(x * x + y * y).
+ * Returns the hypotenuse, i.e. sqrt(a * a + b * b).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))hypot(float x, float y);
+extern float __attribute__((const, overloadable))hypot(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypotenuse, i.e. sqrt(x * x + y * y).
+ * Returns the hypotenuse, i.e. sqrt(a * a + b * b).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))hypot(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))hypot(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypotenuse, i.e. sqrt(x * x + y * y).
+ * Returns the hypotenuse, i.e. sqrt(a * a + b * b).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))hypot(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))hypot(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hypotenuse, i.e. sqrt(x * x + y * y).
+ * Returns the hypotenuse, i.e. sqrt(a * a + b * b).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))hypot(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))hypot(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7296,7 +7296,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int __attribute__((const, overloadable))ilogb(float);
+extern int __attribute__((const, overloadable))ilogb(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7310,7 +7310,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))ilogb(float2);
+extern int2 __attribute__((const, overloadable))ilogb(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7324,7 +7324,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))ilogb(float3);
+extern int3 __attribute__((const, overloadable))ilogb(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7338,7 +7338,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))ilogb(float4);
+extern int4 __attribute__((const, overloadable))ilogb(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7474,98 +7474,98 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(value))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))lgamma(float);
+extern float __attribute__((const, overloadable))lgamma(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(value))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))lgamma(float2);
+extern float2 __attribute__((const, overloadable))lgamma(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(value))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))lgamma(float3);
+extern float3 __attribute__((const, overloadable))lgamma(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(value))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))lgamma(float4);
+extern float4 __attribute__((const, overloadable))lgamma(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(x))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Can also return the sign of the gamma function.
  *
- * @param x Input value.
- * @param sign  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of x is negative, otherwise to 1.f.
+ * @param v Input value.
+ * @param sign_of_gamma  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of v is negative, otherwise to 1.f.
  *
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((overloadable))lgamma(float x, int* sign);
+extern float __attribute__((overloadable))lgamma(float v, int* sign_of_gamma);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(x))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Can also return the sign of the gamma function.
  *
- * @param x Input value.
- * @param sign  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of x is negative, otherwise to 1.f.
+ * @param v Input value.
+ * @param sign_of_gamma  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of v is negative, otherwise to 1.f.
  *
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((overloadable))lgamma(float2 x, int2* sign);
+extern float2 __attribute__((overloadable))lgamma(float2 v, int2* sign_of_gamma);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(x))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Can also return the sign of the gamma function.
  *
- * @param x Input value.
- * @param sign  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of x is negative, otherwise to 1.f.
+ * @param v Input value.
+ * @param sign_of_gamma  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of v is negative, otherwise to 1.f.
  *
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((overloadable))lgamma(float3 x, int3* sign);
+extern float3 __attribute__((overloadable))lgamma(float3 v, int3* sign_of_gamma);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(x))).
+ * Returns the natural logarithm of the absolute value of the gamma function, i.e. log(fabs(gamma(v))).
  *
  * Can also return the sign of the gamma function.
  *
- * @param x Input value.
- * @param sign  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of x is negative, otherwise to 1.f.
+ * @param v Input value.
+ * @param sign_of_gamma  If sign is not null, each element of sign will be set to -1.f if the gamma of the corresponding element of v is negative, otherwise to 1.f.
  *
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((overloadable))lgamma(float4 x, int4* sign);
+extern float4 __attribute__((overloadable))lgamma(float4 v, int4* sign_of_gamma);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7574,7 +7574,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))log(float);
+extern float __attribute__((const, overloadable))log(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7583,7 +7583,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))log(float2);
+extern float2 __attribute__((const, overloadable))log(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7592,7 +7592,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))log(float3);
+extern float3 __attribute__((const, overloadable))log(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7601,7 +7601,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))log(float4);
+extern float4 __attribute__((const, overloadable))log(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7610,7 +7610,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))log10(float);
+extern float __attribute__((const, overloadable))log10(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7619,7 +7619,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))log10(float2);
+extern float2 __attribute__((const, overloadable))log10(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7628,7 +7628,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))log10(float3);
+extern float3 __attribute__((const, overloadable))log10(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7637,7 +7637,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))log10(float4);
+extern float4 __attribute__((const, overloadable))log10(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7682,7 +7682,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))log2(float);
+extern float __attribute__((const, overloadable))log2(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7691,7 +7691,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))log2(float2);
+extern float2 __attribute__((const, overloadable))log2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7700,7 +7700,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))log2(float3);
+extern float3 __attribute__((const, overloadable))log2(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7709,7 +7709,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))log2(float4);
+extern float4 __attribute__((const, overloadable))log2(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7723,7 +7723,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))logb(float);
+extern float __attribute__((const, overloadable))logb(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7737,7 +7737,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))logb(float2);
+extern float2 __attribute__((const, overloadable))logb(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7751,7 +7751,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))logb(float3);
+extern float3 __attribute__((const, overloadable))logb(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7765,1440 +7765,1448 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))logb(float4);
+extern float4 __attribute__((const, overloadable))logb(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to fma().
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))mad(float a, float b, float c);
+extern float __attribute__((const, overloadable))mad(float multiplicand1, float multiplicand2, float offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to fma().
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))mad(float2 a, float2 b, float2 c);
+extern float2 __attribute__((const, overloadable))mad(float2 multiplicand1, float2 multiplicand2, float2 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to fma().
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))mad(float3 a, float3 b, float3 c);
+extern float3 __attribute__((const, overloadable))mad(float3 multiplicand1, float3 multiplicand2, float3 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Multiply and add.  Returns (a * b) + c.
+ * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
  *
  * This function is identical to fma().
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))mad(float4 a, float4 b, float4 c);
+extern float4 __attribute__((const, overloadable))mad(float4 multiplicand1, float4 multiplicand2, float4 offset);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))max(float, float);
+extern float __attribute__((const, overloadable))max(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))max(float2, float2);
+extern float2 __attribute__((const, overloadable))max(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))max(float3, float3);
+extern float3 __attribute__((const, overloadable))max(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))max(float4, float4);
+extern float4 __attribute__((const, overloadable))max(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char __attribute__((const, overloadable))max(char v1, char v2) {
- return (v1 > v2 ? v1 : v2);
+static char __attribute__((const, overloadable))max(char a, char b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar __attribute__((const, overloadable))max(uchar v1, uchar v2) {
- return (v1 > v2 ? v1 : v2);
+static uchar __attribute__((const, overloadable))max(uchar a, uchar b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short __attribute__((const, overloadable))max(short v1, short v2) {
- return (v1 > v2 ? v1 : v2);
+static short __attribute__((const, overloadable))max(short a, short b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort __attribute__((const, overloadable))max(ushort v1, ushort v2) {
- return (v1 > v2 ? v1 : v2);
+static ushort __attribute__((const, overloadable))max(ushort a, ushort b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int __attribute__((const, overloadable))max(int v1, int v2) {
- return (v1 > v2 ? v1 : v2);
+static int __attribute__((const, overloadable))max(int a, int b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint __attribute__((const, overloadable))max(uint v1, uint v2) {
- return (v1 > v2 ? v1 : v2);
+static uint __attribute__((const, overloadable))max(uint a, uint b) {
+ return (a > b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char2 __attribute__((const, overloadable))max(char2 v1, char2 v2) {
+static char2 __attribute__((const, overloadable))max(char2 a, char2 b) {
  char2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar2 __attribute__((const, overloadable))max(uchar2 v1, uchar2 v2) {
+static uchar2 __attribute__((const, overloadable))max(uchar2 a, uchar2 b) {
  uchar2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short2 __attribute__((const, overloadable))max(short2 v1, short2 v2) {
+static short2 __attribute__((const, overloadable))max(short2 a, short2 b) {
  short2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort2 __attribute__((const, overloadable))max(ushort2 v1, ushort2 v2) {
+static ushort2 __attribute__((const, overloadable))max(ushort2 a, ushort2 b) {
  ushort2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int2 __attribute__((const, overloadable))max(int2 v1, int2 v2) {
+static int2 __attribute__((const, overloadable))max(int2 a, int2 b) {
  int2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint2 __attribute__((const, overloadable))max(uint2 v1, uint2 v2) {
+static uint2 __attribute__((const, overloadable))max(uint2 a, uint2 b) {
  uint2 tmp;
- tmp.x = (v1.x > v2.x ? v1.x : v2.x);
- tmp.y = (v1.y > v2.y ? v1.y : v2.y);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char3 __attribute__((const, overloadable))max(char3 v1, char3 v2) {
+static char3 __attribute__((const, overloadable))max(char3 a, char3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar3 __attribute__((const, overloadable))max(uchar3 v1, uchar3 v2) {
+static uchar3 __attribute__((const, overloadable))max(uchar3 a, uchar3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short3 __attribute__((const, overloadable))max(short3 v1, short3 v2) {
+static short3 __attribute__((const, overloadable))max(short3 a, short3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort3 __attribute__((const, overloadable))max(ushort3 v1, ushort3 v2) {
+static ushort3 __attribute__((const, overloadable))max(ushort3 a, ushort3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int3 __attribute__((const, overloadable))max(int3 v1, int3 v2) {
+static int3 __attribute__((const, overloadable))max(int3 a, int3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint3 __attribute__((const, overloadable))max(uint3 v1, uint3 v2) {
+static uint3 __attribute__((const, overloadable))max(uint3 a, uint3 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char4 __attribute__((const, overloadable))max(char4 v1, char4 v2) {
+static char4 __attribute__((const, overloadable))max(char4 a, char4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar4 __attribute__((const, overloadable))max(uchar4 v1, uchar4 v2) {
+static uchar4 __attribute__((const, overloadable))max(uchar4 a, uchar4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short4 __attribute__((const, overloadable))max(short4 v1, short4 v2) {
+static short4 __attribute__((const, overloadable))max(short4 a, short4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort4 __attribute__((const, overloadable))max(ushort4 v1, ushort4 v2) {
+static ushort4 __attribute__((const, overloadable))max(ushort4 a, ushort4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int4 __attribute__((const, overloadable))max(int4 v1, int4 v2) {
+static int4 __attribute__((const, overloadable))max(int4 a, int4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint4 __attribute__((const, overloadable))max(uint4 v1, uint4 v2) {
+static uint4 __attribute__((const, overloadable))max(uint4 a, uint4 b) {
  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);
+ tmp.x = (a.x > b.x ? a.x : b.x);
+ tmp.y = (a.y > b.y ? a.y : b.y);
+ tmp.z = (a.z > b.z ? a.z : b.z);
+ tmp.w = (a.w > b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char __attribute__((const, overloadable))max(char v1, char v2);
+extern char __attribute__((const, overloadable))max(char a, char b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char2 __attribute__((const, overloadable))max(char2 v1, char2 v2);
+extern char2 __attribute__((const, overloadable))max(char2 a, char2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char3 __attribute__((const, overloadable))max(char3 v1, char3 v2);
+extern char3 __attribute__((const, overloadable))max(char3 a, char3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char4 __attribute__((const, overloadable))max(char4 v1, char4 v2);
+extern char4 __attribute__((const, overloadable))max(char4 a, char4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar __attribute__((const, overloadable))max(uchar v1, uchar v2);
+extern uchar __attribute__((const, overloadable))max(uchar a, uchar b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))max(uchar2 v1, uchar2 v2);
+extern uchar2 __attribute__((const, overloadable))max(uchar2 a, uchar2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))max(uchar3 v1, uchar3 v2);
+extern uchar3 __attribute__((const, overloadable))max(uchar3 a, uchar3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))max(uchar4 v1, uchar4 v2);
+extern uchar4 __attribute__((const, overloadable))max(uchar4 a, uchar4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short __attribute__((const, overloadable))max(short v1, short v2);
+extern short __attribute__((const, overloadable))max(short a, short b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short2 __attribute__((const, overloadable))max(short2 v1, short2 v2);
+extern short2 __attribute__((const, overloadable))max(short2 a, short2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short3 __attribute__((const, overloadable))max(short3 v1, short3 v2);
+extern short3 __attribute__((const, overloadable))max(short3 a, short3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short4 __attribute__((const, overloadable))max(short4 v1, short4 v2);
+extern short4 __attribute__((const, overloadable))max(short4 a, short4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort __attribute__((const, overloadable))max(ushort v1, ushort v2);
+extern ushort __attribute__((const, overloadable))max(ushort a, ushort b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))max(ushort2 v1, ushort2 v2);
+extern ushort2 __attribute__((const, overloadable))max(ushort2 a, ushort2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))max(ushort3 v1, ushort3 v2);
+extern ushort3 __attribute__((const, overloadable))max(ushort3 a, ushort3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))max(ushort4 v1, ushort4 v2);
+extern ushort4 __attribute__((const, overloadable))max(ushort4 a, ushort4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int __attribute__((const, overloadable))max(int v1, int v2);
+extern int __attribute__((const, overloadable))max(int a, int b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int2 __attribute__((const, overloadable))max(int2 v1, int2 v2);
+extern int2 __attribute__((const, overloadable))max(int2 a, int2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int3 __attribute__((const, overloadable))max(int3 v1, int3 v2);
+extern int3 __attribute__((const, overloadable))max(int3 a, int3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int4 __attribute__((const, overloadable))max(int4 v1, int4 v2);
+extern int4 __attribute__((const, overloadable))max(int4 a, int4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint __attribute__((const, overloadable))max(uint v1, uint v2);
+extern uint __attribute__((const, overloadable))max(uint a, uint b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint2 __attribute__((const, overloadable))max(uint2 v1, uint2 v2);
+extern uint2 __attribute__((const, overloadable))max(uint2 a, uint2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint3 __attribute__((const, overloadable))max(uint3 v1, uint3 v2);
+extern uint3 __attribute__((const, overloadable))max(uint3 a, uint3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint4 __attribute__((const, overloadable))max(uint4 v1, uint4 v2);
+extern uint4 __attribute__((const, overloadable))max(uint4 a, uint4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long __attribute__((const, overloadable))max(long v1, long v2);
+extern long __attribute__((const, overloadable))max(long a, long b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long2 __attribute__((const, overloadable))max(long2 v1, long2 v2);
+extern long2 __attribute__((const, overloadable))max(long2 a, long2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long3 __attribute__((const, overloadable))max(long3 v1, long3 v2);
+extern long3 __attribute__((const, overloadable))max(long3 a, long3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long4 __attribute__((const, overloadable))max(long4 v1, long4 v2);
+extern long4 __attribute__((const, overloadable))max(long4 a, long4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong __attribute__((const, overloadable))max(ulong v1, ulong v2);
+extern ulong __attribute__((const, overloadable))max(ulong a, ulong b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))max(ulong2 v1, ulong2 v2);
+extern ulong2 __attribute__((const, overloadable))max(ulong2 a, ulong2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))max(ulong3 v1, ulong3 v2);
+extern ulong3 __attribute__((const, overloadable))max(ulong3 a, ulong3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the maximum value from two arguments
+ * Returns the maximum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))max(ulong4 v1, ulong4 v2);
+extern ulong4 __attribute__((const, overloadable))max(ulong4 a, ulong4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))min(float, float);
+extern float __attribute__((const, overloadable))min(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))min(float2, float2);
+extern float2 __attribute__((const, overloadable))min(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))min(float3, float3);
+extern float3 __attribute__((const, overloadable))min(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))min(float4, float4);
+extern float4 __attribute__((const, overloadable))min(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char __attribute__((const, overloadable))min(char v1, char v2) {
- return (v1 < v2 ? v1 : v2);
+static char __attribute__((const, overloadable))min(char a, char b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar __attribute__((const, overloadable))min(uchar v1, uchar v2) {
- return (v1 < v2 ? v1 : v2);
+static uchar __attribute__((const, overloadable))min(uchar a, uchar b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short __attribute__((const, overloadable))min(short v1, short v2) {
- return (v1 < v2 ? v1 : v2);
+static short __attribute__((const, overloadable))min(short a, short b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort __attribute__((const, overloadable))min(ushort v1, ushort v2) {
- return (v1 < v2 ? v1 : v2);
+static ushort __attribute__((const, overloadable))min(ushort a, ushort b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int __attribute__((const, overloadable))min(int v1, int v2) {
- return (v1 < v2 ? v1 : v2);
+static int __attribute__((const, overloadable))min(int a, int b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint __attribute__((const, overloadable))min(uint v1, uint v2) {
- return (v1 < v2 ? v1 : v2);
+static uint __attribute__((const, overloadable))min(uint a, uint b) {
+ return (a < b ? a : b);
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char2 __attribute__((const, overloadable))min(char2 v1, char2 v2) {
+static char2 __attribute__((const, overloadable))min(char2 a, char2 b) {
  char2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar2 __attribute__((const, overloadable))min(uchar2 v1, uchar2 v2) {
+static uchar2 __attribute__((const, overloadable))min(uchar2 a, uchar2 b) {
  uchar2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short2 __attribute__((const, overloadable))min(short2 v1, short2 v2) {
+static short2 __attribute__((const, overloadable))min(short2 a, short2 b) {
  short2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort2 __attribute__((const, overloadable))min(ushort2 v1, ushort2 v2) {
+static ushort2 __attribute__((const, overloadable))min(ushort2 a, ushort2 b) {
  ushort2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int2 __attribute__((const, overloadable))min(int2 v1, int2 v2) {
+static int2 __attribute__((const, overloadable))min(int2 a, int2 b) {
  int2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint2 __attribute__((const, overloadable))min(uint2 v1, uint2 v2) {
+static uint2 __attribute__((const, overloadable))min(uint2 a, uint2 b) {
  uint2 tmp;
- tmp.x = (v1.x < v2.x ? v1.x : v2.x);
- tmp.y = (v1.y < v2.y ? v1.y : v2.y);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char3 __attribute__((const, overloadable))min(char3 v1, char3 v2) {
+static char3 __attribute__((const, overloadable))min(char3 a, char3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar3 __attribute__((const, overloadable))min(uchar3 v1, uchar3 v2) {
+static uchar3 __attribute__((const, overloadable))min(uchar3 a, uchar3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short3 __attribute__((const, overloadable))min(short3 v1, short3 v2) {
+static short3 __attribute__((const, overloadable))min(short3 a, short3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort3 __attribute__((const, overloadable))min(ushort3 v1, ushort3 v2) {
+static ushort3 __attribute__((const, overloadable))min(ushort3 a, ushort3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int3 __attribute__((const, overloadable))min(int3 v1, int3 v2) {
+static int3 __attribute__((const, overloadable))min(int3 a, int3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint3 __attribute__((const, overloadable))min(uint3 v1, uint3 v2) {
+static uint3 __attribute__((const, overloadable))min(uint3 a, uint3 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static char4 __attribute__((const, overloadable))min(char4 v1, char4 v2) {
+static char4 __attribute__((const, overloadable))min(char4 a, char4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uchar4 __attribute__((const, overloadable))min(uchar4 v1, uchar4 v2) {
+static uchar4 __attribute__((const, overloadable))min(uchar4 a, uchar4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static short4 __attribute__((const, overloadable))min(short4 v1, short4 v2) {
+static short4 __attribute__((const, overloadable))min(short4 a, short4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static ushort4 __attribute__((const, overloadable))min(ushort4 v1, ushort4 v2) {
+static ushort4 __attribute__((const, overloadable))min(ushort4 a, ushort4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static int4 __attribute__((const, overloadable))min(int4 v1, int4 v2) {
+static int4 __attribute__((const, overloadable))min(int4 a, int4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9) && (RS_VERSION <= 19))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Suppored by API versions 9 - 19
  */
-static uint4 __attribute__((const, overloadable))min(uint4 v1, uint4 v2) {
+static uint4 __attribute__((const, overloadable))min(uint4 a, uint4 b) {
  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);
+ tmp.x = (a.x < b.x ? a.x : b.x);
+ tmp.y = (a.y < b.y ? a.y : b.y);
+ tmp.z = (a.z < b.z ? a.z : b.z);
+ tmp.w = (a.w < b.w ? a.w : b.w);
  return tmp;
 }
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char __attribute__((const, overloadable))min(char v1, char v2);
+extern char __attribute__((const, overloadable))min(char a, char b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char2 __attribute__((const, overloadable))min(char2 v1, char2 v2);
+extern char2 __attribute__((const, overloadable))min(char2 a, char2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char3 __attribute__((const, overloadable))min(char3 v1, char3 v2);
+extern char3 __attribute__((const, overloadable))min(char3 a, char3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern char4 __attribute__((const, overloadable))min(char4 v1, char4 v2);
+extern char4 __attribute__((const, overloadable))min(char4 a, char4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar __attribute__((const, overloadable))min(uchar v1, uchar v2);
+extern uchar __attribute__((const, overloadable))min(uchar a, uchar b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))min(uchar2 v1, uchar2 v2);
+extern uchar2 __attribute__((const, overloadable))min(uchar2 a, uchar2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))min(uchar3 v1, uchar3 v2);
+extern uchar3 __attribute__((const, overloadable))min(uchar3 a, uchar3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))min(uchar4 v1, uchar4 v2);
+extern uchar4 __attribute__((const, overloadable))min(uchar4 a, uchar4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short __attribute__((const, overloadable))min(short v1, short v2);
+extern short __attribute__((const, overloadable))min(short a, short b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short2 __attribute__((const, overloadable))min(short2 v1, short2 v2);
+extern short2 __attribute__((const, overloadable))min(short2 a, short2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short3 __attribute__((const, overloadable))min(short3 v1, short3 v2);
+extern short3 __attribute__((const, overloadable))min(short3 a, short3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern short4 __attribute__((const, overloadable))min(short4 v1, short4 v2);
+extern short4 __attribute__((const, overloadable))min(short4 a, short4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort __attribute__((const, overloadable))min(ushort v1, ushort v2);
+extern ushort __attribute__((const, overloadable))min(ushort a, ushort b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))min(ushort2 v1, ushort2 v2);
+extern ushort2 __attribute__((const, overloadable))min(ushort2 a, ushort2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))min(ushort3 v1, ushort3 v2);
+extern ushort3 __attribute__((const, overloadable))min(ushort3 a, ushort3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))min(ushort4 v1, ushort4 v2);
+extern ushort4 __attribute__((const, overloadable))min(ushort4 a, ushort4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int __attribute__((const, overloadable))min(int v1, int v2);
+extern int __attribute__((const, overloadable))min(int a, int b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int2 __attribute__((const, overloadable))min(int2 v1, int2 v2);
+extern int2 __attribute__((const, overloadable))min(int2 a, int2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int3 __attribute__((const, overloadable))min(int3 v1, int3 v2);
+extern int3 __attribute__((const, overloadable))min(int3 a, int3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern int4 __attribute__((const, overloadable))min(int4 v1, int4 v2);
+extern int4 __attribute__((const, overloadable))min(int4 a, int4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint __attribute__((const, overloadable))min(uint v1, uint v2);
+extern uint __attribute__((const, overloadable))min(uint a, uint b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint2 __attribute__((const, overloadable))min(uint2 v1, uint2 v2);
+extern uint2 __attribute__((const, overloadable))min(uint2 a, uint2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint3 __attribute__((const, overloadable))min(uint3 v1, uint3 v2);
+extern uint3 __attribute__((const, overloadable))min(uint3 a, uint3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern uint4 __attribute__((const, overloadable))min(uint4 v1, uint4 v2);
+extern uint4 __attribute__((const, overloadable))min(uint4 a, uint4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long __attribute__((const, overloadable))min(long v1, long v2);
+extern long __attribute__((const, overloadable))min(long a, long b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long2 __attribute__((const, overloadable))min(long2 v1, long2 v2);
+extern long2 __attribute__((const, overloadable))min(long2 a, long2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long3 __attribute__((const, overloadable))min(long3 v1, long3 v2);
+extern long3 __attribute__((const, overloadable))min(long3 a, long3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern long4 __attribute__((const, overloadable))min(long4 v1, long4 v2);
+extern long4 __attribute__((const, overloadable))min(long4 a, long4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong __attribute__((const, overloadable))min(ulong v1, ulong v2);
+extern ulong __attribute__((const, overloadable))min(ulong a, ulong b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))min(ulong2 v1, ulong2 v2);
+extern ulong2 __attribute__((const, overloadable))min(ulong2 a, ulong2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))min(ulong3 v1, ulong3 v2);
+extern ulong3 __attribute__((const, overloadable))min(ulong3 a, ulong3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the minimum value from two arguments
+ * Returns the minimum value of two arguments.
  *
  * Supported by API versions 21 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))min(ulong4 v1, ulong4 v2);
+extern ulong4 __attribute__((const, overloadable))min(ulong4 a, ulong4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns 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))
-/**
- * Returns 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))
-/**
- * Returns 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))
-/**
- * Returns 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))
-/**
- * Returns start + ((stop - start) * amount).
+ * Returns start + ((stop - start) * fraction).
  *
  * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))mix(float2 start, float2 stop, float amount);
+extern float __attribute__((const, overloadable))mix(float start, float stop, float fraction);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns start + ((stop - start) * amount).
+ * Returns start + ((stop - start) * fraction).
  *
  * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))mix(float3 start, float3 stop, float amount);
+extern float2 __attribute__((const, overloadable))mix(float2 start, float2 stop, float2 fraction);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns start + ((stop - start) * amount).
+ * Returns start + ((stop - start) * fraction).
  *
  * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))mix(float4 start, float4 stop, float amount);
+extern float3 __attribute__((const, overloadable))mix(float3 start, float3 stop, float3 fraction);
+#endif
+
+#if (defined(RS_VERSION) && (RS_VERSION >= 9))
+/**
+ * Returns start + ((stop - start) * fraction).
+ *
+ * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
+ *
+ * Supported by API versions 9 and newer.
+ */
+extern float4 __attribute__((const, overloadable))mix(float4 start, float4 stop, float4 fraction);
+#endif
+
+#if (defined(RS_VERSION) && (RS_VERSION >= 9))
+/**
+ * Returns start + ((stop - start) * fraction).
+ *
+ * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
+ *
+ * Supported by API versions 9 and newer.
+ */
+extern float2 __attribute__((const, overloadable))mix(float2 start, float2 stop, float fraction);
+#endif
+
+#if (defined(RS_VERSION) && (RS_VERSION >= 9))
+/**
+ * Returns start + ((stop - start) * fraction).
+ *
+ * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
+ *
+ * Supported by API versions 9 and newer.
+ */
+extern float3 __attribute__((const, overloadable))mix(float3 start, float3 stop, float fraction);
+#endif
+
+#if (defined(RS_VERSION) && (RS_VERSION >= 9))
+/**
+ * Returns start + ((stop - start) * fraction).
+ *
+ * This can be useful for mixing two values.  For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
+ *
+ * Supported by API versions 9 and newer.
+ */
+extern float4 __attribute__((const, overloadable))mix(float4 start, float4 stop, float fraction);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -9207,13 +9215,13 @@
  *
  * Both components will have the same sign as x.  For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
  *
- * @param x Source value
- * @param iret iret[0] will be set to the integral portion of the number.
+ * @param v Source value
+ * @param integral_part integral_part[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);
+extern float __attribute__((overloadable))modf(float v, float* integral_part);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -9222,13 +9230,13 @@
  *
  * Both components will have the same sign as x.  For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
  *
- * @param x Source value
- * @param iret iret[0] will be set to the integral portion of the number.
+ * @param v Source value
+ * @param integral_part integral_part[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);
+extern float2 __attribute__((overloadable))modf(float2 v, float2* integral_part);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -9237,13 +9245,13 @@
  *
  * Both components will have the same sign as x.  For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
  *
- * @param x Source value
- * @param iret iret[0] will be set to the integral portion of the number.
+ * @param v Source value
+ * @param integral_part integral_part[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);
+extern float3 __attribute__((overloadable))modf(float3 v, float3* integral_part);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -9252,24 +9260,24 @@
  *
  * Both components will have the same sign as x.  For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
  *
- * @param x Source value
- * @param iret iret[0] will be set to the integral portion of the number.
+ * @param v Source value
+ * @param integral_part integral_part[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);
+extern float4 __attribute__((overloadable))modf(float4 v, float4* integral_part);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
  * Returns a NaN value (Not a Number).
  *
- * The argument is embedded into the return value and can be used to distinguish various NaNs.
+ * @param v Not used.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))nan(uint);
+extern float __attribute__((const, overloadable))nan(uint v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9314,7 +9322,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_acosh(float);
+extern float __attribute__((const, overloadable))native_acosh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9323,7 +9331,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_acosh(float2);
+extern float2 __attribute__((const, overloadable))native_acosh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9332,7 +9340,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_acosh(float3);
+extern float3 __attribute__((const, overloadable))native_acosh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9341,7 +9349,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_acosh(float4);
+extern float4 __attribute__((const, overloadable))native_acosh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9430,7 +9438,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_asinh(float);
+extern float __attribute__((const, overloadable))native_asinh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9439,7 +9447,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_asinh(float2);
+extern float2 __attribute__((const, overloadable))native_asinh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9448,7 +9456,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_asinh(float3);
+extern float3 __attribute__((const, overloadable))native_asinh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9457,7 +9465,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_asinh(float4);
+extern float4 __attribute__((const, overloadable))native_asinh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9542,98 +9550,98 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_atan2(float y, float x);
+extern float __attribute__((const, overloadable))native_atan2(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_atan2(float2 y, float2 x);
+extern float2 __attribute__((const, overloadable))native_atan2(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_atan2(float3 y, float3 x);
+extern float3 __attribute__((const, overloadable))native_atan2(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_atan2(float4 y, float4 x);
+extern float4 __attribute__((const, overloadable))native_atan2(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians, divided by pi.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_atan2pi(float y, float x);
+extern float __attribute__((const, overloadable))native_atan2pi(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians, divided by pi.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_atan2pi(float2 y, float2 x);
+extern float2 __attribute__((const, overloadable))native_atan2pi(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians, divided by pi.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_atan2pi(float3 y, float3 x);
+extern float3 __attribute__((const, overloadable))native_atan2pi(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate inverse tangent of y / x, in radians, divided by pi.
+ * Returns the approximate inverse tangent of numerator / denominator, in radians, divided by pi.
  *
- * To get an inverse tangent measured in degrees, use atan2pi(x, y) * 180.f.
+ * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
  *
- * x can be 0.
+ * denominator can be 0.
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_atan2pi(float4 y, float4 x);
+extern float4 __attribute__((const, overloadable))native_atan2pi(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9642,7 +9650,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_atanh(float in);
+extern float __attribute__((const, overloadable))native_atanh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9651,7 +9659,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_atanh(float2 in);
+extern float2 __attribute__((const, overloadable))native_atanh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9660,7 +9668,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_atanh(float3 in);
+extern float3 __attribute__((const, overloadable))native_atanh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9669,7 +9677,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_atanh(float4 in);
+extern float4 __attribute__((const, overloadable))native_atanh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9722,7 +9730,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_cbrt(float);
+extern float __attribute__((const, overloadable))native_cbrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9731,7 +9739,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_cbrt(float2);
+extern float2 __attribute__((const, overloadable))native_cbrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9740,7 +9748,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_cbrt(float3);
+extern float3 __attribute__((const, overloadable))native_cbrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9749,7 +9757,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_cbrt(float4);
+extern float4 __attribute__((const, overloadable))native_cbrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9758,7 +9766,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_cos(float);
+extern float __attribute__((const, overloadable))native_cos(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9767,7 +9775,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_cos(float2);
+extern float2 __attribute__((const, overloadable))native_cos(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9776,7 +9784,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_cos(float3);
+extern float3 __attribute__((const, overloadable))native_cos(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9785,7 +9793,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_cos(float4);
+extern float4 __attribute__((const, overloadable))native_cos(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9794,7 +9802,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_cosh(float);
+extern float __attribute__((const, overloadable))native_cosh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9803,7 +9811,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_cosh(float2);
+extern float2 __attribute__((const, overloadable))native_cosh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9812,7 +9820,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_cosh(float3);
+extern float3 __attribute__((const, overloadable))native_cosh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9821,51 +9829,51 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_cosh(float4);
+extern float4 __attribute__((const, overloadable))native_cosh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_cospi(float x);
+extern float __attribute__((const, overloadable))native_cospi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_cospi(float2 x);
+extern float2 __attribute__((const, overloadable))native_cospi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_cospi(float3 x);
+extern float3 __attribute__((const, overloadable))native_cospi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate cosine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the cosine of a value measured in degrees, call cospi(a / 180.f).
+ * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_cospi(float4 x);
+extern float4 __attribute__((const, overloadable))native_cospi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9874,7 +9882,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_distance(float lhs, float rhs);
+extern float __attribute__((const, overloadable))native_distance(float left_vector, float right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9883,7 +9891,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_distance(float2 lhs, float2 rhs);
+extern float __attribute__((const, overloadable))native_distance(float2 left_vector, float2 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9892,7 +9900,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_distance(float3 lhs, float3 rhs);
+extern float __attribute__((const, overloadable))native_distance(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9901,7 +9909,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_distance(float4 lhs, float4 rhs);
+extern float __attribute__((const, overloadable))native_distance(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9910,7 +9918,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_divide(float lhs, float rhs);
+extern float __attribute__((const, overloadable))native_divide(float left_vector, float right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9919,7 +9927,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_divide(float2 lhs, float2 rhs);
+extern float2 __attribute__((const, overloadable))native_divide(float2 left_vector, float2 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9928,7 +9936,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_divide(float3 lhs, float3 rhs);
+extern float3 __attribute__((const, overloadable))native_divide(float3 left_vector, float3 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -9937,7 +9945,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_divide(float4 lhs, float4 rhs);
+extern float4 __attribute__((const, overloadable))native_divide(float4 left_vector, float4 right_vector);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
@@ -10074,74 +10082,74 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate (e ^ value) - 1.
+ * Returns the approximate (e ^ v) - 1.
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_expm1(float);
+extern float __attribute__((const, overloadable))native_expm1(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate (e ^ value) - 1.
+ * Returns the approximate (e ^ v) - 1.
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_expm1(float2);
+extern float2 __attribute__((const, overloadable))native_expm1(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate (e ^ value) - 1.
+ * Returns the approximate (e ^ v) - 1.
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_expm1(float3);
+extern float3 __attribute__((const, overloadable))native_expm1(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate (e ^ value) - 1.
+ * Returns the approximate (e ^ v) - 1.
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_expm1(float4);
+extern float4 __attribute__((const, overloadable))native_expm1(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate native_sqrt(x*x + y*y)
+ * Returns the approximate native_sqrt(a * a + b * b)
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_hypot(float x, float y);
+extern float __attribute__((const, overloadable))native_hypot(float a, float b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate native_sqrt(x*x + y*y)
+ * Returns the approximate native_sqrt(a * a + b * b)
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_hypot(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))native_hypot(float2 a, float2 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate native_sqrt(x*x + y*y)
+ * Returns the approximate native_sqrt(a * a + b * b)
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_hypot(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))native_hypot(float3 a, float3 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate native_sqrt(x*x + y*y)
+ * Returns the approximate native_sqrt(a * a + b * b)
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_hypot(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))native_hypot(float4 a, float4 b);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10274,7 +10282,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_log1p(float);
+extern float __attribute__((const, overloadable))native_log1p(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10283,7 +10291,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_log1p(float2);
+extern float2 __attribute__((const, overloadable))native_log1p(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10292,7 +10300,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_log1p(float3);
+extern float3 __attribute__((const, overloadable))native_log1p(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10301,7 +10309,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_log1p(float4);
+extern float4 __attribute__((const, overloadable))native_log1p(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
@@ -10386,58 +10394,50 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /**
- * Fast approximate v ^ y.
+ * Fast approximate (base ^ exponent).
  *
- * v must be between 0.f and 256.f.
- * y must be between -15.f and 15.f.
- *
- * It is not accurate for values of v very close to zero.
+ * @param base Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
+ * @param exponent 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);
+extern float __attribute__((const, overloadable))native_powr(float base, float exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /**
- * Fast approximate v ^ y.
+ * Fast approximate (base ^ exponent).
  *
- * v must be between 0.f and 256.f.
- * y must be between -15.f and 15.f.
- *
- * It is not accurate for values of v very close to zero.
+ * @param base Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
+ * @param exponent 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);
+extern float2 __attribute__((const, overloadable))native_powr(float2 base, float2 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /**
- * Fast approximate v ^ y.
+ * Fast approximate (base ^ exponent).
  *
- * v must be between 0.f and 256.f.
- * y must be between -15.f and 15.f.
- *
- * It is not accurate for values of v very close to zero.
+ * @param base Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
+ * @param exponent 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);
+extern float3 __attribute__((const, overloadable))native_powr(float3 base, float3 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /**
- * Fast approximate v ^ y.
+ * Fast approximate (base ^ exponent).
  *
- * v must be between 0.f and 256.f.
- * y must be between -15.f and 15.f.
- *
- * It is not accurate for values of v very close to zero.
+ * @param base Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
+ * @param exponent 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);
+extern float4 __attribute__((const, overloadable))native_powr(float4 base, float4 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10514,38 +10514,38 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns approximate (1 / sqrt(value)).
+ * Returns approximate (1 / sqrt(v)).
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_rsqrt(float);
+extern float __attribute__((const, overloadable))native_rsqrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns approximate (1 / sqrt(value)).
+ * Returns approximate (1 / sqrt(v)).
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_rsqrt(float2);
+extern float2 __attribute__((const, overloadable))native_rsqrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns approximate (1 / sqrt(value)).
+ * Returns approximate (1 / sqrt(v)).
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_rsqrt(float3);
+extern float3 __attribute__((const, overloadable))native_rsqrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns approximate (1 / sqrt(value)).
+ * Returns approximate (1 / sqrt(v)).
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_rsqrt(float4);
+extern float4 __attribute__((const, overloadable))native_rsqrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10554,7 +10554,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_sin(float);
+extern float __attribute__((const, overloadable))native_sin(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10563,7 +10563,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_sin(float2);
+extern float2 __attribute__((const, overloadable))native_sin(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10572,7 +10572,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_sin(float3);
+extern float3 __attribute__((const, overloadable))native_sin(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10581,7 +10581,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_sin(float4);
+extern float4 __attribute__((const, overloadable))native_sin(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10590,11 +10590,11 @@
  *
  * @return sine
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos cos[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);
+extern float __attribute__((overloadable))native_sincos(float v, float* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10603,11 +10603,11 @@
  *
  * @return sine
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos cos[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);
+extern float2 __attribute__((overloadable))native_sincos(float2 v, float2* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10616,11 +10616,11 @@
  *
  * @return sine
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos cos[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);
+extern float3 __attribute__((overloadable))native_sincos(float3 v, float3* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10629,11 +10629,11 @@
  *
  * @return sine
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos cos[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);
+extern float4 __attribute__((overloadable))native_sincos(float4 v, float4* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10642,7 +10642,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_sinh(float);
+extern float __attribute__((const, overloadable))native_sinh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10651,7 +10651,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_sinh(float2);
+extern float2 __attribute__((const, overloadable))native_sinh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10660,7 +10660,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_sinh(float3);
+extern float3 __attribute__((const, overloadable))native_sinh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10669,51 +10669,51 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_sinh(float4);
+extern float4 __attribute__((const, overloadable))native_sinh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_sinpi(float x);
+extern float __attribute__((const, overloadable))native_sinpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_sinpi(float2 x);
+extern float2 __attribute__((const, overloadable))native_sinpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_sinpi(float3 x);
+extern float3 __attribute__((const, overloadable))native_sinpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_sinpi(float4 x);
+extern float4 __attribute__((const, overloadable))native_sinpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10722,7 +10722,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_sqrt(float);
+extern float __attribute__((const, overloadable))native_sqrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10731,7 +10731,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_sqrt(float2);
+extern float2 __attribute__((const, overloadable))native_sqrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10740,7 +10740,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_sqrt(float3);
+extern float3 __attribute__((const, overloadable))native_sqrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10749,7 +10749,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_sqrt(float4);
+extern float4 __attribute__((const, overloadable))native_sqrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10758,7 +10758,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_tan(float);
+extern float __attribute__((const, overloadable))native_tan(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10767,7 +10767,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_tan(float2);
+extern float2 __attribute__((const, overloadable))native_tan(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10776,7 +10776,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_tan(float3);
+extern float3 __attribute__((const, overloadable))native_tan(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10785,7 +10785,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_tan(float4);
+extern float4 __attribute__((const, overloadable))native_tan(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10794,7 +10794,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_tanh(float);
+extern float __attribute__((const, overloadable))native_tanh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10803,7 +10803,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_tanh(float2);
+extern float2 __attribute__((const, overloadable))native_tanh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10812,7 +10812,7 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_tanh(float3);
+extern float3 __attribute__((const, overloadable))native_tanh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
@@ -10821,87 +10821,87 @@
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_tanh(float4);
+extern float4 __attribute__((const, overloadable))native_tanh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float __attribute__((const, overloadable))native_tanpi(float x);
+extern float __attribute__((const, overloadable))native_tanpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float2 __attribute__((const, overloadable))native_tanpi(float2 x);
+extern float2 __attribute__((const, overloadable))native_tanpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float3 __attribute__((const, overloadable))native_tanpi(float3 x);
+extern float3 __attribute__((const, overloadable))native_tanpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
 /**
- * Returns the approximate tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 21 and newer.
  */
-extern float4 __attribute__((const, overloadable))native_tanpi(float4 x);
+extern float4 __attribute__((const, overloadable))native_tanpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the next floating point number from x towards y.
+ * Returns the next floating point number from v towards target.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))nextafter(float x, float y);
+extern float __attribute__((const, overloadable))nextafter(float v, float target);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the next floating point number from x towards y.
+ * Returns the next floating point number from v towards target.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))nextafter(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))nextafter(float2 v, float2 target);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the next floating point number from x towards y.
+ * Returns the next floating point number from v towards target.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))nextafter(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))nextafter(float3 v, float3 target);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the next floating point number from x towards y.
+ * Returns the next floating point number from v towards target.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))nextafter(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))nextafter(float4 v, float4 target);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -10950,134 +10950,134 @@
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))pow(float x, float y);
+extern float __attribute__((const, overloadable))pow(float base, float exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))pow(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))pow(float2 base, float2 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))pow(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))pow(float3 base, float3 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))pow(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))pow(float4 base, float4 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pow() and powr() are similar.  The both take a float exponent. powr() also assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))pown(float x, int y);
+extern float __attribute__((const, overloadable))pown(float base, int exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pow() and powr() are similar.  The both take a float exponent. powr() also assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))pown(float2 x, int2 y);
+extern float2 __attribute__((const, overloadable))pown(float2 base, int2 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pow() and powr() are similar.  The both take a float exponent. powr() also assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))pown(float3 x, int3 y);
+extern float3 __attribute__((const, overloadable))pown(float3 base, int3 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.
  *
  * pow() and powr() are similar.  The both take a float exponent. powr() also assumes the base to be non-negative.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))pown(float4 x, int4 y);
+extern float4 __attribute__((const, overloadable))pown(float4 base, int4 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.  x must be >= 0.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
  *
  * pow() and pown() are similar.  They both make no assumptions about the base.  pow() takes a float exponent while pown() take an integer.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))powr(float x, float y);
+extern float __attribute__((const, overloadable))powr(float base, float exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.  x must be >= 0.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
  *
  * pow() and pown() are similar.  They both make no assumptions about the base.  pow() takes a float exponent while pown() take an integer.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))powr(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))powr(float2 base, float2 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.  x must be >= 0.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
  *
  * pow() and pown() are similar.  They both make no assumptions about the base.  pow() takes a float exponent while pown() take an integer.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))powr(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))powr(float3 base, float3 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns x raised to the power y, i.e. x ^ y.  x must be >= 0.
+ * Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
  *
  * pow() and pown() are similar.  They both make no assumptions about the base.  pow() takes a float exponent while pown() take an integer.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))powr(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))powr(float4 base, float4 exponent);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11086,7 +11086,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))radians(float value);
+extern float __attribute__((const, overloadable))radians(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11095,7 +11095,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))radians(float2 value);
+extern float2 __attribute__((const, overloadable))radians(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11104,7 +11104,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))radians(float3 value);
+extern float3 __attribute__((const, overloadable))radians(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11113,12 +11113,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))radians(float4 value);
+extern float4 __attribute__((const, overloadable))radians(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards the nearest integer.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
  *
  * The function fmod() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -11126,12 +11126,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))remainder(float x, float y);
+extern float __attribute__((const, overloadable))remainder(float numerator, float denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards the nearest integer.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
  *
  * The function fmod() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -11139,12 +11139,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))remainder(float2 x, float2 y);
+extern float2 __attribute__((const, overloadable))remainder(float2 numerator, float2 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards the nearest integer.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
  *
  * The function fmod() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -11152,12 +11152,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))remainder(float3 x, float3 y);
+extern float3 __attribute__((const, overloadable))remainder(float3 numerator, float3 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the remainder of x / y, where the quotient is rounded towards the nearest integer.
+ * Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
  *
  * The function fmod() is similar but rounds toward the closest interger.
  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
@@ -11165,12 +11165,12 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))remainder(float4 x, float4 y);
+extern float4 __attribute__((const, overloadable))remainder(float4 numerator, float4 denominator);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the quotient and the remainder of b / c.
+ * Returns the quotient and the remainder of (numerator / denominator).
  *
  * Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
  *
@@ -11178,19 +11178,19 @@
  *
  * Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative.  It returns 0.5f.
  *
- * @param b The numerator.
- * @param c The denominator.
- * @param *d d[0] will be set to the integer quotient.
+ * @param numerator The numerator.
+ * @param denominator The denominator.
+ * @param *quotient quotient[0] will be set to the integer quotient.
  * @return The remainder, precise only for the low three bits.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((overloadable))remquo(float b, float c, int* d);
+extern float __attribute__((overloadable))remquo(float numerator, float denominator, int* quotient);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the quotient and the remainder of b / c.
+ * Returns the quotient and the remainder of (numerator / denominator).
  *
  * Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
  *
@@ -11198,19 +11198,19 @@
  *
  * Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative.  It returns 0.5f.
  *
- * @param b The numerator.
- * @param c The denominator.
- * @param *d d[0] will be set to the integer quotient.
+ * @param numerator The numerator.
+ * @param denominator The denominator.
+ * @param *quotient quotient[0] will be set to the integer quotient.
  * @return The remainder, precise only for the low three bits.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((overloadable))remquo(float2 b, float2 c, int2* d);
+extern float2 __attribute__((overloadable))remquo(float2 numerator, float2 denominator, int2* quotient);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the quotient and the remainder of b / c.
+ * Returns the quotient and the remainder of (numerator / denominator).
  *
  * Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
  *
@@ -11218,19 +11218,19 @@
  *
  * Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative.  It returns 0.5f.
  *
- * @param b The numerator.
- * @param c The denominator.
- * @param *d d[0] will be set to the integer quotient.
+ * @param numerator The numerator.
+ * @param denominator The denominator.
+ * @param *quotient quotient[0] will be set to the integer quotient.
  * @return The remainder, precise only for the low three bits.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((overloadable))remquo(float3 b, float3 c, int3* d);
+extern float3 __attribute__((overloadable))remquo(float3 numerator, float3 denominator, int3* quotient);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the quotient and the remainder of b / c.
+ * Returns the quotient and the remainder of (numerator / denominator).
  *
  * Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
  *
@@ -11238,14 +11238,14 @@
  *
  * Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative.  It returns 0.5f.
  *
- * @param b The numerator.
- * @param c The denominator.
- * @param *d d[0] will be set to the integer quotient.
+ * @param numerator The numerator.
+ * @param denominator The denominator.
+ * @param *quotient quotient[0] will be set to the integer quotient.
  * @return The remainder, precise only for the low three bits.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((overloadable))remquo(float4 b, float4 c, int4* d);
+extern float4 __attribute__((overloadable))remquo(float4 numerator, float4 denominator, int4* quotient);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11258,7 +11258,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))rint(float);
+extern float __attribute__((const, overloadable))rint(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11271,7 +11271,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))rint(float2);
+extern float2 __attribute__((const, overloadable))rint(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11284,7 +11284,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))rint(float3);
+extern float3 __attribute__((const, overloadable))rint(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11297,7 +11297,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))rint(float4);
+extern float4 __attribute__((const, overloadable))rint(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11346,7 +11346,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))round(float);
+extern float __attribute__((const, overloadable))round(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11359,7 +11359,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))round(float2);
+extern float2 __attribute__((const, overloadable))round(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11372,7 +11372,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))round(float3);
+extern float3 __attribute__((const, overloadable))round(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11385,43 +11385,43 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))round(float4);
+extern float4 __attribute__((const, overloadable))round(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns (1 / sqrt(value)).
+ * Returns (1 / sqrt(v)).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))rsqrt(float);
+extern float __attribute__((const, overloadable))rsqrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns (1 / sqrt(value)).
+ * Returns (1 / sqrt(v)).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))rsqrt(float2);
+extern float2 __attribute__((const, overloadable))rsqrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns (1 / sqrt(value)).
+ * Returns (1 / sqrt(v)).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))rsqrt(float3);
+extern float3 __attribute__((const, overloadable))rsqrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns (1 / sqrt(value)).
+ * Returns (1 / sqrt(v)).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))rsqrt(float4);
+extern float4 __attribute__((const, overloadable))rsqrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11482,7 +11482,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))sin(float);
+extern float __attribute__((const, overloadable))sin(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11491,7 +11491,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))sin(float2);
+extern float2 __attribute__((const, overloadable))sin(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11500,7 +11500,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))sin(float3);
+extern float3 __attribute__((const, overloadable))sin(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11509,7 +11509,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))sin(float4);
+extern float4 __attribute__((const, overloadable))sin(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11518,11 +11518,11 @@
  *
  * @return sine of v
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos 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);
+extern float __attribute__((overloadable))sincos(float v, float* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11531,11 +11531,11 @@
  *
  * @return sine of v
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos 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);
+extern float2 __attribute__((overloadable))sincos(float2 v, float2* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11544,11 +11544,11 @@
  *
  * @return sine of v
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos 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);
+extern float3 __attribute__((overloadable))sincos(float3 v, float3* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11557,91 +11557,91 @@
  *
  * @return sine of v
  * @param v The incoming value in radians
- * @param *cosptr cosptr[0] will be set to the cosine value.
+ * @param *cos 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);
+extern float4 __attribute__((overloadable))sincos(float4 v, float4* cos);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hyperbolic sine of x, where x is measured in radians.
+ * Returns the hyperbolic sine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))sinh(float);
+extern float __attribute__((const, overloadable))sinh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hyperbolic sine of x, where x is measured in radians.
+ * Returns the hyperbolic sine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))sinh(float2);
+extern float2 __attribute__((const, overloadable))sinh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hyperbolic sine of x, where x is measured in radians.
+ * Returns the hyperbolic sine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))sinh(float3);
+extern float3 __attribute__((const, overloadable))sinh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the hyperbolic sine of x, where x is measured in radians.
+ * Returns the hyperbolic sine of v, where v is measured in radians.
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))sinh(float4);
+extern float4 __attribute__((const, overloadable))sinh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))sinpi(float x);
+extern float __attribute__((const, overloadable))sinpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))sinpi(float2 x);
+extern float2 __attribute__((const, overloadable))sinpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))sinpi(float3 x);
+extern float3 __attribute__((const, overloadable))sinpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the sine of (x * pi), where (x * pi) is measured in radians.
+ * Returns the sine of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the sine of a value measured in degrees, call sinpi(a / 180.f).
+ * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))sinpi(float4 x);
+extern float4 __attribute__((const, overloadable))sinpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11650,7 +11650,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))sqrt(float);
+extern float __attribute__((const, overloadable))sqrt(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11659,7 +11659,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))sqrt(float2);
+extern float2 __attribute__((const, overloadable))sqrt(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11668,7 +11668,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))sqrt(float3);
+extern float3 __attribute__((const, overloadable))sqrt(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11677,7 +11677,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))sqrt(float4);
+extern float4 __attribute__((const, overloadable))sqrt(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11796,7 +11796,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))tan(float x);
+extern float __attribute__((const, overloadable))tan(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11805,7 +11805,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))tan(float2 x);
+extern float2 __attribute__((const, overloadable))tan(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11814,7 +11814,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))tan(float3 x);
+extern float3 __attribute__((const, overloadable))tan(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11823,7 +11823,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))tan(float4 x);
+extern float4 __attribute__((const, overloadable))tan(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11832,7 +11832,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))tanh(float);
+extern float __attribute__((const, overloadable))tanh(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11841,7 +11841,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))tanh(float2);
+extern float2 __attribute__((const, overloadable))tanh(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11850,7 +11850,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))tanh(float3);
+extern float3 __attribute__((const, overloadable))tanh(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11859,51 +11859,51 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))tanh(float4);
+extern float4 __attribute__((const, overloadable))tanh(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))tanpi(float x);
+extern float __attribute__((const, overloadable))tanpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))tanpi(float2 x);
+extern float2 __attribute__((const, overloadable))tanpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))tanpi(float3 x);
+extern float3 __attribute__((const, overloadable))tanpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
 /**
- * Returns the tangent of (x * pi), where (x * pi) is measured in radians.
+ * Returns the tangent of (v * pi), where (v * pi) is measured in radians.
  *
- * To get the tangent of a value measured in degrees, call tanpi(a / 180.f).
+ * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))tanpi(float4 x);
+extern float4 __attribute__((const, overloadable))tanpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11912,7 +11912,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))tgamma(float);
+extern float __attribute__((const, overloadable))tgamma(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11921,7 +11921,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))tgamma(float2);
+extern float2 __attribute__((const, overloadable))tgamma(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11930,7 +11930,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))tgamma(float3);
+extern float3 __attribute__((const, overloadable))tgamma(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11939,7 +11939,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))tgamma(float4);
+extern float4 __attribute__((const, overloadable))tgamma(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11952,7 +11952,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))trunc(float);
+extern float __attribute__((const, overloadable))trunc(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11965,7 +11965,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))trunc(float2);
+extern float2 __attribute__((const, overloadable))trunc(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11978,7 +11978,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))trunc(float3);
+extern float3 __attribute__((const, overloadable))trunc(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -11991,7 +11991,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))trunc(float4);
+extern float4 __attribute__((const, overloadable))trunc(float4 v);
 #endif
 
 #endif // __rs_core_math_rsh__
