1573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams/* 2573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * Copyright (C) 2011 The Android Open Source Project 3573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * 4573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * you may not use this file except in compliance with the License. 6573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * You may obtain a copy of the License at 7573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * 8573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * 10573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * Unless required by applicable law or agreed to in writing, software 11573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * See the License for the specific language governing permissions and 14573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * limitations under the License. 15573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams */ 16573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams 17573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams/** @file rs_cl.rsh 18e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * \brief Basic math functions 19573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * 20573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams * 21573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams */ 22573fa6207494d16ac4ef73b48a3b0a77157daff0Jason Sams 2396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#ifndef __RS_CL_RSH__ 2496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define __RS_CL_RSH__ 2596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 2696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams// Conversions 27a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define CVT_FUNC_2(typeout, typein) \ 2826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##2 __attribute__((overloadable)) \ 292fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao convert_##typeout##2(typein##2 v); \ 3026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##3 __attribute__((overloadable)) \ 312fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao convert_##typeout##3(typein##3 v); \ 3226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##4 __attribute__((overloadable)) \ 332fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao convert_##typeout##4(typein##4 v); 342fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 35a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 36a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \ 37a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, char) \ 38a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, ushort) \ 39a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, short) \ 40a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, uint) \ 41a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, int) \ 42a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, float) 4396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 4496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(char) 4596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uchar) 4696d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(short) 4796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(ushort) 4896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(int) 4996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uint) 5096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(float) 5196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 52d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// Float ops, 6.11.2 53d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 54a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN(fnc) \ 5526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v); \ 5626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v); \ 5726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v); 58a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 59a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_FN(fnc) \ 6026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME int2 __attribute__((overloadable)) fnc(float2 v); \ 6126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME int3 __attribute__((overloadable)) fnc(float3 v); \ 6226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME int4 __attribute__((overloadable)) fnc(float4 v); 63a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 64a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN(fnc) \ 6526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2); \ 6626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2); \ 6726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2); 68a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 69a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_F(fnc) \ 7026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float v2); \ 7126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float v2); \ 7226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float v2); 73a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 74a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_IN(fnc) \ 7526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2); \ 7626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 v2); \ 7726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 v2); \ 78a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 79a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_I(fnc) \ 8026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int v2); \ 8126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int v2); \ 8226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int v2); 83833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 84a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_PFN(fnc) \ 8526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) \ 862fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float2 v1, float2 *v2); \ 8726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) \ 882fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float3 v1, float3 *v2); \ 8926e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) \ 902fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float4 v1, float4 *v2); 91a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 92a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_PIN(fnc) \ 9326e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 *v2); \ 9426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 *v2); \ 9526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 *v2); 96a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 97a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN_FN(fnc) \ 9826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) \ 992fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float2 v1, float2 v2, float2 v3); \ 10026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) \ 1012fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float3 v1, float3 v2, float3 v3); \ 10226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) \ 1032fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float4 v1, float4 v2, float4 v3); 104a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 105a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN_PIN(fnc) \ 10626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) \ 1072fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float2 v1, float2 v2, int2 *v3); \ 10826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) \ 1092fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float3 v1, float3 v2, int3 *v3); \ 11026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) \ 1112fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(float4 v1, float4 v2, int4 *v3); 112833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 113833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 114e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 115e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse cosine. 116e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 117e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 118e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 119d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acos(float); 120833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acos) 121d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 122e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 123e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse hyperbolic cosine. 124e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 125e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 126e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 127d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acosh(float); 128833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acosh) 12996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 130e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 131e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse cosine divided by PI. 132e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 133e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 134e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 13526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) acospi(float v); 136833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acospi) 137d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 138e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 139e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse sine. 140e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 141e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 142e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 143d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asin(float); 144833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asin) 145d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 146e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 147e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse hyperbolic sine. 148e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 149e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 150e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 151d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asinh(float); 152833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asinh) 15396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 1542fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 155e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 156e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse sine divided by PI. 157e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 158e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 159e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 16026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) asinpi(float v); 161833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asinpi) 162d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 163e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 164e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse tangent. 165e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 166e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 167e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 168d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atan(float); 169833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atan) 170d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 171e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 172e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse tangent of y / x. 173e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 174e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. Both arguments must be of the same 175e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * type. 176e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 177e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y 178e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x 179e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 180e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) atan2(float y, float x); 181833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(atan2) 182d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 183e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 184e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse hyperbolic tangent. 185e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 186e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 187e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 188d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atanh(float); 189833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atanh) 19096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 191e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 192e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse tangent divided by PI. 193e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 194e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4 195e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 19626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) atanpi(float v); 197833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atanpi) 19896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 199e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 200e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the inverse tangent of y / x, divided by PI. 201e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 202e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. Both arguments must be of the same 203e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * type. 204e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 205e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y 206e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x 207e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 20826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) atan2pi(float y, float x); 209833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(atan2pi) 210d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 211e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams 212e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 213e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the cube root. 214e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 215e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 216e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 217d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cbrt(float); 218833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cbrt) 219d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 220e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 221e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the smallest integer not less than a value. 222e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 223e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 224e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 225d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) ceil(float); 226833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(ceil) 227d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 228e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 229e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Copy the sign bit from y to x. 230e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 231e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. Both arguments must be of the same 232e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * type. 233e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 234e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x 235e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y 236e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 237e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) copysign(float x, float y); 238833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(copysign) 239d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 240e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 241e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the cosine. 242e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 243e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 244e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 245d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cos(float); 246833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cos) 247d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 248e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 249e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the hypebolic cosine. 250e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 251e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 252e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 253d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cosh(float); 254833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cosh) 25596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 256e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 257e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the cosine of the value * PI. 258e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 259e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 260e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 26126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) cospi(float v); 262833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cospi) 263d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 264e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 265e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the complementary error function. 266e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 267e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 268e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 269d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erfc(float); 270833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(erfc) 271d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 272e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 273e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the error function. 274e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 275e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 276e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 277d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erf(float); 278833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(erf) 279d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 280e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 281e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return e ^ value. 282e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 283e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 284e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 285d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp(float); 286833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp) 287d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 288e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 289e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return 2 ^ value. 290e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 291e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 292e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 293d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp2(float); 294833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp2) 29596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 296e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 297e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return x ^ y. 298e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 299e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. Both arguments must be of the same 300e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * type. 301e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 302e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) pow(float x, float y); 303e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN_FN(pow) 3042fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 305e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 306e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return 10 ^ value. 307e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 308e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 309e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 31026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) exp10(float v); 311833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp10) 312d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 313e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 314e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (e ^ value) - 1. 315e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 316e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 317e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 318d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) expm1(float); 319833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(expm1) 320d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 321e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 322e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the absolute value of a value. 323e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 324e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 325e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 326d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fabs(float); 327833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(fabs) 328d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 329e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 330e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the positive difference between two values. 331e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 332e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. Both arguments must be of the same 333e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * type. 334e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 335d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fdim(float, float); 336833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fdim) 337d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 338e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 339e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the smallest integer not greater than a value. 340e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 341e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 342e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 343d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) floor(float); 344833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(floor) 345d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 346e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 347e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return a*b + c. 348e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 349e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 350e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 351e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) fma(float a, float b, float c); 352833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_FN(fma) 353d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 354e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 355e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (x < y ? y : x) 356e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 357e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 358e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x: may be float, float2, float3, float4 359e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y: may be float or vector. If vector must match type of x. 360e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 361e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) fmax(float x, float y); 362833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmax); 363833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(fmax); 364d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 365e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 366e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (x > y ? y : x) 367e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 368e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x: may be float, float2, float3, float4 369e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y: may be float or vector. If vector must match type of x. 370e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 371e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) fmin(float x, float y); 372833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmin); 373833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(fmin); 374d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 375e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 376e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the remainder from x / y 377e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 378e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 379e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 380e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) fmod(float x, float y); 381833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmod) 38296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 3832fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 384e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 385e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return fractional part of v 386e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 387e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param iptr iptr[0] will be set to the floor of the input value. 388e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 389e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 39026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) fract(float v, float *iptr); 391a16a98145347187e9e92f400e72345354b4cbccfStephen HinesFN_FUNC_FN_PFN(fract) 392d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 393e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 394e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the mantissa and place the exponent into iptr[0] 395e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 396e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v Supports float, float2, float3, float4. 397e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param iptr Must have the same vector size as v. 398e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 399e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) frexp(float v, int *iptr); 400833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PIN(frexp) 401d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 402e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 403e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return sqrt(x*x + y*y) 404e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 405e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports float, float2, float3, float4. 406e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 407e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) hypot(float x, float y); 408833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(hypot) 409d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 410e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 411e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the integer exponent of a value 412e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 413e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 414e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 415d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern int __attribute__((overloadable)) ilogb(float); 416833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_FN(ilogb) 417d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 418e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 419e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (x * 2^y) 420e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 421e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x Supports 1,2,3,4 components 422e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y Supports single component or matching vector. 423e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 424e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) ldexp(float x, int y); 425833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_IN(ldexp) 426833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_I(ldexp) 427d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 428e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 429e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the log gamma 430e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 431e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 432e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 433d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) lgamma(float); 434833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(lgamma) 435e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams 436e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 437e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the log gamma and sign 438e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 439e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x Supports 1,2,3,4 components 440e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param y Supports matching vector. 441e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 442e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) lgamma(float x, int* y); 443833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PIN(lgamma) 444d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 445e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 446e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the natural logarithm 447e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 448e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 449e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 450d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log(float); 451833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log) 45296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 453e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 454e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the base 10 logarithm 455e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 456e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 457e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 458d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log10(float); 459833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log10) 46096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 461e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 462e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the base 2 logarithm 463e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 464e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 465e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 46626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) log2(float v); 467833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log2) 468d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 469e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 470e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the natural logarithm of (v + 1.0f) 471e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 472e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 473e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 474e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) log1p(float v); 475833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log1p) 476d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 477e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 478e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Compute the exponent of the value. 479e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 480e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 481e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 482d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) logb(float); 483833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(logb) 484d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 485e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 486e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Compute (a * b) + c 487e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 488e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 489e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 490e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) mad(float a, float b, float c); 491833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_FN(mad) 492d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 493e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 494e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the integral and fractional components of a number 495e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 496e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 497e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param x Source value 498e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param iret iret[0] will be set to the integral portion of the number. 499e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @return The floating point portion of the value. 500e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 501e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) modf(float x, float *iret); 502833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PFN(modf); 503d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 50496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams//extern float __attribute__((overloadable)) nan(uint); 505d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 506e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 507e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the next floating point number from x towards y. 508e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 509e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 510e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 511e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) nextafter(float x, float y); 512833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(nextafter) 51396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 514e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 515e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (v ^ p). 516e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 517e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 518e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 51926e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) pown(float v, int p); 520e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN_IN(pown) 5212fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 522e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 523e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (v ^ p). 524e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v must be greater than 0. 525e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 526e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 527e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 52826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) powr(float v, float p); 529e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN_FN(powr) 530d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 531e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 532e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return round x/y to the nearest integer then compute the remander. 533e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 534e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 535e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 536e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) remainder(float x, float y); 537833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(remainder) 538d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 539e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams// document once we know the precision of bionic 540682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float __attribute__((overloadable)) remquo(float, float, int *); 541833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_PIN(remquo) 542d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 543e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 544e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Round to the nearest integral value. 545e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 546e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 547e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 548d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) rint(float); 549833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(rint) 55096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 551e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 552e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Compute the Nth root of a value. 553e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 554e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 555e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 556e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams_RS_RUNTIME float __attribute__((overloadable)) rootn(float v, int n); 557e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN_IN(rootn) 5582fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 559e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 560e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Round to the nearest integral value. Half values are rounded away from zero. 561e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 562e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 563e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 564d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) round(float); 565833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(round) 56696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 567e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 568e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the square root of a value. 569e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 570e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 571e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 57296d719c91708fda5abc0442fcf6d275584d2cad6Jason Samsextern float __attribute__((overloadable)) sqrt(float); 573e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN(sqrt) 574e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams 575e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 576e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return (1 / sqrt(value)). 577e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 578e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v The incoming value in radians 579e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 580e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 58126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) rsqrt(float v); 582833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(rsqrt) 583d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 584e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 585e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the sine of a value specified in radians. 586e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 587e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v The incoming value in radians 588e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 589e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 590e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) sin(float v); 591833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sin) 59296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 593e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 594e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the sine and cosine of a value. 595e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 596e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @return sine 597e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v The incoming value in radians 598e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param *cosptr cosptr[0] will be set to the cosine value. 599e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 600e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 601e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 60226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) sincos(float v, float *cosptr); 603e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason SamsFN_FUNC_FN_PFN(sincos); 604d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 605e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 606e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the hyperbolic sine of a value specified in radians. 607e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 608e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 609e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 610d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) sinh(float); 611833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sinh) 612d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 613e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 614e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the sin(v * PI). 615e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 616e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 617e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 61826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) sinpi(float v); 619833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sinpi) 62096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 621e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 622e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the tangent of a value. 623e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 624e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 625e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v The incoming value in radians 626e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 627e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Samsextern float __attribute__((overloadable)) tan(float v); 628833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tan) 629d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 630e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 631e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return the hyperbolic tangent of a value. 632e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 633e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 634e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * @param v The incoming value in radians 635e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 636d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tanh(float); 637833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tanh) 63896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 639e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 640e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Return tan(v * PI) 641e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 642e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 643e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 64426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) tanpi(float v); 645833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tanpi) 646d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 647e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 648e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Compute the gamma function of a value. 649e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 650e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 651e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 652d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tgamma(float); 653833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tgamma) 654d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 655e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams/** 656e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Round to integral using truncation. 657e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * 658e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams * Supports 1,2,3,4 components 659e79f7687dcd9e8fd872191703042e9a3f8d3afb6Jason Sams */ 660d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) trunc(float); 661833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(trunc) 662d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 663d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 664a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define XN_FUNC_YN(typeout, fnc, typein) \ 665a16a98145347187e9e92f400e72345354b4cbccfStephen Hinesextern typeout __attribute__((overloadable)) fnc(typein); \ 66626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##2 __attribute__((overloadable)) fnc(typein##2 v); \ 66726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##3 __attribute__((overloadable)) fnc(typein##3 v); \ 66826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME typeout##4 __attribute__((overloadable)) fnc(typein##4 v); 669a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 670a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define UIN_FUNC_IN(fnc) \ 671833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uchar, fnc, char) \ 672833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(ushort, fnc, short) \ 673833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uint, fnc, int) 674a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 675a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_IN(fnc) \ 676833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uchar, fnc, uchar) \ 677833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(char, fnc, char) \ 678833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(ushort, fnc, ushort) \ 679833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(short, fnc, short) \ 680833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uint, fnc, uint) \ 681833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(int, fnc, int) 682a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 6832fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 684a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define XN_FUNC_XN_XN_BODY(type, fnc, body) \ 68526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME type __attribute__((overloadable)) \ 6862fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(type v1, type v2); \ 68726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME type##2 __attribute__((overloadable)) \ 6882fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(type##2 v1, type##2 v2); \ 68926e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME type##3 __attribute__((overloadable)) \ 6902fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(type##3 v1, type##3 v2); \ 69126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME type##4 __attribute__((overloadable)) \ 6922fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao fnc(type##4 v1, type##4 v2); 693a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 694a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_IN_IN_BODY(fnc, body) \ 695833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(uchar, fnc, body) \ 696833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(char, fnc, body) \ 697833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(ushort, fnc, body) \ 698833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(short, fnc, body) \ 699833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(uint, fnc, body) \ 700833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(int, fnc, body) \ 701833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(float, fnc, body) 702a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 703833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesUIN_FUNC_IN(abs) 704833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN(clz) 705a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 7062f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7072f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Return the minimum of two values. 7082f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7092f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. 7102f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 711833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN_IN_BODY(min, (v1 < v2 ? v1 : v2)) 712833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(min) 713a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 7142f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7152f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Return the maximum of two values. 7162f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7172f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. 7182f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 719833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN_IN_BODY(max, (v1 > v2 ? v1 : v2)) 720833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(max) 721d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 7222f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7232f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Clamp a value to a specified high and low bound. 7242f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7252f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * @param amount value to be clamped. Supports 1,2,3,4 components 7262f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * @param low Lower bound, must be scalar or matching vector. 7272f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * @param high High bound, must match type of low 7282f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 72926e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) clamp(float amount, float low, float high); 73026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) clamp(float2 amount, float2 low, float2 high); 73126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) clamp(float3 amount, float3 low, float3 high); 73226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) clamp(float4 amount, float4 low, float4 high); 73326e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) clamp(float2 amount, float low, float high); 73426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) clamp(float3 amount, float low, float high); 73526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) clamp(float4 amount, float low, float high); 7362fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 7372f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7382f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Convert from radians to degrees. 7392f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7402f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 7412f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 74226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) degrees(float radians); 743833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(degrees) 74496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 7452f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7462f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * return start + ((stop - start) * amount); 7472f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7482f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 7492f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 75026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) mix(float start, float stop, float amount); 75126e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float2 amount); 75226e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float3 amount); 75326e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float4 amount); 75426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float amount); 75526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float amount); 75626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float amount); 7572fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 7582f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7592f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Convert from degrees to radians. 7602f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7612f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 7622f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 76326e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) radians(float degrees); 764833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(radians) 76596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 7662f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7672f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * if (v < edge) 7682f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * return 0.f; 7692f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * else 7702f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * return 1.f; 7712f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7722f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 7732f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 77426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) step(float edge, float v); 77526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) step(float2 edge, float2 v); 77626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) step(float3 edge, float3 v); 77726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) step(float4 edge, float4 v); 77826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) step(float2 edge, float v); 77926e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) step(float3 edge, float v); 78026e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) step(float4 edge, float v); 781d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 7822f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams// not implemented 783d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) smoothstep(float, float, float); 784d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float2, float2, float2); 785d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float3, float3, float3); 786d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float4, float4, float4); 787d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float, float, float2); 788d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float, float, float3); 789d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float, float, float4); 790d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 7912f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 7922f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * if (v < 0) return -1.f; 7932f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * else if (v > 0) return 1.f; 7942f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * else return 0.f; 7952f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 7962f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 7972f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 79826e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) sign(float v); 799833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sign) 800d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 8012f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 8022f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Compute the cross product of two vectors. 8032f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 8042f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 3,4 components 8052f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 80626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) cross(float3 lhs, float3 rhs); 80726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) cross(float4 lhs, float4 rhs); 8082fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 8092f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 8102f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Compute the dot product of two vectors. 8112f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 8122f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 8132f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 81426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) dot(float lhs, float rhs); 81526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) dot(float2 lhs, float2 rhs); 81626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) dot(float3 lhs, float3 rhs); 81726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) dot(float4 lhs, float4 rhs); 8182fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 8192f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 8202f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Compute the length of a vector. 8212f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 8222f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 8232f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 82426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) length(float v); 82526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) length(float2 v); 82626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) length(float3 v); 82726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) length(float4 v); 8282fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 8292f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 8302f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Compute the distance between two points. 8312f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 8322f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 8332f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 83426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) distance(float lhs, float rhs); 83526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) distance(float2 lhs, float2 rhs); 83626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) distance(float3 lhs, float3 rhs); 83726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) distance(float4 lhs, float4 rhs); 8382fd2c894e9d16c4833a3356d5ecc3a6790a975a0Shih-wei Liao 8392f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams/** 8402f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Normalize a vector. 8412f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * 8422f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams * Supports 1,2,3,4 components 8432f87f36e84bfd5d964f4e086daa9d0c5d0d9e632Jason Sams */ 84426e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) normalize(float v); 84526e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) normalize(float2 v); 84626e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) normalize(float3 v); 84726e5ff8a67ec72bbee7ebc102a2535d84c5a2213Shih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) normalize(float4 v); 84896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 849682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC 850682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC_2 851833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN 852833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_FN 853833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN 854833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_F 855833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_IN 856833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_I 857833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_PFN 858833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_PIN 859833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN_FN 860833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN_PIN 861833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef XN_FUNC_YN 862833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef UIN_FUNC_IN 863833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_IN 864833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef XN_FUNC_XN_XN_BODY 865833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_IN_IN_BODY 86696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 86796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#endif 868