Android O SDK.
[android_tools.git] / sdk / build-tools / 26.0.0 / renderscript / include / rs_math.rsh
bloba5a7569641ca130ee574b857289bc04766bd360d
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
17 // Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
20  * rs_math.rsh: Mathematical Constants and Functions
21  *
22  * The mathematical functions below can be applied to scalars and vectors.   When applied
23  * to vectors, the returned value is a vector of the function applied to each entry of the input.
24  *
25  * For example:
26  * float3 a, b;
27  * // The following call sets
28  * //   a.x to sin(b.x),
29  * //   a.y to sin(b.y), and
30  * //   a.z to sin(b.z).
31  * a = sin(b);
32  *
33  *
34  * See Vector Math Functions for functions like distance() and length() that interpret
35  * instead the input as a single vector in n-dimensional space.
36  *
37  * The precision of the mathematical operations on 32 bit floats is affected by the pragmas
38  * rs_fp_relaxed and rs_fp_full.  Under rs_fp_relaxed, subnormal values may be flushed to zero and
39  * rounding may be done towards zero.  In comparison, rs_fp_full requires correct handling of
40  * subnormal values, i.e. smaller than 1.17549435e-38f.  rs_fp_rull also requires round to nearest
41  * with ties to even.
42  *
43  * Different precision/speed tradeoffs can be achieved by using variants of the common math
44  * functions.  Functions with a name starting with
45  * - native_: May have custom hardware implementations with weaker precision.  Additionally,
46  *   subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
47  *   infinity input may not be handled correctly.
48  * - half_: May perform internal computations using 16 bit floats.  Additionally, subnormal
49  *   values may be flushed to zero, and rounding towards zero may be used.
50  *
51  */
53 #ifndef RENDERSCRIPT_RS_MATH_RSH
54 #define RENDERSCRIPT_RS_MATH_RSH
57  * M_1_PI: 1 / pi, as a 32 bit float
58  *
59  * The inverse of pi, as a 32 bit float.
60  */
61 static const float M_1_PI = 0.318309886183790671537767526745028724f;
64  * M_2_PI: 2 / pi, as a 32 bit float
65  *
66  * 2 divided by pi, as a 32 bit float.
67  */
68 static const float M_2_PI = 0.636619772367581343075535053490057448f;
71  * M_2_PIl: 2 / pi, as a 32 bit float
72  *
73  * DEPRECATED.  Do not use.
74  *
75  * 2 divided by pi, as a 32 bit float.
76  */
77 static const float M_2_PIl = 0.636619772367581343075535053490057448f;
80  * M_2_SQRTPI: 2 / sqrt(pi), as a 32 bit float
81  *
82  * 2 divided by the square root of pi, as a 32 bit float.
83  */
84 static const float M_2_SQRTPI = 1.128379167095512573896158903121545172f;
87  * M_E: e, as a 32 bit float
88  *
89  * The number e, the base of the natural logarithm, as a 32 bit float.
90  */
91 static const float M_E = 2.718281828459045235360287471352662498f;
94  * M_LN10: log_e(10), as a 32 bit float
95  *
96  * The natural logarithm of 10, as a 32 bit float.
97  */
98 static const float M_LN10 = 2.302585092994045684017991454684364208f;
101  * M_LN2: log_e(2), as a 32 bit float
103  * The natural logarithm of 2, as a 32 bit float.
104  */
105 static const float M_LN2 = 0.693147180559945309417232121458176568f;
108  * M_LOG10E: log_10(e), as a 32 bit float
110  * The logarithm base 10 of e, as a 32 bit float.
111  */
112 static const float M_LOG10E = 0.434294481903251827651128918916605082f;
115  * M_LOG2E: log_2(e), as a 32 bit float
117  * The logarithm base 2 of e, as a 32 bit float.
118  */
119 static const float M_LOG2E = 1.442695040888963407359924681001892137f;
122  * M_PI: pi, as a 32 bit float
124  * The constant pi, as a 32 bit float.
125  */
126 static const float M_PI = 3.141592653589793238462643383279502884f;
129  * M_PI_2: pi / 2, as a 32 bit float
131  * Pi divided by 2, as a 32 bit float.
132  */
133 static const float M_PI_2 = 1.570796326794896619231321691639751442f;
136  * M_PI_4: pi / 4, as a 32 bit float
138  * Pi divided by 4, as a 32 bit float.
139  */
140 static const float M_PI_4 = 0.785398163397448309615660845819875721f;
143  * M_SQRT1_2: 1 / sqrt(2), as a 32 bit float
145  * The inverse of the square root of 2, as a 32 bit float.
146  */
147 static const float M_SQRT1_2 = 0.707106781186547524400844362104849039f;
150  * M_SQRT2: sqrt(2), as a 32 bit float
152  * The square root of 2, as a 32 bit float.
153  */
154 static const float M_SQRT2 = 1.414213562373095048801688724209698079f;
157  * abs: Absolute value of an integer
159  * Returns the absolute value of an integer.
161  * For floats, use fabs().
162  */
163 extern uchar __attribute__((const, overloadable))
164     abs(char v);
166 extern uchar2 __attribute__((const, overloadable))
167     abs(char2 v);
169 extern uchar3 __attribute__((const, overloadable))
170     abs(char3 v);
172 extern uchar4 __attribute__((const, overloadable))
173     abs(char4 v);
175 extern ushort __attribute__((const, overloadable))
176     abs(short v);
178 extern ushort2 __attribute__((const, overloadable))
179     abs(short2 v);
181 extern ushort3 __attribute__((const, overloadable))
182     abs(short3 v);
184 extern ushort4 __attribute__((const, overloadable))
185     abs(short4 v);
187 extern uint __attribute__((const, overloadable))
188     abs(int v);
190 extern uint2 __attribute__((const, overloadable))
191     abs(int2 v);
193 extern uint3 __attribute__((const, overloadable))
194     abs(int3 v);
196 extern uint4 __attribute__((const, overloadable))
197     abs(int4 v);
200  * acos: Inverse cosine
202  * Returns the inverse cosine, in radians.
204  * See also native_acos().
205  */
206 extern float __attribute__((const, overloadable))
207     acos(float v);
209 extern float2 __attribute__((const, overloadable))
210     acos(float2 v);
212 extern float3 __attribute__((const, overloadable))
213     acos(float3 v);
215 extern float4 __attribute__((const, overloadable))
216     acos(float4 v);
218 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
219 extern half __attribute__((const, overloadable))
220     acos(half v);
221 #endif
223 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
224 extern half2 __attribute__((const, overloadable))
225     acos(half2 v);
226 #endif
228 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
229 extern half3 __attribute__((const, overloadable))
230     acos(half3 v);
231 #endif
233 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
234 extern half4 __attribute__((const, overloadable))
235     acos(half4 v);
236 #endif
239  * acosh: Inverse hyperbolic cosine
241  * Returns the inverse hyperbolic cosine, in radians.
243  * See also native_acosh().
244  */
245 extern float __attribute__((const, overloadable))
246     acosh(float v);
248 extern float2 __attribute__((const, overloadable))
249     acosh(float2 v);
251 extern float3 __attribute__((const, overloadable))
252     acosh(float3 v);
254 extern float4 __attribute__((const, overloadable))
255     acosh(float4 v);
257 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
258 extern half __attribute__((const, overloadable))
259     acosh(half v);
260 #endif
262 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
263 extern half2 __attribute__((const, overloadable))
264     acosh(half2 v);
265 #endif
267 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
268 extern half3 __attribute__((const, overloadable))
269     acosh(half3 v);
270 #endif
272 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
273 extern half4 __attribute__((const, overloadable))
274     acosh(half4 v);
275 #endif
278  * acospi: Inverse cosine divided by pi
280  * Returns the inverse cosine in radians, divided by pi.
282  * To get an inverse cosine measured in degrees, use acospi(a) * 180.f.
284  * See also native_acospi().
285  */
286 extern float __attribute__((const, overloadable))
287     acospi(float v);
289 extern float2 __attribute__((const, overloadable))
290     acospi(float2 v);
292 extern float3 __attribute__((const, overloadable))
293     acospi(float3 v);
295 extern float4 __attribute__((const, overloadable))
296     acospi(float4 v);
298 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
299 extern half __attribute__((const, overloadable))
300     acospi(half v);
301 #endif
303 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
304 extern half2 __attribute__((const, overloadable))
305     acospi(half2 v);
306 #endif
308 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
309 extern half3 __attribute__((const, overloadable))
310     acospi(half3 v);
311 #endif
313 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
314 extern half4 __attribute__((const, overloadable))
315     acospi(half4 v);
316 #endif
319  * asin: Inverse sine
321  * Returns the inverse sine, in radians.
323  * See also native_asin().
324  */
325 extern float __attribute__((const, overloadable))
326     asin(float v);
328 extern float2 __attribute__((const, overloadable))
329     asin(float2 v);
331 extern float3 __attribute__((const, overloadable))
332     asin(float3 v);
334 extern float4 __attribute__((const, overloadable))
335     asin(float4 v);
337 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
338 extern half __attribute__((const, overloadable))
339     asin(half v);
340 #endif
342 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
343 extern half2 __attribute__((const, overloadable))
344     asin(half2 v);
345 #endif
347 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
348 extern half3 __attribute__((const, overloadable))
349     asin(half3 v);
350 #endif
352 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
353 extern half4 __attribute__((const, overloadable))
354     asin(half4 v);
355 #endif
358  * asinh: Inverse hyperbolic sine
360  * Returns the inverse hyperbolic sine, in radians.
362  * See also native_asinh().
363  */
364 extern float __attribute__((const, overloadable))
365     asinh(float v);
367 extern float2 __attribute__((const, overloadable))
368     asinh(float2 v);
370 extern float3 __attribute__((const, overloadable))
371     asinh(float3 v);
373 extern float4 __attribute__((const, overloadable))
374     asinh(float4 v);
376 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
377 extern half __attribute__((const, overloadable))
378     asinh(half v);
379 #endif
381 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
382 extern half2 __attribute__((const, overloadable))
383     asinh(half2 v);
384 #endif
386 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
387 extern half3 __attribute__((const, overloadable))
388     asinh(half3 v);
389 #endif
391 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
392 extern half4 __attribute__((const, overloadable))
393     asinh(half4 v);
394 #endif
397  * asinpi: Inverse sine divided by pi
399  * Returns the inverse sine in radians, divided by pi.
401  * To get an inverse sine measured in degrees, use asinpi(a) * 180.f.
403  * See also native_asinpi().
404  */
405 extern float __attribute__((const, overloadable))
406     asinpi(float v);
408 extern float2 __attribute__((const, overloadable))
409     asinpi(float2 v);
411 extern float3 __attribute__((const, overloadable))
412     asinpi(float3 v);
414 extern float4 __attribute__((const, overloadable))
415     asinpi(float4 v);
417 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
418 extern half __attribute__((const, overloadable))
419     asinpi(half v);
420 #endif
422 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
423 extern half2 __attribute__((const, overloadable))
424     asinpi(half2 v);
425 #endif
427 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
428 extern half3 __attribute__((const, overloadable))
429     asinpi(half3 v);
430 #endif
432 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
433 extern half4 __attribute__((const, overloadable))
434     asinpi(half4 v);
435 #endif
438  * atan: Inverse tangent
440  * Returns the inverse tangent, in radians.
442  * See also native_atan().
443  */
444 extern float __attribute__((const, overloadable))
445     atan(float v);
447 extern float2 __attribute__((const, overloadable))
448     atan(float2 v);
450 extern float3 __attribute__((const, overloadable))
451     atan(float3 v);
453 extern float4 __attribute__((const, overloadable))
454     atan(float4 v);
456 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
457 extern half __attribute__((const, overloadable))
458     atan(half v);
459 #endif
461 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
462 extern half2 __attribute__((const, overloadable))
463     atan(half2 v);
464 #endif
466 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
467 extern half3 __attribute__((const, overloadable))
468     atan(half3 v);
469 #endif
471 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
472 extern half4 __attribute__((const, overloadable))
473     atan(half4 v);
474 #endif
477  * atan2: Inverse tangent of a ratio
479  * Returns the inverse tangent of (numerator / denominator), in radians.
481  * See also native_atan2().
483  * Parameters:
484  *   numerator: Numerator.
485  *   denominator: Denominator.  Can be 0.
486  */
487 extern float __attribute__((const, overloadable))
488     atan2(float numerator, float denominator);
490 extern float2 __attribute__((const, overloadable))
491     atan2(float2 numerator, float2 denominator);
493 extern float3 __attribute__((const, overloadable))
494     atan2(float3 numerator, float3 denominator);
496 extern float4 __attribute__((const, overloadable))
497     atan2(float4 numerator, float4 denominator);
499 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
500 extern half __attribute__((const, overloadable))
501     atan2(half numerator, half denominator);
502 #endif
504 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
505 extern half2 __attribute__((const, overloadable))
506     atan2(half2 numerator, half2 denominator);
507 #endif
509 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
510 extern half3 __attribute__((const, overloadable))
511     atan2(half3 numerator, half3 denominator);
512 #endif
514 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
515 extern half4 __attribute__((const, overloadable))
516     atan2(half4 numerator, half4 denominator);
517 #endif
520  * atan2pi: Inverse tangent of a ratio, divided by pi
522  * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
524  * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
526  * See also native_atan2pi().
528  * Parameters:
529  *   numerator: Numerator.
530  *   denominator: Denominator.  Can be 0.
531  */
532 extern float __attribute__((const, overloadable))
533     atan2pi(float numerator, float denominator);
535 extern float2 __attribute__((const, overloadable))
536     atan2pi(float2 numerator, float2 denominator);
538 extern float3 __attribute__((const, overloadable))
539     atan2pi(float3 numerator, float3 denominator);
541 extern float4 __attribute__((const, overloadable))
542     atan2pi(float4 numerator, float4 denominator);
544 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
545 extern half __attribute__((const, overloadable))
546     atan2pi(half numerator, half denominator);
547 #endif
549 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
550 extern half2 __attribute__((const, overloadable))
551     atan2pi(half2 numerator, half2 denominator);
552 #endif
554 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
555 extern half3 __attribute__((const, overloadable))
556     atan2pi(half3 numerator, half3 denominator);
557 #endif
559 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
560 extern half4 __attribute__((const, overloadable))
561     atan2pi(half4 numerator, half4 denominator);
562 #endif
565  * atanh: Inverse hyperbolic tangent
567  * Returns the inverse hyperbolic tangent, in radians.
569  * See also native_atanh().
570  */
571 extern float __attribute__((const, overloadable))
572     atanh(float v);
574 extern float2 __attribute__((const, overloadable))
575     atanh(float2 v);
577 extern float3 __attribute__((const, overloadable))
578     atanh(float3 v);
580 extern float4 __attribute__((const, overloadable))
581     atanh(float4 v);
583 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
584 extern half __attribute__((const, overloadable))
585     atanh(half v);
586 #endif
588 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
589 extern half2 __attribute__((const, overloadable))
590     atanh(half2 v);
591 #endif
593 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
594 extern half3 __attribute__((const, overloadable))
595     atanh(half3 v);
596 #endif
598 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
599 extern half4 __attribute__((const, overloadable))
600     atanh(half4 v);
601 #endif
604  * atanpi: Inverse tangent divided by pi
606  * Returns the inverse tangent in radians, divided by pi.
608  * To get an inverse tangent measured in degrees, use atanpi(a) * 180.f.
610  * See also native_atanpi().
611  */
612 extern float __attribute__((const, overloadable))
613     atanpi(float v);
615 extern float2 __attribute__((const, overloadable))
616     atanpi(float2 v);
618 extern float3 __attribute__((const, overloadable))
619     atanpi(float3 v);
621 extern float4 __attribute__((const, overloadable))
622     atanpi(float4 v);
624 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
625 extern half __attribute__((const, overloadable))
626     atanpi(half v);
627 #endif
629 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
630 extern half2 __attribute__((const, overloadable))
631     atanpi(half2 v);
632 #endif
634 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
635 extern half3 __attribute__((const, overloadable))
636     atanpi(half3 v);
637 #endif
639 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
640 extern half4 __attribute__((const, overloadable))
641     atanpi(half4 v);
642 #endif
645  * cbrt: Cube root
647  * Returns the cube root.
649  * See also native_cbrt().
650  */
651 extern float __attribute__((const, overloadable))
652     cbrt(float v);
654 extern float2 __attribute__((const, overloadable))
655     cbrt(float2 v);
657 extern float3 __attribute__((const, overloadable))
658     cbrt(float3 v);
660 extern float4 __attribute__((const, overloadable))
661     cbrt(float4 v);
663 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
664 extern half __attribute__((const, overloadable))
665     cbrt(half v);
666 #endif
668 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
669 extern half2 __attribute__((const, overloadable))
670     cbrt(half2 v);
671 #endif
673 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
674 extern half3 __attribute__((const, overloadable))
675     cbrt(half3 v);
676 #endif
678 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
679 extern half4 __attribute__((const, overloadable))
680     cbrt(half4 v);
681 #endif
684  * ceil: Smallest integer not less than a value
686  * Returns the smallest integer not less than a value.
688  * For example, ceil(1.2f) returns 2.f, and ceil(-1.2f) returns -1.f.
690  * See also floor().
691  */
692 extern float __attribute__((const, overloadable))
693     ceil(float v);
695 extern float2 __attribute__((const, overloadable))
696     ceil(float2 v);
698 extern float3 __attribute__((const, overloadable))
699     ceil(float3 v);
701 extern float4 __attribute__((const, overloadable))
702     ceil(float4 v);
704 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
705 extern half __attribute__((const, overloadable))
706     ceil(half v);
707 #endif
709 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
710 extern half2 __attribute__((const, overloadable))
711     ceil(half2 v);
712 #endif
714 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
715 extern half3 __attribute__((const, overloadable))
716     ceil(half3 v);
717 #endif
719 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
720 extern half4 __attribute__((const, overloadable))
721     ceil(half4 v);
722 #endif
725  * clamp: Restrain a value to a range
727  * Clamps a value to a specified high and low bound.  clamp() returns min_value
728  * if value < min_value, max_value if value > max_value, otherwise value.
730  * There are two variants of clamp: one where the min and max are scalars applied
731  * to all entries of the value, the other where the min and max are also vectors.
733  * If min_value is greater than max_value, the results are undefined.
735  * Parameters:
736  *   value: Value to be clamped.
737  *   min_value: Lower bound, a scalar or matching vector.
738  *   max_value: High bound, must match the type of low.
739  */
740 extern float __attribute__((const, overloadable))
741     clamp(float value, float min_value, float max_value);
743 extern float2 __attribute__((const, overloadable))
744     clamp(float2 value, float2 min_value, float2 max_value);
746 extern float3 __attribute__((const, overloadable))
747     clamp(float3 value, float3 min_value, float3 max_value);
749 extern float4 __attribute__((const, overloadable))
750     clamp(float4 value, float4 min_value, float4 max_value);
752 extern float2 __attribute__((const, overloadable))
753     clamp(float2 value, float min_value, float max_value);
755 extern float3 __attribute__((const, overloadable))
756     clamp(float3 value, float min_value, float max_value);
758 extern float4 __attribute__((const, overloadable))
759     clamp(float4 value, float min_value, float max_value);
761 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
762 extern char __attribute__((const, overloadable))
763     clamp(char value, char min_value, char max_value);
764 #endif
766 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
767 extern char2 __attribute__((const, overloadable))
768     clamp(char2 value, char2 min_value, char2 max_value);
769 #endif
771 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
772 extern char3 __attribute__((const, overloadable))
773     clamp(char3 value, char3 min_value, char3 max_value);
774 #endif
776 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
777 extern char4 __attribute__((const, overloadable))
778     clamp(char4 value, char4 min_value, char4 max_value);
779 #endif
781 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
782 extern uchar __attribute__((const, overloadable))
783     clamp(uchar value, uchar min_value, uchar max_value);
784 #endif
786 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
787 extern uchar2 __attribute__((const, overloadable))
788     clamp(uchar2 value, uchar2 min_value, uchar2 max_value);
789 #endif
791 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
792 extern uchar3 __attribute__((const, overloadable))
793     clamp(uchar3 value, uchar3 min_value, uchar3 max_value);
794 #endif
796 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
797 extern uchar4 __attribute__((const, overloadable))
798     clamp(uchar4 value, uchar4 min_value, uchar4 max_value);
799 #endif
801 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
802 extern short __attribute__((const, overloadable))
803     clamp(short value, short min_value, short max_value);
804 #endif
806 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
807 extern short2 __attribute__((const, overloadable))
808     clamp(short2 value, short2 min_value, short2 max_value);
809 #endif
811 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
812 extern short3 __attribute__((const, overloadable))
813     clamp(short3 value, short3 min_value, short3 max_value);
814 #endif
816 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
817 extern short4 __attribute__((const, overloadable))
818     clamp(short4 value, short4 min_value, short4 max_value);
819 #endif
821 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
822 extern ushort __attribute__((const, overloadable))
823     clamp(ushort value, ushort min_value, ushort max_value);
824 #endif
826 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
827 extern ushort2 __attribute__((const, overloadable))
828     clamp(ushort2 value, ushort2 min_value, ushort2 max_value);
829 #endif
831 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
832 extern ushort3 __attribute__((const, overloadable))
833     clamp(ushort3 value, ushort3 min_value, ushort3 max_value);
834 #endif
836 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
837 extern ushort4 __attribute__((const, overloadable))
838     clamp(ushort4 value, ushort4 min_value, ushort4 max_value);
839 #endif
841 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
842 extern int __attribute__((const, overloadable))
843     clamp(int value, int min_value, int max_value);
844 #endif
846 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
847 extern int2 __attribute__((const, overloadable))
848     clamp(int2 value, int2 min_value, int2 max_value);
849 #endif
851 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
852 extern int3 __attribute__((const, overloadable))
853     clamp(int3 value, int3 min_value, int3 max_value);
854 #endif
856 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
857 extern int4 __attribute__((const, overloadable))
858     clamp(int4 value, int4 min_value, int4 max_value);
859 #endif
861 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
862 extern uint __attribute__((const, overloadable))
863     clamp(uint value, uint min_value, uint max_value);
864 #endif
866 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
867 extern uint2 __attribute__((const, overloadable))
868     clamp(uint2 value, uint2 min_value, uint2 max_value);
869 #endif
871 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
872 extern uint3 __attribute__((const, overloadable))
873     clamp(uint3 value, uint3 min_value, uint3 max_value);
874 #endif
876 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
877 extern uint4 __attribute__((const, overloadable))
878     clamp(uint4 value, uint4 min_value, uint4 max_value);
879 #endif
881 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
882 extern long __attribute__((const, overloadable))
883     clamp(long value, long min_value, long max_value);
884 #endif
886 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
887 extern long2 __attribute__((const, overloadable))
888     clamp(long2 value, long2 min_value, long2 max_value);
889 #endif
891 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
892 extern long3 __attribute__((const, overloadable))
893     clamp(long3 value, long3 min_value, long3 max_value);
894 #endif
896 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
897 extern long4 __attribute__((const, overloadable))
898     clamp(long4 value, long4 min_value, long4 max_value);
899 #endif
901 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
902 extern ulong __attribute__((const, overloadable))
903     clamp(ulong value, ulong min_value, ulong max_value);
904 #endif
906 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
907 extern ulong2 __attribute__((const, overloadable))
908     clamp(ulong2 value, ulong2 min_value, ulong2 max_value);
909 #endif
911 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
912 extern ulong3 __attribute__((const, overloadable))
913     clamp(ulong3 value, ulong3 min_value, ulong3 max_value);
914 #endif
916 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
917 extern ulong4 __attribute__((const, overloadable))
918     clamp(ulong4 value, ulong4 min_value, ulong4 max_value);
919 #endif
921 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
922 extern char2 __attribute__((const, overloadable))
923     clamp(char2 value, char min_value, char max_value);
924 #endif
926 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
927 extern char3 __attribute__((const, overloadable))
928     clamp(char3 value, char min_value, char max_value);
929 #endif
931 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
932 extern char4 __attribute__((const, overloadable))
933     clamp(char4 value, char min_value, char max_value);
934 #endif
936 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
937 extern uchar2 __attribute__((const, overloadable))
938     clamp(uchar2 value, uchar min_value, uchar max_value);
939 #endif
941 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
942 extern uchar3 __attribute__((const, overloadable))
943     clamp(uchar3 value, uchar min_value, uchar max_value);
944 #endif
946 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
947 extern uchar4 __attribute__((const, overloadable))
948     clamp(uchar4 value, uchar min_value, uchar max_value);
949 #endif
951 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
952 extern short2 __attribute__((const, overloadable))
953     clamp(short2 value, short min_value, short max_value);
954 #endif
956 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
957 extern short3 __attribute__((const, overloadable))
958     clamp(short3 value, short min_value, short max_value);
959 #endif
961 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
962 extern short4 __attribute__((const, overloadable))
963     clamp(short4 value, short min_value, short max_value);
964 #endif
966 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
967 extern ushort2 __attribute__((const, overloadable))
968     clamp(ushort2 value, ushort min_value, ushort max_value);
969 #endif
971 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
972 extern ushort3 __attribute__((const, overloadable))
973     clamp(ushort3 value, ushort min_value, ushort max_value);
974 #endif
976 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
977 extern ushort4 __attribute__((const, overloadable))
978     clamp(ushort4 value, ushort min_value, ushort max_value);
979 #endif
981 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
982 extern int2 __attribute__((const, overloadable))
983     clamp(int2 value, int min_value, int max_value);
984 #endif
986 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
987 extern int3 __attribute__((const, overloadable))
988     clamp(int3 value, int min_value, int max_value);
989 #endif
991 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
992 extern int4 __attribute__((const, overloadable))
993     clamp(int4 value, int min_value, int max_value);
994 #endif
996 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
997 extern uint2 __attribute__((const, overloadable))
998     clamp(uint2 value, uint min_value, uint max_value);
999 #endif
1001 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1002 extern uint3 __attribute__((const, overloadable))
1003     clamp(uint3 value, uint min_value, uint max_value);
1004 #endif
1006 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1007 extern uint4 __attribute__((const, overloadable))
1008     clamp(uint4 value, uint min_value, uint max_value);
1009 #endif
1011 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1012 extern long2 __attribute__((const, overloadable))
1013     clamp(long2 value, long min_value, long max_value);
1014 #endif
1016 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1017 extern long3 __attribute__((const, overloadable))
1018     clamp(long3 value, long min_value, long max_value);
1019 #endif
1021 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1022 extern long4 __attribute__((const, overloadable))
1023     clamp(long4 value, long min_value, long max_value);
1024 #endif
1026 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1027 extern ulong2 __attribute__((const, overloadable))
1028     clamp(ulong2 value, ulong min_value, ulong max_value);
1029 #endif
1031 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1032 extern ulong3 __attribute__((const, overloadable))
1033     clamp(ulong3 value, ulong min_value, ulong max_value);
1034 #endif
1036 #if (defined(RS_VERSION) && (RS_VERSION >= 19))
1037 extern ulong4 __attribute__((const, overloadable))
1038     clamp(ulong4 value, ulong min_value, ulong max_value);
1039 #endif
1041 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1042 extern half __attribute__((const, overloadable))
1043     clamp(half value, half min_value, half max_value);
1044 #endif
1046 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1047 extern half2 __attribute__((const, overloadable))
1048     clamp(half2 value, half2 min_value, half2 max_value);
1049 #endif
1051 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1052 extern half3 __attribute__((const, overloadable))
1053     clamp(half3 value, half3 min_value, half3 max_value);
1054 #endif
1056 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1057 extern half4 __attribute__((const, overloadable))
1058     clamp(half4 value, half4 min_value, half4 max_value);
1059 #endif
1061 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1062 extern half2 __attribute__((const, overloadable))
1063     clamp(half2 value, half min_value, half max_value);
1064 #endif
1066 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1067 extern half3 __attribute__((const, overloadable))
1068     clamp(half3 value, half min_value, half max_value);
1069 #endif
1071 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1072 extern half4 __attribute__((const, overloadable))
1073     clamp(half4 value, half min_value, half max_value);
1074 #endif
1077  * clz: Number of leading 0 bits
1079  * Returns the number of leading 0-bits in a value.
1081  * For example, clz((char)0x03) returns 6.
1082  */
1083 extern char __attribute__((const, overloadable))
1084     clz(char value);
1086 extern char2 __attribute__((const, overloadable))
1087     clz(char2 value);
1089 extern char3 __attribute__((const, overloadable))
1090     clz(char3 value);
1092 extern char4 __attribute__((const, overloadable))
1093     clz(char4 value);
1095 extern uchar __attribute__((const, overloadable))
1096     clz(uchar value);
1098 extern uchar2 __attribute__((const, overloadable))
1099     clz(uchar2 value);
1101 extern uchar3 __attribute__((const, overloadable))
1102     clz(uchar3 value);
1104 extern uchar4 __attribute__((const, overloadable))
1105     clz(uchar4 value);
1107 extern short __attribute__((const, overloadable))
1108     clz(short value);
1110 extern short2 __attribute__((const, overloadable))
1111     clz(short2 value);
1113 extern short3 __attribute__((const, overloadable))
1114     clz(short3 value);
1116 extern short4 __attribute__((const, overloadable))
1117     clz(short4 value);
1119 extern ushort __attribute__((const, overloadable))
1120     clz(ushort value);
1122 extern ushort2 __attribute__((const, overloadable))
1123     clz(ushort2 value);
1125 extern ushort3 __attribute__((const, overloadable))
1126     clz(ushort3 value);
1128 extern ushort4 __attribute__((const, overloadable))
1129     clz(ushort4 value);
1131 extern int __attribute__((const, overloadable))
1132     clz(int value);
1134 extern int2 __attribute__((const, overloadable))
1135     clz(int2 value);
1137 extern int3 __attribute__((const, overloadable))
1138     clz(int3 value);
1140 extern int4 __attribute__((const, overloadable))
1141     clz(int4 value);
1143 extern uint __attribute__((const, overloadable))
1144     clz(uint value);
1146 extern uint2 __attribute__((const, overloadable))
1147     clz(uint2 value);
1149 extern uint3 __attribute__((const, overloadable))
1150     clz(uint3 value);
1152 extern uint4 __attribute__((const, overloadable))
1153     clz(uint4 value);
1156  * copysign: Copies the sign of a number to another
1158  * Copies the sign from sign_value to magnitude_value.
1160  * The value returned is either magnitude_value or -magnitude_value.
1162  * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
1163  */
1164 extern float __attribute__((const, overloadable))
1165     copysign(float magnitude_value, float sign_value);
1167 extern float2 __attribute__((const, overloadable))
1168     copysign(float2 magnitude_value, float2 sign_value);
1170 extern float3 __attribute__((const, overloadable))
1171     copysign(float3 magnitude_value, float3 sign_value);
1173 extern float4 __attribute__((const, overloadable))
1174     copysign(float4 magnitude_value, float4 sign_value);
1176 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1177 extern half __attribute__((const, overloadable))
1178     copysign(half magnitude_value, half sign_value);
1179 #endif
1181 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1182 extern half2 __attribute__((const, overloadable))
1183     copysign(half2 magnitude_value, half2 sign_value);
1184 #endif
1186 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1187 extern half3 __attribute__((const, overloadable))
1188     copysign(half3 magnitude_value, half3 sign_value);
1189 #endif
1191 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1192 extern half4 __attribute__((const, overloadable))
1193     copysign(half4 magnitude_value, half4 sign_value);
1194 #endif
1197  * cos: Cosine
1199  * Returns the cosine of an angle measured in radians.
1201  * See also native_cos().
1202  */
1203 extern float __attribute__((const, overloadable))
1204     cos(float v);
1206 extern float2 __attribute__((const, overloadable))
1207     cos(float2 v);
1209 extern float3 __attribute__((const, overloadable))
1210     cos(float3 v);
1212 extern float4 __attribute__((const, overloadable))
1213     cos(float4 v);
1215 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1216 extern half __attribute__((const, overloadable))
1217     cos(half v);
1218 #endif
1220 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1221 extern half2 __attribute__((const, overloadable))
1222     cos(half2 v);
1223 #endif
1225 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1226 extern half3 __attribute__((const, overloadable))
1227     cos(half3 v);
1228 #endif
1230 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1231 extern half4 __attribute__((const, overloadable))
1232     cos(half4 v);
1233 #endif
1236  * cosh: Hypebolic cosine
1238  * Returns the hypebolic cosine of v, where v is measured in radians.
1240  * See also native_cosh().
1241  */
1242 extern float __attribute__((const, overloadable))
1243     cosh(float v);
1245 extern float2 __attribute__((const, overloadable))
1246     cosh(float2 v);
1248 extern float3 __attribute__((const, overloadable))
1249     cosh(float3 v);
1251 extern float4 __attribute__((const, overloadable))
1252     cosh(float4 v);
1254 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1255 extern half __attribute__((const, overloadable))
1256     cosh(half v);
1257 #endif
1259 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1260 extern half2 __attribute__((const, overloadable))
1261     cosh(half2 v);
1262 #endif
1264 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1265 extern half3 __attribute__((const, overloadable))
1266     cosh(half3 v);
1267 #endif
1269 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1270 extern half4 __attribute__((const, overloadable))
1271     cosh(half4 v);
1272 #endif
1275  * cospi: Cosine of a number multiplied by pi
1277  * Returns the cosine of (v * pi), where (v * pi) is measured in radians.
1279  * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
1281  * See also native_cospi().
1282  */
1283 extern float __attribute__((const, overloadable))
1284     cospi(float v);
1286 extern float2 __attribute__((const, overloadable))
1287     cospi(float2 v);
1289 extern float3 __attribute__((const, overloadable))
1290     cospi(float3 v);
1292 extern float4 __attribute__((const, overloadable))
1293     cospi(float4 v);
1295 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1296 extern half __attribute__((const, overloadable))
1297     cospi(half v);
1298 #endif
1300 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1301 extern half2 __attribute__((const, overloadable))
1302     cospi(half2 v);
1303 #endif
1305 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1306 extern half3 __attribute__((const, overloadable))
1307     cospi(half3 v);
1308 #endif
1310 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1311 extern half4 __attribute__((const, overloadable))
1312     cospi(half4 v);
1313 #endif
1316  * degrees: Converts radians into degrees
1318  * Converts from radians to degrees.
1319  */
1320 extern float __attribute__((const, overloadable))
1321     degrees(float v);
1323 extern float2 __attribute__((const, overloadable))
1324     degrees(float2 v);
1326 extern float3 __attribute__((const, overloadable))
1327     degrees(float3 v);
1329 extern float4 __attribute__((const, overloadable))
1330     degrees(float4 v);
1332 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1333 extern half __attribute__((const, overloadable))
1334     degrees(half v);
1335 #endif
1337 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1338 extern half2 __attribute__((const, overloadable))
1339     degrees(half2 v);
1340 #endif
1342 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1343 extern half3 __attribute__((const, overloadable))
1344     degrees(half3 v);
1345 #endif
1347 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1348 extern half4 __attribute__((const, overloadable))
1349     degrees(half4 v);
1350 #endif
1353  * erf: Mathematical error function
1355  * Returns the error function.
1356  */
1357 extern float __attribute__((const, overloadable))
1358     erf(float v);
1360 extern float2 __attribute__((const, overloadable))
1361     erf(float2 v);
1363 extern float3 __attribute__((const, overloadable))
1364     erf(float3 v);
1366 extern float4 __attribute__((const, overloadable))
1367     erf(float4 v);
1369 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1370 extern half __attribute__((const, overloadable))
1371     erf(half v);
1372 #endif
1374 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1375 extern half2 __attribute__((const, overloadable))
1376     erf(half2 v);
1377 #endif
1379 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1380 extern half3 __attribute__((const, overloadable))
1381     erf(half3 v);
1382 #endif
1384 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1385 extern half4 __attribute__((const, overloadable))
1386     erf(half4 v);
1387 #endif
1390  * erfc: Mathematical complementary error function
1392  * Returns the complementary error function.
1393  */
1394 extern float __attribute__((const, overloadable))
1395     erfc(float v);
1397 extern float2 __attribute__((const, overloadable))
1398     erfc(float2 v);
1400 extern float3 __attribute__((const, overloadable))
1401     erfc(float3 v);
1403 extern float4 __attribute__((const, overloadable))
1404     erfc(float4 v);
1406 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1407 extern half __attribute__((const, overloadable))
1408     erfc(half v);
1409 #endif
1411 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1412 extern half2 __attribute__((const, overloadable))
1413     erfc(half2 v);
1414 #endif
1416 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1417 extern half3 __attribute__((const, overloadable))
1418     erfc(half3 v);
1419 #endif
1421 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1422 extern half4 __attribute__((const, overloadable))
1423     erfc(half4 v);
1424 #endif
1427  * exp: e raised to a number
1429  * Returns e raised to v, i.e. e ^ v.
1431  * See also native_exp().
1432  */
1433 extern float __attribute__((const, overloadable))
1434     exp(float v);
1436 extern float2 __attribute__((const, overloadable))
1437     exp(float2 v);
1439 extern float3 __attribute__((const, overloadable))
1440     exp(float3 v);
1442 extern float4 __attribute__((const, overloadable))
1443     exp(float4 v);
1445 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1446 extern half __attribute__((const, overloadable))
1447     exp(half v);
1448 #endif
1450 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1451 extern half2 __attribute__((const, overloadable))
1452     exp(half2 v);
1453 #endif
1455 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1456 extern half3 __attribute__((const, overloadable))
1457     exp(half3 v);
1458 #endif
1460 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1461 extern half4 __attribute__((const, overloadable))
1462     exp(half4 v);
1463 #endif
1466  * exp10: 10 raised to a number
1468  * Returns 10 raised to v, i.e. 10.f ^ v.
1470  * See also native_exp10().
1471  */
1472 extern float __attribute__((const, overloadable))
1473     exp10(float v);
1475 extern float2 __attribute__((const, overloadable))
1476     exp10(float2 v);
1478 extern float3 __attribute__((const, overloadable))
1479     exp10(float3 v);
1481 extern float4 __attribute__((const, overloadable))
1482     exp10(float4 v);
1484 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1485 extern half __attribute__((const, overloadable))
1486     exp10(half v);
1487 #endif
1489 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1490 extern half2 __attribute__((const, overloadable))
1491     exp10(half2 v);
1492 #endif
1494 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1495 extern half3 __attribute__((const, overloadable))
1496     exp10(half3 v);
1497 #endif
1499 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1500 extern half4 __attribute__((const, overloadable))
1501     exp10(half4 v);
1502 #endif
1505  * exp2: 2 raised to a number
1507  * Returns 2 raised to v, i.e. 2.f ^ v.
1509  * See also native_exp2().
1510  */
1511 extern float __attribute__((const, overloadable))
1512     exp2(float v);
1514 extern float2 __attribute__((const, overloadable))
1515     exp2(float2 v);
1517 extern float3 __attribute__((const, overloadable))
1518     exp2(float3 v);
1520 extern float4 __attribute__((const, overloadable))
1521     exp2(float4 v);
1523 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1524 extern half __attribute__((const, overloadable))
1525     exp2(half v);
1526 #endif
1528 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1529 extern half2 __attribute__((const, overloadable))
1530     exp2(half2 v);
1531 #endif
1533 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1534 extern half3 __attribute__((const, overloadable))
1535     exp2(half3 v);
1536 #endif
1538 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1539 extern half4 __attribute__((const, overloadable))
1540     exp2(half4 v);
1541 #endif
1544  * expm1: e raised to a number minus one
1546  * Returns e raised to v minus 1, i.e. (e ^ v) - 1.
1548  * See also native_expm1().
1549  */
1550 extern float __attribute__((const, overloadable))
1551     expm1(float v);
1553 extern float2 __attribute__((const, overloadable))
1554     expm1(float2 v);
1556 extern float3 __attribute__((const, overloadable))
1557     expm1(float3 v);
1559 extern float4 __attribute__((const, overloadable))
1560     expm1(float4 v);
1562 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1563 extern half __attribute__((const, overloadable))
1564     expm1(half v);
1565 #endif
1567 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1568 extern half2 __attribute__((const, overloadable))
1569     expm1(half2 v);
1570 #endif
1572 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1573 extern half3 __attribute__((const, overloadable))
1574     expm1(half3 v);
1575 #endif
1577 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1578 extern half4 __attribute__((const, overloadable))
1579     expm1(half4 v);
1580 #endif
1583  * fabs: Absolute value of a float
1585  * Returns the absolute value of the float v.
1587  * For integers, use abs().
1588  */
1589 extern float __attribute__((const, overloadable))
1590     fabs(float v);
1592 extern float2 __attribute__((const, overloadable))
1593     fabs(float2 v);
1595 extern float3 __attribute__((const, overloadable))
1596     fabs(float3 v);
1598 extern float4 __attribute__((const, overloadable))
1599     fabs(float4 v);
1601 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1602 extern half __attribute__((const, overloadable))
1603     fabs(half v);
1604 #endif
1606 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1607 extern half2 __attribute__((const, overloadable))
1608     fabs(half2 v);
1609 #endif
1611 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1612 extern half3 __attribute__((const, overloadable))
1613     fabs(half3 v);
1614 #endif
1616 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1617 extern half4 __attribute__((const, overloadable))
1618     fabs(half4 v);
1619 #endif
1622  * fdim: Positive difference between two values
1624  * Returns the positive difference between two values.
1626  * If a > b, returns (a - b) otherwise returns 0f.
1627  */
1628 extern float __attribute__((const, overloadable))
1629     fdim(float a, float b);
1631 extern float2 __attribute__((const, overloadable))
1632     fdim(float2 a, float2 b);
1634 extern float3 __attribute__((const, overloadable))
1635     fdim(float3 a, float3 b);
1637 extern float4 __attribute__((const, overloadable))
1638     fdim(float4 a, float4 b);
1640 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1641 extern half __attribute__((const, overloadable))
1642     fdim(half a, half b);
1643 #endif
1645 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1646 extern half2 __attribute__((const, overloadable))
1647     fdim(half2 a, half2 b);
1648 #endif
1650 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1651 extern half3 __attribute__((const, overloadable))
1652     fdim(half3 a, half3 b);
1653 #endif
1655 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1656 extern half4 __attribute__((const, overloadable))
1657     fdim(half4 a, half4 b);
1658 #endif
1661  * floor: Smallest integer not greater than a value
1663  * Returns the smallest integer not greater than a value.
1665  * For example, floor(1.2f) returns 1.f, and floor(-1.2f) returns -2.f.
1667  * See also ceil().
1668  */
1669 extern float __attribute__((const, overloadable))
1670     floor(float v);
1672 extern float2 __attribute__((const, overloadable))
1673     floor(float2 v);
1675 extern float3 __attribute__((const, overloadable))
1676     floor(float3 v);
1678 extern float4 __attribute__((const, overloadable))
1679     floor(float4 v);
1681 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1682 extern half __attribute__((const, overloadable))
1683     floor(half v);
1684 #endif
1686 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1687 extern half2 __attribute__((const, overloadable))
1688     floor(half2 v);
1689 #endif
1691 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1692 extern half3 __attribute__((const, overloadable))
1693     floor(half3 v);
1694 #endif
1696 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1697 extern half4 __attribute__((const, overloadable))
1698     floor(half4 v);
1699 #endif
1702  * fma: Multiply and add
1704  * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
1706  * This function is similar to mad().  fma() retains full precision of the multiplied result
1707  * and rounds only after the addition.  mad() rounds after the multiplication and the addition.
1708  * This extra precision is not guaranteed in rs_fp_relaxed mode.
1709  */
1710 extern float __attribute__((const, overloadable))
1711     fma(float multiplicand1, float multiplicand2, float offset);
1713 extern float2 __attribute__((const, overloadable))
1714     fma(float2 multiplicand1, float2 multiplicand2, float2 offset);
1716 extern float3 __attribute__((const, overloadable))
1717     fma(float3 multiplicand1, float3 multiplicand2, float3 offset);
1719 extern float4 __attribute__((const, overloadable))
1720     fma(float4 multiplicand1, float4 multiplicand2, float4 offset);
1722 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1723 extern half __attribute__((const, overloadable))
1724     fma(half multiplicand1, half multiplicand2, half offset);
1725 #endif
1727 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1728 extern half2 __attribute__((const, overloadable))
1729     fma(half2 multiplicand1, half2 multiplicand2, half2 offset);
1730 #endif
1732 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1733 extern half3 __attribute__((const, overloadable))
1734     fma(half3 multiplicand1, half3 multiplicand2, half3 offset);
1735 #endif
1737 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1738 extern half4 __attribute__((const, overloadable))
1739     fma(half4 multiplicand1, half4 multiplicand2, half4 offset);
1740 #endif
1743  * fmax: Maximum of two floats
1745  * Returns the maximum of a and b, i.e. (a < b ? b : a).
1747  * The max() function returns identical results but can be applied to more data types.
1748  */
1749 extern float __attribute__((const, overloadable))
1750     fmax(float a, float b);
1752 extern float2 __attribute__((const, overloadable))
1753     fmax(float2 a, float2 b);
1755 extern float3 __attribute__((const, overloadable))
1756     fmax(float3 a, float3 b);
1758 extern float4 __attribute__((const, overloadable))
1759     fmax(float4 a, float4 b);
1761 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1762 extern half __attribute__((const, overloadable))
1763     fmax(half a, half b);
1764 #endif
1766 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1767 extern half2 __attribute__((const, overloadable))
1768     fmax(half2 a, half2 b);
1769 #endif
1771 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1772 extern half3 __attribute__((const, overloadable))
1773     fmax(half3 a, half3 b);
1774 #endif
1776 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1777 extern half4 __attribute__((const, overloadable))
1778     fmax(half4 a, half4 b);
1779 #endif
1781 extern float2 __attribute__((const, overloadable))
1782     fmax(float2 a, float b);
1784 extern float3 __attribute__((const, overloadable))
1785     fmax(float3 a, float b);
1787 extern float4 __attribute__((const, overloadable))
1788     fmax(float4 a, float b);
1790 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1791 extern half2 __attribute__((const, overloadable))
1792     fmax(half2 a, half b);
1793 #endif
1795 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1796 extern half3 __attribute__((const, overloadable))
1797     fmax(half3 a, half b);
1798 #endif
1800 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1801 extern half4 __attribute__((const, overloadable))
1802     fmax(half4 a, half b);
1803 #endif
1806  * fmin: Minimum of two floats
1808  * Returns the minimum of a and b, i.e. (a > b ? b : a).
1810  * The min() function returns identical results but can be applied to more data types.
1811  */
1812 extern float __attribute__((const, overloadable))
1813     fmin(float a, float b);
1815 extern float2 __attribute__((const, overloadable))
1816     fmin(float2 a, float2 b);
1818 extern float3 __attribute__((const, overloadable))
1819     fmin(float3 a, float3 b);
1821 extern float4 __attribute__((const, overloadable))
1822     fmin(float4 a, float4 b);
1824 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1825 extern half __attribute__((const, overloadable))
1826     fmin(half a, half b);
1827 #endif
1829 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1830 extern half2 __attribute__((const, overloadable))
1831     fmin(half2 a, half2 b);
1832 #endif
1834 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1835 extern half3 __attribute__((const, overloadable))
1836     fmin(half3 a, half3 b);
1837 #endif
1839 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1840 extern half4 __attribute__((const, overloadable))
1841     fmin(half4 a, half4 b);
1842 #endif
1844 extern float2 __attribute__((const, overloadable))
1845     fmin(float2 a, float b);
1847 extern float3 __attribute__((const, overloadable))
1848     fmin(float3 a, float b);
1850 extern float4 __attribute__((const, overloadable))
1851     fmin(float4 a, float b);
1853 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1854 extern half2 __attribute__((const, overloadable))
1855     fmin(half2 a, half b);
1856 #endif
1858 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1859 extern half3 __attribute__((const, overloadable))
1860     fmin(half3 a, half b);
1861 #endif
1863 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1864 extern half4 __attribute__((const, overloadable))
1865     fmin(half4 a, half b);
1866 #endif
1869  * fmod: Modulo
1871  * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
1873  * The function remainder() is similar but rounds toward the closest interger.
1874  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
1875  * while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f).
1876  */
1877 extern float __attribute__((const, overloadable))
1878     fmod(float numerator, float denominator);
1880 extern float2 __attribute__((const, overloadable))
1881     fmod(float2 numerator, float2 denominator);
1883 extern float3 __attribute__((const, overloadable))
1884     fmod(float3 numerator, float3 denominator);
1886 extern float4 __attribute__((const, overloadable))
1887     fmod(float4 numerator, float4 denominator);
1889 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1890 extern half __attribute__((const, overloadable))
1891     fmod(half numerator, half denominator);
1892 #endif
1894 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1895 extern half2 __attribute__((const, overloadable))
1896     fmod(half2 numerator, half2 denominator);
1897 #endif
1899 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1900 extern half3 __attribute__((const, overloadable))
1901     fmod(half3 numerator, half3 denominator);
1902 #endif
1904 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1905 extern half4 __attribute__((const, overloadable))
1906     fmod(half4 numerator, half4 denominator);
1907 #endif
1910  * fract: Positive fractional part
1912  * Returns the positive fractional part of v, i.e. v - floor(v).
1914  * For example, fract(1.3f, &val) returns 0.3f and sets val to 1.f.
1915  * fract(-1.3f, &val) returns 0.7f and sets val to -2.f.
1917  * Parameters:
1918  *   v: Input value.
1919  *   floor: If floor is not null, *floor will be set to the floor of v.
1920  */
1921 extern float __attribute__((overloadable))
1922     fract(float v, float* floor);
1924 extern float2 __attribute__((overloadable))
1925     fract(float2 v, float2* floor);
1927 extern float3 __attribute__((overloadable))
1928     fract(float3 v, float3* floor);
1930 extern float4 __attribute__((overloadable))
1931     fract(float4 v, float4* floor);
1933 #if !defined(RS_VERSION) || (RS_VERSION <= 23)
1934 static inline float __attribute__((const, overloadable))
1935     fract(float v) {
1936     float unused;
1937     return fract(v, &unused);
1939 #endif
1941 #if !defined(RS_VERSION) || (RS_VERSION <= 23)
1942 static inline float2 __attribute__((const, overloadable))
1943     fract(float2 v) {
1944     float2 unused;
1945     return fract(v, &unused);
1947 #endif
1949 #if !defined(RS_VERSION) || (RS_VERSION <= 23)
1950 static inline float3 __attribute__((const, overloadable))
1951     fract(float3 v) {
1952     float3 unused;
1953     return fract(v, &unused);
1955 #endif
1957 #if !defined(RS_VERSION) || (RS_VERSION <= 23)
1958 static inline float4 __attribute__((const, overloadable))
1959     fract(float4 v) {
1960     float4 unused;
1961     return fract(v, &unused);
1963 #endif
1965 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1966 extern float __attribute__((overloadable))
1967     fract(float v);
1968 #endif
1970 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1971 extern float2 __attribute__((overloadable))
1972     fract(float2 v);
1973 #endif
1975 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1976 extern float3 __attribute__((overloadable))
1977     fract(float3 v);
1978 #endif
1980 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1981 extern float4 __attribute__((overloadable))
1982     fract(float4 v);
1983 #endif
1985 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1986 extern half __attribute__((overloadable))
1987     fract(half v, half* floor);
1988 #endif
1990 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1991 extern half2 __attribute__((overloadable))
1992     fract(half2 v, half2* floor);
1993 #endif
1995 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
1996 extern half3 __attribute__((overloadable))
1997     fract(half3 v, half3* floor);
1998 #endif
2000 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2001 extern half4 __attribute__((overloadable))
2002     fract(half4 v, half4* floor);
2003 #endif
2005 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2006 extern half __attribute__((overloadable))
2007     fract(half v);
2008 #endif
2010 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2011 extern half2 __attribute__((overloadable))
2012     fract(half2 v);
2013 #endif
2015 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2016 extern half3 __attribute__((overloadable))
2017     fract(half3 v);
2018 #endif
2020 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2021 extern half4 __attribute__((overloadable))
2022     fract(half4 v);
2023 #endif
2026  * frexp: Binary mantissa and exponent
2028  * Returns the binary mantissa and exponent of v, i.e. v == mantissa * 2 ^ exponent.
2030  * The mantissa is always between 0.5 (inclusive) and 1.0 (exclusive).
2032  * See ldexp() for the reverse operation.  See also logb() and ilogb().
2034  * Parameters:
2035  *   v: Input value.
2036  *   exponent: If exponent is not null, *exponent will be set to the exponent of v.
2037  */
2038 extern float __attribute__((overloadable))
2039     frexp(float v, int* exponent);
2041 extern float2 __attribute__((overloadable))
2042     frexp(float2 v, int2* exponent);
2044 extern float3 __attribute__((overloadable))
2045     frexp(float3 v, int3* exponent);
2047 extern float4 __attribute__((overloadable))
2048     frexp(float4 v, int4* exponent);
2050 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2051 extern half __attribute__((overloadable))
2052     frexp(half v, int* exponent);
2053 #endif
2055 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2056 extern half2 __attribute__((overloadable))
2057     frexp(half2 v, int2* exponent);
2058 #endif
2060 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2061 extern half3 __attribute__((overloadable))
2062     frexp(half3 v, int3* exponent);
2063 #endif
2065 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2066 extern half4 __attribute__((overloadable))
2067     frexp(half4 v, int4* exponent);
2068 #endif
2071  * half_recip: Reciprocal computed to 16 bit precision
2073  * Returns the approximate reciprocal of a value.
2075  * The precision is that of a 16 bit floating point value.
2077  * See also native_recip().
2078  */
2079 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2080 extern float __attribute__((const, overloadable))
2081     half_recip(float v);
2082 #endif
2084 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2085 extern float2 __attribute__((const, overloadable))
2086     half_recip(float2 v);
2087 #endif
2089 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2090 extern float3 __attribute__((const, overloadable))
2091     half_recip(float3 v);
2092 #endif
2094 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2095 extern float4 __attribute__((const, overloadable))
2096     half_recip(float4 v);
2097 #endif
2100  * half_rsqrt: Reciprocal of a square root computed to 16 bit precision
2102  * Returns the approximate value of (1.f / sqrt(value)).
2104  * The precision is that of a 16 bit floating point value.
2106  * See also rsqrt(), native_rsqrt().
2107  */
2108 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2109 extern float __attribute__((const, overloadable))
2110     half_rsqrt(float v);
2111 #endif
2113 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2114 extern float2 __attribute__((const, overloadable))
2115     half_rsqrt(float2 v);
2116 #endif
2118 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2119 extern float3 __attribute__((const, overloadable))
2120     half_rsqrt(float3 v);
2121 #endif
2123 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2124 extern float4 __attribute__((const, overloadable))
2125     half_rsqrt(float4 v);
2126 #endif
2129  * half_sqrt: Square root computed to 16 bit precision
2131  * Returns the approximate square root of a value.
2133  * The precision is that of a 16 bit floating point value.
2135  * See also sqrt(), native_sqrt().
2136  */
2137 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2138 extern float __attribute__((const, overloadable))
2139     half_sqrt(float v);
2140 #endif
2142 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2143 extern float2 __attribute__((const, overloadable))
2144     half_sqrt(float2 v);
2145 #endif
2147 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2148 extern float3 __attribute__((const, overloadable))
2149     half_sqrt(float3 v);
2150 #endif
2152 #if (defined(RS_VERSION) && (RS_VERSION >= 17))
2153 extern float4 __attribute__((const, overloadable))
2154     half_sqrt(float4 v);
2155 #endif
2158  * hypot: Hypotenuse
2160  * Returns the hypotenuse, i.e. sqrt(a * a + b * b).
2162  * See also native_hypot().
2163  */
2164 extern float __attribute__((const, overloadable))
2165     hypot(float a, float b);
2167 extern float2 __attribute__((const, overloadable))
2168     hypot(float2 a, float2 b);
2170 extern float3 __attribute__((const, overloadable))
2171     hypot(float3 a, float3 b);
2173 extern float4 __attribute__((const, overloadable))
2174     hypot(float4 a, float4 b);
2176 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2177 extern half __attribute__((const, overloadable))
2178     hypot(half a, half b);
2179 #endif
2181 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2182 extern half2 __attribute__((const, overloadable))
2183     hypot(half2 a, half2 b);
2184 #endif
2186 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2187 extern half3 __attribute__((const, overloadable))
2188     hypot(half3 a, half3 b);
2189 #endif
2191 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2192 extern half4 __attribute__((const, overloadable))
2193     hypot(half4 a, half4 b);
2194 #endif
2197  * ilogb: Base two exponent
2199  * Returns the base two exponent of a value, where the mantissa is between
2200  * 1.f (inclusive) and 2.f (exclusive).
2202  * For example, ilogb(8.5f) returns 3.
2204  * Because of the difference in mantissa, this number is one less than is returned by frexp().
2206  * logb() is similar but returns a float.
2207  */
2208 extern int __attribute__((const, overloadable))
2209     ilogb(float v);
2211 extern int2 __attribute__((const, overloadable))
2212     ilogb(float2 v);
2214 extern int3 __attribute__((const, overloadable))
2215     ilogb(float3 v);
2217 extern int4 __attribute__((const, overloadable))
2218     ilogb(float4 v);
2220 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2221 extern int __attribute__((const, overloadable))
2222     ilogb(half v);
2223 #endif
2225 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2226 extern int2 __attribute__((const, overloadable))
2227     ilogb(half2 v);
2228 #endif
2230 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2231 extern int3 __attribute__((const, overloadable))
2232     ilogb(half3 v);
2233 #endif
2235 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2236 extern int4 __attribute__((const, overloadable))
2237     ilogb(half4 v);
2238 #endif
2241  * ldexp: Creates a floating point from mantissa and exponent
2243  * Returns the floating point created from the mantissa and exponent,
2244  * i.e. (mantissa * 2 ^ exponent).
2246  * See frexp() for the reverse operation.
2248  * Parameters:
2249  *   mantissa: Mantissa.
2250  *   exponent: Exponent, a single component or matching vector.
2251  */
2252 extern float __attribute__((const, overloadable))
2253     ldexp(float mantissa, int exponent);
2255 extern float2 __attribute__((const, overloadable))
2256     ldexp(float2 mantissa, int2 exponent);
2258 extern float3 __attribute__((const, overloadable))
2259     ldexp(float3 mantissa, int3 exponent);
2261 extern float4 __attribute__((const, overloadable))
2262     ldexp(float4 mantissa, int4 exponent);
2264 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2265 extern half __attribute__((const, overloadable))
2266     ldexp(half mantissa, int exponent);
2267 #endif
2269 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2270 extern half2 __attribute__((const, overloadable))
2271     ldexp(half2 mantissa, int2 exponent);
2272 #endif
2274 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2275 extern half3 __attribute__((const, overloadable))
2276     ldexp(half3 mantissa, int3 exponent);
2277 #endif
2279 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2280 extern half4 __attribute__((const, overloadable))
2281     ldexp(half4 mantissa, int4 exponent);
2282 #endif
2284 extern float2 __attribute__((const, overloadable))
2285     ldexp(float2 mantissa, int exponent);
2287 extern float3 __attribute__((const, overloadable))
2288     ldexp(float3 mantissa, int exponent);
2290 extern float4 __attribute__((const, overloadable))
2291     ldexp(float4 mantissa, int exponent);
2293 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2294 extern half2 __attribute__((const, overloadable))
2295     ldexp(half2 mantissa, int exponent);
2296 #endif
2298 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2299 extern half3 __attribute__((const, overloadable))
2300     ldexp(half3 mantissa, int exponent);
2301 #endif
2303 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2304 extern half4 __attribute__((const, overloadable))
2305     ldexp(half4 mantissa, int exponent);
2306 #endif
2309  * lgamma: Natural logarithm of the gamma function
2311  * Returns the natural logarithm of the absolute value of the gamma function,
2312  * i.e. log(fabs(tgamma(v))).
2314  * See also tgamma().
2316  * Parameters:
2317  *   sign_of_gamma: If sign_of_gamma is not null, *sign_of_gamma will be set to -1.f if the gamma of v is negative, otherwise to 1.f.
2318  */
2319 extern float __attribute__((const, overloadable))
2320     lgamma(float v);
2322 extern float2 __attribute__((const, overloadable))
2323     lgamma(float2 v);
2325 extern float3 __attribute__((const, overloadable))
2326     lgamma(float3 v);
2328 extern float4 __attribute__((const, overloadable))
2329     lgamma(float4 v);
2331 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2332 extern half __attribute__((const, overloadable))
2333     lgamma(half v);
2334 #endif
2336 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2337 extern half2 __attribute__((const, overloadable))
2338     lgamma(half2 v);
2339 #endif
2341 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2342 extern half3 __attribute__((const, overloadable))
2343     lgamma(half3 v);
2344 #endif
2346 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2347 extern half4 __attribute__((const, overloadable))
2348     lgamma(half4 v);
2349 #endif
2351 extern float __attribute__((overloadable))
2352     lgamma(float v, int* sign_of_gamma);
2354 extern float2 __attribute__((overloadable))
2355     lgamma(float2 v, int2* sign_of_gamma);
2357 extern float3 __attribute__((overloadable))
2358     lgamma(float3 v, int3* sign_of_gamma);
2360 extern float4 __attribute__((overloadable))
2361     lgamma(float4 v, int4* sign_of_gamma);
2363 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2364 extern half __attribute__((overloadable))
2365     lgamma(half v, int* sign_of_gamma);
2366 #endif
2368 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2369 extern half2 __attribute__((overloadable))
2370     lgamma(half2 v, int2* sign_of_gamma);
2371 #endif
2373 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2374 extern half3 __attribute__((overloadable))
2375     lgamma(half3 v, int3* sign_of_gamma);
2376 #endif
2378 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2379 extern half4 __attribute__((overloadable))
2380     lgamma(half4 v, int4* sign_of_gamma);
2381 #endif
2384  * log: Natural logarithm
2386  * Returns the natural logarithm.
2388  * See also native_log().
2389  */
2390 extern float __attribute__((const, overloadable))
2391     log(float v);
2393 extern float2 __attribute__((const, overloadable))
2394     log(float2 v);
2396 extern float3 __attribute__((const, overloadable))
2397     log(float3 v);
2399 extern float4 __attribute__((const, overloadable))
2400     log(float4 v);
2402 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2403 extern half __attribute__((const, overloadable))
2404     log(half v);
2405 #endif
2407 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2408 extern half2 __attribute__((const, overloadable))
2409     log(half2 v);
2410 #endif
2412 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2413 extern half3 __attribute__((const, overloadable))
2414     log(half3 v);
2415 #endif
2417 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2418 extern half4 __attribute__((const, overloadable))
2419     log(half4 v);
2420 #endif
2423  * log10: Base 10 logarithm
2425  * Returns the base 10 logarithm.
2427  * See also native_log10().
2428  */
2429 extern float __attribute__((const, overloadable))
2430     log10(float v);
2432 extern float2 __attribute__((const, overloadable))
2433     log10(float2 v);
2435 extern float3 __attribute__((const, overloadable))
2436     log10(float3 v);
2438 extern float4 __attribute__((const, overloadable))
2439     log10(float4 v);
2441 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2442 extern half __attribute__((const, overloadable))
2443     log10(half v);
2444 #endif
2446 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2447 extern half2 __attribute__((const, overloadable))
2448     log10(half2 v);
2449 #endif
2451 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2452 extern half3 __attribute__((const, overloadable))
2453     log10(half3 v);
2454 #endif
2456 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2457 extern half4 __attribute__((const, overloadable))
2458     log10(half4 v);
2459 #endif
2462  * log1p: Natural logarithm of a value plus 1
2464  * Returns the natural logarithm of (v + 1.f).
2466  * See also native_log1p().
2467  */
2468 extern float __attribute__((const, overloadable))
2469     log1p(float v);
2471 extern float2 __attribute__((const, overloadable))
2472     log1p(float2 v);
2474 extern float3 __attribute__((const, overloadable))
2475     log1p(float3 v);
2477 extern float4 __attribute__((const, overloadable))
2478     log1p(float4 v);
2480 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2481 extern half __attribute__((const, overloadable))
2482     log1p(half v);
2483 #endif
2485 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2486 extern half2 __attribute__((const, overloadable))
2487     log1p(half2 v);
2488 #endif
2490 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2491 extern half3 __attribute__((const, overloadable))
2492     log1p(half3 v);
2493 #endif
2495 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2496 extern half4 __attribute__((const, overloadable))
2497     log1p(half4 v);
2498 #endif
2501  * log2: Base 2 logarithm
2503  * Returns the base 2 logarithm.
2505  * See also native_log2().
2506  */
2507 extern float __attribute__((const, overloadable))
2508     log2(float v);
2510 extern float2 __attribute__((const, overloadable))
2511     log2(float2 v);
2513 extern float3 __attribute__((const, overloadable))
2514     log2(float3 v);
2516 extern float4 __attribute__((const, overloadable))
2517     log2(float4 v);
2519 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2520 extern half __attribute__((const, overloadable))
2521     log2(half v);
2522 #endif
2524 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2525 extern half2 __attribute__((const, overloadable))
2526     log2(half2 v);
2527 #endif
2529 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2530 extern half3 __attribute__((const, overloadable))
2531     log2(half3 v);
2532 #endif
2534 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2535 extern half4 __attribute__((const, overloadable))
2536     log2(half4 v);
2537 #endif
2540  * logb: Base two exponent
2542  * Returns the base two exponent of a value, where the mantissa is between
2543  * 1.f (inclusive) and 2.f (exclusive).
2545  * For example, logb(8.5f) returns 3.f.
2547  * Because of the difference in mantissa, this number is one less than is returned by frexp().
2549  * ilogb() is similar but returns an integer.
2550  */
2551 extern float __attribute__((const, overloadable))
2552     logb(float v);
2554 extern float2 __attribute__((const, overloadable))
2555     logb(float2 v);
2557 extern float3 __attribute__((const, overloadable))
2558     logb(float3 v);
2560 extern float4 __attribute__((const, overloadable))
2561     logb(float4 v);
2563 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2564 extern half __attribute__((const, overloadable))
2565     logb(half v);
2566 #endif
2568 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2569 extern half2 __attribute__((const, overloadable))
2570     logb(half2 v);
2571 #endif
2573 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2574 extern half3 __attribute__((const, overloadable))
2575     logb(half3 v);
2576 #endif
2578 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2579 extern half4 __attribute__((const, overloadable))
2580     logb(half4 v);
2581 #endif
2584  * mad: Multiply and add
2586  * Multiply and add.  Returns (multiplicand1 * multiplicand2) + offset.
2588  * This function is similar to fma().  fma() retains full precision of the multiplied result
2589  * and rounds only after the addition.  mad() rounds after the multiplication and the addition.
2590  * In rs_fp_relaxed mode, mad() may not do the rounding after multiplicaiton.
2591  */
2592 extern float __attribute__((const, overloadable))
2593     mad(float multiplicand1, float multiplicand2, float offset);
2595 extern float2 __attribute__((const, overloadable))
2596     mad(float2 multiplicand1, float2 multiplicand2, float2 offset);
2598 extern float3 __attribute__((const, overloadable))
2599     mad(float3 multiplicand1, float3 multiplicand2, float3 offset);
2601 extern float4 __attribute__((const, overloadable))
2602     mad(float4 multiplicand1, float4 multiplicand2, float4 offset);
2604 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2605 extern half __attribute__((const, overloadable))
2606     mad(half multiplicand1, half multiplicand2, half offset);
2607 #endif
2609 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2610 extern half2 __attribute__((const, overloadable))
2611     mad(half2 multiplicand1, half2 multiplicand2, half2 offset);
2612 #endif
2614 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2615 extern half3 __attribute__((const, overloadable))
2616     mad(half3 multiplicand1, half3 multiplicand2, half3 offset);
2617 #endif
2619 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2620 extern half4 __attribute__((const, overloadable))
2621     mad(half4 multiplicand1, half4 multiplicand2, half4 offset);
2622 #endif
2625  * max: Maximum
2627  * Returns the maximum value of two arguments.
2628  */
2629 extern float __attribute__((const, overloadable))
2630     max(float a, float b);
2632 extern float2 __attribute__((const, overloadable))
2633     max(float2 a, float2 b);
2635 extern float3 __attribute__((const, overloadable))
2636     max(float3 a, float3 b);
2638 extern float4 __attribute__((const, overloadable))
2639     max(float4 a, float4 b);
2641 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2642 extern half __attribute__((const, overloadable))
2643     max(half a, half b);
2644 #endif
2646 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2647 extern half2 __attribute__((const, overloadable))
2648     max(half2 a, half2 b);
2649 #endif
2651 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2652 extern half3 __attribute__((const, overloadable))
2653     max(half3 a, half3 b);
2654 #endif
2656 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2657 extern half4 __attribute__((const, overloadable))
2658     max(half4 a, half4 b);
2659 #endif
2661 extern float2 __attribute__((const, overloadable))
2662     max(float2 a, float b);
2664 extern float3 __attribute__((const, overloadable))
2665     max(float3 a, float b);
2667 extern float4 __attribute__((const, overloadable))
2668     max(float4 a, float b);
2670 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2671 extern half2 __attribute__((const, overloadable))
2672     max(half2 a, half b);
2673 #endif
2675 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2676 extern half3 __attribute__((const, overloadable))
2677     max(half3 a, half b);
2678 #endif
2680 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
2681 extern half4 __attribute__((const, overloadable))
2682     max(half4 a, half b);
2683 #endif
2685 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2686 static inline char __attribute__((const, overloadable))
2687     max(char a, char b) {
2688     return (a > b ? a : b);
2690 #endif
2692 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2693 static inline uchar __attribute__((const, overloadable))
2694     max(uchar a, uchar b) {
2695     return (a > b ? a : b);
2697 #endif
2699 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2700 static inline short __attribute__((const, overloadable))
2701     max(short a, short b) {
2702     return (a > b ? a : b);
2704 #endif
2706 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2707 static inline ushort __attribute__((const, overloadable))
2708     max(ushort a, ushort b) {
2709     return (a > b ? a : b);
2711 #endif
2713 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2714 static inline int __attribute__((const, overloadable))
2715     max(int a, int b) {
2716     return (a > b ? a : b);
2718 #endif
2720 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2721 static inline uint __attribute__((const, overloadable))
2722     max(uint a, uint b) {
2723     return (a > b ? a : b);
2725 #endif
2727 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2728 static inline char2 __attribute__((const, overloadable))
2729     max(char2 a, char2 b) {
2730     char2 tmp;
2731     tmp.x = (a.x > b.x ? a.x : b.x);
2732     tmp.y = (a.y > b.y ? a.y : b.y);
2733     return tmp;
2735 #endif
2737 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2738 static inline uchar2 __attribute__((const, overloadable))
2739     max(uchar2 a, uchar2 b) {
2740     uchar2 tmp;
2741     tmp.x = (a.x > b.x ? a.x : b.x);
2742     tmp.y = (a.y > b.y ? a.y : b.y);
2743     return tmp;
2745 #endif
2747 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2748 static inline short2 __attribute__((const, overloadable))
2749     max(short2 a, short2 b) {
2750     short2 tmp;
2751     tmp.x = (a.x > b.x ? a.x : b.x);
2752     tmp.y = (a.y > b.y ? a.y : b.y);
2753     return tmp;
2755 #endif
2757 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2758 static inline ushort2 __attribute__((const, overloadable))
2759     max(ushort2 a, ushort2 b) {
2760     ushort2 tmp;
2761     tmp.x = (a.x > b.x ? a.x : b.x);
2762     tmp.y = (a.y > b.y ? a.y : b.y);
2763     return tmp;
2765 #endif
2767 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2768 static inline int2 __attribute__((const, overloadable))
2769     max(int2 a, int2 b) {
2770     int2 tmp;
2771     tmp.x = (a.x > b.x ? a.x : b.x);
2772     tmp.y = (a.y > b.y ? a.y : b.y);
2773     return tmp;
2775 #endif
2777 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2778 static inline uint2 __attribute__((const, overloadable))
2779     max(uint2 a, uint2 b) {
2780     uint2 tmp;
2781     tmp.x = (a.x > b.x ? a.x : b.x);
2782     tmp.y = (a.y > b.y ? a.y : b.y);
2783     return tmp;
2785 #endif
2787 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2788 static inline char3 __attribute__((const, overloadable))
2789     max(char3 a, char3 b) {
2790     char3 tmp;
2791     tmp.x = (a.x > b.x ? a.x : b.x);
2792     tmp.y = (a.y > b.y ? a.y : b.y);
2793     tmp.z = (a.z > b.z ? a.z : b.z);
2794     return tmp;
2796 #endif
2798 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2799 static inline uchar3 __attribute__((const, overloadable))
2800     max(uchar3 a, uchar3 b) {
2801     uchar3 tmp;
2802     tmp.x = (a.x > b.x ? a.x : b.x);
2803     tmp.y = (a.y > b.y ? a.y : b.y);
2804     tmp.z = (a.z > b.z ? a.z : b.z);
2805     return tmp;
2807 #endif
2809 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2810 static inline short3 __attribute__((const, overloadable))
2811     max(short3 a, short3 b) {
2812     short3 tmp;
2813     tmp.x = (a.x > b.x ? a.x : b.x);
2814     tmp.y = (a.y > b.y ? a.y : b.y);
2815     tmp.z = (a.z > b.z ? a.z : b.z);
2816     return tmp;
2818 #endif
2820 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2821 static inline ushort3 __attribute__((const, overloadable))
2822     max(ushort3 a, ushort3 b) {
2823     ushort3 tmp;
2824     tmp.x = (a.x > b.x ? a.x : b.x);
2825     tmp.y = (a.y > b.y ? a.y : b.y);
2826     tmp.z = (a.z > b.z ? a.z : b.z);
2827     return tmp;
2829 #endif
2831 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2832 static inline int3 __attribute__((const, overloadable))
2833     max(int3 a, int3 b) {
2834     int3 tmp;
2835     tmp.x = (a.x > b.x ? a.x : b.x);
2836     tmp.y = (a.y > b.y ? a.y : b.y);
2837     tmp.z = (a.z > b.z ? a.z : b.z);
2838     return tmp;
2840 #endif
2842 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2843 static inline uint3 __attribute__((const, overloadable))
2844     max(uint3 a, uint3 b) {
2845     uint3 tmp;
2846     tmp.x = (a.x > b.x ? a.x : b.x);
2847     tmp.y = (a.y > b.y ? a.y : b.y);
2848     tmp.z = (a.z > b.z ? a.z : b.z);
2849     return tmp;
2851 #endif
2853 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2854 static inline char4 __attribute__((const, overloadable))
2855     max(char4 a, char4 b) {
2856     char4 tmp;
2857     tmp.x = (a.x > b.x ? a.x : b.x);
2858     tmp.y = (a.y > b.y ? a.y : b.y);
2859     tmp.z = (a.z > b.z ? a.z : b.z);
2860     tmp.w = (a.w > b.w ? a.w : b.w);
2861     return tmp;
2863 #endif
2865 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2866 static inline uchar4 __attribute__((const, overloadable))
2867     max(uchar4 a, uchar4 b) {
2868     uchar4 tmp;
2869     tmp.x = (a.x > b.x ? a.x : b.x);
2870     tmp.y = (a.y > b.y ? a.y : b.y);
2871     tmp.z = (a.z > b.z ? a.z : b.z);
2872     tmp.w = (a.w > b.w ? a.w : b.w);
2873     return tmp;
2875 #endif
2877 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2878 static inline short4 __attribute__((const, overloadable))
2879     max(short4 a, short4 b) {
2880     short4 tmp;
2881     tmp.x = (a.x > b.x ? a.x : b.x);
2882     tmp.y = (a.y > b.y ? a.y : b.y);
2883     tmp.z = (a.z > b.z ? a.z : b.z);
2884     tmp.w = (a.w > b.w ? a.w : b.w);
2885     return tmp;
2887 #endif
2889 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2890 static inline ushort4 __attribute__((const, overloadable))
2891     max(ushort4 a, ushort4 b) {
2892     ushort4 tmp;
2893     tmp.x = (a.x > b.x ? a.x : b.x);
2894     tmp.y = (a.y > b.y ? a.y : b.y);
2895     tmp.z = (a.z > b.z ? a.z : b.z);
2896     tmp.w = (a.w > b.w ? a.w : b.w);
2897     return tmp;
2899 #endif
2901 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2902 static inline int4 __attribute__((const, overloadable))
2903     max(int4 a, int4 b) {
2904     int4 tmp;
2905     tmp.x = (a.x > b.x ? a.x : b.x);
2906     tmp.y = (a.y > b.y ? a.y : b.y);
2907     tmp.z = (a.z > b.z ? a.z : b.z);
2908     tmp.w = (a.w > b.w ? a.w : b.w);
2909     return tmp;
2911 #endif
2913 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
2914 static inline uint4 __attribute__((const, overloadable))
2915     max(uint4 a, uint4 b) {
2916     uint4 tmp;
2917     tmp.x = (a.x > b.x ? a.x : b.x);
2918     tmp.y = (a.y > b.y ? a.y : b.y);
2919     tmp.z = (a.z > b.z ? a.z : b.z);
2920     tmp.w = (a.w > b.w ? a.w : b.w);
2921     return tmp;
2923 #endif
2925 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2926 extern char __attribute__((const, overloadable))
2927     max(char a, char b);
2928 #endif
2930 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2931 extern char2 __attribute__((const, overloadable))
2932     max(char2 a, char2 b);
2933 #endif
2935 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2936 extern char3 __attribute__((const, overloadable))
2937     max(char3 a, char3 b);
2938 #endif
2940 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2941 extern char4 __attribute__((const, overloadable))
2942     max(char4 a, char4 b);
2943 #endif
2945 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2946 extern uchar __attribute__((const, overloadable))
2947     max(uchar a, uchar b);
2948 #endif
2950 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2951 extern uchar2 __attribute__((const, overloadable))
2952     max(uchar2 a, uchar2 b);
2953 #endif
2955 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2956 extern uchar3 __attribute__((const, overloadable))
2957     max(uchar3 a, uchar3 b);
2958 #endif
2960 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2961 extern uchar4 __attribute__((const, overloadable))
2962     max(uchar4 a, uchar4 b);
2963 #endif
2965 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2966 extern short __attribute__((const, overloadable))
2967     max(short a, short b);
2968 #endif
2970 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2971 extern short2 __attribute__((const, overloadable))
2972     max(short2 a, short2 b);
2973 #endif
2975 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2976 extern short3 __attribute__((const, overloadable))
2977     max(short3 a, short3 b);
2978 #endif
2980 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2981 extern short4 __attribute__((const, overloadable))
2982     max(short4 a, short4 b);
2983 #endif
2985 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2986 extern ushort __attribute__((const, overloadable))
2987     max(ushort a, ushort b);
2988 #endif
2990 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2991 extern ushort2 __attribute__((const, overloadable))
2992     max(ushort2 a, ushort2 b);
2993 #endif
2995 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
2996 extern ushort3 __attribute__((const, overloadable))
2997     max(ushort3 a, ushort3 b);
2998 #endif
3000 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3001 extern ushort4 __attribute__((const, overloadable))
3002     max(ushort4 a, ushort4 b);
3003 #endif
3005 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3006 extern int __attribute__((const, overloadable))
3007     max(int a, int b);
3008 #endif
3010 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3011 extern int2 __attribute__((const, overloadable))
3012     max(int2 a, int2 b);
3013 #endif
3015 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3016 extern int3 __attribute__((const, overloadable))
3017     max(int3 a, int3 b);
3018 #endif
3020 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3021 extern int4 __attribute__((const, overloadable))
3022     max(int4 a, int4 b);
3023 #endif
3025 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3026 extern uint __attribute__((const, overloadable))
3027     max(uint a, uint b);
3028 #endif
3030 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3031 extern uint2 __attribute__((const, overloadable))
3032     max(uint2 a, uint2 b);
3033 #endif
3035 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3036 extern uint3 __attribute__((const, overloadable))
3037     max(uint3 a, uint3 b);
3038 #endif
3040 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3041 extern uint4 __attribute__((const, overloadable))
3042     max(uint4 a, uint4 b);
3043 #endif
3045 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3046 extern long __attribute__((const, overloadable))
3047     max(long a, long b);
3048 #endif
3050 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3051 extern long2 __attribute__((const, overloadable))
3052     max(long2 a, long2 b);
3053 #endif
3055 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3056 extern long3 __attribute__((const, overloadable))
3057     max(long3 a, long3 b);
3058 #endif
3060 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3061 extern long4 __attribute__((const, overloadable))
3062     max(long4 a, long4 b);
3063 #endif
3065 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3066 extern ulong __attribute__((const, overloadable))
3067     max(ulong a, ulong b);
3068 #endif
3070 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3071 extern ulong2 __attribute__((const, overloadable))
3072     max(ulong2 a, ulong2 b);
3073 #endif
3075 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3076 extern ulong3 __attribute__((const, overloadable))
3077     max(ulong3 a, ulong3 b);
3078 #endif
3080 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3081 extern ulong4 __attribute__((const, overloadable))
3082     max(ulong4 a, ulong4 b);
3083 #endif
3086  * min: Minimum
3088  * Returns the minimum value of two arguments.
3089  */
3090 extern float __attribute__((const, overloadable))
3091     min(float a, float b);
3093 extern float2 __attribute__((const, overloadable))
3094     min(float2 a, float2 b);
3096 extern float3 __attribute__((const, overloadable))
3097     min(float3 a, float3 b);
3099 extern float4 __attribute__((const, overloadable))
3100     min(float4 a, float4 b);
3102 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3103 extern half __attribute__((const, overloadable))
3104     min(half a, half b);
3105 #endif
3107 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3108 extern half2 __attribute__((const, overloadable))
3109     min(half2 a, half2 b);
3110 #endif
3112 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3113 extern half3 __attribute__((const, overloadable))
3114     min(half3 a, half3 b);
3115 #endif
3117 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3118 extern half4 __attribute__((const, overloadable))
3119     min(half4 a, half4 b);
3120 #endif
3122 extern float2 __attribute__((const, overloadable))
3123     min(float2 a, float b);
3125 extern float3 __attribute__((const, overloadable))
3126     min(float3 a, float b);
3128 extern float4 __attribute__((const, overloadable))
3129     min(float4 a, float b);
3131 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3132 extern half2 __attribute__((const, overloadable))
3133     min(half2 a, half b);
3134 #endif
3136 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3137 extern half3 __attribute__((const, overloadable))
3138     min(half3 a, half b);
3139 #endif
3141 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3142 extern half4 __attribute__((const, overloadable))
3143     min(half4 a, half b);
3144 #endif
3146 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3147 static inline char __attribute__((const, overloadable))
3148     min(char a, char b) {
3149     return (a < b ? a : b);
3151 #endif
3153 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3154 static inline uchar __attribute__((const, overloadable))
3155     min(uchar a, uchar b) {
3156     return (a < b ? a : b);
3158 #endif
3160 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3161 static inline short __attribute__((const, overloadable))
3162     min(short a, short b) {
3163     return (a < b ? a : b);
3165 #endif
3167 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3168 static inline ushort __attribute__((const, overloadable))
3169     min(ushort a, ushort b) {
3170     return (a < b ? a : b);
3172 #endif
3174 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3175 static inline int __attribute__((const, overloadable))
3176     min(int a, int b) {
3177     return (a < b ? a : b);
3179 #endif
3181 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3182 static inline uint __attribute__((const, overloadable))
3183     min(uint a, uint b) {
3184     return (a < b ? a : b);
3186 #endif
3188 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3189 static inline char2 __attribute__((const, overloadable))
3190     min(char2 a, char2 b) {
3191     char2 tmp;
3192     tmp.x = (a.x < b.x ? a.x : b.x);
3193     tmp.y = (a.y < b.y ? a.y : b.y);
3194     return tmp;
3196 #endif
3198 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3199 static inline uchar2 __attribute__((const, overloadable))
3200     min(uchar2 a, uchar2 b) {
3201     uchar2 tmp;
3202     tmp.x = (a.x < b.x ? a.x : b.x);
3203     tmp.y = (a.y < b.y ? a.y : b.y);
3204     return tmp;
3206 #endif
3208 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3209 static inline short2 __attribute__((const, overloadable))
3210     min(short2 a, short2 b) {
3211     short2 tmp;
3212     tmp.x = (a.x < b.x ? a.x : b.x);
3213     tmp.y = (a.y < b.y ? a.y : b.y);
3214     return tmp;
3216 #endif
3218 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3219 static inline ushort2 __attribute__((const, overloadable))
3220     min(ushort2 a, ushort2 b) {
3221     ushort2 tmp;
3222     tmp.x = (a.x < b.x ? a.x : b.x);
3223     tmp.y = (a.y < b.y ? a.y : b.y);
3224     return tmp;
3226 #endif
3228 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3229 static inline int2 __attribute__((const, overloadable))
3230     min(int2 a, int2 b) {
3231     int2 tmp;
3232     tmp.x = (a.x < b.x ? a.x : b.x);
3233     tmp.y = (a.y < b.y ? a.y : b.y);
3234     return tmp;
3236 #endif
3238 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3239 static inline uint2 __attribute__((const, overloadable))
3240     min(uint2 a, uint2 b) {
3241     uint2 tmp;
3242     tmp.x = (a.x < b.x ? a.x : b.x);
3243     tmp.y = (a.y < b.y ? a.y : b.y);
3244     return tmp;
3246 #endif
3248 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3249 static inline char3 __attribute__((const, overloadable))
3250     min(char3 a, char3 b) {
3251     char3 tmp;
3252     tmp.x = (a.x < b.x ? a.x : b.x);
3253     tmp.y = (a.y < b.y ? a.y : b.y);
3254     tmp.z = (a.z < b.z ? a.z : b.z);
3255     return tmp;
3257 #endif
3259 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3260 static inline uchar3 __attribute__((const, overloadable))
3261     min(uchar3 a, uchar3 b) {
3262     uchar3 tmp;
3263     tmp.x = (a.x < b.x ? a.x : b.x);
3264     tmp.y = (a.y < b.y ? a.y : b.y);
3265     tmp.z = (a.z < b.z ? a.z : b.z);
3266     return tmp;
3268 #endif
3270 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3271 static inline short3 __attribute__((const, overloadable))
3272     min(short3 a, short3 b) {
3273     short3 tmp;
3274     tmp.x = (a.x < b.x ? a.x : b.x);
3275     tmp.y = (a.y < b.y ? a.y : b.y);
3276     tmp.z = (a.z < b.z ? a.z : b.z);
3277     return tmp;
3279 #endif
3281 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3282 static inline ushort3 __attribute__((const, overloadable))
3283     min(ushort3 a, ushort3 b) {
3284     ushort3 tmp;
3285     tmp.x = (a.x < b.x ? a.x : b.x);
3286     tmp.y = (a.y < b.y ? a.y : b.y);
3287     tmp.z = (a.z < b.z ? a.z : b.z);
3288     return tmp;
3290 #endif
3292 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3293 static inline int3 __attribute__((const, overloadable))
3294     min(int3 a, int3 b) {
3295     int3 tmp;
3296     tmp.x = (a.x < b.x ? a.x : b.x);
3297     tmp.y = (a.y < b.y ? a.y : b.y);
3298     tmp.z = (a.z < b.z ? a.z : b.z);
3299     return tmp;
3301 #endif
3303 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3304 static inline uint3 __attribute__((const, overloadable))
3305     min(uint3 a, uint3 b) {
3306     uint3 tmp;
3307     tmp.x = (a.x < b.x ? a.x : b.x);
3308     tmp.y = (a.y < b.y ? a.y : b.y);
3309     tmp.z = (a.z < b.z ? a.z : b.z);
3310     return tmp;
3312 #endif
3314 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3315 static inline char4 __attribute__((const, overloadable))
3316     min(char4 a, char4 b) {
3317     char4 tmp;
3318     tmp.x = (a.x < b.x ? a.x : b.x);
3319     tmp.y = (a.y < b.y ? a.y : b.y);
3320     tmp.z = (a.z < b.z ? a.z : b.z);
3321     tmp.w = (a.w < b.w ? a.w : b.w);
3322     return tmp;
3324 #endif
3326 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3327 static inline uchar4 __attribute__((const, overloadable))
3328     min(uchar4 a, uchar4 b) {
3329     uchar4 tmp;
3330     tmp.x = (a.x < b.x ? a.x : b.x);
3331     tmp.y = (a.y < b.y ? a.y : b.y);
3332     tmp.z = (a.z < b.z ? a.z : b.z);
3333     tmp.w = (a.w < b.w ? a.w : b.w);
3334     return tmp;
3336 #endif
3338 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3339 static inline short4 __attribute__((const, overloadable))
3340     min(short4 a, short4 b) {
3341     short4 tmp;
3342     tmp.x = (a.x < b.x ? a.x : b.x);
3343     tmp.y = (a.y < b.y ? a.y : b.y);
3344     tmp.z = (a.z < b.z ? a.z : b.z);
3345     tmp.w = (a.w < b.w ? a.w : b.w);
3346     return tmp;
3348 #endif
3350 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3351 static inline ushort4 __attribute__((const, overloadable))
3352     min(ushort4 a, ushort4 b) {
3353     ushort4 tmp;
3354     tmp.x = (a.x < b.x ? a.x : b.x);
3355     tmp.y = (a.y < b.y ? a.y : b.y);
3356     tmp.z = (a.z < b.z ? a.z : b.z);
3357     tmp.w = (a.w < b.w ? a.w : b.w);
3358     return tmp;
3360 #endif
3362 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3363 static inline int4 __attribute__((const, overloadable))
3364     min(int4 a, int4 b) {
3365     int4 tmp;
3366     tmp.x = (a.x < b.x ? a.x : b.x);
3367     tmp.y = (a.y < b.y ? a.y : b.y);
3368     tmp.z = (a.z < b.z ? a.z : b.z);
3369     tmp.w = (a.w < b.w ? a.w : b.w);
3370     return tmp;
3372 #endif
3374 #if !defined(RS_VERSION) || (RS_VERSION <= 20)
3375 static inline uint4 __attribute__((const, overloadable))
3376     min(uint4 a, uint4 b) {
3377     uint4 tmp;
3378     tmp.x = (a.x < b.x ? a.x : b.x);
3379     tmp.y = (a.y < b.y ? a.y : b.y);
3380     tmp.z = (a.z < b.z ? a.z : b.z);
3381     tmp.w = (a.w < b.w ? a.w : b.w);
3382     return tmp;
3384 #endif
3386 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3387 extern char __attribute__((const, overloadable))
3388     min(char a, char b);
3389 #endif
3391 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3392 extern char2 __attribute__((const, overloadable))
3393     min(char2 a, char2 b);
3394 #endif
3396 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3397 extern char3 __attribute__((const, overloadable))
3398     min(char3 a, char3 b);
3399 #endif
3401 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3402 extern char4 __attribute__((const, overloadable))
3403     min(char4 a, char4 b);
3404 #endif
3406 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3407 extern uchar __attribute__((const, overloadable))
3408     min(uchar a, uchar b);
3409 #endif
3411 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3412 extern uchar2 __attribute__((const, overloadable))
3413     min(uchar2 a, uchar2 b);
3414 #endif
3416 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3417 extern uchar3 __attribute__((const, overloadable))
3418     min(uchar3 a, uchar3 b);
3419 #endif
3421 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3422 extern uchar4 __attribute__((const, overloadable))
3423     min(uchar4 a, uchar4 b);
3424 #endif
3426 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3427 extern short __attribute__((const, overloadable))
3428     min(short a, short b);
3429 #endif
3431 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3432 extern short2 __attribute__((const, overloadable))
3433     min(short2 a, short2 b);
3434 #endif
3436 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3437 extern short3 __attribute__((const, overloadable))
3438     min(short3 a, short3 b);
3439 #endif
3441 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3442 extern short4 __attribute__((const, overloadable))
3443     min(short4 a, short4 b);
3444 #endif
3446 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3447 extern ushort __attribute__((const, overloadable))
3448     min(ushort a, ushort b);
3449 #endif
3451 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3452 extern ushort2 __attribute__((const, overloadable))
3453     min(ushort2 a, ushort2 b);
3454 #endif
3456 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3457 extern ushort3 __attribute__((const, overloadable))
3458     min(ushort3 a, ushort3 b);
3459 #endif
3461 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3462 extern ushort4 __attribute__((const, overloadable))
3463     min(ushort4 a, ushort4 b);
3464 #endif
3466 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3467 extern int __attribute__((const, overloadable))
3468     min(int a, int b);
3469 #endif
3471 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3472 extern int2 __attribute__((const, overloadable))
3473     min(int2 a, int2 b);
3474 #endif
3476 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3477 extern int3 __attribute__((const, overloadable))
3478     min(int3 a, int3 b);
3479 #endif
3481 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3482 extern int4 __attribute__((const, overloadable))
3483     min(int4 a, int4 b);
3484 #endif
3486 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3487 extern uint __attribute__((const, overloadable))
3488     min(uint a, uint b);
3489 #endif
3491 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3492 extern uint2 __attribute__((const, overloadable))
3493     min(uint2 a, uint2 b);
3494 #endif
3496 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3497 extern uint3 __attribute__((const, overloadable))
3498     min(uint3 a, uint3 b);
3499 #endif
3501 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3502 extern uint4 __attribute__((const, overloadable))
3503     min(uint4 a, uint4 b);
3504 #endif
3506 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3507 extern long __attribute__((const, overloadable))
3508     min(long a, long b);
3509 #endif
3511 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3512 extern long2 __attribute__((const, overloadable))
3513     min(long2 a, long2 b);
3514 #endif
3516 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3517 extern long3 __attribute__((const, overloadable))
3518     min(long3 a, long3 b);
3519 #endif
3521 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3522 extern long4 __attribute__((const, overloadable))
3523     min(long4 a, long4 b);
3524 #endif
3526 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3527 extern ulong __attribute__((const, overloadable))
3528     min(ulong a, ulong b);
3529 #endif
3531 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3532 extern ulong2 __attribute__((const, overloadable))
3533     min(ulong2 a, ulong2 b);
3534 #endif
3536 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3537 extern ulong3 __attribute__((const, overloadable))
3538     min(ulong3 a, ulong3 b);
3539 #endif
3541 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3542 extern ulong4 __attribute__((const, overloadable))
3543     min(ulong4 a, ulong4 b);
3544 #endif
3547  * mix: Mixes two values
3549  * Returns start + ((stop - start) * fraction).
3551  * This can be useful for mixing two values.  For example, to create a new color that is
3552  * 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
3553  */
3554 extern float __attribute__((const, overloadable))
3555     mix(float start, float stop, float fraction);
3557 extern float2 __attribute__((const, overloadable))
3558     mix(float2 start, float2 stop, float2 fraction);
3560 extern float3 __attribute__((const, overloadable))
3561     mix(float3 start, float3 stop, float3 fraction);
3563 extern float4 __attribute__((const, overloadable))
3564     mix(float4 start, float4 stop, float4 fraction);
3566 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3567 extern half __attribute__((const, overloadable))
3568     mix(half start, half stop, half fraction);
3569 #endif
3571 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3572 extern half2 __attribute__((const, overloadable))
3573     mix(half2 start, half2 stop, half2 fraction);
3574 #endif
3576 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3577 extern half3 __attribute__((const, overloadable))
3578     mix(half3 start, half3 stop, half3 fraction);
3579 #endif
3581 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3582 extern half4 __attribute__((const, overloadable))
3583     mix(half4 start, half4 stop, half4 fraction);
3584 #endif
3586 extern float2 __attribute__((const, overloadable))
3587     mix(float2 start, float2 stop, float fraction);
3589 extern float3 __attribute__((const, overloadable))
3590     mix(float3 start, float3 stop, float fraction);
3592 extern float4 __attribute__((const, overloadable))
3593     mix(float4 start, float4 stop, float fraction);
3595 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3596 extern half2 __attribute__((const, overloadable))
3597     mix(half2 start, half2 stop, half fraction);
3598 #endif
3600 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3601 extern half3 __attribute__((const, overloadable))
3602     mix(half3 start, half3 stop, half fraction);
3603 #endif
3605 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3606 extern half4 __attribute__((const, overloadable))
3607     mix(half4 start, half4 stop, half fraction);
3608 #endif
3611  * modf: Integral and fractional components
3613  * Returns the integral and fractional components of a number.
3615  * Both components will have the same sign as x.  For example, for an input of -3.72f,
3616  * *integral_part will be set to -3.f and .72f will be returned.
3618  * Parameters:
3619  *   v: Source value.
3620  *   integral_part: *integral_part will be set to the integral portion of the number.
3622  * Returns: Floating point portion of the value.
3623  */
3624 extern float __attribute__((overloadable))
3625     modf(float v, float* integral_part);
3627 extern float2 __attribute__((overloadable))
3628     modf(float2 v, float2* integral_part);
3630 extern float3 __attribute__((overloadable))
3631     modf(float3 v, float3* integral_part);
3633 extern float4 __attribute__((overloadable))
3634     modf(float4 v, float4* integral_part);
3636 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3637 extern half __attribute__((overloadable))
3638     modf(half v, half* integral_part);
3639 #endif
3641 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3642 extern half2 __attribute__((overloadable))
3643     modf(half2 v, half2* integral_part);
3644 #endif
3646 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3647 extern half3 __attribute__((overloadable))
3648     modf(half3 v, half3* integral_part);
3649 #endif
3651 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3652 extern half4 __attribute__((overloadable))
3653     modf(half4 v, half4* integral_part);
3654 #endif
3657  * nan: Not a Number
3659  * Returns a NaN value (Not a Number).
3661  * Parameters:
3662  *   v: Not used.
3663  */
3664 extern float __attribute__((const, overloadable))
3665     nan(uint v);
3668  * nan_half: Not a Number
3670  *  Returns a half-precision floating point NaN value (Not a Number).
3671  */
3672 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3673 extern half __attribute__((const, overloadable))
3674     nan_half(void);
3675 #endif
3678  * native_acos: Approximate inverse cosine
3680  * Returns the approximate inverse cosine, in radians.
3682  * This function yields undefined results from input values less than -1 or greater than 1.
3684  * See also acos().
3685  */
3686 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3687 extern float __attribute__((const, overloadable))
3688     native_acos(float v);
3689 #endif
3691 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3692 extern float2 __attribute__((const, overloadable))
3693     native_acos(float2 v);
3694 #endif
3696 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3697 extern float3 __attribute__((const, overloadable))
3698     native_acos(float3 v);
3699 #endif
3701 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3702 extern float4 __attribute__((const, overloadable))
3703     native_acos(float4 v);
3704 #endif
3706 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3707 extern half __attribute__((const, overloadable))
3708     native_acos(half v);
3709 #endif
3711 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3712 extern half2 __attribute__((const, overloadable))
3713     native_acos(half2 v);
3714 #endif
3716 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3717 extern half3 __attribute__((const, overloadable))
3718     native_acos(half3 v);
3719 #endif
3721 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3722 extern half4 __attribute__((const, overloadable))
3723     native_acos(half4 v);
3724 #endif
3727  * native_acosh: Approximate inverse hyperbolic cosine
3729  * Returns the approximate inverse hyperbolic cosine, in radians.
3731  * See also acosh().
3732  */
3733 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3734 extern float __attribute__((const, overloadable))
3735     native_acosh(float v);
3736 #endif
3738 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3739 extern float2 __attribute__((const, overloadable))
3740     native_acosh(float2 v);
3741 #endif
3743 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3744 extern float3 __attribute__((const, overloadable))
3745     native_acosh(float3 v);
3746 #endif
3748 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3749 extern float4 __attribute__((const, overloadable))
3750     native_acosh(float4 v);
3751 #endif
3753 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3754 extern half __attribute__((const, overloadable))
3755     native_acosh(half v);
3756 #endif
3758 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3759 extern half2 __attribute__((const, overloadable))
3760     native_acosh(half2 v);
3761 #endif
3763 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3764 extern half3 __attribute__((const, overloadable))
3765     native_acosh(half3 v);
3766 #endif
3768 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3769 extern half4 __attribute__((const, overloadable))
3770     native_acosh(half4 v);
3771 #endif
3774  * native_acospi: Approximate inverse cosine divided by pi
3776  * Returns the approximate inverse cosine in radians, divided by pi.
3778  * To get an inverse cosine measured in degrees, use acospi(a) * 180.f.
3780  * This function yields undefined results from input values less than -1 or greater than 1.
3782  * See also acospi().
3783  */
3784 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3785 extern float __attribute__((const, overloadable))
3786     native_acospi(float v);
3787 #endif
3789 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3790 extern float2 __attribute__((const, overloadable))
3791     native_acospi(float2 v);
3792 #endif
3794 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3795 extern float3 __attribute__((const, overloadable))
3796     native_acospi(float3 v);
3797 #endif
3799 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3800 extern float4 __attribute__((const, overloadable))
3801     native_acospi(float4 v);
3802 #endif
3804 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3805 extern half __attribute__((const, overloadable))
3806     native_acospi(half v);
3807 #endif
3809 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3810 extern half2 __attribute__((const, overloadable))
3811     native_acospi(half2 v);
3812 #endif
3814 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3815 extern half3 __attribute__((const, overloadable))
3816     native_acospi(half3 v);
3817 #endif
3819 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3820 extern half4 __attribute__((const, overloadable))
3821     native_acospi(half4 v);
3822 #endif
3825  * native_asin: Approximate inverse sine
3827  * Returns the approximate inverse sine, in radians.
3829  * This function yields undefined results from input values less than -1 or greater than 1.
3831  * See also asin().
3832  */
3833 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3834 extern float __attribute__((const, overloadable))
3835     native_asin(float v);
3836 #endif
3838 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3839 extern float2 __attribute__((const, overloadable))
3840     native_asin(float2 v);
3841 #endif
3843 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3844 extern float3 __attribute__((const, overloadable))
3845     native_asin(float3 v);
3846 #endif
3848 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3849 extern float4 __attribute__((const, overloadable))
3850     native_asin(float4 v);
3851 #endif
3853 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3854 extern half __attribute__((const, overloadable))
3855     native_asin(half v);
3856 #endif
3858 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3859 extern half2 __attribute__((const, overloadable))
3860     native_asin(half2 v);
3861 #endif
3863 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3864 extern half3 __attribute__((const, overloadable))
3865     native_asin(half3 v);
3866 #endif
3868 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3869 extern half4 __attribute__((const, overloadable))
3870     native_asin(half4 v);
3871 #endif
3874  * native_asinh: Approximate inverse hyperbolic sine
3876  * Returns the approximate inverse hyperbolic sine, in radians.
3878  * See also asinh().
3879  */
3880 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3881 extern float __attribute__((const, overloadable))
3882     native_asinh(float v);
3883 #endif
3885 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3886 extern float2 __attribute__((const, overloadable))
3887     native_asinh(float2 v);
3888 #endif
3890 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3891 extern float3 __attribute__((const, overloadable))
3892     native_asinh(float3 v);
3893 #endif
3895 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3896 extern float4 __attribute__((const, overloadable))
3897     native_asinh(float4 v);
3898 #endif
3900 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3901 extern half __attribute__((const, overloadable))
3902     native_asinh(half v);
3903 #endif
3905 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3906 extern half2 __attribute__((const, overloadable))
3907     native_asinh(half2 v);
3908 #endif
3910 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3911 extern half3 __attribute__((const, overloadable))
3912     native_asinh(half3 v);
3913 #endif
3915 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3916 extern half4 __attribute__((const, overloadable))
3917     native_asinh(half4 v);
3918 #endif
3921  * native_asinpi: Approximate inverse sine divided by pi
3923  * Returns the approximate inverse sine in radians, divided by pi.
3925  * To get an inverse sine measured in degrees, use asinpi(a) * 180.f.
3927  * This function yields undefined results from input values less than -1 or greater than 1.
3929  * See also asinpi().
3930  */
3931 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3932 extern float __attribute__((const, overloadable))
3933     native_asinpi(float v);
3934 #endif
3936 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3937 extern float2 __attribute__((const, overloadable))
3938     native_asinpi(float2 v);
3939 #endif
3941 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3942 extern float3 __attribute__((const, overloadable))
3943     native_asinpi(float3 v);
3944 #endif
3946 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3947 extern float4 __attribute__((const, overloadable))
3948     native_asinpi(float4 v);
3949 #endif
3951 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3952 extern half __attribute__((const, overloadable))
3953     native_asinpi(half v);
3954 #endif
3956 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3957 extern half2 __attribute__((const, overloadable))
3958     native_asinpi(half2 v);
3959 #endif
3961 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3962 extern half3 __attribute__((const, overloadable))
3963     native_asinpi(half3 v);
3964 #endif
3966 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3967 extern half4 __attribute__((const, overloadable))
3968     native_asinpi(half4 v);
3969 #endif
3972  * native_atan: Approximate inverse tangent
3974  * Returns the approximate inverse tangent, in radians.
3976  * See also atan().
3977  */
3978 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3979 extern float __attribute__((const, overloadable))
3980     native_atan(float v);
3981 #endif
3983 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3984 extern float2 __attribute__((const, overloadable))
3985     native_atan(float2 v);
3986 #endif
3988 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3989 extern float3 __attribute__((const, overloadable))
3990     native_atan(float3 v);
3991 #endif
3993 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
3994 extern float4 __attribute__((const, overloadable))
3995     native_atan(float4 v);
3996 #endif
3998 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
3999 extern half __attribute__((const, overloadable))
4000     native_atan(half v);
4001 #endif
4003 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4004 extern half2 __attribute__((const, overloadable))
4005     native_atan(half2 v);
4006 #endif
4008 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4009 extern half3 __attribute__((const, overloadable))
4010     native_atan(half3 v);
4011 #endif
4013 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4014 extern half4 __attribute__((const, overloadable))
4015     native_atan(half4 v);
4016 #endif
4019  * native_atan2: Approximate inverse tangent of a ratio
4021  * Returns the approximate inverse tangent of (numerator / denominator), in radians.
4023  * See also atan2().
4025  * Parameters:
4026  *   numerator: Numerator.
4027  *   denominator: Denominator.  Can be 0.
4028  */
4029 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4030 extern float __attribute__((const, overloadable))
4031     native_atan2(float numerator, float denominator);
4032 #endif
4034 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4035 extern float2 __attribute__((const, overloadable))
4036     native_atan2(float2 numerator, float2 denominator);
4037 #endif
4039 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4040 extern float3 __attribute__((const, overloadable))
4041     native_atan2(float3 numerator, float3 denominator);
4042 #endif
4044 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4045 extern float4 __attribute__((const, overloadable))
4046     native_atan2(float4 numerator, float4 denominator);
4047 #endif
4049 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4050 extern half __attribute__((const, overloadable))
4051     native_atan2(half numerator, half denominator);
4052 #endif
4054 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4055 extern half2 __attribute__((const, overloadable))
4056     native_atan2(half2 numerator, half2 denominator);
4057 #endif
4059 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4060 extern half3 __attribute__((const, overloadable))
4061     native_atan2(half3 numerator, half3 denominator);
4062 #endif
4064 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4065 extern half4 __attribute__((const, overloadable))
4066     native_atan2(half4 numerator, half4 denominator);
4067 #endif
4070  * native_atan2pi: Approximate inverse tangent of a ratio, divided by pi
4072  * Returns the approximate inverse tangent of (numerator / denominator),
4073  * in radians, divided by pi.
4075  * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
4077  * See also atan2pi().
4079  * Parameters:
4080  *   numerator: Numerator.
4081  *   denominator: Denominator.  Can be 0.
4082  */
4083 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4084 extern float __attribute__((const, overloadable))
4085     native_atan2pi(float numerator, float denominator);
4086 #endif
4088 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4089 extern float2 __attribute__((const, overloadable))
4090     native_atan2pi(float2 numerator, float2 denominator);
4091 #endif
4093 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4094 extern float3 __attribute__((const, overloadable))
4095     native_atan2pi(float3 numerator, float3 denominator);
4096 #endif
4098 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4099 extern float4 __attribute__((const, overloadable))
4100     native_atan2pi(float4 numerator, float4 denominator);
4101 #endif
4103 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4104 extern half __attribute__((const, overloadable))
4105     native_atan2pi(half numerator, half denominator);
4106 #endif
4108 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4109 extern half2 __attribute__((const, overloadable))
4110     native_atan2pi(half2 numerator, half2 denominator);
4111 #endif
4113 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4114 extern half3 __attribute__((const, overloadable))
4115     native_atan2pi(half3 numerator, half3 denominator);
4116 #endif
4118 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4119 extern half4 __attribute__((const, overloadable))
4120     native_atan2pi(half4 numerator, half4 denominator);
4121 #endif
4124  * native_atanh: Approximate inverse hyperbolic tangent
4126  * Returns the approximate inverse hyperbolic tangent, in radians.
4128  * See also atanh().
4129  */
4130 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4131 extern float __attribute__((const, overloadable))
4132     native_atanh(float v);
4133 #endif
4135 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4136 extern float2 __attribute__((const, overloadable))
4137     native_atanh(float2 v);
4138 #endif
4140 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4141 extern float3 __attribute__((const, overloadable))
4142     native_atanh(float3 v);
4143 #endif
4145 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4146 extern float4 __attribute__((const, overloadable))
4147     native_atanh(float4 v);
4148 #endif
4150 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4151 extern half __attribute__((const, overloadable))
4152     native_atanh(half v);
4153 #endif
4155 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4156 extern half2 __attribute__((const, overloadable))
4157     native_atanh(half2 v);
4158 #endif
4160 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4161 extern half3 __attribute__((const, overloadable))
4162     native_atanh(half3 v);
4163 #endif
4165 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4166 extern half4 __attribute__((const, overloadable))
4167     native_atanh(half4 v);
4168 #endif
4171  * native_atanpi: Approximate inverse tangent divided by pi
4173  * Returns the approximate inverse tangent in radians, divided by pi.
4175  * To get an inverse tangent measured in degrees, use atanpi(a) * 180.f.
4177  * See also atanpi().
4178  */
4179 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4180 extern float __attribute__((const, overloadable))
4181     native_atanpi(float v);
4182 #endif
4184 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4185 extern float2 __attribute__((const, overloadable))
4186     native_atanpi(float2 v);
4187 #endif
4189 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4190 extern float3 __attribute__((const, overloadable))
4191     native_atanpi(float3 v);
4192 #endif
4194 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4195 extern float4 __attribute__((const, overloadable))
4196     native_atanpi(float4 v);
4197 #endif
4199 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4200 extern half __attribute__((const, overloadable))
4201     native_atanpi(half v);
4202 #endif
4204 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4205 extern half2 __attribute__((const, overloadable))
4206     native_atanpi(half2 v);
4207 #endif
4209 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4210 extern half3 __attribute__((const, overloadable))
4211     native_atanpi(half3 v);
4212 #endif
4214 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4215 extern half4 __attribute__((const, overloadable))
4216     native_atanpi(half4 v);
4217 #endif
4220  * native_cbrt: Approximate cube root
4222  * Returns the approximate cubic root.
4224  * See also cbrt().
4225  */
4226 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4227 extern float __attribute__((const, overloadable))
4228     native_cbrt(float v);
4229 #endif
4231 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4232 extern float2 __attribute__((const, overloadable))
4233     native_cbrt(float2 v);
4234 #endif
4236 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4237 extern float3 __attribute__((const, overloadable))
4238     native_cbrt(float3 v);
4239 #endif
4241 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4242 extern float4 __attribute__((const, overloadable))
4243     native_cbrt(float4 v);
4244 #endif
4246 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4247 extern half __attribute__((const, overloadable))
4248     native_cbrt(half v);
4249 #endif
4251 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4252 extern half2 __attribute__((const, overloadable))
4253     native_cbrt(half2 v);
4254 #endif
4256 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4257 extern half3 __attribute__((const, overloadable))
4258     native_cbrt(half3 v);
4259 #endif
4261 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4262 extern half4 __attribute__((const, overloadable))
4263     native_cbrt(half4 v);
4264 #endif
4267  * native_cos: Approximate cosine
4269  * Returns the approximate cosine of an angle measured in radians.
4271  * See also cos().
4272  */
4273 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4274 extern float __attribute__((const, overloadable))
4275     native_cos(float v);
4276 #endif
4278 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4279 extern float2 __attribute__((const, overloadable))
4280     native_cos(float2 v);
4281 #endif
4283 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4284 extern float3 __attribute__((const, overloadable))
4285     native_cos(float3 v);
4286 #endif
4288 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4289 extern float4 __attribute__((const, overloadable))
4290     native_cos(float4 v);
4291 #endif
4293 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4294 extern half __attribute__((const, overloadable))
4295     native_cos(half v);
4296 #endif
4298 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4299 extern half2 __attribute__((const, overloadable))
4300     native_cos(half2 v);
4301 #endif
4303 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4304 extern half3 __attribute__((const, overloadable))
4305     native_cos(half3 v);
4306 #endif
4308 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4309 extern half4 __attribute__((const, overloadable))
4310     native_cos(half4 v);
4311 #endif
4314  * native_cosh: Approximate hypebolic cosine
4316  * Returns the approximate hypebolic cosine.
4318  * See also cosh().
4319  */
4320 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4321 extern float __attribute__((const, overloadable))
4322     native_cosh(float v);
4323 #endif
4325 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4326 extern float2 __attribute__((const, overloadable))
4327     native_cosh(float2 v);
4328 #endif
4330 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4331 extern float3 __attribute__((const, overloadable))
4332     native_cosh(float3 v);
4333 #endif
4335 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4336 extern float4 __attribute__((const, overloadable))
4337     native_cosh(float4 v);
4338 #endif
4340 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4341 extern half __attribute__((const, overloadable))
4342     native_cosh(half v);
4343 #endif
4345 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4346 extern half2 __attribute__((const, overloadable))
4347     native_cosh(half2 v);
4348 #endif
4350 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4351 extern half3 __attribute__((const, overloadable))
4352     native_cosh(half3 v);
4353 #endif
4355 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4356 extern half4 __attribute__((const, overloadable))
4357     native_cosh(half4 v);
4358 #endif
4361  * native_cospi: Approximate cosine of a number multiplied by pi
4363  * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
4365  * To get the cosine of a value measured in degrees, call cospi(v / 180.f).
4367  * See also cospi().
4368  */
4369 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4370 extern float __attribute__((const, overloadable))
4371     native_cospi(float v);
4372 #endif
4374 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4375 extern float2 __attribute__((const, overloadable))
4376     native_cospi(float2 v);
4377 #endif
4379 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4380 extern float3 __attribute__((const, overloadable))
4381     native_cospi(float3 v);
4382 #endif
4384 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4385 extern float4 __attribute__((const, overloadable))
4386     native_cospi(float4 v);
4387 #endif
4389 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4390 extern half __attribute__((const, overloadable))
4391     native_cospi(half v);
4392 #endif
4394 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4395 extern half2 __attribute__((const, overloadable))
4396     native_cospi(half2 v);
4397 #endif
4399 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4400 extern half3 __attribute__((const, overloadable))
4401     native_cospi(half3 v);
4402 #endif
4404 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4405 extern half4 __attribute__((const, overloadable))
4406     native_cospi(half4 v);
4407 #endif
4410  * native_divide: Approximate division
4412  * Computes the approximate division of two values.
4413  */
4414 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4415 extern float __attribute__((const, overloadable))
4416     native_divide(float left_vector, float right_vector);
4417 #endif
4419 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4420 extern float2 __attribute__((const, overloadable))
4421     native_divide(float2 left_vector, float2 right_vector);
4422 #endif
4424 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4425 extern float3 __attribute__((const, overloadable))
4426     native_divide(float3 left_vector, float3 right_vector);
4427 #endif
4429 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4430 extern float4 __attribute__((const, overloadable))
4431     native_divide(float4 left_vector, float4 right_vector);
4432 #endif
4434 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4435 extern half __attribute__((const, overloadable))
4436     native_divide(half left_vector, half right_vector);
4437 #endif
4439 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4440 extern half2 __attribute__((const, overloadable))
4441     native_divide(half2 left_vector, half2 right_vector);
4442 #endif
4444 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4445 extern half3 __attribute__((const, overloadable))
4446     native_divide(half3 left_vector, half3 right_vector);
4447 #endif
4449 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4450 extern half4 __attribute__((const, overloadable))
4451     native_divide(half4 left_vector, half4 right_vector);
4452 #endif
4455  * native_exp: Approximate e raised to a number
4457  * Fast approximate exp.
4459  * It is valid for inputs from -86.f to 86.f.  The precision is no worse than what would be
4460  * expected from using 16 bit floating point values.
4462  * See also exp().
4463  */
4464 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4465 extern float __attribute__((const, overloadable))
4466     native_exp(float v);
4467 #endif
4469 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4470 extern float2 __attribute__((const, overloadable))
4471     native_exp(float2 v);
4472 #endif
4474 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4475 extern float3 __attribute__((const, overloadable))
4476     native_exp(float3 v);
4477 #endif
4479 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4480 extern float4 __attribute__((const, overloadable))
4481     native_exp(float4 v);
4482 #endif
4484 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4485 extern half __attribute__((const, overloadable))
4486     native_exp(half v);
4487 #endif
4489 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4490 extern half2 __attribute__((const, overloadable))
4491     native_exp(half2 v);
4492 #endif
4494 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4495 extern half3 __attribute__((const, overloadable))
4496     native_exp(half3 v);
4497 #endif
4499 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4500 extern half4 __attribute__((const, overloadable))
4501     native_exp(half4 v);
4502 #endif
4505  * native_exp10: Approximate 10 raised to a number
4507  * Fast approximate exp10.
4509  * It is valid for inputs from -37.f to 37.f.  The precision is no worse than what would be
4510  * expected from using 16 bit floating point values.
4512  * See also exp10().
4513  */
4514 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4515 extern float __attribute__((const, overloadable))
4516     native_exp10(float v);
4517 #endif
4519 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4520 extern float2 __attribute__((const, overloadable))
4521     native_exp10(float2 v);
4522 #endif
4524 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4525 extern float3 __attribute__((const, overloadable))
4526     native_exp10(float3 v);
4527 #endif
4529 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4530 extern float4 __attribute__((const, overloadable))
4531     native_exp10(float4 v);
4532 #endif
4534 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4535 extern half __attribute__((const, overloadable))
4536     native_exp10(half v);
4537 #endif
4539 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4540 extern half2 __attribute__((const, overloadable))
4541     native_exp10(half2 v);
4542 #endif
4544 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4545 extern half3 __attribute__((const, overloadable))
4546     native_exp10(half3 v);
4547 #endif
4549 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4550 extern half4 __attribute__((const, overloadable))
4551     native_exp10(half4 v);
4552 #endif
4555  * native_exp2: Approximate 2 raised to a number
4557  * Fast approximate exp2.
4559  * It is valid for inputs from -125.f to 125.f.  The precision is no worse than what would be
4560  * expected from using 16 bit floating point values.
4562  * See also exp2().
4563  */
4564 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4565 extern float __attribute__((const, overloadable))
4566     native_exp2(float v);
4567 #endif
4569 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4570 extern float2 __attribute__((const, overloadable))
4571     native_exp2(float2 v);
4572 #endif
4574 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4575 extern float3 __attribute__((const, overloadable))
4576     native_exp2(float3 v);
4577 #endif
4579 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4580 extern float4 __attribute__((const, overloadable))
4581     native_exp2(float4 v);
4582 #endif
4584 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4585 extern half __attribute__((const, overloadable))
4586     native_exp2(half v);
4587 #endif
4589 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4590 extern half2 __attribute__((const, overloadable))
4591     native_exp2(half2 v);
4592 #endif
4594 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4595 extern half3 __attribute__((const, overloadable))
4596     native_exp2(half3 v);
4597 #endif
4599 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4600 extern half4 __attribute__((const, overloadable))
4601     native_exp2(half4 v);
4602 #endif
4605  * native_expm1: Approximate e raised to a number minus one
4607  * Returns the approximate (e ^ v) - 1.
4609  * See also expm1().
4610  */
4611 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4612 extern float __attribute__((const, overloadable))
4613     native_expm1(float v);
4614 #endif
4616 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4617 extern float2 __attribute__((const, overloadable))
4618     native_expm1(float2 v);
4619 #endif
4621 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4622 extern float3 __attribute__((const, overloadable))
4623     native_expm1(float3 v);
4624 #endif
4626 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4627 extern float4 __attribute__((const, overloadable))
4628     native_expm1(float4 v);
4629 #endif
4631 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4632 extern half __attribute__((const, overloadable))
4633     native_expm1(half v);
4634 #endif
4636 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4637 extern half2 __attribute__((const, overloadable))
4638     native_expm1(half2 v);
4639 #endif
4641 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4642 extern half3 __attribute__((const, overloadable))
4643     native_expm1(half3 v);
4644 #endif
4646 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4647 extern half4 __attribute__((const, overloadable))
4648     native_expm1(half4 v);
4649 #endif
4652  * native_hypot: Approximate hypotenuse
4654  * Returns the approximate native_sqrt(a * a + b * b)
4656  * See also hypot().
4657  */
4658 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4659 extern float __attribute__((const, overloadable))
4660     native_hypot(float a, float b);
4661 #endif
4663 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4664 extern float2 __attribute__((const, overloadable))
4665     native_hypot(float2 a, float2 b);
4666 #endif
4668 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4669 extern float3 __attribute__((const, overloadable))
4670     native_hypot(float3 a, float3 b);
4671 #endif
4673 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4674 extern float4 __attribute__((const, overloadable))
4675     native_hypot(float4 a, float4 b);
4676 #endif
4678 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4679 extern half __attribute__((const, overloadable))
4680     native_hypot(half a, half b);
4681 #endif
4683 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4684 extern half2 __attribute__((const, overloadable))
4685     native_hypot(half2 a, half2 b);
4686 #endif
4688 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4689 extern half3 __attribute__((const, overloadable))
4690     native_hypot(half3 a, half3 b);
4691 #endif
4693 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4694 extern half4 __attribute__((const, overloadable))
4695     native_hypot(half4 a, half4 b);
4696 #endif
4699  * native_log: Approximate natural logarithm
4701  * Fast approximate log.
4703  * It is not accurate for values very close to zero.
4705  * See also log().
4706  */
4707 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4708 extern float __attribute__((const, overloadable))
4709     native_log(float v);
4710 #endif
4712 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4713 extern float2 __attribute__((const, overloadable))
4714     native_log(float2 v);
4715 #endif
4717 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4718 extern float3 __attribute__((const, overloadable))
4719     native_log(float3 v);
4720 #endif
4722 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4723 extern float4 __attribute__((const, overloadable))
4724     native_log(float4 v);
4725 #endif
4727 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4728 extern half __attribute__((const, overloadable))
4729     native_log(half v);
4730 #endif
4732 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4733 extern half2 __attribute__((const, overloadable))
4734     native_log(half2 v);
4735 #endif
4737 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4738 extern half3 __attribute__((const, overloadable))
4739     native_log(half3 v);
4740 #endif
4742 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4743 extern half4 __attribute__((const, overloadable))
4744     native_log(half4 v);
4745 #endif
4748  * native_log10: Approximate base 10 logarithm
4750  * Fast approximate log10.
4752  * It is not accurate for values very close to zero.
4754  * See also log10().
4755  */
4756 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4757 extern float __attribute__((const, overloadable))
4758     native_log10(float v);
4759 #endif
4761 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4762 extern float2 __attribute__((const, overloadable))
4763     native_log10(float2 v);
4764 #endif
4766 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4767 extern float3 __attribute__((const, overloadable))
4768     native_log10(float3 v);
4769 #endif
4771 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4772 extern float4 __attribute__((const, overloadable))
4773     native_log10(float4 v);
4774 #endif
4776 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4777 extern half __attribute__((const, overloadable))
4778     native_log10(half v);
4779 #endif
4781 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4782 extern half2 __attribute__((const, overloadable))
4783     native_log10(half2 v);
4784 #endif
4786 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4787 extern half3 __attribute__((const, overloadable))
4788     native_log10(half3 v);
4789 #endif
4791 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4792 extern half4 __attribute__((const, overloadable))
4793     native_log10(half4 v);
4794 #endif
4797  * native_log1p: Approximate natural logarithm of a value plus 1
4799  * Returns the approximate natural logarithm of (v + 1.0f)
4801  * See also log1p().
4802  */
4803 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4804 extern float __attribute__((const, overloadable))
4805     native_log1p(float v);
4806 #endif
4808 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4809 extern float2 __attribute__((const, overloadable))
4810     native_log1p(float2 v);
4811 #endif
4813 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4814 extern float3 __attribute__((const, overloadable))
4815     native_log1p(float3 v);
4816 #endif
4818 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4819 extern float4 __attribute__((const, overloadable))
4820     native_log1p(float4 v);
4821 #endif
4823 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4824 extern half __attribute__((const, overloadable))
4825     native_log1p(half v);
4826 #endif
4828 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4829 extern half2 __attribute__((const, overloadable))
4830     native_log1p(half2 v);
4831 #endif
4833 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4834 extern half3 __attribute__((const, overloadable))
4835     native_log1p(half3 v);
4836 #endif
4838 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4839 extern half4 __attribute__((const, overloadable))
4840     native_log1p(half4 v);
4841 #endif
4844  * native_log2: Approximate base 2 logarithm
4846  * Fast approximate log2.
4848  * It is not accurate for values very close to zero.
4850  * See also log2().
4851  */
4852 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4853 extern float __attribute__((const, overloadable))
4854     native_log2(float v);
4855 #endif
4857 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4858 extern float2 __attribute__((const, overloadable))
4859     native_log2(float2 v);
4860 #endif
4862 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4863 extern float3 __attribute__((const, overloadable))
4864     native_log2(float3 v);
4865 #endif
4867 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4868 extern float4 __attribute__((const, overloadable))
4869     native_log2(float4 v);
4870 #endif
4872 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4873 extern half __attribute__((const, overloadable))
4874     native_log2(half v);
4875 #endif
4877 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4878 extern half2 __attribute__((const, overloadable))
4879     native_log2(half2 v);
4880 #endif
4882 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4883 extern half3 __attribute__((const, overloadable))
4884     native_log2(half3 v);
4885 #endif
4887 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4888 extern half4 __attribute__((const, overloadable))
4889     native_log2(half4 v);
4890 #endif
4893  * native_powr: Approximate positive base raised to an exponent
4895  * Fast approximate (base ^ exponent).
4897  * See also powr().
4899  * Parameters:
4900  *   base: Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.
4901  *   exponent: Must be between -15.f and 15.f.
4902  */
4903 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4904 extern float __attribute__((const, overloadable))
4905     native_powr(float base, float exponent);
4906 #endif
4908 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4909 extern float2 __attribute__((const, overloadable))
4910     native_powr(float2 base, float2 exponent);
4911 #endif
4913 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4914 extern float3 __attribute__((const, overloadable))
4915     native_powr(float3 base, float3 exponent);
4916 #endif
4918 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
4919 extern float4 __attribute__((const, overloadable))
4920     native_powr(float4 base, float4 exponent);
4921 #endif
4923 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4924 extern half __attribute__((const, overloadable))
4925     native_powr(half base, half exponent);
4926 #endif
4928 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4929 extern half2 __attribute__((const, overloadable))
4930     native_powr(half2 base, half2 exponent);
4931 #endif
4933 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4934 extern half3 __attribute__((const, overloadable))
4935     native_powr(half3 base, half3 exponent);
4936 #endif
4938 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4939 extern half4 __attribute__((const, overloadable))
4940     native_powr(half4 base, half4 exponent);
4941 #endif
4944  * native_recip: Approximate reciprocal
4946  * Returns the approximate approximate reciprocal of a value.
4948  * See also half_recip().
4949  */
4950 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4951 extern float __attribute__((const, overloadable))
4952     native_recip(float v);
4953 #endif
4955 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4956 extern float2 __attribute__((const, overloadable))
4957     native_recip(float2 v);
4958 #endif
4960 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4961 extern float3 __attribute__((const, overloadable))
4962     native_recip(float3 v);
4963 #endif
4965 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4966 extern float4 __attribute__((const, overloadable))
4967     native_recip(float4 v);
4968 #endif
4970 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4971 extern half __attribute__((const, overloadable))
4972     native_recip(half v);
4973 #endif
4975 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4976 extern half2 __attribute__((const, overloadable))
4977     native_recip(half2 v);
4978 #endif
4980 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4981 extern half3 __attribute__((const, overloadable))
4982     native_recip(half3 v);
4983 #endif
4985 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
4986 extern half4 __attribute__((const, overloadable))
4987     native_recip(half4 v);
4988 #endif
4991  * native_rootn: Approximate nth root
4993  * Compute the approximate Nth root of a value.
4995  * See also rootn().
4996  */
4997 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
4998 extern float __attribute__((const, overloadable))
4999     native_rootn(float v, int n);
5000 #endif
5002 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5003 extern float2 __attribute__((const, overloadable))
5004     native_rootn(float2 v, int2 n);
5005 #endif
5007 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5008 extern float3 __attribute__((const, overloadable))
5009     native_rootn(float3 v, int3 n);
5010 #endif
5012 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5013 extern float4 __attribute__((const, overloadable))
5014     native_rootn(float4 v, int4 n);
5015 #endif
5017 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5018 extern half __attribute__((const, overloadable))
5019     native_rootn(half v, int n);
5020 #endif
5022 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5023 extern half2 __attribute__((const, overloadable))
5024     native_rootn(half2 v, int2 n);
5025 #endif
5027 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5028 extern half3 __attribute__((const, overloadable))
5029     native_rootn(half3 v, int3 n);
5030 #endif
5032 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5033 extern half4 __attribute__((const, overloadable))
5034     native_rootn(half4 v, int4 n);
5035 #endif
5038  * native_rsqrt: Approximate reciprocal of a square root
5040  * Returns approximate (1 / sqrt(v)).
5042  * See also rsqrt(), half_rsqrt().
5043  */
5044 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5045 extern float __attribute__((const, overloadable))
5046     native_rsqrt(float v);
5047 #endif
5049 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5050 extern float2 __attribute__((const, overloadable))
5051     native_rsqrt(float2 v);
5052 #endif
5054 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5055 extern float3 __attribute__((const, overloadable))
5056     native_rsqrt(float3 v);
5057 #endif
5059 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5060 extern float4 __attribute__((const, overloadable))
5061     native_rsqrt(float4 v);
5062 #endif
5064 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5065 extern half __attribute__((const, overloadable))
5066     native_rsqrt(half v);
5067 #endif
5069 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5070 extern half2 __attribute__((const, overloadable))
5071     native_rsqrt(half2 v);
5072 #endif
5074 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5075 extern half3 __attribute__((const, overloadable))
5076     native_rsqrt(half3 v);
5077 #endif
5079 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5080 extern half4 __attribute__((const, overloadable))
5081     native_rsqrt(half4 v);
5082 #endif
5085  * native_sin: Approximate sine
5087  * Returns the approximate sine of an angle measured in radians.
5089  * See also sin().
5090  */
5091 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5092 extern float __attribute__((const, overloadable))
5093     native_sin(float v);
5094 #endif
5096 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5097 extern float2 __attribute__((const, overloadable))
5098     native_sin(float2 v);
5099 #endif
5101 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5102 extern float3 __attribute__((const, overloadable))
5103     native_sin(float3 v);
5104 #endif
5106 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5107 extern float4 __attribute__((const, overloadable))
5108     native_sin(float4 v);
5109 #endif
5111 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5112 extern half __attribute__((const, overloadable))
5113     native_sin(half v);
5114 #endif
5116 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5117 extern half2 __attribute__((const, overloadable))
5118     native_sin(half2 v);
5119 #endif
5121 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5122 extern half3 __attribute__((const, overloadable))
5123     native_sin(half3 v);
5124 #endif
5126 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5127 extern half4 __attribute__((const, overloadable))
5128     native_sin(half4 v);
5129 #endif
5132  * native_sincos: Approximate sine and cosine
5134  * Returns the approximate sine and cosine of a value.
5136  * See also sincos().
5138  * Parameters:
5139  *   v: Incoming value in radians.
5140  *   cos: *cos will be set to the cosine value.
5142  * Returns: Sine.
5143  */
5144 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5145 extern float __attribute__((overloadable))
5146     native_sincos(float v, float* cos);
5147 #endif
5149 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5150 extern float2 __attribute__((overloadable))
5151     native_sincos(float2 v, float2* cos);
5152 #endif
5154 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5155 extern float3 __attribute__((overloadable))
5156     native_sincos(float3 v, float3* cos);
5157 #endif
5159 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5160 extern float4 __attribute__((overloadable))
5161     native_sincos(float4 v, float4* cos);
5162 #endif
5164 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5165 extern half __attribute__((overloadable))
5166     native_sincos(half v, half* cos);
5167 #endif
5169 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5170 extern half2 __attribute__((overloadable))
5171     native_sincos(half2 v, half2* cos);
5172 #endif
5174 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5175 extern half3 __attribute__((overloadable))
5176     native_sincos(half3 v, half3* cos);
5177 #endif
5179 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5180 extern half4 __attribute__((overloadable))
5181     native_sincos(half4 v, half4* cos);
5182 #endif
5185  * native_sinh: Approximate hyperbolic sine
5187  * Returns the approximate hyperbolic sine of a value specified in radians.
5189  * See also sinh().
5190  */
5191 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5192 extern float __attribute__((const, overloadable))
5193     native_sinh(float v);
5194 #endif
5196 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5197 extern float2 __attribute__((const, overloadable))
5198     native_sinh(float2 v);
5199 #endif
5201 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5202 extern float3 __attribute__((const, overloadable))
5203     native_sinh(float3 v);
5204 #endif
5206 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5207 extern float4 __attribute__((const, overloadable))
5208     native_sinh(float4 v);
5209 #endif
5211 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5212 extern half __attribute__((const, overloadable))
5213     native_sinh(half v);
5214 #endif
5216 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5217 extern half2 __attribute__((const, overloadable))
5218     native_sinh(half2 v);
5219 #endif
5221 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5222 extern half3 __attribute__((const, overloadable))
5223     native_sinh(half3 v);
5224 #endif
5226 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5227 extern half4 __attribute__((const, overloadable))
5228     native_sinh(half4 v);
5229 #endif
5232  * native_sinpi: Approximate sine of a number multiplied by pi
5234  * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
5236  * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
5238  * See also sinpi().
5239  */
5240 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5241 extern float __attribute__((const, overloadable))
5242     native_sinpi(float v);
5243 #endif
5245 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5246 extern float2 __attribute__((const, overloadable))
5247     native_sinpi(float2 v);
5248 #endif
5250 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5251 extern float3 __attribute__((const, overloadable))
5252     native_sinpi(float3 v);
5253 #endif
5255 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5256 extern float4 __attribute__((const, overloadable))
5257     native_sinpi(float4 v);
5258 #endif
5260 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5261 extern half __attribute__((const, overloadable))
5262     native_sinpi(half v);
5263 #endif
5265 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5266 extern half2 __attribute__((const, overloadable))
5267     native_sinpi(half2 v);
5268 #endif
5270 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5271 extern half3 __attribute__((const, overloadable))
5272     native_sinpi(half3 v);
5273 #endif
5275 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5276 extern half4 __attribute__((const, overloadable))
5277     native_sinpi(half4 v);
5278 #endif
5281  * native_sqrt: Approximate square root
5283  * Returns the approximate sqrt(v).
5285  * See also sqrt(), half_sqrt().
5286  */
5287 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5288 extern float __attribute__((const, overloadable))
5289     native_sqrt(float v);
5290 #endif
5292 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5293 extern float2 __attribute__((const, overloadable))
5294     native_sqrt(float2 v);
5295 #endif
5297 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5298 extern float3 __attribute__((const, overloadable))
5299     native_sqrt(float3 v);
5300 #endif
5302 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5303 extern float4 __attribute__((const, overloadable))
5304     native_sqrt(float4 v);
5305 #endif
5307 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5308 extern half __attribute__((const, overloadable))
5309     native_sqrt(half v);
5310 #endif
5312 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5313 extern half2 __attribute__((const, overloadable))
5314     native_sqrt(half2 v);
5315 #endif
5317 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5318 extern half3 __attribute__((const, overloadable))
5319     native_sqrt(half3 v);
5320 #endif
5322 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5323 extern half4 __attribute__((const, overloadable))
5324     native_sqrt(half4 v);
5325 #endif
5328  * native_tan: Approximate tangent
5330  * Returns the approximate tangent of an angle measured in radians.
5331  */
5332 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5333 extern float __attribute__((const, overloadable))
5334     native_tan(float v);
5335 #endif
5337 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5338 extern float2 __attribute__((const, overloadable))
5339     native_tan(float2 v);
5340 #endif
5342 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5343 extern float3 __attribute__((const, overloadable))
5344     native_tan(float3 v);
5345 #endif
5347 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5348 extern float4 __attribute__((const, overloadable))
5349     native_tan(float4 v);
5350 #endif
5352 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5353 extern half __attribute__((const, overloadable))
5354     native_tan(half v);
5355 #endif
5357 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5358 extern half2 __attribute__((const, overloadable))
5359     native_tan(half2 v);
5360 #endif
5362 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5363 extern half3 __attribute__((const, overloadable))
5364     native_tan(half3 v);
5365 #endif
5367 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5368 extern half4 __attribute__((const, overloadable))
5369     native_tan(half4 v);
5370 #endif
5373  * native_tanh: Approximate hyperbolic tangent
5375  * Returns the approximate hyperbolic tangent of a value.
5377  * See also tanh().
5378  */
5379 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5380 extern float __attribute__((const, overloadable))
5381     native_tanh(float v);
5382 #endif
5384 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5385 extern float2 __attribute__((const, overloadable))
5386     native_tanh(float2 v);
5387 #endif
5389 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5390 extern float3 __attribute__((const, overloadable))
5391     native_tanh(float3 v);
5392 #endif
5394 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5395 extern float4 __attribute__((const, overloadable))
5396     native_tanh(float4 v);
5397 #endif
5399 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5400 extern half __attribute__((const, overloadable))
5401     native_tanh(half v);
5402 #endif
5404 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5405 extern half2 __attribute__((const, overloadable))
5406     native_tanh(half2 v);
5407 #endif
5409 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5410 extern half3 __attribute__((const, overloadable))
5411     native_tanh(half3 v);
5412 #endif
5414 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5415 extern half4 __attribute__((const, overloadable))
5416     native_tanh(half4 v);
5417 #endif
5420  * native_tanpi: Approximate tangent of a number multiplied by pi
5422  * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
5424  * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
5426  * See also tanpi().
5427  */
5428 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5429 extern float __attribute__((const, overloadable))
5430     native_tanpi(float v);
5431 #endif
5433 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5434 extern float2 __attribute__((const, overloadable))
5435     native_tanpi(float2 v);
5436 #endif
5438 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5439 extern float3 __attribute__((const, overloadable))
5440     native_tanpi(float3 v);
5441 #endif
5443 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
5444 extern float4 __attribute__((const, overloadable))
5445     native_tanpi(float4 v);
5446 #endif
5448 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5449 extern half __attribute__((const, overloadable))
5450     native_tanpi(half v);
5451 #endif
5453 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5454 extern half2 __attribute__((const, overloadable))
5455     native_tanpi(half2 v);
5456 #endif
5458 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5459 extern half3 __attribute__((const, overloadable))
5460     native_tanpi(half3 v);
5461 #endif
5463 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5464 extern half4 __attribute__((const, overloadable))
5465     native_tanpi(half4 v);
5466 #endif
5469  * nextafter: Next floating point number
5471  * Returns the next representable floating point number from v towards target.
5473  * In rs_fp_relaxed mode, a denormalized input value may not yield the next denormalized
5474  * value, as support of denormalized values is optional in relaxed mode.
5475  */
5476 extern float __attribute__((const, overloadable))
5477     nextafter(float v, float target);
5479 extern float2 __attribute__((const, overloadable))
5480     nextafter(float2 v, float2 target);
5482 extern float3 __attribute__((const, overloadable))
5483     nextafter(float3 v, float3 target);
5485 extern float4 __attribute__((const, overloadable))
5486     nextafter(float4 v, float4 target);
5488 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5489 extern half __attribute__((const, overloadable))
5490     nextafter(half v, half target);
5491 #endif
5493 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5494 extern half2 __attribute__((const, overloadable))
5495     nextafter(half2 v, half2 target);
5496 #endif
5498 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5499 extern half3 __attribute__((const, overloadable))
5500     nextafter(half3 v, half3 target);
5501 #endif
5503 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5504 extern half4 __attribute__((const, overloadable))
5505     nextafter(half4 v, half4 target);
5506 #endif
5509  * pow: Base raised to an exponent
5511  * Returns base raised to the power exponent, i.e. base ^ exponent.
5513  * pown() and powr() are similar.  pown() takes an integer exponent. powr() assumes the
5514  * base to be non-negative.
5515  */
5516 extern float __attribute__((const, overloadable))
5517     pow(float base, float exponent);
5519 extern float2 __attribute__((const, overloadable))
5520     pow(float2 base, float2 exponent);
5522 extern float3 __attribute__((const, overloadable))
5523     pow(float3 base, float3 exponent);
5525 extern float4 __attribute__((const, overloadable))
5526     pow(float4 base, float4 exponent);
5528 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5529 extern half __attribute__((const, overloadable))
5530     pow(half base, half exponent);
5531 #endif
5533 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5534 extern half2 __attribute__((const, overloadable))
5535     pow(half2 base, half2 exponent);
5536 #endif
5538 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5539 extern half3 __attribute__((const, overloadable))
5540     pow(half3 base, half3 exponent);
5541 #endif
5543 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5544 extern half4 __attribute__((const, overloadable))
5545     pow(half4 base, half4 exponent);
5546 #endif
5549  * pown: Base raised to an integer exponent
5551  * Returns base raised to the power exponent, i.e. base ^ exponent.
5553  * pow() and powr() are similar.  The both take a float exponent. powr() also assumes the
5554  * base to be non-negative.
5555  */
5556 extern float __attribute__((const, overloadable))
5557     pown(float base, int exponent);
5559 extern float2 __attribute__((const, overloadable))
5560     pown(float2 base, int2 exponent);
5562 extern float3 __attribute__((const, overloadable))
5563     pown(float3 base, int3 exponent);
5565 extern float4 __attribute__((const, overloadable))
5566     pown(float4 base, int4 exponent);
5568 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5569 extern half __attribute__((const, overloadable))
5570     pown(half base, int exponent);
5571 #endif
5573 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5574 extern half2 __attribute__((const, overloadable))
5575     pown(half2 base, int2 exponent);
5576 #endif
5578 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5579 extern half3 __attribute__((const, overloadable))
5580     pown(half3 base, int3 exponent);
5581 #endif
5583 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5584 extern half4 __attribute__((const, overloadable))
5585     pown(half4 base, int4 exponent);
5586 #endif
5589  * powr: Positive base raised to an exponent
5591  * Returns base raised to the power exponent, i.e. base ^ exponent.  base must be >= 0.
5593  * pow() and pown() are similar.  They both make no assumptions about the base.
5594  * pow() takes a float exponent while pown() take an integer.
5596  * See also native_powr().
5597  */
5598 extern float __attribute__((const, overloadable))
5599     powr(float base, float exponent);
5601 extern float2 __attribute__((const, overloadable))
5602     powr(float2 base, float2 exponent);
5604 extern float3 __attribute__((const, overloadable))
5605     powr(float3 base, float3 exponent);
5607 extern float4 __attribute__((const, overloadable))
5608     powr(float4 base, float4 exponent);
5610 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5611 extern half __attribute__((const, overloadable))
5612     powr(half base, half exponent);
5613 #endif
5615 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5616 extern half2 __attribute__((const, overloadable))
5617     powr(half2 base, half2 exponent);
5618 #endif
5620 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5621 extern half3 __attribute__((const, overloadable))
5622     powr(half3 base, half3 exponent);
5623 #endif
5625 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5626 extern half4 __attribute__((const, overloadable))
5627     powr(half4 base, half4 exponent);
5628 #endif
5631  * radians: Converts degrees into radians
5633  * Converts from degrees to radians.
5634  */
5635 extern float __attribute__((const, overloadable))
5636     radians(float v);
5638 extern float2 __attribute__((const, overloadable))
5639     radians(float2 v);
5641 extern float3 __attribute__((const, overloadable))
5642     radians(float3 v);
5644 extern float4 __attribute__((const, overloadable))
5645     radians(float4 v);
5647 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5648 extern half __attribute__((const, overloadable))
5649     radians(half v);
5650 #endif
5652 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5653 extern half2 __attribute__((const, overloadable))
5654     radians(half2 v);
5655 #endif
5657 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5658 extern half3 __attribute__((const, overloadable))
5659     radians(half3 v);
5660 #endif
5662 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5663 extern half4 __attribute__((const, overloadable))
5664     radians(half4 v);
5665 #endif
5668  * remainder: Remainder of a division
5670  * Returns the remainder of (numerator / denominator), where the quotient is rounded towards
5671  * the nearest integer.
5673  * The function fmod() is similar but rounds toward the closest interger.
5674  * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
5675  * while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f).
5676  */
5677 extern float __attribute__((const, overloadable))
5678     remainder(float numerator, float denominator);
5680 extern float2 __attribute__((const, overloadable))
5681     remainder(float2 numerator, float2 denominator);
5683 extern float3 __attribute__((const, overloadable))
5684     remainder(float3 numerator, float3 denominator);
5686 extern float4 __attribute__((const, overloadable))
5687     remainder(float4 numerator, float4 denominator);
5689 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5690 extern half __attribute__((const, overloadable))
5691     remainder(half numerator, half denominator);
5692 #endif
5694 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5695 extern half2 __attribute__((const, overloadable))
5696     remainder(half2 numerator, half2 denominator);
5697 #endif
5699 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5700 extern half3 __attribute__((const, overloadable))
5701     remainder(half3 numerator, half3 denominator);
5702 #endif
5704 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5705 extern half4 __attribute__((const, overloadable))
5706     remainder(half4 numerator, half4 denominator);
5707 #endif
5710  * remquo: Remainder and quotient of a division
5712  * Returns the quotient and the remainder of (numerator / denominator).
5714  * Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
5716  * This function is useful for implementing periodic functions.  The low three bits of the
5717  * quotient gives the quadrant and the remainder the distance within the quadrant.
5718  * For example, an implementation of sin(x) could call remquo(x, PI / 2.f, &quadrant)
5719  * to reduce very large value of x to something within a limited range.
5721  * Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3
5722  * and the sign negative.  It returns 0.5f.
5724  * Parameters:
5725  *   numerator: Numerator.
5726  *   denominator: Denominator.
5727  *   quotient: *quotient will be set to the integer quotient.
5729  * Returns: Remainder, precise only for the low three bits.
5730  */
5731 extern float __attribute__((overloadable))
5732     remquo(float numerator, float denominator, int* quotient);
5734 extern float2 __attribute__((overloadable))
5735     remquo(float2 numerator, float2 denominator, int2* quotient);
5737 extern float3 __attribute__((overloadable))
5738     remquo(float3 numerator, float3 denominator, int3* quotient);
5740 extern float4 __attribute__((overloadable))
5741     remquo(float4 numerator, float4 denominator, int4* quotient);
5743 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5744 extern half __attribute__((overloadable))
5745     remquo(half numerator, half denominator, int* quotient);
5746 #endif
5748 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5749 extern half2 __attribute__((overloadable))
5750     remquo(half2 numerator, half2 denominator, int2* quotient);
5751 #endif
5753 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5754 extern half3 __attribute__((overloadable))
5755     remquo(half3 numerator, half3 denominator, int3* quotient);
5756 #endif
5758 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5759 extern half4 __attribute__((overloadable))
5760     remquo(half4 numerator, half4 denominator, int4* quotient);
5761 #endif
5764  * rint: Round to even
5766  * Rounds to the nearest integral value.
5768  * rint() rounds half values to even.  For example, rint(0.5f) returns 0.f and
5769  * rint(1.5f) returns 2.f.  Similarly, rint(-0.5f) returns -0.f and
5770  * rint(-1.5f) returns -2.f.
5772  * round() is similar but rounds away from zero.  trunc() truncates the decimal fraction.
5773  */
5774 extern float __attribute__((const, overloadable))
5775     rint(float v);
5777 extern float2 __attribute__((const, overloadable))
5778     rint(float2 v);
5780 extern float3 __attribute__((const, overloadable))
5781     rint(float3 v);
5783 extern float4 __attribute__((const, overloadable))
5784     rint(float4 v);
5786 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5787 extern half __attribute__((const, overloadable))
5788     rint(half v);
5789 #endif
5791 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5792 extern half2 __attribute__((const, overloadable))
5793     rint(half2 v);
5794 #endif
5796 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5797 extern half3 __attribute__((const, overloadable))
5798     rint(half3 v);
5799 #endif
5801 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5802 extern half4 __attribute__((const, overloadable))
5803     rint(half4 v);
5804 #endif
5807  * rootn: Nth root
5809  * Compute the Nth root of a value.
5811  * See also native_rootn().
5812  */
5813 extern float __attribute__((const, overloadable))
5814     rootn(float v, int n);
5816 extern float2 __attribute__((const, overloadable))
5817     rootn(float2 v, int2 n);
5819 extern float3 __attribute__((const, overloadable))
5820     rootn(float3 v, int3 n);
5822 extern float4 __attribute__((const, overloadable))
5823     rootn(float4 v, int4 n);
5825 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5826 extern half __attribute__((const, overloadable))
5827     rootn(half v, int n);
5828 #endif
5830 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5831 extern half2 __attribute__((const, overloadable))
5832     rootn(half2 v, int2 n);
5833 #endif
5835 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5836 extern half3 __attribute__((const, overloadable))
5837     rootn(half3 v, int3 n);
5838 #endif
5840 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5841 extern half4 __attribute__((const, overloadable))
5842     rootn(half4 v, int4 n);
5843 #endif
5846  * round: Round away from zero
5848  * Round to the nearest integral value.
5850  * round() rounds half values away from zero.  For example, round(0.5f) returns 1.f
5851  * and round(1.5f) returns 2.f.  Similarly, round(-0.5f) returns -1.f
5852  * and round(-1.5f) returns -2.f.
5854  * rint() is similar but rounds half values toward even.  trunc() truncates the decimal fraction.
5855  */
5856 extern float __attribute__((const, overloadable))
5857     round(float v);
5859 extern float2 __attribute__((const, overloadable))
5860     round(float2 v);
5862 extern float3 __attribute__((const, overloadable))
5863     round(float3 v);
5865 extern float4 __attribute__((const, overloadable))
5866     round(float4 v);
5868 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5869 extern half __attribute__((const, overloadable))
5870     round(half v);
5871 #endif
5873 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5874 extern half2 __attribute__((const, overloadable))
5875     round(half2 v);
5876 #endif
5878 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5879 extern half3 __attribute__((const, overloadable))
5880     round(half3 v);
5881 #endif
5883 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5884 extern half4 __attribute__((const, overloadable))
5885     round(half4 v);
5886 #endif
5889  * rsqrt: Reciprocal of a square root
5891  * Returns (1 / sqrt(v)).
5893  * See also half_rsqrt(), native_rsqrt().
5894  */
5895 extern float __attribute__((const, overloadable))
5896     rsqrt(float v);
5898 extern float2 __attribute__((const, overloadable))
5899     rsqrt(float2 v);
5901 extern float3 __attribute__((const, overloadable))
5902     rsqrt(float3 v);
5904 extern float4 __attribute__((const, overloadable))
5905     rsqrt(float4 v);
5907 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5908 extern half __attribute__((const, overloadable))
5909     rsqrt(half v);
5910 #endif
5912 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5913 extern half2 __attribute__((const, overloadable))
5914     rsqrt(half2 v);
5915 #endif
5917 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5918 extern half3 __attribute__((const, overloadable))
5919     rsqrt(half3 v);
5920 #endif
5922 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5923 extern half4 __attribute__((const, overloadable))
5924     rsqrt(half4 v);
5925 #endif
5928  * sign: Sign of a value
5930  * Returns the sign of a value.
5932  * if (v < 0) return -1.f;
5933  * else if (v > 0) return 1.f;
5934  * else return 0.f;
5935  */
5936 extern float __attribute__((const, overloadable))
5937     sign(float v);
5939 extern float2 __attribute__((const, overloadable))
5940     sign(float2 v);
5942 extern float3 __attribute__((const, overloadable))
5943     sign(float3 v);
5945 extern float4 __attribute__((const, overloadable))
5946     sign(float4 v);
5948 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5949 extern half __attribute__((const, overloadable))
5950     sign(half v);
5951 #endif
5953 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5954 extern half2 __attribute__((const, overloadable))
5955     sign(half2 v);
5956 #endif
5958 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5959 extern half3 __attribute__((const, overloadable))
5960     sign(half3 v);
5961 #endif
5963 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5964 extern half4 __attribute__((const, overloadable))
5965     sign(half4 v);
5966 #endif
5969  * sin: Sine
5971  * Returns the sine of an angle measured in radians.
5973  * See also native_sin().
5974  */
5975 extern float __attribute__((const, overloadable))
5976     sin(float v);
5978 extern float2 __attribute__((const, overloadable))
5979     sin(float2 v);
5981 extern float3 __attribute__((const, overloadable))
5982     sin(float3 v);
5984 extern float4 __attribute__((const, overloadable))
5985     sin(float4 v);
5987 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5988 extern half __attribute__((const, overloadable))
5989     sin(half v);
5990 #endif
5992 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5993 extern half2 __attribute__((const, overloadable))
5994     sin(half2 v);
5995 #endif
5997 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
5998 extern half3 __attribute__((const, overloadable))
5999     sin(half3 v);
6000 #endif
6002 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6003 extern half4 __attribute__((const, overloadable))
6004     sin(half4 v);
6005 #endif
6008  * sincos: Sine and cosine
6010  * Returns the sine and cosine of a value.
6012  * See also native_sincos().
6014  * Parameters:
6015  *   v: Incoming value in radians.
6016  *   cos: *cos will be set to the cosine value.
6018  * Returns: Sine of v.
6019  */
6020 extern float __attribute__((overloadable))
6021     sincos(float v, float* cos);
6023 extern float2 __attribute__((overloadable))
6024     sincos(float2 v, float2* cos);
6026 extern float3 __attribute__((overloadable))
6027     sincos(float3 v, float3* cos);
6029 extern float4 __attribute__((overloadable))
6030     sincos(float4 v, float4* cos);
6032 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6033 extern half __attribute__((overloadable))
6034     sincos(half v, half* cos);
6035 #endif
6037 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6038 extern half2 __attribute__((overloadable))
6039     sincos(half2 v, half2* cos);
6040 #endif
6042 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6043 extern half3 __attribute__((overloadable))
6044     sincos(half3 v, half3* cos);
6045 #endif
6047 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6048 extern half4 __attribute__((overloadable))
6049     sincos(half4 v, half4* cos);
6050 #endif
6053  * sinh: Hyperbolic sine
6055  * Returns the hyperbolic sine of v, where v is measured in radians.
6057  * See also native_sinh().
6058  */
6059 extern float __attribute__((const, overloadable))
6060     sinh(float v);
6062 extern float2 __attribute__((const, overloadable))
6063     sinh(float2 v);
6065 extern float3 __attribute__((const, overloadable))
6066     sinh(float3 v);
6068 extern float4 __attribute__((const, overloadable))
6069     sinh(float4 v);
6071 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6072 extern half __attribute__((const, overloadable))
6073     sinh(half v);
6074 #endif
6076 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6077 extern half2 __attribute__((const, overloadable))
6078     sinh(half2 v);
6079 #endif
6081 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6082 extern half3 __attribute__((const, overloadable))
6083     sinh(half3 v);
6084 #endif
6086 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6087 extern half4 __attribute__((const, overloadable))
6088     sinh(half4 v);
6089 #endif
6092  * sinpi: Sine of a number multiplied by pi
6094  * Returns the sine of (v * pi), where (v * pi) is measured in radians.
6096  * To get the sine of a value measured in degrees, call sinpi(v / 180.f).
6098  * See also native_sinpi().
6099  */
6100 extern float __attribute__((const, overloadable))
6101     sinpi(float v);
6103 extern float2 __attribute__((const, overloadable))
6104     sinpi(float2 v);
6106 extern float3 __attribute__((const, overloadable))
6107     sinpi(float3 v);
6109 extern float4 __attribute__((const, overloadable))
6110     sinpi(float4 v);
6112 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6113 extern half __attribute__((const, overloadable))
6114     sinpi(half v);
6115 #endif
6117 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6118 extern half2 __attribute__((const, overloadable))
6119     sinpi(half2 v);
6120 #endif
6122 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6123 extern half3 __attribute__((const, overloadable))
6124     sinpi(half3 v);
6125 #endif
6127 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6128 extern half4 __attribute__((const, overloadable))
6129     sinpi(half4 v);
6130 #endif
6133  * sqrt: Square root
6135  * Returns the square root of a value.
6137  * See also half_sqrt(), native_sqrt().
6138  */
6139 extern float __attribute__((const, overloadable))
6140     sqrt(float v);
6142 extern float2 __attribute__((const, overloadable))
6143     sqrt(float2 v);
6145 extern float3 __attribute__((const, overloadable))
6146     sqrt(float3 v);
6148 extern float4 __attribute__((const, overloadable))
6149     sqrt(float4 v);
6151 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6152 extern half __attribute__((const, overloadable))
6153     sqrt(half v);
6154 #endif
6156 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6157 extern half2 __attribute__((const, overloadable))
6158     sqrt(half2 v);
6159 #endif
6161 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6162 extern half3 __attribute__((const, overloadable))
6163     sqrt(half3 v);
6164 #endif
6166 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6167 extern half4 __attribute__((const, overloadable))
6168     sqrt(half4 v);
6169 #endif
6172  * step: 0 if less than a value, 0 otherwise
6174  * Returns 0.f if v < edge, 1.f otherwise.
6176  * This can be useful to create conditional computations without using loops and branching
6177  * instructions.  For example, instead of computing (a[i] < b[i]) ? 0.f : atan2(a[i], b[i])
6178  * for the corresponding elements of a vector, you could instead use step(a, b) * atan2(a, b).
6179  */
6180 extern float __attribute__((const, overloadable))
6181     step(float edge, float v);
6183 extern float2 __attribute__((const, overloadable))
6184     step(float2 edge, float2 v);
6186 extern float3 __attribute__((const, overloadable))
6187     step(float3 edge, float3 v);
6189 extern float4 __attribute__((const, overloadable))
6190     step(float4 edge, float4 v);
6192 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6193 extern half __attribute__((const, overloadable))
6194     step(half edge, half v);
6195 #endif
6197 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6198 extern half2 __attribute__((const, overloadable))
6199     step(half2 edge, half2 v);
6200 #endif
6202 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6203 extern half3 __attribute__((const, overloadable))
6204     step(half3 edge, half3 v);
6205 #endif
6207 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6208 extern half4 __attribute__((const, overloadable))
6209     step(half4 edge, half4 v);
6210 #endif
6212 extern float2 __attribute__((const, overloadable))
6213     step(float2 edge, float v);
6215 extern float3 __attribute__((const, overloadable))
6216     step(float3 edge, float v);
6218 extern float4 __attribute__((const, overloadable))
6219     step(float4 edge, float v);
6221 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6222 extern half2 __attribute__((const, overloadable))
6223     step(half2 edge, half v);
6224 #endif
6226 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6227 extern half3 __attribute__((const, overloadable))
6228     step(half3 edge, half v);
6229 #endif
6231 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6232 extern half4 __attribute__((const, overloadable))
6233     step(half4 edge, half v);
6234 #endif
6236 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
6237 extern float2 __attribute__((const, overloadable))
6238     step(float edge, float2 v);
6239 #endif
6241 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
6242 extern float3 __attribute__((const, overloadable))
6243     step(float edge, float3 v);
6244 #endif
6246 #if (defined(RS_VERSION) && (RS_VERSION >= 21))
6247 extern float4 __attribute__((const, overloadable))
6248     step(float edge, float4 v);
6249 #endif
6251 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6252 extern half2 __attribute__((const, overloadable))
6253     step(half edge, half2 v);
6254 #endif
6256 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6257 extern half3 __attribute__((const, overloadable))
6258     step(half edge, half3 v);
6259 #endif
6261 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6262 extern half4 __attribute__((const, overloadable))
6263     step(half edge, half4 v);
6264 #endif
6267  * tan: Tangent
6269  * Returns the tangent of an angle measured in radians.
6271  * See also native_tan().
6272  */
6273 extern float __attribute__((const, overloadable))
6274     tan(float v);
6276 extern float2 __attribute__((const, overloadable))
6277     tan(float2 v);
6279 extern float3 __attribute__((const, overloadable))
6280     tan(float3 v);
6282 extern float4 __attribute__((const, overloadable))
6283     tan(float4 v);
6285 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6286 extern half __attribute__((const, overloadable))
6287     tan(half v);
6288 #endif
6290 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6291 extern half2 __attribute__((const, overloadable))
6292     tan(half2 v);
6293 #endif
6295 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6296 extern half3 __attribute__((const, overloadable))
6297     tan(half3 v);
6298 #endif
6300 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6301 extern half4 __attribute__((const, overloadable))
6302     tan(half4 v);
6303 #endif
6306  * tanh: Hyperbolic tangent
6308  * Returns the hyperbolic tangent of a value.
6310  * See also native_tanh().
6311  */
6312 extern float __attribute__((const, overloadable))
6313     tanh(float v);
6315 extern float2 __attribute__((const, overloadable))
6316     tanh(float2 v);
6318 extern float3 __attribute__((const, overloadable))
6319     tanh(float3 v);
6321 extern float4 __attribute__((const, overloadable))
6322     tanh(float4 v);
6324 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6325 extern half __attribute__((const, overloadable))
6326     tanh(half v);
6327 #endif
6329 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6330 extern half2 __attribute__((const, overloadable))
6331     tanh(half2 v);
6332 #endif
6334 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6335 extern half3 __attribute__((const, overloadable))
6336     tanh(half3 v);
6337 #endif
6339 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6340 extern half4 __attribute__((const, overloadable))
6341     tanh(half4 v);
6342 #endif
6345  * tanpi: Tangent of a number multiplied by pi
6347  * Returns the tangent of (v * pi), where (v * pi) is measured in radians.
6349  * To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
6351  * See also native_tanpi().
6352  */
6353 extern float __attribute__((const, overloadable))
6354     tanpi(float v);
6356 extern float2 __attribute__((const, overloadable))
6357     tanpi(float2 v);
6359 extern float3 __attribute__((const, overloadable))
6360     tanpi(float3 v);
6362 extern float4 __attribute__((const, overloadable))
6363     tanpi(float4 v);
6365 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6366 extern half __attribute__((const, overloadable))
6367     tanpi(half v);
6368 #endif
6370 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6371 extern half2 __attribute__((const, overloadable))
6372     tanpi(half2 v);
6373 #endif
6375 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6376 extern half3 __attribute__((const, overloadable))
6377     tanpi(half3 v);
6378 #endif
6380 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6381 extern half4 __attribute__((const, overloadable))
6382     tanpi(half4 v);
6383 #endif
6386  * tgamma: Gamma function
6388  * Returns the gamma function of a value.
6390  * See also lgamma().
6391  */
6392 extern float __attribute__((const, overloadable))
6393     tgamma(float v);
6395 extern float2 __attribute__((const, overloadable))
6396     tgamma(float2 v);
6398 extern float3 __attribute__((const, overloadable))
6399     tgamma(float3 v);
6401 extern float4 __attribute__((const, overloadable))
6402     tgamma(float4 v);
6404 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6405 extern half __attribute__((const, overloadable))
6406     tgamma(half v);
6407 #endif
6409 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6410 extern half2 __attribute__((const, overloadable))
6411     tgamma(half2 v);
6412 #endif
6414 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6415 extern half3 __attribute__((const, overloadable))
6416     tgamma(half3 v);
6417 #endif
6419 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6420 extern half4 __attribute__((const, overloadable))
6421     tgamma(half4 v);
6422 #endif
6425  * trunc: Truncates a floating point
6427  * Rounds to integral using truncation.
6429  * For example, trunc(1.7f) returns 1.f and trunc(-1.7f) returns -1.f.
6431  * See rint() and round() for other rounding options.
6432  */
6433 extern float __attribute__((const, overloadable))
6434     trunc(float v);
6436 extern float2 __attribute__((const, overloadable))
6437     trunc(float2 v);
6439 extern float3 __attribute__((const, overloadable))
6440     trunc(float3 v);
6442 extern float4 __attribute__((const, overloadable))
6443     trunc(float4 v);
6445 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6446 extern half __attribute__((const, overloadable))
6447     trunc(half v);
6448 #endif
6450 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6451 extern half2 __attribute__((const, overloadable))
6452     trunc(half2 v);
6453 #endif
6455 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6456 extern half3 __attribute__((const, overloadable))
6457     trunc(half3 v);
6458 #endif
6460 #if (defined(RS_VERSION) && (RS_VERSION >= 24))
6461 extern half4 __attribute__((const, overloadable))
6462     trunc(half4 v);
6463 #endif
6466  * rsClamp: Restrain a value to a range
6468  * DEPRECATED.  Do not use.
6470  * Clamp a value between low and high.
6472  * Parameters:
6473  *   amount: Value to clamp.
6474  *   low: Lower bound.
6475  *   high: Upper bound.
6476  */
6477 extern char __attribute__((const, overloadable
6478 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6479 , deprecated("Use clamp() instead.")
6480 #endif
6482     rsClamp(char amount, char low, char high);
6484 extern uchar __attribute__((const, overloadable
6485 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6486 , deprecated("Use clamp() instead.")
6487 #endif
6489     rsClamp(uchar amount, uchar low, uchar high);
6491 extern short __attribute__((const, overloadable
6492 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6493 , deprecated("Use clamp() instead.")
6494 #endif
6496     rsClamp(short amount, short low, short high);
6498 extern ushort __attribute__((const, overloadable
6499 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6500 , deprecated("Use clamp() instead.")
6501 #endif
6503     rsClamp(ushort amount, ushort low, ushort high);
6505 extern int __attribute__((const, overloadable
6506 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6507 , deprecated("Use clamp() instead.")
6508 #endif
6510     rsClamp(int amount, int low, int high);
6512 extern uint __attribute__((const, overloadable
6513 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6514 , deprecated("Use clamp() instead.")
6515 #endif
6517     rsClamp(uint amount, uint low, uint high);
6520  * rsFrac: Returns the fractional part of a float
6522  * DEPRECATED.  Do not use.
6524  * Returns the fractional part of a float
6525  */
6526 extern float __attribute__((const, overloadable
6527 #if (defined(RS_VERSION) && (RS_VERSION >= 22))
6528 , deprecated("Use fract() instead.")
6529 #endif
6531     rsFrac(float v);
6534  * rsRand: Pseudo-random number
6536  * Return a random value between 0 (or min_value) and max_malue.
6537  */
6538 extern int __attribute__((overloadable))
6539     rsRand(int max_value);
6541 extern int __attribute__((overloadable))
6542     rsRand(int min_value, int max_value);
6544 extern float __attribute__((overloadable))
6545     rsRand(float max_value);
6547 extern float __attribute__((overloadable))
6548     rsRand(float min_value, float max_value);
6550 #endif // RENDERSCRIPT_RS_MATH_RSH