
2010/7/9 Sam Martin
Some operations wouldn't make much sense with Float, for instance the 'complement' function. What should it return? Also note that bit manipulation functions could cover only a small window of the value range. So it could happen that x .|. y = x, even though y is nonzero. Also rotation would be a destructive operation.
Perhaps I can illustrate this with an example. It's very common with SSE code to interpret a float as both a mask and a number. You can exchange the two freely.
For instance, in c-like pseudo code, you can write: float mask = myval == 0 ? 0x00000000 : 0xffffffff
Notwithstanding mask is compatible with float sizeof-wize you should assign it a different type so you won't accidentally return a value of 0xffffffff. It is cumbersome in C, and much more easier in Haskell. Then you specify your operations over masks and floats, bind them to SSE2 primitives and use them as you wish.