Statements in the Loop Body

The vectorizable operations are different for floating point and integer data.

Floating-point Array Operations

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.

Integer Array Operations

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.

Other Integer Operations

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.

Other Datatypes

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.

No Function Calls

The loop body cannot contain any function calls. Use of the Streaming SIMD Extensions intrinsics ( _mm_add_ps) are not allowed.