If an opcode name is prefixed with an underscore character (‘ _ ’), as will not transform that instruction in any way. The underscore prefix disables both optimization (see Xtensa Optimizations ) and relaxation (see Xtensa Relaxation ) for that particular instruction. Only use the underscore prefix when it is essential to select the exact opcode produced by the assembler. Using this feature unnecessarily makes the code less efficient by disabling assembler optimization and less flexible by disabling relaxation.
Note that this special handling of underscore prefixes only applies to Xtensa opcodes, not to either built-in macros or user-defined macros. When an underscore prefix is used with a macro (e.g.,
), it refers to a different macro. The assembler generally provides built-in macros both with and without the underscore prefix, where the underscore versions behave as if the underscore carries through to the instructions in the macros. For example,
may expand to
The underscore prefix only applies to individual instructions, not to series of instructions. For example, if a series of instructions have underscore prefixes, the assembler will not transform the individual instructions, but it may insert other instructions between them (e.g., to align a
instruction). To prevent the assembler from modifying a series of instructions as a whole, use the
directive. See transform