[libclc] [libclc] Move __clc_(remainder|fmod|remquo) to the CLC library (PR #132054)
Fraser Cormack via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 27 04:19:49 PDT 2025
https://github.com/frasercrmck updated https://github.com/llvm/llvm-project/pull/132054
>From e480113652a1a371e296192d4e1460af26a8a436 Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at 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 +++++++++++
.../include/clc}/math/clc_remainder.h | 10 +++++++-
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/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 -
11 files changed, 50 insertions(+), 15 deletions(-)
create mode 100644 libclc/clc/include/clc/math/binary_def_via_fp32.inc
rename libclc/{generic/include => clc/include/clc}/math/clc_remainder.h (71%)
rename libclc/{generic/lib => clc/lib/generic}/math/clc_remainder.cl (92%)
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/generic/include/math/clc_remainder.h b/libclc/clc/include/clc/math/clc_remainder.h
similarity index 71%
rename from libclc/generic/include/math/clc_remainder.h
rename to libclc/clc/include/clc/math/clc_remainder.h
index e6c2c84a6dc91..2a1c88297d260 100644
--- a/libclc/generic/include/math/clc_remainder.h
+++ b/libclc/clc/include/clc/math/clc_remainder.h
@@ -6,7 +6,15 @@
//
//===----------------------------------------------------------------------===//
+#ifndef __CLC_MATH_CLC_REMAINDER_H__
+#define __CLC_MATH_CLC_REMAINDER_H__
+
#define __CLC_FUNCTION __clc_remainder
-#define __CLC_BODY <clc/math/binary_decl_tt.inc>
+#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 31aa16401e647..f65ccc2d42f71 100644
--- a/libclc/clc/include/clc/math/gentype.inc
+++ b/libclc/clc/include/clc/math/gentype.inc
@@ -68,6 +68,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
@@ -133,7 +134,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
@@ -204,7 +207,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 d851065bb2e23..5e33e88c612ef 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -45,6 +45,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/lib/SOURCES b/libclc/generic/lib/SOURCES
index b17ac97af0c47..acba076a3c323 100644
--- a/libclc/generic/lib/SOURCES
+++ b/libclc/generic/lib/SOURCES
@@ -163,7 +163,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 92a3f08caa21c..b5f96c2cd6036 100644
--- a/libclc/generic/lib/math/remainder.cl
+++ b/libclc/generic/lib/math/remainder.cl
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#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 e39c95a985fff..c28ceaa07698d 100644
--- a/libclc/spirv/lib/SOURCES
+++ b/libclc/spirv/lib/SOURCES
@@ -65,7 +65,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 200e6507fa979a1f347b312ef61f98591f2d64c9 Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at codeplay.com>
Date: Wed, 19 Mar 2025 15:01:04 +0000
Subject: [PATCH 2/3] [libclc] Move __clc_fmod to the CLC library
---
.../include/clc}/math/clc_fmod.h | 10 ++++++++-
libclc/clc/lib/generic/SOURCES | 1 +
.../lib => clc/lib/generic}/math/clc_fmod.cl | 21 ++++++++++++++++---
libclc/clspv/lib/SOURCES | 1 -
libclc/generic/lib/SOURCES | 1 -
libclc/generic/lib/math/fmod.cl | 6 +++---
libclc/spirv/lib/SOURCES | 1 -
7 files changed, 31 insertions(+), 10 deletions(-)
rename libclc/{generic/include => clc/include/clc}/math/clc_fmod.h (73%)
rename libclc/{generic/lib => clc/lib/generic}/math/clc_fmod.cl (91%)
diff --git a/libclc/generic/include/math/clc_fmod.h b/libclc/clc/include/clc/math/clc_fmod.h
similarity index 73%
rename from libclc/generic/include/math/clc_fmod.h
rename to libclc/clc/include/clc/math/clc_fmod.h
index c94428cf159bc..59778fd0f6129 100644
--- a/libclc/generic/include/math/clc_fmod.h
+++ b/libclc/clc/include/clc/math/clc_fmod.h
@@ -6,7 +6,15 @@
//
//===----------------------------------------------------------------------===//
+#ifndef __CLC_MATH_CLC_FMOD_H__
+#define __CLC_MATH_CLC_FMOD_H__
+
#define __CLC_FUNCTION __clc_fmod
-#define __CLC_BODY <clc/math/binary_decl_tt.inc>
+#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 5e33e88c612ef..7272ece727192 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -33,6 +33,7 @@ math/clc_copysign.cl
math/clc_ep_log.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/lib/SOURCES b/libclc/generic/lib/SOURCES
index acba076a3c323..6a089888c4ad7 100644
--- a/libclc/generic/lib/SOURCES
+++ b/libclc/generic/lib/SOURCES
@@ -108,7 +108,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 5bce88de407c0..07f880486c0f6 100644
--- a/libclc/generic/lib/math/fmod.cl
+++ b/libclc/generic/lib/math/fmod.cl
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#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 c28ceaa07698d..38a3c31a76958 100644
--- a/libclc/spirv/lib/SOURCES
+++ b/libclc/spirv/lib/SOURCES
@@ -41,7 +41,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 02aacb0b258b2174cfe958b7ea232ba0ac5767e6 Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at codeplay.com>
Date: Wed, 19 Mar 2025 15:17:27 +0000
Subject: [PATCH 3/3] [libclc] Move clc_remquo
---
.../include => clc/include/clc}/math/clc_remquo.h | 10 ++++++++--
.../include/clc/math/remquo_decl.inc} | 3 ++-
libclc/clc/lib/generic/SOURCES | 1 +
.../lib => clc/lib/generic}/math/clc_remquo.cl | 8 ++++++--
libclc/clspv/lib/SOURCES | 1 -
libclc/generic/include/clc/math/remquo.h | 6 +++---
libclc/generic/lib/SOURCES | 1 -
libclc/generic/lib/math/remquo.cl | 2 +-
libclc/generic/lib/math/remquo.inc | 3 ++-
libclc/spirv/lib/SOURCES | 1 -
10 files changed, 23 insertions(+), 13 deletions(-)
rename libclc/{generic/include => clc/include/clc}/math/clc_remquo.h (75%)
rename libclc/{generic/include/clc/math/remquo.inc => clc/include/clc/math/remquo_decl.inc} (74%)
rename libclc/{generic/lib => clc/lib/generic}/math/clc_remquo.cl (98%)
diff --git a/libclc/generic/include/math/clc_remquo.h b/libclc/clc/include/clc/math/clc_remquo.h
similarity index 75%
rename from libclc/generic/include/math/clc_remquo.h
rename to libclc/clc/include/clc/math/clc_remquo.h
index b64441fff1d87..6588342cf81b3 100644
--- a/libclc/generic/include/math/clc_remquo.h
+++ b/libclc/clc/include/clc/math/clc_remquo.h
@@ -6,11 +6,17 @@
//
//===----------------------------------------------------------------------===//
+#ifndef __CLC_MATH_CLC_REMQUO_H__
+#define __CLC_MATH_CLC_REMQUO_H__
+
#define __CLC_FUNCTION __clc_remquo
-#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
+#undef __CLC_ADDRESS_SPACE
+#undef __CLC_BODY
#undef __CLC_FUNCTION
+
+#endif // __CLC_MATH_CLC_REMQUO_H__
diff --git a/libclc/generic/include/clc/math/remquo.inc b/libclc/clc/include/clc/math/remquo_decl.inc
similarity index 74%
rename from libclc/generic/include/clc/math/remquo.inc
rename to libclc/clc/include/clc/math/remquo_decl.inc
index 15a67b92ddde1..ecd703042a964 100644
--- a/libclc/generic/include/clc/math/remquo.inc
+++ b/libclc/clc/include/clc/math/remquo_decl.inc
@@ -6,4 +6,5 @@
//
//===----------------------------------------------------------------------===//
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_ADDRESS_SPACE __CLC_INTN *q);
+_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 7272ece727192..39db96d758fca 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -47,6 +47,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 69c95e59c8d7e..e332b32886c2e 100644
--- a/libclc/generic/include/clc/math/remquo.h
+++ b/libclc/generic/include/clc/math/remquo.h
@@ -8,17 +8,17 @@
#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/lib/SOURCES b/libclc/generic/lib/SOURCES
index 6a089888c4ad7..896c25b43078a 100644
--- a/libclc/generic/lib/SOURCES
+++ b/libclc/generic/lib/SOURCES
@@ -163,7 +163,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 0ab9327f5a9a3..d0c4b16ed7c39 100644
--- a/libclc/generic/lib/math/remquo.cl
+++ b/libclc/generic/lib/math/remquo.cl
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#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 498c94e98e71e..0c71aa0be0202 100644
--- a/libclc/generic/lib/math/remquo.inc
+++ b/libclc/generic/lib/math/remquo.inc
@@ -6,7 +6,8 @@
//
//===----------------------------------------------------------------------===//
-_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 38a3c31a76958..6be5107c5e736 100644
--- a/libclc/spirv/lib/SOURCES
+++ b/libclc/spirv/lib/SOURCES
@@ -65,7 +65,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
More information about the cfe-commits
mailing list