|
6 | 6 | //
|
7 | 7 | //===----------------------------------------------------------------------===//
|
8 | 8 |
|
9 |
| -#include <clc/clc_convert.h> |
10 |
| -#include <clc/relational/clc_all.h> |
| 9 | +#include <clc/geometric/clc_normalize.h> |
11 | 10 | #include <libspirv/spirv.h>
|
12 | 11 |
|
13 |
| -#define HALF_MAX_SQRT 0x1.0p+8h |
14 |
| -#define HALF_MIN_SQRT 0x1.0p-8h |
| 12 | +#define FUNCTION __spirv_ocl_normalize |
| 13 | +#define __IMPL_FUNCTION(x) __clc_normalize |
| 14 | +#define __CLC_GEOMETRIC_RET_GENTYPE |
| 15 | +#define __CLC_BODY <clc/geometric/unary_def.inc> |
15 | 16 |
|
16 |
| -#define _CLC_SPIRV_NORMALIZE_IMPL(FP_TYPE, FLOAT_MARK, INT_TYPE, VLEN, \ |
17 |
| - MAX_SQRT, MIN_SQRT) \ |
18 |
| - _CLC_OVERLOAD _CLC_DEF FP_TYPE##VLEN __spirv_ocl_normalize( \ |
19 |
| - FP_TYPE##VLEN p) { \ |
20 |
| - if (__clc_all(p == (FP_TYPE##VLEN)0.0##FLOAT_MARK)) \ |
21 |
| - return p; \ |
22 |
| - FP_TYPE l2 = __spirv_Dot(p, p); \ |
23 |
| - if (l2 < FLT_MIN) { \ |
24 |
| - p *= MAX_SQRT; \ |
25 |
| - l2 = __spirv_Dot(p, p); \ |
26 |
| - } else if (l2 == INFINITY) { \ |
27 |
| - p *= MIN_SQRT; \ |
28 |
| - l2 = __spirv_Dot(p, p); \ |
29 |
| - if (l2 == INFINITY) { \ |
30 |
| - p = __spirv_ocl_copysign( \ |
31 |
| - __spirv_ocl_select( \ |
32 |
| - (FP_TYPE##VLEN)0.0##FLOAT_MARK, \ |
33 |
| - (FP_TYPE##VLEN)1.0##FLOAT_MARK, \ |
34 |
| - __clc_convert_##INT_TYPE##VLEN(__spirv_IsInf(p))), \ |
35 |
| - p); \ |
36 |
| - l2 = __spirv_Dot(p, p); \ |
37 |
| - } \ |
38 |
| - } \ |
39 |
| - return p * __spirv_ocl_rsqrt(l2); \ |
40 |
| - } |
41 |
| - |
42 |
| -#define _CLC_SPIRV_NORMALIZE(VLEN) \ |
43 |
| - _CLC_SPIRV_NORMALIZE_IMPL(float, f, int, VLEN, 0x1.0p+86F, 0x1.0p-65f) |
44 |
| - |
45 |
| -_CLC_OVERLOAD _CLC_DEF float __spirv_ocl_normalize(float p) { |
46 |
| - return __spirv_ocl_sign(p); |
47 |
| -} |
48 |
| - |
49 |
| -_CLC_SPIRV_NORMALIZE(2) |
50 |
| -_CLC_SPIRV_NORMALIZE(3) |
51 |
| -_CLC_SPIRV_NORMALIZE(4) |
52 |
| - |
53 |
| -#undef _CLC_SPIRV_NORMALIZE |
54 |
| - |
55 |
| -#ifdef cl_khr_fp64 |
56 |
| - |
57 |
| -#pragma OPENCL EXTENSION cl_khr_fp64 : enable |
58 |
| - |
59 |
| -#define _CLC_SPIRV_NORMALIZE(VLEN) \ |
60 |
| - _CLC_SPIRV_NORMALIZE_IMPL(double, , long, VLEN, 0x1.0p+563, 0x1.0p-513) |
61 |
| - |
62 |
| -_CLC_OVERLOAD _CLC_DEF double __spirv_ocl_normalize(double p) { |
63 |
| - return __spirv_ocl_sign(p); |
64 |
| -} |
65 |
| - |
66 |
| -_CLC_SPIRV_NORMALIZE(2) |
67 |
| -_CLC_SPIRV_NORMALIZE(3) |
68 |
| -_CLC_SPIRV_NORMALIZE(4) |
69 |
| - |
70 |
| -#undef _CLC_SPIRV_NORMALIZE |
71 |
| - |
72 |
| -#endif |
73 |
| - |
74 |
| -#ifdef cl_khr_fp16 |
75 |
| - |
76 |
| -#pragma OPENCL EXTENSION cl_khr_fp16 : enable |
77 |
| - |
78 |
| -#define _CLC_SPIRV_NORMALIZE(VLEN) \ |
79 |
| - _CLC_SPIRV_NORMALIZE_IMPL(half, h, short, VLEN, HALF_MAX_SQRT, HALF_MIN_SQRT) |
80 |
| - |
81 |
| -_CLC_OVERLOAD _CLC_DEF half __spirv_ocl_normalize(half p) { |
82 |
| - return __spirv_ocl_sign(p); |
83 |
| -} |
84 |
| - |
85 |
| -_CLC_SPIRV_NORMALIZE(2) |
86 |
| -_CLC_SPIRV_NORMALIZE(3) |
87 |
| -_CLC_SPIRV_NORMALIZE(4) |
88 |
| - |
89 |
| -#undef _CLC_SPIRV_NORMALIZE |
90 |
| - |
91 |
| -#endif |
| 17 | +#include <clc/math/gentype.inc> |
0 commit comments