------- Comment #1 from hjl dot tools at gmail dot com 2010-08-21 03:54 ------- [...@gnu-6 intrin]$ cat mulpd.c #include <stdlib.h> #include <string.h> #include <stdint.h> #include <emmintrin.h>
__m128d a; __m128d b; uint64_t av[] = {0x0, 0xfff8000000000000ULL}; uint64_t bv[] = {0xffefffffffffffffULL, 0x7fff2d4db6efd985ULL}; uint64_t expa[] = {0x8000000000000000ULL, 0xfff8000000000000ULL}; uint64_t expb[] = {0x8000000000000000ULL, 0x7fff2d4db6efd985ULL}; void check_mulpd(__m128d const* op0, __m128d const* op1, uint64_t *exp) { __m128d r = _mm_mul_pd (*op0, *op1);; if (memcmp (&r, exp, sizeof (r))) abort (); } int main() { memcpy(&a, av, sizeof(a)); memcpy(&b, bv, sizeof(b)); check_mulpd(&a, &b, expa); check_mulpd(&b, &a, expb); return 0; } [...@gnu-6 intrin]$ make gcc -g -o o0 mulpd.c gcc -g -O2 -o o2 mulpd.c ./o2 ./o0 make: *** [all] Aborted [...@gnu-6 intrin]$ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45365