The vectorizable operations are different for floating point and integer data.
The statements within the loop body may contain float operations (typically on arrays). Arithmetic operations are limited to addition, subtraction, multiplication, division, negation, square root, max, and min.
The statements within the loop body may contain char, unsigned char, short, unsigned short, int, and unsigned int. Calls to functions such as sqrt and fabs are also supported. Arithmetic operations are limited to addition, subtraction, bitwise AND, OR, and XOR operators, division (16-bit only), multiplication (16-bit only), min, and max.
You can mix data types only if the conversion can be done without a loss of precision. Some example operators where you can mix data types are multiplication, shift, or unary operators.
No statements other than the preceding floating point and integer operations are allowed. In particular, note that the special __m64 and __m128 datatypes are not vectorizable.
The loop body cannot contain any function calls. Use of the Streaming SIMD Extensions intrinsics ( _mm_add_ps) are not allowed.