Fp16 api

Will do.

cl_khr_fp16 is either true of false, and can be used e.g. in #ifdef. __IF_FP16(x) either generates the code for x, or discards x. This makes it easier to include/exclude code, as it is shorter than #ifdef, and can be used inside macros as well.

__IF_FP16_API is an extension of the OpenCL API, meaning that half is now a full data type. There is no corresponding cl_* macro, but there probably should be, and __IF_FP16_API should be set depending on such a macro. I will leave this to you, as you are pushing for this standard extension.