Add RS math functions for F16.

Bug: 23536224
Bug: 26099914

Change-Id: I8606cb7433b344817970ca7d7995a1b76a88e7af
diff --git a/api/rs_math.spec b/api/rs_math.spec
index abf08f9..070bb4f 100644
--- a/api/rs_math.spec
+++ b/api/rs_math.spec
@@ -48,6 +48,7 @@
  </ul>
 end:
 
+# TODO Add f16 versions of these constants.
 constant: M_1_PI
 value: 0.318309886183790671537767526745028724f
 summary: 1 / pi, as a 32 bit float
@@ -176,6 +177,16 @@
  See also @native_acos().
 end:
 
+function: acos
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: acosh
 version: 9
 attrib: const
@@ -190,6 +201,16 @@
  See also @native_acosh().
 end:
 
+function: acosh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: acospi
 version: 9
 attrib: const
@@ -206,6 +227,16 @@
  See also @native_acospi().
 end:
 
+function: acospi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: asin
 version: 9
 attrib: const
@@ -220,6 +251,16 @@
  See also @native_asin().
 end:
 
+function: asin
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: asinh
 version: 9
 attrib: const
@@ -234,6 +275,16 @@
  See also @native_asinh().
 end:
 
+function: asinh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: asinpi
 version: 9
 attrib: const
@@ -250,6 +301,16 @@
  See also @native_asinpi().
 end:
 
+function: asinpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: atan
 version: 9
 attrib: const
@@ -264,6 +325,16 @@
  See also @native_atan().
 end:
 
+function: atan
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: atan2
 version: 9
 attrib: const
@@ -279,6 +350,17 @@
  See also @native_atan2().
 end:
 
+function: atan2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
 function: atan2pi
 version: 9
 attrib: const
@@ -296,6 +378,17 @@
  See also @native_atan2pi().
 end:
 
+function: atan2pi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
 function: atanh
 version: 9
 attrib: const
@@ -310,6 +403,16 @@
  See also @native_atanh().
 end:
 
+function: atanh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: atanpi
 version: 9
 attrib: const
@@ -326,6 +429,16 @@
  See also @native_atanpi().
 end:
 
+function: atanpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: cbrt
 version: 9
 attrib: const
@@ -340,6 +453,16 @@
  See also @native_cbrt().
 end:
 
+function: cbrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: ceil
 version: 9
 attrib: const
@@ -356,6 +479,16 @@
  See also @floor().
 end:
 
+function: ceil
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: clamp
 version: 9
 attrib: const
@@ -409,6 +542,30 @@
 arg: #2 max_value, above(min_value)
 end:
 
+function: clamp
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 value
+arg: #2#1 min_value
+arg: #2#1 max_value, above(min_value)
+test: none
+end:
+
+function: clamp
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 value
+arg: #2 min_value
+arg: #2 max_value, above(min_value)
+test: none
+end:
+
 function: clz
 version: 9
 attrib: const
@@ -423,6 +580,7 @@
  For example, <code>clz((char)0x03)</code> returns 6.
 end:
 
+# TODO add f16 copysign
 function: copysign
 version: 9
 attrib: const
@@ -454,6 +612,16 @@
  See also @native_cos().
 end:
 
+function: cos
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: cosh
 version: 9
 attrib: const
@@ -468,6 +636,16 @@
  See also @native_cosh().
 end:
 
+function: cosh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: cospi
 version: 9
 attrib: const
@@ -484,6 +662,16 @@
  See also @native_cospi().
 end:
 
+function: cospi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: degrees
 version: 9
 attrib: const
@@ -496,6 +684,16 @@
  Converts from radians to degrees.
 end:
 
+function: degrees
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: erf
 version: 9
 attrib: const
@@ -508,6 +706,16 @@
  Returns the error function.
 end:
 
+function: erf
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: erfc
 version: 9
 attrib: const
@@ -520,6 +728,16 @@
  Returns the complementary error function.
 end:
 
+function: erfc
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: exp
 version: 9
 attrib: const
@@ -534,6 +752,16 @@
  See also @native_exp().
 end:
 
+function: exp
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: exp10
 version: 9
 attrib: const
@@ -548,6 +776,16 @@
  See also @native_exp10().
 end:
 
+function: exp10
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: exp2
 version: 9
 attrib: const
@@ -562,6 +800,16 @@
  See also @native_exp2().
 end:
 
+function: exp2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: expm1
 version: 9
 attrib: const
@@ -576,6 +824,16 @@
  See also @native_expm1().
 end:
 
+function: expm1
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: fabs
 version: 9
 attrib: const
@@ -590,6 +848,16 @@
  For integers, use @abs().
 end:
 
+function: fabs
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: fdim
 version: 9
 attrib: const
@@ -605,6 +873,17 @@
  If a &gt; b, returns (a - b) otherwise returns 0f.
 end:
 
+function: fdim
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
 function: floor
 version: 9
 attrib: const
@@ -621,6 +900,16 @@
  See also @ceil().
 end:
 
+function: floor
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: fma
 version: 9
 attrib: const
@@ -639,6 +928,18 @@
  This extra precision is not guaranteed in rs_fp_relaxed mode.
 end:
 
+function: fma
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 multiplicand1
+arg: #2#1 multiplicand2
+arg: #2#1 offset
+test: none
+end:
+
 function: fmax
 version: 9
 attrib: const
@@ -655,6 +956,17 @@
 end:
 
 function: fmax
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
+function: fmax
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -664,6 +976,17 @@
 arg: #2 b
 end:
 
+function: fmax
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2 b
+test: none
+end:
+
 function: fmin
 version: 9
 attrib: const
@@ -680,6 +1003,17 @@
 end:
 
 function: fmin
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
+function: fmin
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -689,6 +1023,17 @@
 arg: #2 b
 end:
 
+function: fmin
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2 b
+test: none
+end:
+
 function: fmod
 version: 9
 attrib: const
@@ -706,6 +1051,18 @@
  while <code>@remainder(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
 end:
 
+function: fmod
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
+# TODO Add (both variants) of fract for f16
 function: fract
 version: 9
 w: 1, 2, 3, 4
@@ -733,6 +1090,7 @@
  return fract(v, &unused);
 end:
 
+# TODO Add f16 frexp
 function: frexp
 version: 9
 w: 1, 2, 3, 4
@@ -812,6 +1170,18 @@
  See also @native_hypot().
 end:
 
+function: hypot
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
+# TODO Add f16 ilogb.  Should its return be short?
 function: ilogb
 version: 9
 attrib: const
@@ -847,6 +1217,17 @@
  See @frexp() for the reverse operation.
 end:
 
+# TODO Should this parameter be a short?
+function: ldexp
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+ret: half#1
+arg: half#1 mantissa
+arg: int#1 exponent
+test: none
+end:
+
 function: ldexp
 version: 9
 attrib: const
@@ -856,6 +1237,16 @@
 arg: int exponent
 end:
 
+function: ldexp
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+ret: half#1
+arg: half#1 mantissa
+arg: int exponent
+test: none
+end:
+
 function: lgamma
 version: 9
 attrib: const
@@ -872,6 +1263,16 @@
 end:
 
 function: lgamma
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
+function: lgamma
 version: 9
 w: 1, 2, 3, 4
 t: f32
@@ -882,6 +1283,16 @@
 #TODO Temporary until bionic & associated drivers are fixed
 end:
 
+function: lgamma
+version: UNRELEASED
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+arg: int#1* sign_of_gamma
+test: none
+end:
+
 function: log
 version: 9
 attrib: const
@@ -896,6 +1307,16 @@
  See also @native_log().
 end:
 
+function: log
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: log10
 version: 9
 attrib: const
@@ -910,6 +1331,16 @@
  See also @native_log10().
 end:
 
+function: log10
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: log1p
 version: 9
 attrib: const
@@ -924,6 +1355,16 @@
  See also @native_log1p().
 end:
 
+function: log1p
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: log2
 version: 9
 attrib: const
@@ -938,6 +1379,16 @@
  See also @native_log2().
 end:
 
+function: log2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: logb
 version: 9
 attrib: const
@@ -957,6 +1408,16 @@
  @ilogb() is similar but returns an integer.
 end:
 
+function: logb
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: mad
 version: 9
 attrib: const
@@ -975,6 +1436,18 @@
  In rs_fp_relaxed mode, mad() may not do the rounding after multiplicaiton.
 end:
 
+function: mad
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 multiplicand1
+arg: #2#1 multiplicand2
+arg: #2#1 offset
+test: none
+end:
+
 function: max
 version: 9
 attrib: const
@@ -989,6 +1462,17 @@
 end:
 
 function: max
+version:UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
+function: max
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -999,6 +1483,17 @@
 end:
 
 function: max
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2 b
+test: none
+end:
+
+function: max
 version: 9 20
 attrib: const
 w: 1
@@ -1082,6 +1577,17 @@
 end:
 
 function: min
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
+function: min
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -1092,6 +1598,17 @@
 end:
 
 function: min
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2 b
+test: none
+end:
+
+function: min
 version: 9 20
 attrib: const
 w: 1
@@ -1179,6 +1696,18 @@
 end:
 
 function: mix
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 start
+arg: #2#1 stop
+arg: #2#1 fraction
+test: none
+end:
+
+function: mix
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -1189,6 +1718,19 @@
 arg: #2 fraction
 end:
 
+function: mix
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 start
+arg: #2#1 stop
+arg: #2 fraction
+test: none
+end:
+
+# TODO Add f16 modf
 function: modf
 version: 9
 w: 1, 2, 3, 4
@@ -1218,6 +1760,17 @@
  Returns a NaN value (Not a Number).
 end:
 
+function: nan_half
+version: UNRELEASED
+attrib: const
+t: f16
+ret: #1
+summary: Not a Number
+description:
+  Returns a half-precision floating point NaN value (Not a Number).
+test: none
+end:
+
 function: native_acos
 version: 21
 attrib: const
@@ -1236,6 +1789,17 @@
 test: limited(0.0005)
 end:
 
+function: native_acos
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_acosh
 version: 21
 attrib: const
@@ -1252,6 +1816,16 @@
 test: limited(0.0005)
 end:
 
+function: native_acosh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_acospi
 version: 21
 attrib: const
@@ -1272,6 +1846,17 @@
 test: limited(0.0005)
 end:
 
+function: native_acospi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_asin
 version: 21
 attrib: const
@@ -1290,6 +1875,17 @@
 test: limited(0.0005)
 end:
 
+function: native_asin
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_asinh
 version: 21
 attrib: const
@@ -1306,6 +1902,16 @@
 test: limited(0.0005)
 end:
 
+function: native_asinh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_asinpi
 version: 21
 attrib: const
@@ -1326,6 +1932,17 @@
 test: limited(0.0005)
 end:
 
+function: native_asinpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_atan
 version: 21
 attrib: const
@@ -1342,6 +1959,17 @@
 test: limited(0.0005)
 end:
 
+function: native_atan
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_atan2
 version: 21
 attrib: const
@@ -1359,6 +1987,17 @@
 test: limited(0.0005)
 end:
 
+function: native_atan2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
 function: native_atan2pi
 version: 21
 attrib: const
@@ -1379,6 +2018,17 @@
 test: limited(0.0005)
 end:
 
+function: native_atan2pi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
 function: native_atanh
 version: 21
 attrib: const
@@ -1395,6 +2045,17 @@
 test: limited(0.0005)
 end:
 
+function: native_atanh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_atanpi
 version: 21
 attrib: const
@@ -1413,6 +2074,17 @@
 test: limited(0.0005)
 end:
 
+function: native_atanpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-1,1) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_cbrt
 version: 21
 attrib: const
@@ -1427,6 +2099,16 @@
  See also @cbrt().
 end:
 
+function: native_cbrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_cos
 version: 21
 attrib: const
@@ -1441,6 +2123,16 @@
  See also @cos().
 end:
 
+function: native_cos
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_cosh
 version: 21
 attrib: const
@@ -1455,6 +2147,16 @@
  See also @cosh().
 end:
 
+function: native_cosh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_cospi
 version: 21
 attrib: const
@@ -1471,6 +2173,16 @@
  See also @cospi().
 end:
 
+function: native_cospi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_divide
 version: 21
 attrib: const
@@ -1484,6 +2196,17 @@
  Computes the approximate division of two values.
 end:
 
+function: native_divide
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 left_vector
+arg: #2#1 right_vector
+test: none
+end:
+
 function: native_exp
 version: 18
 attrib: const
@@ -1502,6 +2225,17 @@
 test: limited
 end:
 
+function: native_exp
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-86, 86) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_exp10
 version: 18
 attrib: const
@@ -1520,6 +2254,17 @@
 test: limited
 end:
 
+function: native_exp10
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-37, 37) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_exp2
 version: 18
 attrib: const
@@ -1538,6 +2283,17 @@
 test: limited
 end:
 
+function: native_exp2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(-125, 125) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_expm1
 version: 21
 attrib: const
@@ -1552,6 +2308,16 @@
  See also @expm1().
 end:
 
+function: native_expm1
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_hypot
 version: 21
 attrib: const
@@ -1567,6 +2333,17 @@
  See also @hypot().
 end:
 
+function: native_hypot
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 a
+arg: #2#1 b
+test: none
+end:
+
 function: native_log
 version: 18
 attrib: const
@@ -1584,6 +2361,17 @@
 test: limited
 end:
 
+function: native_log
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(10e-10,10e10) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_log10
 version: 18
 attrib: const
@@ -1601,6 +2389,17 @@
 test: limited
 end:
 
+function: native_log10
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(10e-10,10e10) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_log1p
 version: 21
 attrib: const
@@ -1615,6 +2414,16 @@
  See also @log1p().
 end:
 
+function: native_log1p
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_log2
 version: 18
 attrib: const
@@ -1632,6 +2441,17 @@
 test: limited
 end:
 
+function: native_log2
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(10e-10,10e10) here similar to the float version?
+arg: #2#1 v
+test: none
+end:
+
 function: native_powr
 version: 18
 attrib: const
@@ -1648,6 +2468,19 @@
 test: limited
 end:
 
+function: native_powr
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(0, 256) here similar to the float version?
+arg: #2#1 base
+# TODO Need range(-15,15) here similar to the float version?
+arg: #2#1 exponent
+test: none
+end:
+
 function: native_recip
 version: 21
 attrib: const
@@ -1662,6 +2495,16 @@
  See also @half_recip().
 end:
 
+function: native_recip
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_rootn
 version: 21
 attrib: const
@@ -1677,6 +2520,17 @@
  See also @rootn().
 end:
 
+function: native_rootn
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+arg: int#1 n
+test: none
+end:
+
 function: native_rsqrt
 version: 21
 attrib: const
@@ -1691,6 +2545,16 @@
  See also @rsqrt(), @half_rsqrt().
 end:
 
+function: native_rsqrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_sin
 version: 21
 attrib: const
@@ -1705,6 +2569,16 @@
  See also @sin().
 end:
 
+function: native_sin
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_sincos
 version: 21
 w: 1, 2, 3, 4
@@ -1721,6 +2595,16 @@
 test: limited(0.0005)
 end:
 
+function: native_sincos
+version: UNRELEASED
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+arg: #2#1* cos
+test: none
+end:
+
 function: native_sinh
 version: 21
 attrib: const
@@ -1735,6 +2619,16 @@
  See also @sinh().
 end:
 
+function: native_sinh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_sinpi
 version: 21
 attrib: const
@@ -1751,6 +2645,16 @@
  See also @sinpi().
 end:
 
+function: native_sinpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_sqrt
 version: 21
 attrib: const
@@ -1765,6 +2669,16 @@
  See also @sqrt(), @half_sqrt().
 end:
 
+function: native_sqrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_tan
 version: 21
 attrib: const
@@ -1777,6 +2691,16 @@
  Returns the approximate tangent of an angle measured in radians.
 end:
 
+function: native_tan
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_tanh
 version: 21
 attrib: const
@@ -1791,6 +2715,16 @@
  See also @tanh().
 end:
 
+function: native_tanh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: native_tanpi
 version: 21
 attrib: const
@@ -1807,6 +2741,17 @@
  See also @tanpi().
 end:
 
+function: native_tanpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
+# TODO add f16 nextafter
 function: nextafter
 version: 9
 attrib: const
@@ -1839,6 +2784,17 @@
  base to be non-negative.
 end:
 
+function: pow
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 base
+arg: #2#1 exponent
+test: none
+end:
+
 function: pown
 version: 9
 attrib: const
@@ -1855,6 +2811,17 @@
  base to be non-negative.
 end:
 
+function: pown
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 base
+arg: int#1 exponent
+test: none
+end:
+
 function: powr
 version: 9
 attrib: const
@@ -1873,6 +2840,18 @@
  See also @native_powr().
 end:
 
+function: powr
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+# TODO Need range(0,3000) here similar to the float version?
+arg: #2#1 base
+arg: #2#1 exponent
+test: none
+end:
+
 function: radians
 version: 9
 attrib: const
@@ -1885,6 +2864,16 @@
  Converts from degrees to radians.
 end:
 
+function: radians
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: remainder
 version: 9
 attrib: const
@@ -1903,6 +2892,17 @@
  while <code>remainder(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
 end:
 
+function: remainder
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+test: none
+end:
+
 function: remquo
 version: 9
 w: 1, 2, 3, 4
@@ -1927,6 +2927,17 @@
 test: custom
 end:
 
+function: remquo
+version: UNRELEASED
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 numerator
+arg: #2#1 denominator
+arg: int#1* quotient
+test: none
+end:
+
 function: rint
 version: 9
 attrib: const
@@ -1945,6 +2956,16 @@
  @round() is similar but rounds away from zero.  @trunc() truncates the decimal fraction.
 end:
 
+function: rint
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: rootn
 version: 9
 attrib: const
@@ -1960,6 +2981,17 @@
  See also @native_rootn().
 end:
 
+function: rootn
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+arg: int#1 n
+test: none
+end:
+
 function: round
 version: 9
 attrib: const
@@ -1978,6 +3010,16 @@
  @rint() is similar but rounds half values toward even.  @trunc() truncates the decimal fraction.
 end:
 
+function: round
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: rsqrt
 version: 9
 attrib: const
@@ -1992,6 +3034,16 @@
  See also @half_rsqrt(), @native_rsqrt().
 end:
 
+function: rsqrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: sign
 version: 9
 attrib: const
@@ -2008,6 +3060,16 @@
  else return 0.f;
 end:
 
+function: sign
+version:UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: sin
 version: 9
 attrib: const
@@ -2022,6 +3084,16 @@
  See also @native_sin().
 end:
 
+function: sin
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: sincos
 version: 9
 w: 1, 2, 3, 4
@@ -2036,6 +3108,16 @@
  See also @native_sincos().
 end:
 
+function: sincos
+version: UNRELEASED
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+arg: #2#1* cos
+test: none
+end:
+
 function: sinh
 version: 9
 attrib: const
@@ -2050,6 +3132,16 @@
  See also @native_sinh().
 end:
 
+function: sinh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: sinpi
 version: 9
 attrib: const
@@ -2066,6 +3158,16 @@
  See also @native_sinpi().
 end:
 
+function: sinpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: sqrt
 version: 9
 attrib: const
@@ -2080,6 +3182,16 @@
  See also @half_sqrt(), @native_sqrt().
 end:
 
+function: sqrt
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: step
 version: 9
 attrib: const
@@ -2098,6 +3210,17 @@
 end:
 
 function: step
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 edge
+arg: #2#1 v
+test: none
+end:
+
+function: step
 version: 9
 attrib: const
 w: 2, 3, 4
@@ -2108,6 +3231,17 @@
 end:
 
 function: step
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 edge
+arg: #2 v
+test: none
+end:
+
+function: step
 version: 21
 attrib: const
 w: 2, 3, 4
@@ -2117,6 +3251,17 @@
 arg: #2#1 v
 end:
 
+function: step
+version: UNRELEASED
+attrib: const
+w: 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2 edge
+arg: #2#1 v
+test: none
+end:
+
 function: tan
 version: 9
 attrib: const
@@ -2131,6 +3276,16 @@
  See also @native_tan().
 end:
 
+function: tan
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: tanh
 version: 9
 attrib: const
@@ -2145,6 +3300,16 @@
  See also @native_tanh().
 end:
 
+function: tanh
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: tanpi
 version: 9
 attrib: const
@@ -2161,6 +3326,16 @@
  See also @native_tanpi().
 end:
 
+function: tanpi
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: tgamma
 version: 9
 attrib: const
@@ -2175,6 +3350,16 @@
  See also @lgamma().
 end:
 
+function: tgamma
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: trunc
 version: 9
 attrib: const
@@ -2191,6 +3376,16 @@
  See @rint() and @round() for other rounding options.
 end:
 
+function: trunc
+version: UNRELEASED
+attrib: const
+w: 1, 2, 3, 4
+t: f16
+ret: #2#1
+arg: #2#1 v
+test: none
+end:
+
 function: rsClamp
 # TODO Why always_inline?
 attrib: const, always_inline