On 11/18/12 12:21, Manu wrote:
> I've often wondered about having an official 'half' type.
> It's very common in rendering/image processing, supported by most video cards 
> (so compression routines interacting with this type are common), and it's 
> also supported in hardware by some cpu's.
> 
> ARM for instance supports 'half's in hardware, and GCC has an __fp16 type 
> which would map nicely if D supported the type in the front end.
> 
> The alternative us to use ushort everywhere, which is awkward, because it is 
> neither unsigned, nor is it an integer, and it's not typesafe (allows direct 
> assignment to ints and stuff)...
> It would be nice if: cast(half)someFloat would yield the proper value, even 
> if it is performed in software in most architectures, it could be mapped to 
> hardware for those that do it.
> 
> It could be done in a library, but then GCC couldn't map it properly to the 
> hardware type, and since D has no way to describe implicit casts (that I know 
> of?) it becomes awkward to use.
> someFloat = someHalf <- doesn't work, because a cast operator expects an 
> explicit cast, even though this is a lossless conversion and should be 
> exactly the same as someDouble = someFloat.
> 
> Thoughts?

   version (GNU) alias half = @gcc[mode(HF)] float;

But of course this won't work right now, cause that kind of type attributes
aren't supported yet. 'pragma' can't be used on types either (otherwise
something like "alias half = pragma(attribute, mode("HF")) float;" could be
made to work).

And - yes - the /proper/ way would be eg
   
   alias half = @core[size=2] float; 
         // or '@core.size(2)' or any other syntax.

For now, a struct + alias-this-getter might be enough, for a s/w implementation.

artur

Reply via email to