1 /* { dg-do compile { target lp64 } } */
2 /* { dg-options "-O2 -msse2" } */
6 #define SIZE (sizeof (void *))
8 static int foo(unsigned char (*foo
)[SIZE
])
10 __m128i acc
= _mm_set_epi32(0, 0, 0, 0);
12 for(; i
+ sizeof(__m128i
) <= SIZE
; i
+= sizeof(__m128i
)) {
14 __builtin_memcpy(&word
, foo
+ i
, sizeof(__m128i
));
15 acc
= _mm_add_epi32(word
, acc
);
18 __m128i word
= _mm_set_epi32(0, 0, 0, 0);
19 __builtin_memcpy(&word
, foo
+ i
, SIZE
- i
); // (1)
20 acc
= _mm_add_epi32(word
, acc
);
23 __builtin_memcpy(&res
, &acc
, sizeof(res
));
29 unsigned char buf
[SIZE
];
30 __builtin_memcpy(buf
, &ptr
, SIZE
);
31 return foo((unsigned char(*)[SIZE
])buf
);
34 /* { dg-final { scan-assembler-times "mov" 1 } } */