Paolo Bonzini wrote:
I'm not sure that it is *so* useful for a user to have access to it,
except for specialized cases:
As there's other means, it may not be that useful but for sure it's
extremely convenient.
2) selection operations on vectors, kind of (v1 <= v2 ? v3 : v4). These
can be written for example like this:
cmpleps xmm1, xmm2 ; xmm1 = xmm1 <= xmm2 ? all-ones : 0
andnps xmm4, xmm1 ; xmm4 = xmm1 <= xmm2 ? 0 : xmm4
andps xmm1, xmm3 ; xmm1 = xmm1 <= xmm2 ? xmm3 : 0
orps xmm1, xmm4 ; xmm1 = xmm1 <= xmm2 ? xmm3 : xmm4
I suppose you'll find such variant of a conditional move pattern in
every piece of SSE code.
But you can't condense bitwise vs float usage to a few patterns because
when writing SSE, the efficiency of those operations is taken for granted.
If we have a good extension for vector arithmetic, we should aim at
improving it consistently rather than extending it in unpredictable
ways. For example, another useful extension would be the ability to
access vectors by item using x[n] (at least with constant expressions).
Yes, yes and yes.