On 12/09/2015 01:32 AM, Li, Liang Z wrote:
I think you means the ' __attribute__((target("avx2")))', I have tried this way, the issue here is: without the ' -mavx2' option for gcc, there are compiling error: '__m256i undeclared', the __attribute__((target("avx2"))) can't solve this issue. Any idea?
You're right that you can't use the normal __m256i, as it doesn't get declared. But you can define the same type within the function itself.
Which is a simple matter of typedef long long __m256i __attribute__((vector_size(32))); From there, you might as well rely on other gcc extensions to instead write __m256i tmp0 = p[i + 0] | p[i + 1]; rather than obfuscating the code with AVX2_VEC_OR. r~