On 1/15/2012 12:09 AM, Walter Bright wrote:
On 1/14/2012 9:58 PM, Sean Cavanaugh wrote:
MS has three types, __m128, __m128i and __m128d (float, int, double)
Six if you count AVX's 256 forms.
On 1/7/2012 6:54 PM, Peter Alexander wrote:
On 7/01/12 9:28 PM, Andrei Alexandrescu wrote:
I agree with Manu that we should just have a single type like __m128 in
MSVC. The other types and their conversions should be solvable in a
library with something like strong typedefs.
The trouble with MS's scheme, is given the following:
__m128i v;
v += 2;
Can't tell what to do. With D,
int4 v;
v += 2;
it's clear (add 2 to each of the 4 ints).
Working with their intrinsics in their raw form for real code is pure
insanity :) You need to wrap it all with a good math library (even if
90% of the library is the intrinsics wrapped into __forceinlined
functions), so you can start having sensible operator overloads, and so
you can write code that is readable.
if (any4(a > b))
{
// do stuff
}
is way way way better than (pseudocode)
if (__movemask_ps(_mm_gt_ps(a, b)) == 0x0F)
{
}
and (if the ternary operator was overrideable in C++)
float4 foo = (a > b) ? c : d;
would be better than
float4 mask = _mm_gt_ps(a, b);
float4 foo = _mm_or_ps(_mm_and_ps(mask, c), _mm_nand_ps_(mask, d));