151 lines
3.8 KiB
Text
151 lines
3.8 KiB
Text
|
@c Copyright (C) 2015-2022 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
|