blob: 1fa2769eef8f32a5118982c77a955dbde331cb71 [file]
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#if __CLC_FPSIZE == 32
_CLC_OVERLOAD _CLC_DEF __CLC_FLOATN __clc_atanpi(__CLC_FLOATN x) {
__CLC_FLOATN v = __clc_fabs(x);
__CLC_INTN g = v > 1.0f;
__CLC_FLOATN vi = __clc_recip_fast(v);
v = g ? vi : v;
__CLC_FLOATN a = __clc_atanpi_reduced(v);
__CLC_FLOATN y = 0.5f - a;
a = g ? y : a;
return __clc_copysign(a, x);
}
#elif __CLC_FPSIZE == 64
_CLC_OVERLOAD _CLC_DEF __CLC_DOUBLEN __clc_atanpi(__CLC_DOUBLEN x) {
__CLC_DOUBLEN v = __clc_fabs(x);
__CLC_LONGN g = v > 1.0;
v = g ? (1.0 / v) : v;
__CLC_DOUBLEN a = __clc_atanpi_reduced(v);
__CLC_DOUBLEN y = 0.5 - a;
a = g ? y : a;
return __clc_copysign(a, x);
}
#elif __CLC_FPSIZE == 16
_CLC_OVERLOAD _CLC_DEF __CLC_HALFN __clc_atanpi(__CLC_HALFN x) {
__CLC_HALFN v = __clc_fabs(x);
__CLC_SHORTN g = v > 1.0h;
__CLC_HALFN vi = __clc_recip_fast(v);
v = g ? vi : v;
__CLC_HALFN a = __clc_atanpi_reduced(v);
__CLC_HALFN y = 0.5h - a;
a = g ? y : a;
return __clc_copysign(a, x);
}
#endif