http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54231
--- Comment #10 from Thiago Macieira <thiago at kde dot org> 2012-08-13
09:53:32 UTC ---
Another test:
$ cat main_avx.c
#define BZERO bzero_avx
#pragma GCC target ("avx")
#include "main.c"
$ cat main_sse2.c
#define BZERO bzero_sse2
#pragma GCC target ("sse2")
#include "main.c"
$ cat main.c
#include <immintrin.h>
void BZERO(char *ptr, size_t count)
{
__m128i zero = _mm_set1_epi8(0);
while (count--) {
_mm_stream_si128((__m128i*)ptr, zero);
ptr += 16;
}
}
$ gcc -flto -O2 -shared -o libtest.so main_avx.c main_sse2.c
$ objdump -Cdr --no-show-raw-insn libtest.so
[...]
0000000000000650 <bzero_sse2>:
650: test %rsi,%rsi
653: pxor %xmm0,%xmm0
657: je 66e <bzero_sse2+0x1e>
659: nopl 0x0(%rax)
660: movntdq %xmm0,(%rdi)
664: add $0x10,%rdi
668: sub $0x1,%rsi
66c: jne 660 <bzero_sse2+0x10>
66e: repz retq
0000000000000670 <bzero_avx>:
670: test %rsi,%rsi
673: pxor %xmm0,%xmm0
677: je 68e <bzero_avx+0x1e>
679: nopl 0x0(%rax)
680: movntdq %xmm0,(%rdi)
684: add $0x10,%rdi
688: sub $0x1,%rsi
68c: jne 680 <bzero_avx+0x10>
68e: repz retq