MACRO-64 allows you to divide your program into sections called psects using the .PSECT directive. Psects are useful for organizing your program, and for low-level control over the linking process. More importantly, each psect falls into one of the following three categories: o CODE psects can contain only instructions. They contain no data. Psects in this category have the EXE and NOMIX psect attributes. o DATA psects can contain only data. They contain no instructions. Psects in this category have the NOEXE and NOMIX attributes. o MIXED psects can contain instructions, data, or both. Psects in this category have the MIX attribute. In addition, they may have either the EXE or NOEXE attribute. MACRO-64 categorizes psects because: o There is a significant performance compromise associated with mixing instructions and data in the same program section within the Alpha architecture. This is because the Alpha architecture typically maintains separate memory caches for instructions and data. o If you mix instructions and data, it is likely that instructions will migrate into the data cache and that data will migrate into the instruction cache. While this situation still yields correct results, the benefits of the instruction and data caches are diminished. Placing data in the instruction stream can also have detrimental effects on the instruction pipeline and the multiple instruction-issue capabilities that most Alpha systems employ. Since a code psect can contain only instructions and cannot contain arbitrary data, instructions you place in a CODE psect can be analyzed by the assembler optimizer and by the symbolic debugger. Since a mixed psect can contain arbitrary data as well as instructions, instructions you place in a mixed psect are not analyzed by the assembler optimizer or by the symbolic debugger. Instead, the assembler internally converts instructions in a mixed psect to an equivalent data representation. Because of the compromises associated with mixed psects, by default the assembler creates psects with the NOMIX psect attribute. If you need to place data in a psect that has the EXE attribute, or if you need to place instructions in a psect that has the NOEXE attribute, you must also specify the MIX attribute in the psect's definition. Note that unlike the other psect attributes, the MIX psect attribute is an assembly-time attribute. The MIX psect attribute does not appear in the psect definitions in your object module and it does not affect the linking process. You can use all assembler directives and instructions within mixed psects. While many assembler directives can be used within both code and data psects, data-storage directives cannot be used in code psects and instructions and instruction- storage directives cannot be used in data psects. If you place instructions or instruction-storage directives in a data psect, or if you place data-storage directives in a code psect, the assembler issues a diagnostic message. In summary, code psects may contain only storage for instructions and storage created by instruction directives. Data psects may contain only storage created by data directives. Mixed psects may contain either storage for instructions or data or both. There are no restrictions on the use of data directives in a mixed psect. However, the assembler converts instructions you place in a mixed psect to a data representation. Therefore, instructions in a mixed psect are not analyzed as instructions by either the assembler optimizer or the symbolic debugger.