------- Comment #17 from sezeroz at gmail dot com  2010-07-14 14:02 -------
(In reply to comment #16)
> This is also the wrong result with MinGW gcc 3.4.5.
> I'm expecting that all component of v will be 2500.
> 
> 4.4.4 of MacPorts, 4.5.0 of MacPorts, 4.4.0 of MinGW and 4.5.0-1 of MinGW were
> worked fine.
> 
> This time, I did not check 3.4.6 of MacPorts.
> I tried to install gcc34 of MacPorts, but failed.
> 
> -- begin testcase --
> // g++ -O -msse2 test.cpp
> #include <xmmintrin.h>
> #include <emmintrin.h>
> 
> extern "C" int  printf (const char*, ...);
> 
> // There is no _mm_castps_si128() in gcc 3.4
> inline __m128i my_castps_si128(const __m128 & a)
> {
>         //return *(const __m128i *)&a; // same result
> 
>         union u {
>                 __m128  s;
>                 __m128i i;
>         };
>         const u & v = (const u &)a;
> 
>         return v.i;
> }
> 
> inline __m128 my_castsi128_ps(const __m128i & a)
> {
>         //return *(const __m128 *)&a; // same result
> 
>         union u {
>                 __m128  s;
>                 __m128i i;
>         };
>         const u & v = (const u &)a;
> 
>         return v.s;
> }
> 
> int main( int argc, char * argv[] )
> {
> 
>         union u {
>                 __m128i v;
>                 int     e[4];
>         };
>         __m128i a  = _mm_set1_epi32(1250);
>         __m128i b  = _mm_set1_epi32(2);
>         __m128i v0 = _mm_setzero_si128();
>         __m128i al = _mm_unpacklo_epi32(a, v0);
>         __m128i ah = _mm_unpackhi_epi32(a, v0);
>         __m128i bl = _mm_unpacklo_epi32(b, v0);
>         __m128i bh = _mm_unpackhi_epi32(b, v0);
>         __m128i lo = _mm_mul_epu32(al, bl);
>         __m128i hi = _mm_mul_epu32(ah, bh);
>         __m128  sl = my_castsi128_ps(lo);
>         __m128  sh = my_castsi128_ps(hi);
>         __m128  s  = _mm_shuffle_ps(sl, sh, 0x88); // 2, 0, 2, 0
>         __m128i r  = my_castps_si128(s);
> 
>         u & v = (u &)r;
>         printf("v: %d, %d, %d, %d\n", v.e[0], v.e[1], v.e[2], v.e[3]);
> 
>         return 0;
> }
> -- end testcase --
> 
> -- begin output --
> v: 0, 0, 2500, 2500
> -- end output --
> 


-- 

sezeroz at gmail dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |sezeroz at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44900

Reply via email to