diff --git a/libclc/clc/lib/generic/common/clc_degrees.cl b/libclc/clc/lib/generic/common/clc_degrees.cl index 79b97f0ca75b0..9c48f50f3518d 100644 --- a/libclc/clc/lib/generic/common/clc_degrees.cl +++ b/libclc/clc/lib/generic/common/clc_degrees.cl @@ -6,36 +6,8 @@ // //===----------------------------------------------------------------------===// +#include #include -#define DEGREES_SINGLE_DEF(TYPE, LITERAL) \ - _CLC_OVERLOAD _CLC_DEF TYPE __clc_degrees(TYPE radians) { \ - return (TYPE)LITERAL * radians; \ - } - -#define DEGREES_DEF(TYPE, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE##2, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE##3, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE##4, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE##8, LITERAL) \ - DEGREES_SINGLE_DEF(TYPE##16, LITERAL) - -// 180/pi = ~57.29577951308232087685 or 0x1.ca5dc1a63c1f8p+5 or 0x1.ca5dc2p+5F -DEGREES_DEF(float, 0x1.ca5dc2p+5F) - -#ifdef cl_khr_fp64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable - -// 180/pi = ~57.29577951308232087685 or 0x1.ca5dc1a63c1f8p+5 or 0x1.ca5dc2p+5F -DEGREES_DEF(double, 0x1.ca5dc1a63c1f8p+5) - -#endif - -#ifdef cl_khr_fp16 -#pragma OPENCL EXTENSION cl_khr_fp16 : enable - -// 180/pi = ~57.29577951308232087685 or 0x1.ca5dc1a63c1f8p+5 or 0x1.ca5dc2p+5F -DEGREES_DEF(half, (half)0x1.ca5dc1a63c1f8p+5) - -#endif +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/common/clc_degrees.inc b/libclc/clc/lib/generic/common/clc_degrees.inc new file mode 100644 index 0000000000000..ae6fb33b6d7ac --- /dev/null +++ b/libclc/clc/lib/generic/common/clc_degrees.inc @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// 180/pi = ~57.29577951308232087685 or 0x1.ca5dc1a63c1f8p+5 or 0x1.ca5dc2p+5F +#if __CLC_FPSIZE == 32 +#define DEGREE_LITERAL 0x1.ca5dc2p+5F +#elif __CLC_FPSIZE == 64 +#define DEGREE_LITERAL 0x1.ca5dc1a63c1f8p+5 +#elif __CLC_FPSIZE == 16 +#define DEGREE_LITERAL (half)0x1.ca5dc1a63c1f8p+5 +#endif + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_degrees(__CLC_GENTYPE radians) { + return DEGREE_LITERAL * radians; +} + +#undef DEGREE_LITERAL diff --git a/libclc/clc/lib/generic/common/clc_radians.cl b/libclc/clc/lib/generic/common/clc_radians.cl index 3f013019ad974..6e8d6f3638101 100644 --- a/libclc/clc/lib/generic/common/clc_radians.cl +++ b/libclc/clc/lib/generic/common/clc_radians.cl @@ -6,36 +6,8 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_RADIANS_SINGLE_DEF(TYPE, LITERAL) \ - _CLC_OVERLOAD _CLC_DEF TYPE __clc_radians(TYPE radians) { \ - return (TYPE)LITERAL * radians; \ - } - -#define __CLC_RADIANS_DEF(TYPE, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE##2, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE##3, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE##4, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE##8, LITERAL) \ - __CLC_RADIANS_SINGLE_DEF(TYPE##16, LITERAL) - -// pi/180 = ~0.01745329251994329577 or 0x1.1df46a2529d39p-6 or 0x1.1df46ap-6F -__CLC_RADIANS_DEF(float, 0x1.1df46ap-6F) - -#ifdef cl_khr_fp64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable - -// pi/180 = ~0.01745329251994329577 or 0x1.1df46a2529d39p-6 or 0x1.1df46ap-6F -__CLC_RADIANS_DEF(double, 0x1.1df46a2529d39p-6) - -#endif - -#ifdef cl_khr_fp16 -#pragma OPENCL EXTENSION cl_khr_fp16 : enable - -// pi/180 = ~0.01745329251994329577 or 0x1.1df46a2529d39p-6 or 0x1.1df46ap-6F -__CLC_RADIANS_DEF(half, (half)0x1.1df46a2529d39p-6) - -#endif +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/common/clc_radians.inc b/libclc/clc/lib/generic/common/clc_radians.inc new file mode 100644 index 0000000000000..2f859775e5725 --- /dev/null +++ b/libclc/clc/lib/generic/common/clc_radians.inc @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// pi/180 = ~0.01745329251994329577 or 0x1.1df46a2529d39p-6 or 0x1.1df46ap-6F +#if __CLC_FPSIZE == 32 +#define RADIAN_LITERAL 0x1.1df46ap-6F +#elif __CLC_FPSIZE == 64 +#define RADIAN_LITERAL 0x1.1df46a2529d39p-6 +#elif __CLC_FPSIZE == 16 +#define RADIAN_LITERAL (half)0x1.1df46a2529d39p-6 +#endif + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_radians(__CLC_GENTYPE degrees) { + return RADIAN_LITERAL * degrees; +} + +#undef RADIAN_LITERAL diff --git a/libclc/clc/lib/generic/common/clc_smoothstep.cl b/libclc/clc/lib/generic/common/clc_smoothstep.cl index b409c7d7b6440..1c4d4a5a9b0bf 100644 --- a/libclc/clc/lib/generic/common/clc_smoothstep.cl +++ b/libclc/clc/lib/generic/common/clc_smoothstep.cl @@ -5,33 +5,10 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + +#include #include #include -#define SMOOTHSTEP_SINGLE_DEF(edge_type, x_type, lit_suff) \ - _CLC_OVERLOAD _CLC_DEF x_type __clc_smoothstep(edge_type edge0, \ - edge_type edge1, x_type x) { \ - x_type t = __clc_clamp((x - edge0) / (edge1 - edge0), 0.0##lit_suff, \ - 1.0##lit_suff); \ - return t * t * (3.0##lit_suff - 2.0##lit_suff * t); \ - } - -#define SMOOTHSTEP_DEF(type, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type, type, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type##2, type##2, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type##3, type##3, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type##4, type##4, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type##8, type##8, lit_suffix) \ - SMOOTHSTEP_SINGLE_DEF(type##16, type##16, lit_suffix) - -SMOOTHSTEP_DEF(float, F) - -#ifdef cl_khr_fp64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable -SMOOTHSTEP_DEF(double, ); -#endif - -#ifdef cl_khr_fp16 -#pragma OPENCL EXTENSION cl_khr_fp16 : enable -SMOOTHSTEP_DEF(half, H); -#endif +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/common/clc_smoothstep.inc b/libclc/clc/lib/generic/common/clc_smoothstep.inc new file mode 100644 index 0000000000000..f7d853c27b558 --- /dev/null +++ b/libclc/clc/lib/generic/common/clc_smoothstep.inc @@ -0,0 +1,15 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_smoothstep(__CLC_GENTYPE edge0, + __CLC_GENTYPE edge1, + __CLC_GENTYPE x) { + __CLC_GENTYPE t = __clc_clamp((x - edge0) / (edge1 - edge0), + __CLC_FP_LIT(0.0), __CLC_FP_LIT(1.0)); + return t * t * (__CLC_FP_LIT(3.0) - __CLC_FP_LIT(2.0) * t); +} diff --git a/libclc/clc/lib/generic/common/clc_step.cl b/libclc/clc/lib/generic/common/clc_step.cl index 721489948233c..6bb9a66760e27 100644 --- a/libclc/clc/lib/generic/common/clc_step.cl +++ b/libclc/clc/lib/generic/common/clc_step.cl @@ -6,5 +6,8 @@ // //===----------------------------------------------------------------------===// +#include +#include + #define __CLC_BODY #include diff --git a/libclc/opencl/lib/generic/common/smoothstep.cl b/libclc/opencl/lib/generic/common/smoothstep.cl index 84ed7417de3cf..ee37718231929 100644 --- a/libclc/opencl/lib/generic/common/smoothstep.cl +++ b/libclc/opencl/lib/generic/common/smoothstep.cl @@ -9,59 +9,5 @@ #include #include -#define SMOOTHSTEP_SINGLE_DEF(X_TYPE) \ - _CLC_OVERLOAD _CLC_DEF X_TYPE smoothstep(X_TYPE edge0, X_TYPE edge1, \ - X_TYPE x) { \ - return __clc_smoothstep(edge0, edge1, x); \ - } - -#define SMOOTHSTEP_S_S_V_DEFS(X_TYPE) \ - _CLC_OVERLOAD _CLC_DEF X_TYPE##2 smoothstep(X_TYPE x, X_TYPE y, \ - X_TYPE##2 z) { \ - return __clc_smoothstep((X_TYPE##2)x, (X_TYPE##2)y, z); \ - } \ - \ - _CLC_OVERLOAD _CLC_DEF X_TYPE##3 smoothstep(X_TYPE x, X_TYPE y, \ - X_TYPE##3 z) { \ - return __clc_smoothstep((X_TYPE##3)x, (X_TYPE##3)y, z); \ - } \ - \ - _CLC_OVERLOAD _CLC_DEF X_TYPE##4 smoothstep(X_TYPE x, X_TYPE y, \ - X_TYPE##4 z) { \ - return __clc_smoothstep((X_TYPE##4)x, (X_TYPE##4)y, z); \ - } \ - \ - _CLC_OVERLOAD _CLC_DEF X_TYPE##8 smoothstep(X_TYPE x, X_TYPE y, \ - X_TYPE##8 z) { \ - return __clc_smoothstep((X_TYPE##8)x, (X_TYPE##8)y, z); \ - } \ - \ - _CLC_OVERLOAD _CLC_DEF X_TYPE##16 smoothstep(X_TYPE x, X_TYPE y, \ - X_TYPE##16 z) { \ - return __clc_smoothstep((X_TYPE##16)x, (X_TYPE##16)y, z); \ - } - -#define SMOOTHSTEP_DEF(type) \ - SMOOTHSTEP_SINGLE_DEF(type) \ - SMOOTHSTEP_SINGLE_DEF(type##2) \ - SMOOTHSTEP_SINGLE_DEF(type##3) \ - SMOOTHSTEP_SINGLE_DEF(type##4) \ - SMOOTHSTEP_SINGLE_DEF(type##8) \ - SMOOTHSTEP_SINGLE_DEF(type##16) \ - SMOOTHSTEP_S_S_V_DEFS(type) - -SMOOTHSTEP_DEF(float) - -#ifdef cl_khr_fp64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable - -SMOOTHSTEP_DEF(double); - -#endif - -#ifdef cl_khr_fp16 -#pragma OPENCL EXTENSION cl_khr_fp16 : enable - -SMOOTHSTEP_DEF(half); - -#endif +#define __CLC_BODY +#include diff --git a/libclc/opencl/lib/generic/common/smoothstep.inc b/libclc/opencl/lib/generic/common/smoothstep.inc new file mode 100644 index 0000000000000..ece87aa2e0c35 --- /dev/null +++ b/libclc/opencl/lib/generic/common/smoothstep.inc @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE smoothstep(__CLC_GENTYPE edge0, + __CLC_GENTYPE edge1, + __CLC_GENTYPE x) { + return __clc_smoothstep(edge0, edge1, x); +} + +#if !defined(__CLC_SCALAR) + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE smoothstep(__CLC_SCALAR_GENTYPE edge0, + __CLC_SCALAR_GENTYPE edge1, + __CLC_GENTYPE x) { + return __clc_smoothstep((__CLC_GENTYPE)edge0, (__CLC_GENTYPE)edge1, x); +} + +#endif