libclc: generic: add half implementation for erf/erfc (#66901)

libclc does not have a half implementation for erf/erfc
Add one based on the float implementation by extending the input and
truncating the output.

GitOrigin-RevId: 9160f49e08af4267efdc870a1c9a434bfd155ae3
diff --git a/generic/lib/math/erf.cl b/generic/lib/math/erf.cl
index 3dc82d9..2c395ce 100644
--- a/generic/lib/math/erf.cl
+++ b/generic/lib/math/erf.cl
@@ -399,4 +399,16 @@
 
 _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, erf, double);
 
+#ifdef cl_khr_fp16
+
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+
+_CLC_OVERLOAD _CLC_DEF half erf(half h) {
+    return (half)erf((float)h);
+}
+
+_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, erf, half);
+
+#endif
+
 #endif
diff --git a/generic/lib/math/erfc.cl b/generic/lib/math/erfc.cl
index c322f86..cd35ea8 100644
--- a/generic/lib/math/erfc.cl
+++ b/generic/lib/math/erfc.cl
@@ -410,4 +410,16 @@
 
 _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, erfc, double);
 
+#ifdef cl_khr_fp16
+
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+
+_CLC_OVERLOAD _CLC_DEF half erfc(half h) {
+    return (half)erfc((float)h);
+}
+
+_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, erfc, half);
+
+#endif
+
 #endif