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~