Dependency Violations and Assembly Modes

Dependency violations occur when instructions within an instruction group access the same resource register, including registers that appear as implicit operands. Dependency violations result in architecturally undefined behavior. The assembler can detect and eliminate dependency violations that occur within instruction groups, depending on its mode.

The assembler reads and processes assembly code in one of two modes: explicit and automatic.

Use explicit mode if you are an expert user with profound knowledge of Itanium(TM) architecture or performance is important. In explicit mode, you are responsible for bundling and stops (;;), and the assembler generates errors where it finds dependency violations.

Use automatic mode if you are a novice user or performance is not the highest consideration. In automatic mode, the assembler bundles the code and adds stops to avoid dependency violations. It ignores existing stops and annotations.

You can mix code from both modes in the one file. Set the mode using the command-line option or the directives .auto and .explicit. The directive .default causes the assembler to revert to the mode of operation defined in the command line.

For a complete description of the rules of data dependencies, see the Intel® Itanium(TM) Architecture Software Developer’s Manual.

This feature may not be currently supported by all assemblers.