We are using IPP version 18.104.22.168 on 4th generation (Haswell) Core i7 processor under INtime (5) operating system. Our code runs in 32-bit mode (INtime currently does not support 64-bit mode).
We are using static linkage (#include <ipp_h9.h> before #include <ipp.h>).
A call to ippsFFTInitAlloc_C_32fc causes an invalid opcode exception. This occurs inside h9_ippsFFTGetSize_C_32fc function when trying to execute what looks lik "les esp,edx" instruction. I now know that this is a VEX prefix instruction.
Note: When configuring IPP for AVX rather than AVX2 (using ipp_g9.h instead of ipp_h9.h) - everything works correctly. It so happens that g9_ippsFFTGetSize_C_32fc does not comprise that VEX instruction.
We verified that our processor supports AVX2 (ran the piece of code suggested by Intel for checking this).
Notwithstanding the statement at http://software.intel.com/en-us/articles/introduction-to-intel-advanced-vector-extensions saying that VEX instructions are not available in 32-bit mode, it seems that VEX instructions can be run in 32-bit mode (e.g. see http://software.intel.com/en-us/forums/topic/394196). If that is the case, this could be a bug (feature?) in IPP.