------- 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

Reply via email to