https://github.com/frasercrmck updated https://github.com/llvm/llvm-project/pull/132054
>From 1e16ff4926e47b6fd58761ea04ee0535d2112ae4 Mon Sep 17 00:00:00 2001 From: Fraser Cormack <fra...@codeplay.com> Date: Wed, 19 Mar 2025 14:52:09 +0000 Subject: [PATCH 1/3] [libclc] Move __clc_remainder to CLC library It was already nominally in the CLC namespace; this commit just formally moves it over. Note that a fp16 version of __clc_remainder is now provided. It is defined as forwarding on to the fp32 version. This makes a difference in the OpenCL layer, where the fp16 remainder builtin will forward to the fp16 __clc_remainder builtin, rather than directly forwarding onto the fp32 __clc_remainder builtin. No changes to the generated code for non-SPIR-V targets is observed. --- .../include/clc/math/binary_def_via_fp32.inc | 13 +++++++++++ libclc/clc/include/clc/math/clc_remainder.h | 20 ++++++++++++++++ libclc/clc/include/clc/math/gentype.inc | 7 ++++-- libclc/clc/lib/generic/SOURCES | 1 + .../lib/generic}/math/clc_remainder.cl | 23 +++++++++++++++---- libclc/clspv/lib/SOURCES | 1 - libclc/generic/include/math/clc_remainder.h | 4 ---- libclc/generic/lib/SOURCES | 1 - libclc/generic/lib/math/clc_fmod.cl | 1 - libclc/generic/lib/math/clc_remquo.cl | 1 - libclc/generic/lib/math/remainder.cl | 6 ++--- libclc/spirv/lib/SOURCES | 1 - 12 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 libclc/clc/include/clc/math/binary_def_via_fp32.inc create mode 100644 libclc/clc/include/clc/math/clc_remainder.h rename libclc/{generic/lib => clc/lib/generic}/math/clc_remainder.cl (92%) delete mode 100644 libclc/generic/include/math/clc_remainder.h diff --git a/libclc/clc/include/clc/math/binary_def_via_fp32.inc b/libclc/clc/include/clc/math/binary_def_via_fp32.inc new file mode 100644 index 0000000000000..0b4108adb0610 --- /dev/null +++ b/libclc/clc/include/clc/math/binary_def_via_fp32.inc @@ -0,0 +1,13 @@ +//===----------------------------------------------------------------------===// +// +// 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_FUNCTION(__CLC_GENTYPE x, + __CLC_GENTYPE y) { + return __CLC_CONVERT_GENTYPE( + __CLC_FUNCTION(__CLC_CONVERT_FLOATN(x), __CLC_CONVERT_FLOATN(y))); +} diff --git a/libclc/clc/include/clc/math/clc_remainder.h b/libclc/clc/include/clc/math/clc_remainder.h new file mode 100644 index 0000000000000..2a1c88297d260 --- /dev/null +++ b/libclc/clc/include/clc/math/clc_remainder.h @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_MATH_CLC_REMAINDER_H__ +#define __CLC_MATH_CLC_REMAINDER_H__ + +#define __CLC_FUNCTION __clc_remainder +#define __CLC_BODY <clc/shared/binary_decl.inc> + +#include <clc/math/gentype.inc> + +#undef __CLC_BODY +#undef __CLC_FUNCTION + +#endif // __CLC_MATH_CLC_REMAINDER_H__ diff --git a/libclc/clc/include/clc/math/gentype.inc b/libclc/clc/include/clc/math/gentype.inc index c624f4d19bbcf..b2299f13cfa23 100644 --- a/libclc/clc/include/clc/math/gentype.inc +++ b/libclc/clc/include/clc/math/gentype.inc @@ -56,6 +56,7 @@ #define __CLC_CONVERT_S_GENTYPE __CLC_XCONCAT(__clc_convert_, __CLC_S_GENTYPE) #define __CLC_CONVERT_U_GENTYPE __CLC_XCONCAT(__clc_convert_, __CLC_U_GENTYPE) +#if (!defined(__HALF_ONLY) && !defined(__DOUBLE_ONLY)) #define __CLC_SCALAR_GENTYPE float #define __CLC_FPSIZE 32 #define __CLC_FP_LIT(x) x##F @@ -119,7 +120,9 @@ #undef __CLC_FPSIZE #undef __CLC_SCALAR_GENTYPE -#ifndef __FLOAT_ONLY +#endif + +#if (!defined(__HALF_ONLY) && !defined(__FLOAT_ONLY)) #ifdef cl_khr_fp64 #pragma OPENCL EXTENSION cl_khr_fp64 : enable @@ -188,7 +191,7 @@ #endif #endif -#ifndef __FLOAT_ONLY +#if (!defined(__FLOAT_ONLY) && !defined(__DOUBLE_ONLY)) #ifdef cl_khr_fp16 #pragma OPENCL EXTENSION cl_khr_fp16 : enable diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index f7688d0442253..a4ce61fdcda43 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -32,6 +32,7 @@ math/clc_mad.cl math/clc_modf.cl math/clc_nan.cl math/clc_nextafter.cl +math/clc_remainder.cl math/clc_rint.cl math/clc_round.cl math/clc_rsqrt.cl diff --git a/libclc/generic/lib/math/clc_remainder.cl b/libclc/clc/lib/generic/math/clc_remainder.cl similarity index 92% rename from libclc/generic/lib/math/clc_remainder.cl rename to libclc/clc/lib/generic/math/clc_remainder.cl index e7ab4c653fd28..c79d271c624e2 100644 --- a/libclc/generic/lib/math/clc_remainder.cl +++ b/libclc/clc/lib/generic/math/clc_remainder.cl @@ -6,17 +6,17 @@ // //===----------------------------------------------------------------------===// -#include <clc/clc.h> #include <clc/clc_convert.h> #include <clc/clcmacro.h> #include <clc/integer/clc_clz.h> +#include <clc/internal/clc.h> #include <clc/math/clc_floor.h> #include <clc/math/clc_fma.h> -#include <clc/math/clc_subnormal_config.h> +#include <clc/math/clc_ldexp.h> +#include <clc/math/clc_remainder.h> #include <clc/math/clc_trunc.h> #include <clc/math/math.h> #include <clc/shared/clc_max.h> -#include <math/clc_remainder.h> _CLC_DEF _CLC_OVERLOAD float __clc_remainder(float x, float y) { int ux = __clc_as_int(x); @@ -77,6 +77,9 @@ _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, float, __clc_remainder, float, float); #ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + _CLC_DEF _CLC_OVERLOAD double __clc_remainder(double x, double y) { ulong ux = __clc_as_ulong(x); ulong ax = ux & ~SIGNBIT_DP64; @@ -104,7 +107,7 @@ _CLC_DEF _CLC_OVERLOAD double __clc_remainder(double x, double y) { // but it doesn't matter - it just means that we'll go round // the loop below one extra time. int ntimes = __clc_max(0, (xexp1 - yexp1) / 53); - double w = ldexp(dy, ntimes * 53); + double w = __clc_ldexp(dy, ntimes * 53); w = ntimes == 0 ? dy : w; double scale = ntimes == 0 ? 1.0 : 0x1.0p-53; @@ -207,3 +210,15 @@ _CLC_DEF _CLC_OVERLOAD double __clc_remainder(double x, double y) { _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_remainder, double, double); #endif + +#ifdef cl_khr_fp16 + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +// Forward the half version of this builtin onto the float one +#define __HALF_ONLY +#define __CLC_FUNCTION __clc_remainder +#define __CLC_BODY <clc/math/binary_def_via_fp32.inc> +#include <clc/math/gentype.inc> + +#endif diff --git a/libclc/clspv/lib/SOURCES b/libclc/clspv/lib/SOURCES index fa9e68f6985ea..0a56588947aa3 100644 --- a/libclc/clspv/lib/SOURCES +++ b/libclc/clspv/lib/SOURCES @@ -21,7 +21,6 @@ subnormal_config.cl ../../generic/lib/math/clc_pow.cl ../../generic/lib/math/clc_pown.cl ../../generic/lib/math/clc_powr.cl -../../generic/lib/math/clc_remainder.cl ../../generic/lib/math/clc_remquo.cl ../../generic/lib/math/clc_rootn.cl ../../generic/lib/math/clc_tan.cl diff --git a/libclc/generic/include/math/clc_remainder.h b/libclc/generic/include/math/clc_remainder.h deleted file mode 100644 index db084cf1c26a0..0000000000000 --- a/libclc/generic/include/math/clc_remainder.h +++ /dev/null @@ -1,4 +0,0 @@ -#define __CLC_FUNCTION __clc_remainder -#define __CLC_BODY <clc/math/binary_decl_tt.inc> -#include <clc/math/gentype.inc> -#undef __CLC_FUNCTION diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index 15aafee79dfec..dab5424c984ed 100644 --- a/libclc/generic/lib/SOURCES +++ b/libclc/generic/lib/SOURCES @@ -164,7 +164,6 @@ math/clc_pown.cl math/pown.cl math/clc_powr.cl math/powr.cl -math/clc_remainder.cl math/remainder.cl math/clc_remquo.cl math/remquo.cl diff --git a/libclc/generic/lib/math/clc_fmod.cl b/libclc/generic/lib/math/clc_fmod.cl index f8cb09d1ee111..64809879eba80 100644 --- a/libclc/generic/lib/math/clc_fmod.cl +++ b/libclc/generic/lib/math/clc_fmod.cl @@ -16,7 +16,6 @@ #include <clc/math/clc_trunc.h> #include <clc/math/math.h> #include <clc/shared/clc_max.h> -#include <math/clc_remainder.h> _CLC_DEF _CLC_OVERLOAD float __clc_fmod(float x, float y) { int ux = __clc_as_int(x); diff --git a/libclc/generic/lib/math/clc_remquo.cl b/libclc/generic/lib/math/clc_remquo.cl index 61c7fae29bc00..3de549efc32bf 100644 --- a/libclc/generic/lib/math/clc_remquo.cl +++ b/libclc/generic/lib/math/clc_remquo.cl @@ -16,7 +16,6 @@ #include <clc/math/clc_trunc.h> #include <clc/math/math.h> #include <clc/shared/clc_max.h> -#include <math/clc_remainder.h> _CLC_DEF _CLC_OVERLOAD float __clc_remquo(float x, float y, __private int *quo) { diff --git a/libclc/generic/lib/math/remainder.cl b/libclc/generic/lib/math/remainder.cl index 0a22ee8be2dd8..7692c54fa4398 100644 --- a/libclc/generic/lib/math/remainder.cl +++ b/libclc/generic/lib/math/remainder.cl @@ -1,6 +1,6 @@ #include <clc/clc.h> -#include <math/clc_remainder.h> +#include <clc/math/clc_remainder.h> -#define __CLC_FUNC remainder -#define __CLC_BODY <clc_sw_binary.inc> +#define FUNCTION remainder +#define __CLC_BODY <clc/shared/binary_def.inc> #include <clc/math/gentype.inc> diff --git a/libclc/spirv/lib/SOURCES b/libclc/spirv/lib/SOURCES index 8378587d52bf3..ff68b410ec819 100644 --- a/libclc/spirv/lib/SOURCES +++ b/libclc/spirv/lib/SOURCES @@ -66,7 +66,6 @@ math/fma.cl ../../generic/lib/math/pown.cl ../../generic/lib/math/clc_powr.cl ../../generic/lib/math/powr.cl -../../generic/lib/math/clc_remainder.cl ../../generic/lib/math/remainder.cl ../../generic/lib/math/clc_remquo.cl ../../generic/lib/math/remquo.cl >From df190223d3fbeb525b10a35e8b61f1d607a67657 Mon Sep 17 00:00:00 2001 From: Fraser Cormack <fra...@codeplay.com> Date: Wed, 19 Mar 2025 15:01:04 +0000 Subject: [PATCH 2/3] [libclc] Move __clc_fmod to the CLC library --- libclc/clc/include/clc/math/clc_fmod.h | 20 ++++++++++++++++++ libclc/clc/lib/generic/SOURCES | 1 + .../lib => clc/lib/generic}/math/clc_fmod.cl | 21 ++++++++++++++++--- libclc/clspv/lib/SOURCES | 1 - libclc/generic/include/math/clc_fmod.h | 4 ---- libclc/generic/lib/SOURCES | 1 - libclc/generic/lib/math/fmod.cl | 6 +++--- libclc/spirv/lib/SOURCES | 1 - 8 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 libclc/clc/include/clc/math/clc_fmod.h rename libclc/{generic/lib => clc/lib/generic}/math/clc_fmod.cl (91%) delete mode 100644 libclc/generic/include/math/clc_fmod.h diff --git a/libclc/clc/include/clc/math/clc_fmod.h b/libclc/clc/include/clc/math/clc_fmod.h new file mode 100644 index 0000000000000..59778fd0f6129 --- /dev/null +++ b/libclc/clc/include/clc/math/clc_fmod.h @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_MATH_CLC_FMOD_H__ +#define __CLC_MATH_CLC_FMOD_H__ + +#define __CLC_FUNCTION __clc_fmod +#define __CLC_BODY <clc/shared/binary_decl.inc> + +#include <clc/math/gentype.inc> + +#undef __CLC_BODY +#undef __CLC_FUNCTION + +#endif // __CLC_MATH_CLC_FMOD_H__ diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index a4ce61fdcda43..f00f977c479fc 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -21,6 +21,7 @@ math/clc_ceil.cl math/clc_copysign.cl math/clc_fabs.cl math/clc_fma.cl +math/clc_fmod.cl math/clc_floor.cl math/clc_frexp.cl math/clc_hypot.cl diff --git a/libclc/generic/lib/math/clc_fmod.cl b/libclc/clc/lib/generic/math/clc_fmod.cl similarity index 91% rename from libclc/generic/lib/math/clc_fmod.cl rename to libclc/clc/lib/generic/math/clc_fmod.cl index 64809879eba80..6af84a14f3d1a 100644 --- a/libclc/generic/lib/math/clc_fmod.cl +++ b/libclc/clc/lib/generic/math/clc_fmod.cl @@ -6,13 +6,13 @@ // //===----------------------------------------------------------------------===// -#include <clc/clc.h> #include <clc/clc_convert.h> #include <clc/clcmacro.h> #include <clc/integer/clc_clz.h> +#include <clc/internal/clc.h> #include <clc/math/clc_floor.h> #include <clc/math/clc_fma.h> -#include <clc/math/clc_subnormal_config.h> +#include <clc/math/clc_ldexp.h> #include <clc/math/clc_trunc.h> #include <clc/math/math.h> #include <clc/shared/clc_max.h> @@ -66,6 +66,9 @@ _CLC_DEF _CLC_OVERLOAD float __clc_fmod(float x, float y) { _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, float, __clc_fmod, float, float); #ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + _CLC_DEF _CLC_OVERLOAD double __clc_fmod(double x, double y) { ulong ux = __clc_as_ulong(x); ulong ax = ux & ~SIGNBIT_DP64; @@ -91,7 +94,7 @@ _CLC_DEF _CLC_OVERLOAD double __clc_fmod(double x, double y) { // but it doesn't matter - it just means that we'll go round // the loop below one extra time. int ntimes = __clc_max(0, (xexp1 - yexp1) / 53); - double w = ldexp(dy, ntimes * 53); + double w = __clc_ldexp(dy, ntimes * 53); w = ntimes == 0 ? dy : w; double scale = ntimes == 0 ? 1.0 : 0x1.0p-53; @@ -170,3 +173,15 @@ _CLC_DEF _CLC_OVERLOAD double __clc_fmod(double x, double y) { _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_fmod, double, double); #endif + +#ifdef cl_khr_fp16 + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +// Forward the half version of this builtin onto the float one +#define __HALF_ONLY +#define __CLC_FUNCTION __clc_fmod +#define __CLC_BODY <clc/math/binary_def_via_fp32.inc> +#include <clc/math/gentype.inc> + +#endif diff --git a/libclc/clspv/lib/SOURCES b/libclc/clspv/lib/SOURCES index 0a56588947aa3..b4b6964fad1fa 100644 --- a/libclc/clspv/lib/SOURCES +++ b/libclc/clspv/lib/SOURCES @@ -17,7 +17,6 @@ subnormal_config.cl ../../generic/lib/math/atanpi.cl ../../generic/lib/math/cbrt.cl ../../generic/lib/math/clc_exp10.cl -../../generic/lib/math/clc_fmod.cl ../../generic/lib/math/clc_pow.cl ../../generic/lib/math/clc_pown.cl ../../generic/lib/math/clc_powr.cl diff --git a/libclc/generic/include/math/clc_fmod.h b/libclc/generic/include/math/clc_fmod.h deleted file mode 100644 index 0409785ee500a..0000000000000 --- a/libclc/generic/include/math/clc_fmod.h +++ /dev/null @@ -1,4 +0,0 @@ -#define __CLC_FUNCTION __clc_fmod -#define __CLC_BODY <clc/math/binary_decl_tt.inc> -#include <clc/math/gentype.inc> -#undef __CLC_FUNCTION diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index dab5424c984ed..3ccb4a3702eef 100644 --- a/libclc/generic/lib/SOURCES +++ b/libclc/generic/lib/SOURCES @@ -109,7 +109,6 @@ math/floor.cl math/fma.cl math/fmax.cl math/fmin.cl -math/clc_fmod.cl math/fmod.cl math/fract.cl math/frexp.cl diff --git a/libclc/generic/lib/math/fmod.cl b/libclc/generic/lib/math/fmod.cl index fac3fc6eb995d..19d0d7a293357 100644 --- a/libclc/generic/lib/math/fmod.cl +++ b/libclc/generic/lib/math/fmod.cl @@ -1,6 +1,6 @@ #include <clc/clc.h> -#include <math/clc_fmod.h> +#include <clc/math/clc_fmod.h> -#define __CLC_FUNC fmod -#define __CLC_BODY <clc_sw_binary.inc> +#define FUNCTION fmod +#define __CLC_BODY <clc/shared/binary_def.inc> #include <clc/math/gentype.inc> diff --git a/libclc/spirv/lib/SOURCES b/libclc/spirv/lib/SOURCES index ff68b410ec819..deaa8b972da9e 100644 --- a/libclc/spirv/lib/SOURCES +++ b/libclc/spirv/lib/SOURCES @@ -42,7 +42,6 @@ subnormal_config.cl ../../generic/lib/math/clc_exp10.cl ../../generic/lib/math/exp10.cl math/fma.cl -../../generic/lib/math/clc_fmod.cl ../../generic/lib/math/fmod.cl ../../generic/lib/math/fract.cl ../../generic/lib/math/frexp.cl >From 3d3b659bdef69496b2c3b79aa3868c92da6f3a5e Mon Sep 17 00:00:00 2001 From: Fraser Cormack <fra...@codeplay.com> Date: Wed, 19 Mar 2025 15:17:27 +0000 Subject: [PATCH 3/3] [libclc] Move clc_remquo --- libclc/clc/include/clc/math/clc_remquo.h | 22 +++++++++++++++++++ libclc/clc/include/clc/math/remquo_decl.inc | 10 +++++++++ libclc/clc/lib/generic/SOURCES | 1 + .../lib/generic}/math/clc_remquo.cl | 8 +++++-- libclc/clspv/lib/SOURCES | 1 - libclc/generic/include/clc/math/remquo.h | 6 ++--- libclc/generic/include/clc/math/remquo.inc | 1 - libclc/generic/include/math/clc_remquo.h | 8 ------- libclc/generic/lib/SOURCES | 1 - libclc/generic/lib/math/remquo.cl | 2 +- libclc/generic/lib/math/remquo.inc | 3 ++- libclc/spirv/lib/SOURCES | 1 - 12 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 libclc/clc/include/clc/math/clc_remquo.h create mode 100644 libclc/clc/include/clc/math/remquo_decl.inc rename libclc/{generic/lib => clc/lib/generic}/math/clc_remquo.cl (98%) delete mode 100644 libclc/generic/include/clc/math/remquo.inc delete mode 100644 libclc/generic/include/math/clc_remquo.h diff --git a/libclc/clc/include/clc/math/clc_remquo.h b/libclc/clc/include/clc/math/clc_remquo.h new file mode 100644 index 0000000000000..6588342cf81b3 --- /dev/null +++ b/libclc/clc/include/clc/math/clc_remquo.h @@ -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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_MATH_CLC_REMQUO_H__ +#define __CLC_MATH_CLC_REMQUO_H__ + +#define __CLC_FUNCTION __clc_remquo + +#define __CLC_BODY <clc/math/remquo_decl.inc> +#define __CLC_ADDRESS_SPACE private +#include <clc/math/gentype.inc> + +#undef __CLC_ADDRESS_SPACE +#undef __CLC_BODY +#undef __CLC_FUNCTION + +#endif // __CLC_MATH_CLC_REMQUO_H__ diff --git a/libclc/clc/include/clc/math/remquo_decl.inc b/libclc/clc/include/clc/math/remquo_decl.inc new file mode 100644 index 0000000000000..ecd703042a964 --- /dev/null +++ b/libclc/clc/include/clc/math/remquo_decl.inc @@ -0,0 +1,10 @@ +//===----------------------------------------------------------------------===// +// +// 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_DECL __CLC_GENTYPE __CLC_FUNCTION( + __CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_ADDRESS_SPACE __CLC_INTN *q); diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index f00f977c479fc..87869d8972f30 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -34,6 +34,7 @@ math/clc_modf.cl math/clc_nan.cl math/clc_nextafter.cl math/clc_remainder.cl +math/clc_remquo.cl math/clc_rint.cl math/clc_round.cl math/clc_rsqrt.cl diff --git a/libclc/generic/lib/math/clc_remquo.cl b/libclc/clc/lib/generic/math/clc_remquo.cl similarity index 98% rename from libclc/generic/lib/math/clc_remquo.cl rename to libclc/clc/lib/generic/math/clc_remquo.cl index 3de549efc32bf..9fa94c1c290b8 100644 --- a/libclc/generic/lib/math/clc_remquo.cl +++ b/libclc/clc/lib/generic/math/clc_remquo.cl @@ -6,12 +6,13 @@ // //===----------------------------------------------------------------------===// -#include <clc/clc.h> #include <clc/clc_convert.h> #include <clc/clcmacro.h> #include <clc/integer/clc_clz.h> +#include <clc/internal/clc.h> #include <clc/math/clc_floor.h> #include <clc/math/clc_fma.h> +#include <clc/math/clc_ldexp.h> #include <clc/math/clc_subnormal_config.h> #include <clc/math/clc_trunc.h> #include <clc/math/math.h> @@ -115,6 +116,9 @@ __VEC_REMQUO(float, 8, 4) __VEC_REMQUO(float, 16, 8) #ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + _CLC_DEF _CLC_OVERLOAD double __clc_remquo(double x, double y, __private int *pquo) { ulong ux = __clc_as_ulong(x); @@ -143,7 +147,7 @@ _CLC_DEF _CLC_OVERLOAD double __clc_remquo(double x, double y, // but it doesn't matter - it just means that we'll go round // the loop below one extra time. int ntimes = __clc_max(0, (xexp1 - yexp1) / 53); - double w = ldexp(dy, ntimes * 53); + double w = __clc_ldexp(dy, ntimes * 53); w = ntimes == 0 ? dy : w; double scale = ntimes == 0 ? 1.0 : 0x1.0p-53; diff --git a/libclc/clspv/lib/SOURCES b/libclc/clspv/lib/SOURCES index b4b6964fad1fa..4354cb6f4b32c 100644 --- a/libclc/clspv/lib/SOURCES +++ b/libclc/clspv/lib/SOURCES @@ -20,7 +20,6 @@ subnormal_config.cl ../../generic/lib/math/clc_pow.cl ../../generic/lib/math/clc_pown.cl ../../generic/lib/math/clc_powr.cl -../../generic/lib/math/clc_remquo.cl ../../generic/lib/math/clc_rootn.cl ../../generic/lib/math/clc_tan.cl ../../generic/lib/math/clc_tanpi.cl diff --git a/libclc/generic/include/clc/math/remquo.h b/libclc/generic/include/clc/math/remquo.h index 7daf82fc34b33..ceae6dfc407b4 100644 --- a/libclc/generic/include/clc/math/remquo.h +++ b/libclc/generic/include/clc/math/remquo.h @@ -1,16 +1,16 @@ #define __CLC_FUNCTION remquo -#define __CLC_BODY <clc/math/remquo.inc> +#define __CLC_BODY <clc/math/remquo_decl.inc> #define __CLC_ADDRESS_SPACE global #include <clc/math/gentype.inc> #undef __CLC_ADDRESS_SPACE -#define __CLC_BODY <clc/math/remquo.inc> +#define __CLC_BODY <clc/math/remquo_decl.inc> #define __CLC_ADDRESS_SPACE local #include <clc/math/gentype.inc> #undef __CLC_ADDRESS_SPACE -#define __CLC_BODY <clc/math/remquo.inc> +#define __CLC_BODY <clc/math/remquo_decl.inc> #define __CLC_ADDRESS_SPACE private #include <clc/math/gentype.inc> #undef __CLC_ADDRESS_SPACE diff --git a/libclc/generic/include/clc/math/remquo.inc b/libclc/generic/include/clc/math/remquo.inc deleted file mode 100644 index 42c7b6789f5fc..0000000000000 --- a/libclc/generic/include/clc/math/remquo.inc +++ /dev/null @@ -1 +0,0 @@ -_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_ADDRESS_SPACE __CLC_INTN *q); diff --git a/libclc/generic/include/math/clc_remquo.h b/libclc/generic/include/math/clc_remquo.h deleted file mode 100644 index ed57ec98edf40..0000000000000 --- a/libclc/generic/include/math/clc_remquo.h +++ /dev/null @@ -1,8 +0,0 @@ -#define __CLC_FUNCTION __clc_remquo - -#define __CLC_BODY <clc/math/remquo.inc> -#define __CLC_ADDRESS_SPACE private -#include <clc/math/gentype.inc> -#undef __CLC_ADDRESS_SPACE - -#undef __CLC_FUNCTION diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index 3ccb4a3702eef..afa4bacb7825e 100644 --- a/libclc/generic/lib/SOURCES +++ b/libclc/generic/lib/SOURCES @@ -164,7 +164,6 @@ math/pown.cl math/clc_powr.cl math/powr.cl math/remainder.cl -math/clc_remquo.cl math/remquo.cl math/rint.cl math/clc_rootn.cl diff --git a/libclc/generic/lib/math/remquo.cl b/libclc/generic/lib/math/remquo.cl index fc29b366b36ed..2a580427f251f 100644 --- a/libclc/generic/lib/math/remquo.cl +++ b/libclc/generic/lib/math/remquo.cl @@ -1,5 +1,5 @@ #include <clc/clc.h> -#include <math/clc_remquo.h> +#include <clc/math/clc_remquo.h> #define __CLC_BODY <remquo.inc> #define __CLC_ADDRESS_SPACE global diff --git a/libclc/generic/lib/math/remquo.inc b/libclc/generic/lib/math/remquo.inc index c1de78a5e7f9c..88aed4b32c4ad 100644 --- a/libclc/generic/lib/math/remquo.inc +++ b/libclc/generic/lib/math/remquo.inc @@ -1,4 +1,5 @@ -_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE remquo(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_ADDRESS_SPACE __CLC_INTN *q) { +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE remquo(__CLC_GENTYPE x, __CLC_GENTYPE y, + __CLC_ADDRESS_SPACE __CLC_INTN *q) { __CLC_INTN local_q; __CLC_GENTYPE ret = __clc_remquo(x, y, &local_q); *q = local_q; diff --git a/libclc/spirv/lib/SOURCES b/libclc/spirv/lib/SOURCES index deaa8b972da9e..0ede4a23dfbb0 100644 --- a/libclc/spirv/lib/SOURCES +++ b/libclc/spirv/lib/SOURCES @@ -66,7 +66,6 @@ math/fma.cl ../../generic/lib/math/clc_powr.cl ../../generic/lib/math/powr.cl ../../generic/lib/math/remainder.cl -../../generic/lib/math/clc_remquo.cl ../../generic/lib/math/remquo.cl ../../generic/lib/math/clc_rootn.cl ../../generic/lib/math/rootn.cl _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits