Clang supports the half datatype everywhere, in the sense that the front-end and optimizers can handle it. (Only a few back-ends can actually generate code for it.)

However, all that OpenCL requires is being able to load and store these from/to memory, converting to/from float. There is explicit code to do so in vload_half/vload_store, so that this should now work on all architectures. (The code would not be very efficient in the absence of special machine instructions.)