@c Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.@c This is part of the GAS manual.@c For copying conditions, see the file as.texinfo.@c@ifset GENERIC@page@node Xtensa-Dependent@chapter Xtensa Dependent Features@end ifset@ifclear GENERIC@node Machine Dependencies@chapter Xtensa Dependent Features@end ifclear@cindex Xtensa architectureThis chapter covers features of the @sc{gnu} assembler that are specificto the Xtensa architecture. For details about the Xtensa instructionset, please consult the @cite{Xtensa Instruction Set Architecture (ISA)Reference Manual}.@menu* Xtensa Options:: Command-line Options.* Xtensa Syntax:: Assembler Syntax for Xtensa Processors.* Xtensa Optimizations:: Assembler Optimizations.* Xtensa Relaxation:: Other Automatic Transformations.* Xtensa Directives:: Directives for Xtensa Processors.@end menu@node Xtensa Options@section Command Line OptionsThe Xtensa version of the @sc{gnu} assembler supports thesespecial options:@table @code@item --text-section-literals | --no-text-section-literals@kindex --text-section-literals@kindex --no-text-section-literalsControl the treatment of literal pools. The default is@samp{--no-@-text-@-section-@-literals}, which places literals in aseparate section in the output file. This allows the literal pool to beplaced in a data RAM/ROM. With @samp{--text-@-section-@-literals}, theliterals are interspersed in the text section in order to keep them asclose as possible to their references. This may be necessary for largeassembly files, where the literals would otherwise be out of range of the@code{L32R} instructions in the text section. These options only affectliterals referenced via PC-relative @code{L32R} instructions; literalsfor absolute mode @code{L32R} instructions are handled separately.@item --absolute-literals | --no-absolute-literals@kindex --absolute-literals@kindex --no-absolute-literalsIndicate to the assembler whether @code{L32R} instructions use absoluteor PC-relative addressing. If the processor includes the absoluteaddressing option, the default is to use absolute @code{L32R}relocations. Otherwise, only the PC-relative @code{L32R} relocationscan be used.@item --target-align | --no-target-align@kindex --target-align@kindex --no-target-alignEnable or disable automatic alignment to reduce branch penalties at someexpense in code size. @xref{Xtensa Automatic Alignment, ,AutomaticInstruction Alignment}. This optimization is enabled by default. Notethat the assembler will always align instructions like @code{LOOP} thathave fixed alignment requirements.@item --longcalls | --no-longcalls@kindex --longcalls@kindex --no-longcallsEnable or disable transformation of call instructions to allow callsacross a greater range of addresses. @xref{Xtensa Call Relaxation,,Function Call Relaxation}. This option should be used when calltargets can potentially be out of range. It may degrade both code sizeand performance, but the linker can generally optimize away theunnecessary overhead when a call ends up within range. The default is@samp{--no-@-longcalls}.@item --transform | --no-transform@kindex --transform@kindex --no-transformEnable or disable all assembler transformations of Xtensa instructions,including both relaxation and optimization. The default is@samp{--transform}; @samp{--no-transform} should only be used in therare cases when the instructions must be exactly as specified in theassembly source. Using @samp{--no-transform} causes out of rangeinstruction operands to be errors.@item --rename-section @var{oldname}=@var{newname}@kindex --rename-sectionRename the @var{oldname} section to @var{newname}. This option can be usedmultiple times to rename multiple sections.@end table@node Xtensa Syntax@section Assembler Syntax@cindex syntax, Xtensa assembler@cindex Xtensa assembler syntax@cindex FLIX syntaxBlock comments are delimited by @samp{/*} and @samp{*/}. End of linecomments may be introduced with either @samp{#} or @samp{//}.Instructions consist of a leading opcode or macro name followed bywhitespace and an optional comma-separated list of operands:@smallexample@var{opcode} [@var{operand}, @dots{}]@end smallexampleInstructions must be separated by a newline or semicolon.FLIX instructions, which bundle multiple opcodes together in a singleinstruction, are specified by enclosing the bundled opcodes insidebraces:@smallexample@{[@var{format}]@var{opcode0} [@var{operands}]@var{opcode1} [@var{operands}]@var{opcode2} [@var{operands}]@dots{}@}@end smallexampleThe opcodes in a FLIX instruction are listed in the same order as thecorresponding instruction slots in the TIE format declaration.Directives and labels are not allowed inside the braces of a FLIXinstruction. A particular TIE format name can optionally be specifiedimmediately after the opening brace, but this is usually unnecessary.The assembler will automatically search for a format that can encode thespecified opcodes, so the format name need only be specified in rarecases where there is more than one applicable format and where itmatters which of those formats is used. A FLIX instruction can also bespecified on a single line by separating the opcodes with semicolons:@smallexample@{ [@var{format};] @var{opcode0} [@var{operands}]; @var{opcode1} [@var{operands}]; @var{opcode2} [@var{operands}]; @dots{} @}@end smallexampleThe assembler can automatically bundle opcodes into FLIX instructions.It encodes the opcodes in order, one at a time,choosing the smallest format where each opcode can be encoded andfilling unused instruction slots with no-ops.@menu* Xtensa Opcodes:: Opcode Naming Conventions.* Xtensa Registers:: Register Naming.@end menu@node Xtensa Opcodes@subsection Opcode Names@cindex Xtensa opcode names@cindex opcode names, XtensaSee the @cite{Xtensa Instruction Set Architecture (ISA) ReferenceManual} for a complete list of opcodes and descriptions of theirsemantics.@cindex _ opcode prefixIf an opcode name is prefixed with an underscore character (@samp{_}),@command{@value{AS}} will not transform that instruction in any way. Theunderscore prefix disables both optimization (@pxref{XtensaOptimizations, ,Xtensa Optimizations}) and relaxation (@pxref{XtensaRelaxation, ,Xtensa Relaxation}) for that particular instruction. Onlyuse the underscore prefix when it is essential to select the exactopcode produced by the assembler. Using this feature unnecessarilymakes the code less efficient by disabling assembler optimization andless flexible by disabling relaxation.Note that this special handling of underscore prefixes only applies toXtensa opcodes, not to either built-in macros or user-defined macros.When an underscore prefix is used with a macro (e.g., @code{_MOV}), itrefers to a different macro. The assembler generally provides built-inmacros both with and without the underscore prefix, where the underscoreversions behave as if the underscore carries through to the instructionsin the macros. For example, @code{_MOV} may expand to @code{_MOV.N}@.The underscore prefix only applies to individual instructions, not toseries of instructions. For example, if a series of instructions haveunderscore prefixes, the assembler will not transform the individualinstructions, but it may insert other instructions between them (e.g.,to align a @code{LOOP} instruction). To prevent the assembler frommodifying a series of instructions as a whole, use the@code{no-transform} directive. @xref{Transform Directive, ,transform}.@node Xtensa Registers@subsection Register Names@cindex Xtensa register names@cindex register names, Xtensa@cindex sp registerThe assembly syntax for a register file entry is the ``short'' name fora TIE register file followed by the index into that register file. Forexample, the general-purpose @code{AR} register file has a short name of@code{a}, so these registers are named @code{a0}@dots{}@code{a15}.As a special feature, @code{sp} is also supported as a synonym for@code{a1}. Additional registers may be added by processor configurationoptions and by designer-defined TIE extensions. An initial @samp{$}character is optional in all register names.@node Xtensa Optimizations@section Xtensa Optimizations@cindex optimizationsThe optimizations currently supported by @command{@value{AS}} aregeneration of density instructions where appropriate and automaticbranch target alignment.@menu* Density Instructions:: Using Density Instructions.* Xtensa Automatic Alignment:: Automatic Instruction Alignment.@end menu@node Density Instructions@subsection Using Density Instructions@cindex density instructionsThe Xtensa instruction set has a code density option that provides16-bit versions of some of the most commonly used opcodes. Use of theseopcodes can significantly reduce code size. When possible, theassembler automatically translates instructions from the coreXtensa instruction set into equivalent instructions from the Xtensa codedensity option. This translation can be disabled by using underscoreprefixes (@pxref{Xtensa Opcodes, ,Opcode Names}), by using the@samp{--no-transform} command-line option (@pxref{Xtensa Options, ,CommandLine Options}), or by using the @code{no-transform} directive(@pxref{Transform Directive, ,transform}).It is a good idea @emph{not} to use the density instructions directly.The assembler will automatically select dense instructions wherepossible. If you later need to use an Xtensa processor without the codedensity option, the same assembly code will then work without modification.@node Xtensa Automatic Alignment@subsection Automatic Instruction Alignment@cindex alignment of @code{LOOP} instructions@cindex alignment of @code{ENTRY} instructions@cindex alignment of branch targets@cindex @code{LOOP} instructions, alignment@cindex @code{ENTRY} instructions, alignment@cindex branch target alignmentThe Xtensa assembler will automatically align certain instructions, bothto optimize performance and to satisfy architectural requirements.As an optimization to improve performance, the assembler attempts toalign branch targets so they do not cross instruction fetch boundaries.(Xtensa processors can be configured with either 32-bit or 64-bitinstruction fetch widths.) Aninstruction immediately following a call is treated as a branch targetin this context, because it will be the target of a return from thecall. This alignment has the potential to reduce branch penalties atsome expense in code size. The assembler will not attempt to alignlabels with the prefixes @code{.Ln} and @code{.LM}, since these labelsare used for debugging information and are not typically branch targets.This optimization is enabled by default. You can disable it with the@samp{--no-target-@-align} command-line option (@pxref{Xtensa Options,,Command Line Options}).The target alignment optimization is done without adding instructionsthat could increase the execution time of the program. If there aredensity instructions in the code preceding a target, the assembler canchange the target alignment by widening some of those instructions tothe equivalent 24-bit instructions. Extra bytes of padding can beinserted immediately following unconditional jump and returninstructions.This approach is usually successful in aligning many, but not all,branch targets.The @code{LOOP} family of instructions must be aligned such that thefirst instruction in the loop body does not cross an instruction fetchboundary (e.g., with a 32-bit fetch width, a @code{LOOP} instructionmust be on either a 1 or 2 mod 4 byte boundary). The assembler knowsabout this restriction and inserts the minimal number of 2 or 3 byteno-op instructions to satisfy it. When no-op instructions are added,any label immediately preceding the original loop will be moved in orderto refer to the loop instruction, not the newly generated no-opinstruction. To preserve binary compatibility across processors withdifferent fetch widths, the assembler conservatively assumes a 32-bitfetch width when aligning @code{LOOP} instructions (except if the firstinstruction in the loop is a 64-bit instruction).Similarly, the @code{ENTRY} instruction must be aligned on a 0 mod 4byte boundary. The assembler satisfies this requirement by insertingzero bytes when required. In addition, labels immediately preceding the@code{ENTRY} instruction will be moved to the newly aligned instructionlocation.@node Xtensa Relaxation@section Xtensa Relaxation@cindex relaxationWhen an instruction operand is outside the range allowed for thatparticular instruction field, @command{@value{AS}} can transform the codeto use a functionally-equivalent instruction or sequence ofinstructions. This process is known as @dfn{relaxation}. This istypically done for branch instructions because the distance of thebranch targets is not known until assembly-time. The Xtensa assembleroffers branch relaxation and also extends this concept to functioncalls, @code{MOVI} instructions and other instructions with immediatefields.@menu* Xtensa Branch Relaxation:: Relaxation of Branches.* Xtensa Call Relaxation:: Relaxation of Function Calls.* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.@end menu@node Xtensa Branch Relaxation@subsection Conditional Branch Relaxation@cindex relaxation of branch instructions@cindex branch instructions, relaxationWhen the target of a branch is too far away from the branch itself,i.e., when the offset from the branch to the target is too large to fitin the immediate field of the branch instruction, it may be necessary toreplace the branch with a branch around a jump. For example,@smallexamplebeqz a2, L@end smallexamplemay result in:@smallexamplebnez.n a2, Mj LM:@end smallexample(The @code{BNEZ.N} instruction would be used in this example only if thedensity option is available. Otherwise, @code{BNEZ} would be used.)This relaxation works well because the unconditional jump instructionhas a much larger offset range than the various conditional branches.However, an error will occur if a branch target is beyond the range of ajump instruction. @command{@value{AS}} cannot relax unconditional jumps.Similarly, an error will occur if the original input contains anunconditional jump to a target that is out of range.Branch relaxation is enabled by default. It can be disabled by usingunderscore prefixes (@pxref{Xtensa Opcodes, ,Opcode Names}), the@samp{--no-transform} command-line option (@pxref{Xtensa Options,,Command Line Options}), or the @code{no-transform} directive(@pxref{Transform Directive, ,transform}).@node Xtensa Call Relaxation@subsection Function Call Relaxation@cindex relaxation of call instructions@cindex call instructions, relaxationFunction calls may require relaxation because the Xtensa immediate callinstructions (@code{CALL0}, @code{CALL4}, @code{CALL8} and@code{CALL12}) provide a PC-relative offset of only 512 Kbytes in eitherdirection. For larger programs, it may be necessary to use indirectcalls (@code{CALLX0}, @code{CALLX4}, @code{CALLX8} and @code{CALLX12})where the target address is specified in a register. The Xtensaassembler can automatically relax immediate call instructions intoindirect call instructions. This relaxation is done by loading theaddress of the called function into the callee's return address registerand then using a @code{CALLX} instruction. So, for example:@smallexamplecall8 func@end smallexamplemight be relaxed to:@smallexample.literal .L1, funcl32r a8, .L1callx8 a8@end smallexampleBecause the addresses of targets of function calls are not generallyknown until link-time, the assembler must assume the worst and relax allthe calls to functions in other source files, not just those that reallywill be out of range. The linker can recognize calls that wereunnecessarily relaxed, and it will remove the overhead introduced by theassembler for those cases where direct calls are sufficient.Call relaxation is disabled by default because it can have a negativeeffect on both code size and performance, although the linker canusually eliminate the unnecessary overhead. If a program is too largeand some of the calls are out of range, function call relaxation can beenabled using the @samp{--longcalls} command-line option or the@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}).@node Xtensa Immediate Relaxation@subsection Other Immediate Field Relaxation@cindex immediate fields, relaxation@cindex relaxation of immediate fieldsThe assembler normally performs the following other relaxations. Theycan be disabled by using underscore prefixes (@pxref{Xtensa Opcodes,,Opcode Names}), the @samp{--no-transform} command-line option(@pxref{Xtensa Options, ,Command Line Options}), or the@code{no-transform} directive (@pxref{Transform Directive, ,transform}).@cindex @code{MOVI} instructions, relaxation@cindex relaxation of @code{MOVI} instructionsThe @code{MOVI} machine instruction can only materialize values in therange from -2048 to 2047. Values outside this range are bestmaterialized with @code{L32R} instructions. Thus:@smallexamplemovi a0, 100000@end smallexampleis assembled into the following machine code:@smallexample.literal .L1, 100000l32r a0, .L1@end smallexample@cindex @code{L8UI} instructions, relaxation@cindex @code{L16SI} instructions, relaxation@cindex @code{L16UI} instructions, relaxation@cindex @code{L32I} instructions, relaxation@cindex relaxation of @code{L8UI} instructions@cindex relaxation of @code{L16SI} instructions@cindex relaxation of @code{L16UI} instructions@cindex relaxation of @code{L32I} instructionsThe @code{L8UI} machine instruction can only be used with immediateoffsets in the range from 0 to 255. The @code{L16SI} and @code{L16UI}machine instructions can only be used with offsets from 0 to 510. The@code{L32I} machine instruction can only be used with offsets from 0 to1020. A load offset outside these ranges can be materalized withan @code{L32R} instruction if the destination register of the loadis different than the source address register. For example:@smallexamplel32i a1, a0, 2040@end smallexampleis translated to:@smallexample.literal .L1, 2040l32r a1, .L1addi a1, a0, a1l32i a1, a1, 0@end smallexample@noindentIf the load destination and source address register are the same, anout-of-range offset causes an error.@cindex @code{ADDI} instructions, relaxation@cindex relaxation of @code{ADDI} instructionsThe Xtensa @code{ADDI} instruction only allows immediate operands in therange from -128 to 127. There are a number of alternate instructionsequences for the @code{ADDI} operation. First, if theimmediate is 0, the @code{ADDI} will be turned into a @code{MOV.N}instruction (or the equivalent @code{OR} instruction if the code densityoption is not available). If the @code{ADDI} immediate is outside ofthe range -128 to 127, but inside the range -32896 to 32639, an@code{ADDMI} instruction or @code{ADDMI}/@code{ADDI} sequence will beused. Finally, if the immediate is outside of this range and a freeregister is available, an @code{L32R}/@code{ADD} sequence will be usedwith a literal allocated from the literal pool.For example:@smallexampleaddi a5, a6, 0addi a5, a6, 512addi a5, a6, 513addi a5, a6, 50000@end smallexampleis assembled into the following:@smallexample.literal .L1, 50000mov.n a5, a6addmi a5, a6, 0x200addmi a5, a6, 0x200addi a5, a5, 1l32r a5, .L1add a5, a6, a5@end smallexample@node Xtensa Directives@section Directives@cindex Xtensa directives@cindex directives, XtensaThe Xtensa assember supports a region-based directive syntax:@smallexample.begin @var{directive} [@var{options}]@dots{}.end @var{directive}@end smallexampleAll the Xtensa-specific directives that apply to a region of code usethis syntax.The directive applies to code between the @code{.begin} and the@code{.end}. The state of the option after the @code{.end} reverts towhat it was before the @code{.begin}.A nested @code{.begin}/@code{.end} region can furtherchange the state of the directive without having to be aware of itsouter state. For example, consider:@smallexample.begin no-transformL: add a0, a1, a2.begin transformM: add a0, a1, a2.end transformN: add a0, a1, a2.end no-transform@end smallexampleThe @code{ADD} opcodes at @code{L} and @code{N} in the outer@code{no-transform} region both result in @code{ADD} machine instructions,but the assembler selects an @code{ADD.N} instruction for the@code{ADD} at @code{M} in the inner @code{transform} region.The advantage of this style is that it works well inside macros which canpreserve the context of their callers.The following directives are available:@menu* Schedule Directive:: Enable instruction scheduling.* Longcalls Directive:: Use Indirect Calls for Greater Range.* Transform Directive:: Disable All Assembler Transformations.* Literal Directive:: Intermix Literals with Instructions.* Literal Position Directive:: Specify Inline Literal Pool Locations.* Literal Prefix Directive:: Specify Literal Section Name Prefix.* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.@end menu@node Schedule Directive@subsection schedule@cindex @code{schedule} directive@cindex @code{no-schedule} directiveThe @code{schedule} directive is recognized only for compatibility withTensilica's assembler.@smallexample.begin [no-]schedule.end [no-]schedule@end smallexampleThis directive is ignored and has no effect on @command{@value{AS}}.@node Longcalls Directive@subsection longcalls@cindex @code{longcalls} directive@cindex @code{no-longcalls} directiveThe @code{longcalls} directive enables or disables function callrelaxation. @xref{Xtensa Call Relaxation, ,Function Call Relaxation}.@smallexample.begin [no-]longcalls.end [no-]longcalls@end smallexampleCall relaxation is disabled by default unless the @samp{--longcalls}command-line option is specified. The @code{longcalls} directiveoverrides the default determined by the command-line options.@node Transform Directive@subsection transform@cindex @code{transform} directive@cindex @code{no-transform} directiveThis directive enables or disables all assembler transformation,including relaxation (@pxref{Xtensa Relaxation, ,Xtensa Relaxation}) andoptimization (@pxref{Xtensa Optimizations, ,Xtensa Optimizations}).@smallexample.begin [no-]transform.end [no-]transform@end smallexampleTransformations are enabled by default unless the @samp{--no-transform}option is used. The @code{transform} directive overrides the defaultdetermined by the command-line options. An underscore opcode prefix,disabling transformation of that opcode, always takes precedence overboth directives and command-line flags.@node Literal Directive@subsection literal@cindex @code{literal} directiveThe @code{.literal} directive is used to define literal pool data, i.e.,read-only 32-bit data accessed via @code{L32R} instructions.@smallexample.literal @var{label}, @var{value}[, @var{value}@dots{}]@end smallexampleThis directive is similar to the standard @code{.word} directive, exceptthat the actual location of the literal data is determined by theassembler and linker, not by the position of the @code{.literal}directive. Using this directive gives the assembler freedom to locatethe literal data in the most appropriate place and possibly to combineidentical literals. For example, the code:@smallexampleentry sp, 40.literal .L1, syml32r a4, .L1@end smallexamplecan be used to load a pointer to the symbol @code{sym} into register@code{a4}. The value of @code{sym} will not be placed between the@code{ENTRY} and @code{L32R} instructions; instead, the assembler putsthe data in a literal pool.Literal pools for absolute mode @code{L32R} instructions(@pxref{Absolute Literals Directive}) are placed in a separate@code{.lit4} section. By default literal pools for PC-relative mode@code{L32R} instructions are placed in a separate @code{.literal}section; however, when using the @samp{--text-@-section-@-literals}option (@pxref{Xtensa Options, ,Command Line Options}), the literalpools are placed in the current section. These text section literalpools are created automatically before @code{ENTRY} instructions andmanually after @samp{.literal_position} directives (@pxref{LiteralPosition Directive, ,literal_position}). If there are no preceding@code{ENTRY} instructions, explicit @code{.literal_position} directivesmust be used to place the text section literal pools; otherwise,@command{@value{AS}} will report an error.@node Literal Position Directive@subsection literal_position@cindex @code{literal_position} directiveWhen using @samp{--text-@-section-@-literals} to place literals inlinein the section being assembled, the @code{.literal_position} directivecan be used to mark a potential location for a literal pool.@smallexample.literal_position@end smallexampleThe @code{.literal_position} directive is ignored when the@samp{--text-@-section-@-literals} option is not used or when@code{L32R} instructions use the absolute addressing mode.The assembler will automatically place text section literal poolsbefore @code{ENTRY} instructions, so the @code{.literal_position}directive is only needed to specify some other location for a literalpool. You may need to add an explicit jump instruction to skip over aninline literal pool.For example, an interrupt vector does not begin with an @code{ENTRY}instruction so the assembler will be unable to automatically find a goodplace to put a literal pool. Moreover, the code for the interruptvector must be at a specific starting address, so the literal poolcannot come before the start of the code. The literal pool for thevector must be explicitly positioned in the middle of the vector (beforeany uses of the literals, due to the negative offsets used byPC-relative @code{L32R} instructions). The @code{.literal_position}directive can be used to do this. In the following code, the literalfor @samp{M} will automatically be aligned correctly and is placed afterthe unconditional jump.@smallexample.global Mcode_start:j continue.literal_position.align 4continue:movi a4, M@end smallexample@node Literal Prefix Directive@subsection literal_prefix@cindex @code{literal_prefix} directiveThe @code{literal_prefix} directive allows you to specify differentsections to hold literals from different portions of an assembly file.With this directive, a single assembly file can be used to generate codeinto multiple sections, including literals generated by the assembler.@smallexample.begin literal_prefix [@var{name}].end literal_prefix@end smallexampleBy default the assembler places literal pools in sections separate fromthe instructions, using the default literal section names of@code{.literal} for PC-relative mode @code{L32R} instructions and@code{.lit4} for absolute mode @code{L32R} instructions (@pxref{AbsoluteLiterals Directive}). The @code{literal_prefix} directive causesdifferent literal sections to be used for the code inside the delimitedregion. The new literal sections are determined by including @var{name}as a prefix to the default literal section names. If the @var{name}argument is omitted, the literal sections revert to the defaults. Thisdirective has no effect when using the@samp{--text-@-section-@-literals} option (@pxref{Xtensa Options,,Command Line Options}).Except for two special cases, the assembler determines the new literalsections by simply prepending @var{name} to the default section names,resulting in @code{@var{name}.literal} and @code{@var{name}.lit4}sections. The @code{literal_prefix} directive is often used with thename of the current text section as the prefix argument. To facilitatethis usage, the assembler uses special case rules when it recognizes@var{name} as a text section name. First, if @var{name} ends with@code{.text}, that suffix is not included in the literal section name.For example, if @var{name} is @code{.iram0.text}, then the literalsections will be @code{.iram0.literal} and @code{.iram0.lit4}. Second,if @var{name} begins with @code{.gnu.linkonce.t.}, then the literalsection names are formed by replacing the @code{.t} substring with@code{.literal} and @code{.lit4}. For example, if @var{name} is@code{.gnu.linkonce.t.func}, the literal sections will be@code{.gnu.linkonce.literal.func} and @code{.gnu.linkonce.lit4.func}.@node Absolute Literals Directive@subsection absolute-literals@cindex @code{absolute-literals} directive@cindex @code{no-absolute-literals} directiveThe @code{absolute-@-literals} and @code{no-@-absolute-@-literals}directives control the absolute vs.@: PC-relative mode for @code{L32R}instructions. These are relevant only for Xtensa configurations thatinclude the absolute addressing option for @code{L32R} instructions.@smallexample.begin [no-]absolute-literals.end [no-]absolute-literals@end smallexampleThese directives do not change the @code{L32R} mode---they only causethe assembler to emit the appropriate kind of relocation for @code{L32R}instructions and to place the literal values in the appropriate section.To change the @code{L32R} mode, the program must write the@code{LITBASE} special register. It is the programmer's responsibilityto keep track of the mode and indicate to the assembler which mode isused in each region of code.If the Xtensa configuration includes the absolute @code{L32R} addressingoption, the default is to assume absolute @code{L32R} addressing unlessthe @samp{--no-@-absolute-@-literals} command-line option is specified.Otherwise, the default is to assume PC-relative @code{L32R} addressing.The @code{absolute-@-literals} directive can then be used to overridethe default determined by the command-line options.@c Local Variables:@c fill-column: 72@c End: