| @c Copyright (C) 2015-2021 Free Software Foundation, Inc. |
| @c This is part of the GAS manual. |
| @c For copying conditions, see the file as.texinfo. |
| @c man end |
| @ifset GENERIC |
| @page |
| @node PRU-Dependent |
| @chapter PRU Dependent Features |
| @end ifset |
| |
| @cindex PRU support |
| @menu |
| * PRU Options:: Options |
| * PRU Syntax:: Syntax |
| * PRU Relocations:: Relocations |
| * PRU Directives:: PRU Machine Directives |
| * PRU Opcodes:: Opcodes |
| @end menu |
| |
| @node PRU Options |
| @section Options |
| @cindex PRU options |
| @cindex options for PRU |
| |
| @c man begin OPTIONS |
| @table @gcctabopt |
| |
| @cindex @code{mlink-relax} command-line option, PRU |
| @item -mlink-relax |
| Assume that LD would optimize LDI32 instructions by checking the upper |
| 16 bits of the @var{expression}. If they are all zeros, then LD would |
| shorten the LDI32 instruction to a single LDI. In such case @code{@value{AS}} |
| will output DIFF relocations for diff expressions. |
| |
| @cindex @code{mno-link-relax} command-line option, PRU |
| @item -mno-link-relax |
| Assume that LD would not optimize LDI32 instructions. As a consequence, |
| DIFF relocations will not be emitted. |
| |
| @cindex @code{mno-warn-regname-label} command-line option, PRU |
| @item -mno-warn-regname-label |
| Do not warn if a label name matches a register name. Usually assembler |
| programmers will want this warning to be emitted. C compilers may want |
| to turn this off. |
| |
| @end table |
| @c man end |
| |
| @node PRU Syntax |
| @section Syntax |
| @menu |
| * PRU Chars:: Special Characters |
| @end menu |
| |
| |
| @node PRU Chars |
| @subsection Special Characters |
| |
| @cindex line comment character, PRU |
| @cindex PRU line comment character |
| @samp{#} and @samp{;} are the line comment characters. |
| |
| |
| @node PRU Relocations |
| @section PRU Machine Relocations |
| |
| @cindex machine relocations, PRU |
| @cindex PRU machine relocations |
| |
| @table @code |
| |
| @cindex @code{pmem} directive, PRU |
| @item %pmem(@var{expression}) |
| Convert @var{expression} from byte-address to a |
| word-address. In other words, shift right by two. |
| |
| @item %label(@var{expression}) |
| Mark the given operand as a label. This is useful if you need to jump to |
| a label that matches a register name. |
| |
| @smallexample |
| @group |
| r1: |
| jmp r1 ; Will jump to register R1 |
| jmp %label(r1) ; Will jump to label r1 |
| @end group |
| @end smallexample |
| |
| @end table |
| |
| |
| @node PRU Directives |
| @section PRU Machine Directives |
| |
| @cindex machine directives, PRU |
| @cindex PRU machine directives |
| |
| @table @code |
| |
| @cindex @code{align} directive, PRU |
| @item .align @var{expression} [, @var{expression}] |
| This is the generic @code{.align} directive, however |
| this aligns to a power of two. |
| |
| @cindex @code{word} directive, PRU |
| @item .word @var{expression} |
| Create an aligned constant 4 bytes in size. |
| |
| @cindex @code{dword} directive, PRU |
| @item .dword @var{expression} |
| Create an aligned constant 8 bytes in size. |
| |
| @cindex @code{2byte} directive, PRU |
| @item .2byte @var{expression} |
| Create an unaligned constant 2 bytes in size. |
| |
| @cindex @code{4byte} directive, PRU |
| @item .4byte @var{expression} |
| Create an unaligned constant 4 bytes in size. |
| |
| @cindex @code{8byte} directive, PRU |
| @item .8byte @var{expression} |
| Create an unaligned constant 8 bytes in size. |
| |
| @cindex @code{16byte} directive, PRU |
| @item .16byte @var{expression} |
| Create an unaligned constant 16 bytes in size. |
| |
| @cindex @code{set no_warn_regname_label} directive, PRU |
| @item .set no_warn_regname_label |
| Do not output warnings when a label name matches a register name. Equivalent |
| to passing the @code{-mno-warn-regname-label} command-line option. |
| |
| @end table |
| |
| @node PRU Opcodes |
| @section Opcodes |
| |
| @cindex PRU opcodes |
| @cindex opcodes for PRU |
| @code{@value{AS}} implements all the standard PRU core V3 opcodes in the |
| original pasm assembler. Older cores are not supported by @code{@value{AS}}. |
| |
| GAS also implements the LDI32 pseudo instruction for loading a 32-bit |
| immediate value into a register. |
| |
| @smallexample |
| ldi32 sp, __stack_top |
| ldi32 r14, 0x12345678 |
| @end smallexample |