1/*========================== begin_copyright_notice ============================
2
3Copyright (C) 2017-2021 Intel Corporation
4
5SPDX-License-Identifier: MIT
6
7============================= end_copyright_notice ===========================*/
8
9#include "../include/BiF_Definitions.cl"
10#include "../../Headers/spirv.h"
11
12INLINE float SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _f32, )(float p ){
13    return SPIRV_OCL_BUILTIN(normalize, _f32, )(p);
14}
15
16INLINE float2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v2f32, )(float2 p ){
17    float l2 = SPIRV_BUILTIN(Dot, _v2f32_v2f32, )( p, p );
18    float2 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );;
19    return l2 == 0.0f ? p : n;
20}
21
22INLINE float3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v3f32, )(float3 p ){
23    float l2 = SPIRV_BUILTIN(Dot, _v3f32_v3f32, )( p, p );
24    float3 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );;
25    return l2 == 0.0f ? p : n;
26}
27
28INLINE float4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v4f32, )(float4 p ){
29    float l2 = SPIRV_BUILTIN(Dot, _v4f32_v4f32, )( p, p );
30    float4 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );;
31    return l2 == 0.0f ? p : n;
32}
33