Skip to content

Commit 7923d30

Browse files
committed
Merge remote-tracking branch 'frasercrmck/cherry-pick-libclc' into HEAD
Closes: #16249
2 parents d0d8a56 + 37f93d9 commit 7923d30

28 files changed

+112
-136
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef __CLC_INTEGER_CLC_ABS_H__
2+
#define __CLC_INTEGER_CLC_ABS_H__
3+
4+
#if defined(CLC_CLSPV) || defined(CLC_SPIRV)
5+
// clspv and spir-v targets provide their own OpenCL-compatible abs
6+
#define __clc_abs abs
7+
#else
8+
9+
#define __CLC_BODY <clc/integer/clc_abs.inc>
10+
#include <clc/integer/gentype.inc>
11+
12+
#endif
13+
14+
#endif // __CLC_INTEGER_CLC_ABS_H__
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_CLC_OVERLOAD _CLC_DECL __CLC_U_GENTYPE __clc_abs(__CLC_GENTYPE x);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef __CLC_INTEGER_CLC_ABS_DIFF_H__
2+
#define __CLC_INTEGER_CLC_ABS_DIFF_H__
3+
4+
#if defined(CLC_CLSPV) || defined(CLC_SPIRV)
5+
// clspv and spir-v targets provide their own OpenCL-compatible abs_diff
6+
#define __clc_abs_diff abs_diff
7+
#else
8+
9+
#define __CLC_BODY <clc/integer/clc_abs_diff.inc>
10+
#include <clc/integer/gentype.inc>
11+
12+
#endif
13+
14+
#endif // __CLC_INTEGER_CLC_ABS_DIFF_H__
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
_CLC_OVERLOAD _CLC_DECL __CLC_U_GENTYPE __clc_abs_diff(__CLC_GENTYPE x,
2+
__CLC_GENTYPE y);

libclc/clc/lib/generic/SOURCES

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,24 @@
11
geometric/clc_dot.cl
2+
integer/clc_abs.cl
3+
integer/clc_abs_diff.cl
4+
relational/clc_all.cl
5+
relational/clc_any.cl
6+
relational/clc_bitselect.cl
7+
relational/clc_isequal.cl
8+
relational/clc_isfinite.cl
9+
relational/clc_isgreater.cl
10+
relational/clc_isgreaterequal.cl
11+
relational/clc_isinf.cl
12+
relational/clc_isless.cl
13+
relational/clc_islessequal.cl
14+
relational/clc_islessgreater.cl
15+
relational/clc_isnan.cl
16+
relational/clc_isnormal.cl
17+
relational/clc_isnotequal.cl
18+
relational/clc_isordered.cl
19+
relational/clc_isunordered.cl
20+
relational/clc_select.cl
21+
relational/clc_signbit.cl
222
shared/clc_clamp.cl
323
shared/clc_max.cl
424
shared/clc_min.cl
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#include <clc/internal/clc.h>
2+
3+
#define __CLC_BODY <clc_abs.inc>
4+
#include <clc/integer/gentype.inc>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE __clc_abs(__CLC_GENTYPE x) {
2+
return __builtin_astype((__CLC_GENTYPE)(x > (__CLC_GENTYPE)(0) ? x : -x),
3+
__CLC_U_GENTYPE);
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#include <clc/internal/clc.h>
2+
3+
#define __CLC_BODY <clc_abs_diff.inc>
4+
#include <clc/integer/gentype.inc>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE __clc_abs_diff(__CLC_GENTYPE x,
2+
__CLC_GENTYPE y) {
3+
__CLC_U_GENTYPE ux = __builtin_astype(x, __CLC_U_GENTYPE);
4+
__CLC_U_GENTYPE uy = __builtin_astype(y, __CLC_U_GENTYPE);
5+
return x > y ? ux - uy : uy - ux;
6+
}

libclc/generic/lib/integer/abs.cl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <clc/clc.h>
2-
#include <core/clc_core.h>
3-
#include <spirv/spirv.h>
2+
#include <clc/integer/clc_abs.h>
43

54
#define __CLC_BODY <abs.inc>
65
#include <clc/integer/gentype.inc>

libclc/generic/lib/integer/abs.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE abs(__CLC_GENTYPE x) {
2-
return __builtin_astype((__CLC_GENTYPE)(x > (__CLC_GENTYPE)(0) ? x : -x), __CLC_U_GENTYPE);
2+
return __clc_abs(x);
33
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <clc/clc.h>
2-
#include <core/clc_core.h>
3-
#include <spirv/spirv.h>
2+
#include <clc/integer/clc_abs_diff.h>
43

54
#define __CLC_BODY <abs_diff.inc>
65
#include <clc/integer/gentype.inc>
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE abs_diff(__CLC_GENTYPE x, __CLC_GENTYPE y) {
2-
__CLC_U_GENTYPE ux = __builtin_astype(x, __CLC_U_GENTYPE);
3-
__CLC_U_GENTYPE uy = __builtin_astype(y, __CLC_U_GENTYPE);
4-
return x > y ? ux - uy : uy - ux;
2+
return __clc_abs_diff(x, y);
53
}

libclc/generic/lib/math/clc_ldexp.cl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
* THE SOFTWARE.
2121
*/
2222

23-
#include "../clcmacro.h"
2423
#include "config.h"
2524
#include "math.h"
2625
#include <clc/clc.h>
26+
#include <clc/clcmacro.h>
27+
#include <clc/relational/clc_isinf.h>
28+
#include <clc/relational/clc_isnan.h>
2729
#include <clc/shared/clc_clamp.h>
2830

2931
_CLC_DEF _CLC_OVERLOAD float __clc_ldexp(float x, int n) {
Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,7 @@
11
#include <clc/clc.h>
2-
#include <spirv/spirv.h>
3-
#include "relational.h"
2+
#include <clc/relational/clc_isinf.h>
43

5-
_CLC_DEFINE_RELATIONAL_UNARY(int, isinf, __spirv_IsInf, float)
4+
#define FUNCTION isinf
5+
#define __CLC_BODY "unary_def.inc"
66

7-
#ifdef cl_khr_fp64
8-
9-
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
10-
11-
// The scalar version of isinf(double) returns an int, but the vector versions
12-
// return long.
13-
_CLC_DEF _CLC_OVERLOAD int isinf(double x) {
14-
return __spirv_IsInf(x);
15-
}
16-
17-
_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(long, isinf, double)
18-
#endif
19-
20-
#ifdef cl_khr_fp16
21-
22-
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
23-
24-
// The scalar version of isinf(half) returns an int, but the vector versions
25-
// return short.
26-
_CLC_DEF _CLC_OVERLOAD int isinf(half x) {
27-
return __spirv_IsInf(x);
28-
}
29-
30-
_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(short, isinf, half)
31-
#endif
7+
#include <clc/relational/floatn.inc>
Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,7 @@
11
#include <clc/clc.h>
2-
#include <spirv/spirv.h>
3-
#include "relational.h"
2+
#include <clc/relational/clc_isnan.h>
43

5-
_CLC_DEFINE_RELATIONAL_UNARY(int, isnan, __spirv_IsNan, float)
4+
#define FUNCTION isnan
5+
#define __CLC_BODY "unary_def.inc"
66

7-
#ifdef cl_khr_fp64
8-
9-
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
10-
11-
// The scalar version of isnan(double) returns an int, but the vector versions
12-
// return long.
13-
_CLC_DEF _CLC_OVERLOAD int isnan(double x) {
14-
return __spirv_IsNan(x);
15-
}
16-
17-
_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(long, isnan, double)
18-
19-
#endif
20-
21-
#ifdef cl_khr_fp16
22-
23-
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
24-
25-
// The scalar version of isnan(half) returns an int, but the vector versions
26-
// return short.
27-
_CLC_DEF _CLC_OVERLOAD int isnan(half x) {
28-
return __spirv_IsNan(x);
29-
}
30-
31-
_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(short, isnan, half)
32-
33-
#endif
7+
#include <clc/relational/floatn.inc>

libclc/generic/libspirv/SOURCES

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ common/radians.cl
2727
common/sign.cl
2828
common/smoothstep.cl
2929
common/step.cl
30-
core/integer/clc_abs.cl
31-
core/integer/clc_abs_diff.cl
3230
core/integer/clc_add_sat.cl
3331
core/integer/clc_hadd.cl
3432
core/integer/clc_mad24.cl

libclc/generic/libspirv/core/integer/clc_abs.cl

Lines changed: 0 additions & 12 deletions
This file was deleted.

libclc/generic/libspirv/core/integer/clc_abs.inc

Lines changed: 0 additions & 12 deletions
This file was deleted.

libclc/generic/libspirv/core/integer/clc_abs_diff.cl

Lines changed: 0 additions & 12 deletions
This file was deleted.

libclc/generic/libspirv/core/integer/clc_abs_diff.inc

Lines changed: 0 additions & 14 deletions
This file was deleted.

libclc/generic/libspirv/integer/abs.cl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include <core/clc_core.h>
9+
#include <clc/internal/clc.h>
10+
#include <clc/integer/clc_abs.h>
1011
#include <spirv/spirv.h>
1112

1213
#define __CLC_BODY <abs.inc>

libclc/generic/libspirv/integer/abs_diff.cl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include <core/clc_core.h>
9+
#include <clc/internal/clc.h>
10+
#include <clc/integer/clc_abs_diff.h>
1011
#include <spirv/spirv.h>
1112

1213
#define __CLC_BODY <abs_diff.inc>

libclc/generic/libspirv/math/clc_exp10.cl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_exp10(float x)
6464
const float R_LOG10_2_BY_64_TL = 0x1.04d426p-18f; // log2/(64 * log10) tail : 0.00000388665057
6565
const float R_LN10 = 0x1.26bb1cp+1f;
6666

67-
int return_nan = __spirv_IsNan(x);
67+
int return_nan = __clc_isnan(x);
6868
int return_inf = x > X_MAX;
6969
int return_zero = x < X_MIN;
7070

@@ -143,7 +143,7 @@ _CLC_DEF _CLC_OVERLOAD double __clc_exp10(double x)
143143
z2 = __spirv_ocl_ldexp(z2, m);
144144
z2 = small_value ? z3: z2;
145145

146-
z2 = __spirv_IsNan(x) ? x : z2;
146+
z2 = __clc_isnan(x) ? x : z2;
147147

148148
z2 = x > X_MAX ? as_double(PINFBITPATT_DP64) : z2;
149149
z2 = x < X_MIN ? 0.0 : z2;

libclc/generic/libspirv/math/clc_fma.cl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
*/
2222

2323
#include <clc/clcmacro.h>
24+
#include <clc/integer/clc_abs.h>
25+
#include <clc/relational/clc_isinf.h>
26+
#include <clc/relational/clc_isnan.h>
27+
#include <clc/shared/clc_max.h>
2428
#include <config.h>
2529
#include <core/clc_core.h>
2630
#include <math/math.h>
@@ -34,12 +38,12 @@ struct fp {
3438

3539
_CLC_DEF _CLC_OVERLOAD float __clc_sw_fma(float a, float b, float c) {
3640
/* special cases */
37-
if (__spirv_IsNan(a) || __spirv_IsNan(b) || __spirv_IsNan(c) ||
38-
__spirv_IsInf(a) || __spirv_IsInf(b))
41+
if (__clc_isnan(a) || __clc_isnan(b) || __clc_isnan(c) || __clc_isinf(a) ||
42+
__clc_isinf(b))
3943
return __spirv_ocl_mad(a, b, c);
4044

4145
/* If only c is inf, and both a,b are regular numbers, the result is c*/
42-
if (__spirv_IsInf(c))
46+
if (__clc_isinf(c))
4347
return c;
4448

4549
a = __clc_flush_denormal_if_not_supported(a);

libclc/generic/libspirv/math/clc_hypot.cl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
#include <spirv/spirv.h>
1010

1111
#include <clc/clc.h>
12-
#include <clc/shared/clc_clamp.h>
1312
#include <clc/clcmacro.h>
13+
#include <clc/integer/clc_abs.h>
14+
#include <clc/relational/clc_isnan.h>
15+
#include <clc/shared/clc_clamp.h>
1416
#include <config.h>
1517
#include <math/clc_hypot.h>
1618
#include <math/math.h>
@@ -69,12 +71,12 @@ _CLC_DEF _CLC_OVERLOAD double __clc_hypot(double x, double y) {
6971

7072
// If the difference in exponents between x and y is large
7173
double s = x + y;
72-
c = __spirv_ocl_s_abs(xexp - yexp) > MANTLENGTH_DP64 + 1;
74+
c = __clc_abs(xexp - yexp) > MANTLENGTH_DP64 + 1;
7375
r = c ? s : r;
7476

7577
// Check for NaN
7678
// c = x != x | y != y;
77-
c = __spirv_IsNan(x) | __spirv_IsNan(y);
79+
c = __clc_isnan(x) | __clc_isnan(y);
7880
r = c ? as_double(QNANBITPATT_DP64) : r;
7981

8082
// If either is Inf, we must return Inf

libclc/generic/libspirv/math/clc_ldexp.cl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
#include "tables.h"
2727
#include <clc/clcmacro.h>
28+
#include <clc/relational/clc_isinf.h>
29+
#include <clc/relational/clc_isnan.h>
2830
#include <config.h>
2931
#include <math/math.h>
3032

@@ -92,7 +94,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_ldexp(float x, int n) {
9294
val_ui = dexp == 0 ? dval_ui : val_ui;
9395
val_f = as_float(val_ui);
9496

95-
val_f = __spirv_IsNan(x) || __spirv_IsInf(x) || val_x == 0 ? x : val_f;
97+
val_f = __clc_isnan(x) || __clc_isinf(x) || val_x == 0 ? x : val_f;
9698
return val_f;
9799
}
98100

@@ -125,7 +127,7 @@ _CLC_DEF _CLC_OVERLOAD double __clc_ldexp(double x, int n) {
125127
mr = v == 0x7ff ? as_double(s | PINFBITPATT_DP64) : mr;
126128
mr = v < -53 ? as_double(s) : mr;
127129

128-
mr = ((n == 0) | __spirv_IsInf(x) | (x == 0)) ? x : mr;
130+
mr = ((n == 0) | __clc_isinf(x) | (x == 0)) ? x : mr;
129131
return mr;
130132
}
131133

0 commit comments

Comments
 (0)