1 @c Copyright 2002, 2004 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
7 @chapter MSP 430 Dependent Features
10 @node Machine Dependencies
11 @chapter MSP 430 Dependent Features
14 @cindex MSP 430 support
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
27 @cindex MSP 430 options (none)
28 @cindex options for MSP430 (none)
32 select the mpu arch. Currently has no effect.
34 enables polymorph instructions handler.
37 enables relaxation at assembly time. DANGEROUS!
44 * MSP430-Macros:: Macros
45 * MSP430-Chars:: Special Characters
46 * MSP430-Regs:: Register Names
47 * MSP430-Ext:: Assembler Extensions
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.
59 Additional built-in macros are:
64 Extracts least significant word from 32-bit expression 'exp'.
67 Extracts most significant word from 32-bit expression 'exp'.
70 Extracts 3rd word from 64-bit expression 'exp'.
73 Extracts 4rd word from 64-bit expression 'exp'.
77 They normally being used as an immediate source operand.
79 mov #llo(1), r10 ; == mov #1, r10
80 mov #lhi(1), r10 ; == mov #0, r10
84 @subsection Special Characters
86 @cindex line comment character, MSP 430
87 @cindex MSP 430 line comment character
88 @samp{;} is the line comment character.
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.
96 @subsection Register Names
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.
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.
112 @subsection Assembler Extensions
113 @cindex MSP430 Assembler Extensions
118 As destination operand being treated as @samp{0(rn)}
121 As source operand being treated as @samp{@@rn}
124 Skips next N bytes followed by jump instruction and equivalent to
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.
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
144 A polymorph instruction which is @samp{jne label} or @samp{jeq +4; br label}
147 A polymorph instruction which is @samp{jl label} or @samp{jge +4; br label}
150 A polymorph instruction which is @samp{jn label} or @samp{jn +2; jmp +4; br label}
153 A polymorph instruction which is @samp{jlo label} or @samp{jhs +2; br label}
156 A polymorph instruction which is @samp{jge label} or @samp{jl +4; br label}
159 A polymorph instruction which is @samp{jhs label} or @samp{jlo +4; br label}
162 A polymorph instruction which is @samp{jeq +2; jge label} or @samp{jeq +6; jl +4; br label}
165 A polymorph instruction which is @samp{jeq +2; jhs label} or @samp{jeq +6; jlo +4; br label}
168 A polymorph instruction which is @samp{jeq label; jlo label} or @samp{jeq +2; jhs +4; br label}
171 A polymorph instruction which is @samp{jeq label; jl label} or @samp{jeq +2; jge +4; br label}
174 A polymorph instruction which is @samp{jmp label} or @samp{br label}
178 @node MSP430 Floating Point
179 @section Floating Point
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.
185 @node MSP430 Directives
186 @section MSP 430 Machine Directives
188 @cindex machine directives, MSP 430
189 @cindex MSP 430 machine directives
191 @cindex @code{file} directive, MSP 430
193 This directive is ignored; it is accepted for compatibility with other
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.
201 @cindex @code{line} directive, MSP 430
203 This directive is ignored; it is accepted for compatibility with other
206 @cindex @code{sect} directive, MSP 430
208 Currently this directive is ignored; it is accepted for compatibility with other
211 @cindex @code{profiler} directive, MSP 430
213 This directive instructs assembler to add new profile entry to the object file.
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.
225 For information on the 430 machine instruction set, see @cite{MSP430
226 User's Manual, document slau049d}, Texas Instrument, Inc.
228 @node MSP430 Profiling Capability
229 @section Profiling Capability
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.
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
242 Pseudo operation format:
244 @samp{.profiler flags,function_to_profile [, cycle_corrector, extra]}
253 @samp{flags} is a combination of the following characters:
260 function is in init section
262 function is in fini section
270 interrupt service routine
280 long jump / sjlj unwind
282 an arbitrary code fragment
284 extra parameter saved (a constant value like frame size)
287 @item function_to_profile
289 @item cycle_corrector
290 a value which should be added to the cycle counter, zero if omitted.
292 any extra parameter, zero if omitted.
301 .LFrameOffset_fxx=0x08
302 .profiler "scdP", fxx ; function entry.
303 ; we also demand stack value to be saved
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
314 .profiler cdE,fxx ; check stack
319 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter
320 ret ; cause 'ret' insn takes 3 cycles