# 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). Supported arithmetic operations include addition, subtraction,
multiplication, division, negation, square root, max, and min. Operation
on double precision types is not permitted unless optimizing for a Pentium® 4 processor
system.

## 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. 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 Operations

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.