From Bugzilla Helper: User-Agent: Opera/8.50 (Windows NT 5.1; U; en) Description of problem: The sse2 instruction pminub and pmaxub uses unsigned as basic type. In some former versions of gcc, the signature of pminub128 uses signed (i.e. char) as basic type. It is possible to cast between the two vector type to avoid the: error: incompatible type for argument 1 of `__builtin_ia32_pminub128' but I need to know from which version of gcc this is fixed (in order to perform correct cast as function of gcc version). Version-Release number of selected component (if applicable): gcc 4.0.0 and gcc 3.x.y How reproducible: Always Steps to Reproduce: 1. (using gcc version 3.x.y) gcc -c -msse3 -O3 -Wall gcc_pminub128_bug.c 2. 3. Actual Results: gcc_pminub128_bug.c: In function `packed_min': gcc_pminub128_bug.c:4: error: incompatible type for argument 1 of `__builtin_ia32_pminub128' gcc_pminub128_bug.c:4: error: incompatible type for argument 2 of `__builtin_ia32_pminub128' gcc_pminub128_bug.c:4: error: incompatible types in return Expected Results: No errors Additional info: In essence, what I need is information for which version of gcc which uses signed vs. unsigned basic types for the vector argument to pminub128 and pmaxub128.
Created attachment 120457 [details] C source
That's user error. __builtin_ia32_* aren't meant to be used directly by the users and are subject to constant changes. The supported interface are the <{,x,e,p}mmintrin.h>, <mm_malloc.h> and <mm3dnow.h> inlines and macros. So, in this case you are looking for _mm_min_epu8 from <emmintrin.h>.