Files
clang-p2996/libclc/generic/lib/geometric/dot.cl
Fraser Cormack b2bdd8bd39 [libclc] Create an internal 'clc' builtins library
Some libclc builtins currently use internal builtins prefixed with
'__clc_' for various reasons, e.g., to avoid naming clashes.

This commit formalizes this concept by starting to isolate the
definitions of these internal clc builtins into a separate
self-contained bytecode library, which is linked into each target's
libclc OpenCL builtins before optimization takes place.

The goal of this step is to allow additional libraries of builtins
that provide entry points (or bindings) that are not written in OpenCL C
but still wish to expose OpenCL-compatible builtins. By moving the
implementations into a separate self-contained library, entry points can
share as much code as possible without going through OpenCL C.

The overall structure of the internal clc library is similar to the
current OpenCL structure, with SOURCES files and targets being able to
override the definitions of builtins as needed. The idea is that the
OpenCL builtins will begin to need fewer target-specific overrides, as
those will slowly move over to the clc builtins instead.

Another advantage of having a separate bytecode library with the CLC
implementations is that we can internalize the symbols when linking it
(separately), whereas currently the CLC symbols make it into the final
builtins library (and perhaps even the final compiled binary).

This patch starts of with 'dot' as it's relatively self-contained, as
opposed to most of the maths builtins which tend to pull in other
builtins.

We can also start to clang-format the builtins as we go, which should
help to modernize the codebase.
2024-10-29 13:09:56 +00:00

61 lines
1.2 KiB
Common Lisp

#include <clc/clc.h>
#include <clc/geometric/clc_dot.h>
_CLC_OVERLOAD _CLC_DEF float dot(float p0, float p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF float dot(float2 p0, float2 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF float dot(float3 p0, float3 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF float dot(float4 p0, float4 p1) {
return __clc_dot(p0, p1);
}
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
_CLC_OVERLOAD _CLC_DEF double dot(double p0, double p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF double dot(double2 p0, double2 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF double dot(double3 p0, double3 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF double dot(double4 p0, double4 p1) {
return __clc_dot(p0, p1);
}
#endif
#ifdef cl_khr_fp16
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
_CLC_OVERLOAD _CLC_DEF half dot(half p0, half p1) { return __clc_dot(p0, p1); }
_CLC_OVERLOAD _CLC_DEF half dot(half2 p0, half2 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF half dot(half3 p0, half3 p1) {
return __clc_dot(p0, p1);
}
_CLC_OVERLOAD _CLC_DEF half dot(half4 p0, half4 p1) {
return __clc_dot(p0, p1);
}
#endif