aboutsummaryrefslogtreecommitdiff
path: root/gas/doc/c-pru.texi
blob: e77d5ccbb85a80c6d05cc1adbe413e835d40e0f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
@c Copyright (C) 2015-2024 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