Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / contrib / binutils-2.21 / gas / doc / c-msp430.texi
1 @c Copyright 2002, 2004, 2005 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
4 @ifset GENERIC
5 @page
6 @node MSP430-Dependent
7 @chapter MSP 430 Dependent Features
8 @end ifset
9 @ifclear GENERIC
10 @node Machine Dependencies
11 @chapter MSP 430 Dependent Features
12 @end ifclear
13
14 @cindex MSP 430 support
15 @cindex 430 support
16 @menu
17 * MSP430 Options::              Options
18 * MSP430 Syntax::               Syntax
19 * MSP430 Floating Point::       Floating Point
20 * MSP430 Directives::           MSP 430 Machine Directives
21 * MSP430 Opcodes::              Opcodes
22 * MSP430 Profiling Capability:: Profiling Capability
23 @end menu
24
25 @node MSP430 Options
26 @section Options
27 @cindex MSP 430 options (none)
28 @cindex options for MSP430 (none)
29 @table @code
30
31 @item -m
32 select the mpu arch. Currently has no effect.
33 @item -mP 
34 enables polymorph instructions handler.
35
36 @item -mQ 
37 enables relaxation at assembly time. DANGEROUS!
38
39 @end table
40
41 @node MSP430 Syntax
42 @section Syntax
43 @menu
44 * MSP430-Macros::               Macros
45 * MSP430-Chars::                Special Characters
46 * MSP430-Regs::                 Register Names
47 * MSP430-Ext::                  Assembler Extensions
48 @end menu
49
50 @node MSP430-Macros
51 @subsection Macros
52
53 @cindex Macros, MSP 430
54 @cindex MSP 430 macros
55 The macro syntax used on the MSP 430 is like that described in the MSP
56 430 Family Assembler Specification.  Normal @code{@value{AS}}
57 macros should still work.
58
59 Additional built-in macros are:
60
61 @table @code
62
63 @item llo(exp) 
64 Extracts least significant word from 32-bit expression 'exp'.
65
66 @item lhi(exp)
67 Extracts most significant word from 32-bit expression 'exp'.
68
69 @item hlo(exp)
70 Extracts 3rd word from 64-bit expression 'exp'.
71
72 @item   hhi(exp) 
73 Extracts 4rd word from 64-bit expression 'exp'.
74
75 @end table
76
77 They normally being used as an immediate source operand.
78 @smallexample
79     mov #llo(1), r10    ;       == mov  #1, r10 
80     mov #lhi(1), r10    ;       == mov  #0, r10
81 @end smallexample
82         
83 @node MSP430-Chars
84 @subsection Special Characters
85
86 @cindex line comment character, MSP 430
87 @cindex MSP 430 line comment character
88 @samp{;} is the line comment character.
89
90 @cindex identifiers, MSP 430
91 @cindex MSP 430 identifiers
92 The character @samp{$} in jump instructions indicates current location and 
93 implemented only for TI syntax compatibility.
94
95 @node MSP430-Regs
96 @subsection Register Names
97
98 @cindex MSP 430 register names
99 @cindex register names, MSP 430
100 General-purpose registers are represented by predefined symbols of the
101 form @samp{r@var{N}} (for global registers), where @var{N} represents
102 a number between @code{0} and @code{15}.  The leading
103 letters may be in either upper or lower case; for example, @samp{r13}
104 and @samp{R7} are both valid register names.
105
106 @cindex special purpose registers, MSP 430
107 Register names @samp{PC}, @samp{SP} and @samp{SR} cannot be used as register names
108 and will be treated as variables. Use @samp{r0}, @samp{r1}, and @samp{r2} instead.
109
110
111 @node MSP430-Ext
112 @subsection Assembler Extensions
113 @cindex MSP430 Assembler Extensions
114
115 @table @code
116
117 @item @@rN
118 As destination operand being treated as @samp{0(rn)}
119
120 @item 0(rN)
121 As source operand being treated as @samp{@@rn}
122
123 @item jCOND +N
124 Skips next N bytes followed by jump instruction and equivalent to
125 @samp{jCOND $+N+2}
126
127 @end table
128
129 Also, there are some instructions, which cannot be found in other assemblers.
130 These are branch instructions, which has different opcodes upon jump distance.
131 They all got PC relative addressing mode.
132
133 @table @code
134 @item   beq label
135 A polymorph instruction which is @samp{jeq label} in case if jump distance
136 within allowed range for cpu's jump instruction. If not, this unrolls into
137 a sequence of
138 @smallexample
139   jne $+6
140   br  label
141 @end smallexample
142
143 @item bne label
144 A polymorph instruction which is @samp{jne label} or @samp{jeq +4; br label}
145
146 @item blt label
147 A polymorph instruction which is @samp{jl label} or @samp{jge +4; br label}
148
149 @item bltn label
150 A polymorph instruction which is @samp{jn label} or @samp{jn +2; jmp +4; br label}
151
152 @item bltu label
153 A polymorph instruction which is @samp{jlo label} or @samp{jhs +2; br label}
154
155 @item bge label
156 A polymorph instruction which is @samp{jge label} or @samp{jl +4; br label}
157
158 @item bgeu label
159 A polymorph instruction which is @samp{jhs label} or @samp{jlo +4; br label}
160
161 @item bgt label
162 A polymorph instruction which is @samp{jeq +2; jge label} or @samp{jeq +6; jl  +4; br label}
163
164 @item bgtu label
165 A polymorph instruction which is @samp{jeq +2; jhs label} or @samp{jeq +6; jlo +4; br label}
166
167 @item bleu label
168 A polymorph instruction which is @samp{jeq label; jlo label} or @samp{jeq +2; jhs +4; br label}
169
170 @item ble label
171 A polymorph instruction which is @samp{jeq label; jl  label} or @samp{jeq +2; jge +4; br label}
172
173 @item jump label
174 A polymorph instruction which is @samp{jmp label} or @samp{br label}
175 @end table
176
177
178 @node MSP430 Floating Point
179 @section Floating Point
180
181 @cindex floating point, MSP 430 (@sc{ieee})
182 @cindex MSP 430 floating point (@sc{ieee})
183 The MSP 430 family uses @sc{ieee} 32-bit floating-point numbers.
184
185 @node MSP430 Directives
186 @section MSP 430 Machine Directives
187
188 @cindex machine directives, MSP 430
189 @cindex MSP 430 machine directives
190 @table @code
191 @cindex @code{file} directive, MSP 430
192 @item .file
193 This directive is ignored; it is accepted for compatibility with other
194 MSP 430 assemblers.
195
196 @quotation
197 @emph{Warning:} in other versions of the @sc{gnu} assembler, @code{.file} is
198 used for the directive called @code{.app-file} in the MSP 430 support.
199 @end quotation
200
201 @cindex @code{line} directive, MSP 430
202 @item .line
203 This directive is ignored; it is accepted for compatibility with other
204 MSP 430 assemblers.
205
206 @cindex @code{sect} directive, MSP 430
207 @item .arch
208 Currently this directive is ignored; it is accepted for compatibility with other
209 MSP 430 assemblers.
210
211 @cindex @code{profiler} directive, MSP 430
212 @item .profiler
213 This directive instructs assembler to add new profile entry to the object file.
214
215 @end table
216
217 @node MSP430 Opcodes
218 @section Opcodes
219
220 @cindex MSP 430 opcodes
221 @cindex opcodes for MSP 430
222 @code{@value{AS}} implements all the standard MSP 430 opcodes.  No
223 additional pseudo-instructions are needed on this family.
224
225 For information on the 430 machine instruction set, see @cite{MSP430
226 User's Manual, document slau049d}, Texas Instrument, Inc.
227
228 @node MSP430 Profiling Capability
229 @section Profiling Capability
230
231 @cindex MSP 430 profiling capability
232 @cindex profiling capability for MSP 430
233 It is a performance hit to use gcc's profiling approach for this tiny target.
234 Even more -- jtag hardware facility does not perform any profiling functions.
235 However we've got gdb's built-in simulator where we can do anything.
236
237 We define new section @samp{.profiler} which holds all profiling information.
238 We define new pseudo operation @samp{.profiler} which will instruct assembler to
239 add new profile entry to the object file. Profile should take place at the
240 present address.
241
242 Pseudo operation format:
243
244 @samp{.profiler flags,function_to_profile [, cycle_corrector, extra]}
245
246
247 where:
248
249 @table @code
250
251 @table @code
252
253 @samp{flags} is a combination of the following characters:
254
255 @item  s 
256 function entry
257 @item  x  
258 function exit
259 @item  i  
260 function is in init section
261 @item  f  
262 function is in fini section
263 @item  l  
264 library call
265 @item  c  
266 libc standard call
267 @item  d  
268 stack value demand
269 @item  I  
270 interrupt service routine
271 @item  P  
272 prologue start
273 @item  p  
274 prologue end
275 @item  E  
276 epilogue start
277 @item  e  
278 epilogue end
279 @item  j  
280 long jump / sjlj unwind
281 @item  a  
282 an arbitrary code fragment
283 @item t
284 extra parameter saved (a constant value like frame size)
285 @end table
286
287 @item function_to_profile 
288 a function address
289 @item cycle_corrector  
290 a value which should be added to the cycle counter, zero if omitted.
291 @item extra  
292 any extra parameter, zero if omitted.
293
294 @end table
295
296 For example:
297 @smallexample
298 .global fxx
299 .type fxx,@@function
300 fxx:
301 .LFrameOffset_fxx=0x08
302 .profiler "scdP", fxx     ; function entry.
303                           ; we also demand stack value to be saved
304   push r11
305   push r10
306   push r9
307   push r8
308 .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
309                                           ; (this is a prologue end)
310                                           ; note, that spare var filled with 
311                                           ; the farme size
312   mov r15,r8
313 ...
314 .profiler cdE,fxx         ; check stack
315   pop r8
316   pop r9
317   pop r10
318   pop r11
319 .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
320   ret                     ; cause 'ret' insn takes 3 cycles
321 @end smallexample