Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 2000-2016 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 @c TI TMS320C54X description by Timothy Wall, twall (a] cygnus.com
      5 @ifset GENERIC
      6 @page
      7 @node TIC54X-Dependent
      8 @chapter TIC54X Dependent Features
      9 @end ifset
     10 @ifclear GENERIC
     11 @node Machine Dependencies
     12 @chapter TIC54X Dependent Features
     13 @end ifclear
     14 
     15 @cindex TIC54X support
     16 @menu
     17 * TIC54X-Opts::              Command-line Options
     18 * TIC54X-Block::             Blocking
     19 * TIC54X-Env::               Environment Settings
     20 * TIC54X-Constants::         Constants Syntax
     21 * TIC54X-Subsyms::           String Substitution
     22 * TIC54X-Locals::            Local Label Syntax
     23 * TIC54X-Builtins::          Builtin Assembler Math Functions
     24 * TIC54X-Ext::               Extended Addressing Support
     25 * TIC54X-Directives::        Directives
     26 * TIC54X-Macros::            Macro Features
     27 * TIC54X-MMRegs::            Memory-mapped Registers
     28 * TIC54X-Syntax::            Syntax
     29 @end menu
     30 
     31 @node TIC54X-Opts
     32 @section Options
     33 
     34 @cindex options, TIC54X
     35 @cindex TIC54X options
     36 The TMS320C54X version of @code{@value{AS}} has a few machine-dependent options.
     37 
     38 @cindex @samp{-mfar-mode} option, far-mode
     39 @cindex @samp{-mf} option, far-mode
     40 You can use the @samp{-mfar-mode} option to enable extended addressing mode.
     41 All addresses will be assumed to be > 16 bits, and the appropriate
     42 relocation types will be used.  This option is equivalent to using the
     43 @samp{.far_mode} directive in the assembly code.  If you do not use the
     44 @samp{-mfar-mode} option, all references will be assumed to be 16 bits.
     45 This option may be abbreviated to @samp{-mf}.
     46 
     47 @cindex @samp{-mcpu} option, cpu
     48 You can use the @samp{-mcpu} option to specify a particular CPU.
     49 This option is equivalent to using the @samp{.version} directive in the
     50 assembly code.  For recognized CPU codes, see
     51 @xref{TIC54X-Directives,,@code{.version}}.  The default CPU version is
     52 @samp{542}.
     53 
     54 @cindex @samp{-merrors-to-file} option, stderr redirect
     55 @cindex @samp{-me} option, stderr redirect
     56 You can use the @samp{-merrors-to-file} option to redirect error output
     57 to a file (this provided for those deficient environments which don't
     58 provide adequate output redirection).  This option may be abbreviated to
     59 @samp{-me}.
     60 
     61 @node TIC54X-Block
     62 @section Blocking
     63 A blocked section or memory block is guaranteed not to cross the blocking
     64 boundary (usually a page, or 128 words) if it is smaller than the
     65 blocking size, or to start on a page boundary if it is larger than the
     66 blocking size.
     67 
     68 @node TIC54X-Env
     69 @section Environment Settings
     70 
     71 @cindex environment settings, TIC54X
     72 @cindex @samp{A_DIR} environment variable, TIC54X
     73 @cindex @samp{C54XDSP_DIR} environment variable, TIC54X
     74 @samp{C54XDSP_DIR} and @samp{A_DIR} are semicolon-separated
     75 paths which are added to the list of directories normally searched for
     76 source and include files.  @samp{C54XDSP_DIR} will override @samp{A_DIR}.
     77 
     78 @node TIC54X-Constants
     79 @section Constants Syntax
     80 
     81 @cindex constants, TIC54X
     82 The TIC54X version of @code{@value{AS}} allows the following additional
     83 constant formats, using a suffix to indicate the radix:
     84 @smallexample
     85 @cindex binary constants, TIC54X
     86 
     87 Binary                  @code{000000B, 011000b}
     88 Octal                   @code{10Q, 224q}
     89 Hexadecimal             @code{45h, 0FH}
     90 
     91 @end smallexample
     92 
     93 @node TIC54X-Subsyms
     94 @section String Substitution
     95 A subset of allowable symbols (which we'll call subsyms) may be assigned
     96 arbitrary string values.  This is roughly equivalent to C preprocessor
     97 #define macros.  When @code{@value{AS}} encounters one of these
     98 symbols, the symbol is replaced in the input stream by its string value.
     99 Subsym names @strong{must} begin with a letter.
    100 
    101 Subsyms may be defined using the @code{.asg} and @code{.eval} directives
    102 (@xref{TIC54X-Directives,,@code{.asg}},
    103 @xref{TIC54X-Directives,,@code{.eval}}.
    104 
    105 Expansion is recursive until a previously encountered symbol is seen, at
    106 which point substitution stops.
    107 
    108 In this example, x is replaced with SYM2; SYM2 is replaced with SYM1, and SYM1
    109 is replaced with x.  At this point, x has already been encountered
    110 and the substitution stops.
    111 
    112 @smallexample
    113  .asg   "x",SYM1
    114  .asg   "SYM1",SYM2
    115  .asg   "SYM2",x
    116  add    x,a             ; final code assembled is "add  x, a"
    117 @end smallexample
    118 
    119 Macro parameters are converted to subsyms; a side effect of this is the normal
    120 @code{@value{AS}} '\ARG' dereferencing syntax is unnecessary.  Subsyms
    121 defined within a macro will have global scope, unless the @code{.var}
    122 directive is used to identify the subsym as a local macro variable
    123 @pxref{TIC54X-Directives,,@code{.var}}.
    124 
    125 Substitution may be forced in situations where replacement might be
    126 ambiguous by placing colons on either side of the subsym.  The following
    127 code:
    128 
    129 @smallexample
    130  .eval  "10",x
    131 LAB:X:  add     #x, a
    132 @end smallexample
    133 
    134 When assembled becomes:
    135 
    136 @smallexample
    137 LAB10  add     #10, a
    138 @end smallexample
    139 
    140 Smaller parts of the string assigned to a subsym may be accessed with
    141 the following syntax:
    142 
    143 @table @code
    144 @item @code{:@var{symbol}(@var{char_index}):}
    145 Evaluates to a single-character string, the character at @var{char_index}.
    146 @item @code{:@var{symbol}(@var{start},@var{length}):}
    147 Evaluates to a substring of @var{symbol} beginning at @var{start} with
    148 length @var{length}.
    149 @end table
    150 
    151 @node TIC54X-Locals
    152 @section Local Labels
    153 Local labels may be defined in two ways:
    154 
    155 @itemize @bullet
    156 @item
    157 $N, where N is a decimal number between 0 and 9
    158 @item
    159 LABEL?, where LABEL is any legal symbol name.
    160 @end itemize
    161 
    162 Local labels thus defined may be redefined or automatically generated.
    163 The scope of a local label is based on when it may be undefined or reset.
    164 This happens when one of the following situations is encountered:
    165 
    166 @itemize @bullet
    167 @item
    168 .newblock directive @pxref{TIC54X-Directives,,@code{.newblock}}
    169 @item
    170 The current section is changed (.sect, .text, or .data)
    171 @item
    172 Entering or leaving an included file
    173 @item
    174 The macro scope where the label was defined is exited
    175 @end itemize
    176 
    177 @node TIC54X-Builtins
    178 @section Math Builtins
    179 
    180 @cindex math builtins, TIC54X
    181 @cindex TIC54X builtin math functions
    182 @cindex builtin math functions, TIC54X
    183 
    184 The following built-in functions may be used to generate a
    185 floating-point value.  All return a floating-point value except
    186 @samp{$cvi}, @samp{$int}, and @samp{$sgn}, which return an integer
    187 value.
    188 
    189 @table @code
    190 @cindex @code{$acos} math builtin, TIC54X
    191 @item @code{$acos(@var{expr})}
    192 Returns the floating point arccosine of @var{expr}.
    193 
    194 @cindex @code{$asin} math builtin, TIC54X
    195 @item @code{$asin(@var{expr})}
    196 Returns the floating point arcsine of @var{expr}.
    197 
    198 @cindex @code{$atan} math builtin, TIC54X
    199 @item @code{$atan(@var{expr})}
    200 Returns the floating point arctangent of @var{expr}.
    201 
    202 @cindex @code{$atan2} math builtin, TIC54X
    203 @item @code{$atan2(@var{expr1},@var{expr2})}
    204 Returns the floating point arctangent of @var{expr1} / @var{expr2}.
    205 
    206 @cindex @code{$ceil} math builtin, TIC54X
    207 @item @code{$ceil(@var{expr})}
    208 Returns the smallest integer not less than @var{expr} as floating point.
    209 
    210 @cindex @code{$cosh} math builtin, TIC54X
    211 @item @code{$cosh(@var{expr})}
    212 Returns the floating point hyperbolic cosine of @var{expr}.
    213 
    214 @cindex @code{$cos} math builtin, TIC54X
    215 @item @code{$cos(@var{expr})}
    216 Returns the floating point cosine of @var{expr}.
    217 
    218 @cindex @code{$cvf} math builtin, TIC54X
    219 @item @code{$cvf(@var{expr})}
    220 Returns the integer value @var{expr} converted to floating-point.
    221 
    222 @cindex @code{$cvi} math builtin, TIC54X
    223 @item @code{$cvi(@var{expr})}
    224 Returns the floating point value @var{expr} converted to integer.
    225 
    226 @cindex @code{$exp} math builtin, TIC54X
    227 @item @code{$exp(@var{expr})}
    228 Returns the floating point value e ^ @var{expr}.
    229 
    230 @cindex @code{$fabs} math builtin, TIC54X
    231 @item @code{$fabs(@var{expr})}
    232 Returns the floating point absolute value of @var{expr}.
    233 
    234 @cindex @code{$floor} math builtin, TIC54X
    235 @item @code{$floor(@var{expr})}
    236 Returns the largest integer that is not greater than @var{expr} as
    237 floating point.
    238 
    239 @cindex @code{$fmod} math builtin, TIC54X
    240 @item @code{$fmod(@var{expr1},@var{expr2})}
    241 Returns the floating point remainder of @var{expr1} / @var{expr2}.
    242 
    243 @cindex @code{$int} math builtin, TIC54X
    244 @item @code{$int(@var{expr})}
    245 Returns 1 if @var{expr} evaluates to an integer, zero otherwise.
    246 
    247 @cindex @code{$ldexp} math builtin, TIC54X
    248 @item @code{$ldexp(@var{expr1},@var{expr2})}
    249 Returns the floating point value @var{expr1} * 2 ^ @var{expr2}.
    250 
    251 @cindex @code{$log10} math builtin, TIC54X
    252 @item @code{$log10(@var{expr})}
    253 Returns the base 10 logarithm of @var{expr}.
    254 
    255 @cindex @code{$log} math builtin, TIC54X
    256 @item @code{$log(@var{expr})}
    257 Returns the natural logarithm of @var{expr}.
    258 
    259 @cindex @code{$max} math builtin, TIC54X
    260 @item @code{$max(@var{expr1},@var{expr2})}
    261 Returns the floating point maximum of @var{expr1} and @var{expr2}.
    262 
    263 @cindex @code{$min} math builtin, TIC54X
    264 @item @code{$min(@var{expr1},@var{expr2})}
    265 Returns the floating point minimum of @var{expr1} and @var{expr2}.
    266 
    267 @cindex @code{$pow} math builtin, TIC54X
    268 @item @code{$pow(@var{expr1},@var{expr2})}
    269 Returns the floating point value @var{expr1} ^ @var{expr2}.
    270 
    271 @cindex @code{$round} math builtin, TIC54X
    272 @item @code{$round(@var{expr})}
    273 Returns the nearest integer to @var{expr} as a floating point number.
    274 
    275 @cindex @code{$sgn} math builtin, TIC54X
    276 @item @code{$sgn(@var{expr})}
    277 Returns -1, 0, or 1 based on the sign of @var{expr}.
    278 
    279 @cindex @code{$sin} math builtin, TIC54X
    280 @item @code{$sin(@var{expr})}
    281 Returns the floating point sine of @var{expr}.
    282 
    283 @cindex @code{$sinh} math builtin, TIC54X
    284 @item @code{$sinh(@var{expr})}
    285 Returns the floating point hyperbolic sine of @var{expr}.
    286 
    287 @cindex @code{$sqrt} math builtin, TIC54X
    288 @item @code{$sqrt(@var{expr})}
    289 Returns the floating point square root of @var{expr}.
    290 
    291 @cindex @code{$tan} math builtin, TIC54X
    292 @item @code{$tan(@var{expr})}
    293 Returns the floating point tangent of @var{expr}.
    294 
    295 @cindex @code{$tanh} math builtin, TIC54X
    296 @item @code{$tanh(@var{expr})}
    297 Returns the floating point hyperbolic tangent of @var{expr}.
    298 
    299 @cindex @code{$trunc} math builtin, TIC54X
    300 @item @code{$trunc(@var{expr})}
    301 Returns the integer value of @var{expr} truncated towards zero as
    302 floating point.
    303 
    304 @end table
    305 
    306 @node TIC54X-Ext
    307 @section Extended Addressing
    308 The @code{LDX} pseudo-op is provided for loading the extended addressing bits
    309 of a label or address.  For example, if an address @code{_label} resides
    310 in extended program memory, the value of @code{_label} may be loaded as
    311 follows:
    312 @smallexample
    313  ldx     #_label,16,a    ; loads extended bits of _label
    314  or      #_label,a       ; loads lower 16 bits of _label
    315  bacc    a               ; full address is in accumulator A
    316 @end smallexample
    317 
    318 @node TIC54X-Directives
    319 @section Directives
    320 
    321 @cindex machine directives, TIC54X
    322 @cindex TIC54X machine directives
    323 
    324 @table @code
    325 
    326 @cindex @code{align} directive, TIC54X
    327 @cindex @code{even} directive, TIC54X
    328 @item .align [@var{size}]
    329 @itemx .even
    330 Align the section program counter on the next boundary, based on
    331 @var{size}.  @var{size} may be any power of 2.  @code{.even} is
    332 equivalent to @code{.align} with a @var{size} of 2.
    333 @table @code
    334 @item 1
    335 Align SPC to word boundary
    336 @item 2
    337 Align SPC to longword boundary (same as .even)
    338 @item 128
    339 Align SPC to page boundary
    340 @end table
    341 
    342 @cindex @code{asg} directive, TIC54X
    343 @item .asg @var{string}, @var{name}
    344 Assign @var{name} the string @var{string}.  String replacement is
    345 performed on @var{string} before assignment.
    346 
    347 @cindex @code{eval} directive, TIC54X
    348 @item .eval @var{string}, @var{name}
    349 Evaluate the contents of string @var{string} and assign the result as a
    350 string to the subsym @var{name}.  String replacement is performed on
    351 @var{string} before assignment.
    352 
    353 @cindex @code{bss} directive, TIC54X
    354 @item .bss @var{symbol}, @var{size} [, [@var{blocking_flag}] [,@var{alignment_flag}]]
    355 Reserve space for @var{symbol} in the .bss section.  @var{size} is in
    356 words.  If present, @var{blocking_flag} indicates the allocated space
    357 should be aligned on a page boundary if it would otherwise cross a page
    358 boundary.  If present, @var{alignment_flag} causes the assembler to
    359 allocate @var{size} on a long word boundary.
    360 
    361 @cindex @code{byte} directive, TIC54X
    362 @cindex @code{ubyte} directive, TIC54X
    363 @cindex @code{char} directive, TIC54X
    364 @cindex @code{uchar} directive, TIC54X
    365 @item .byte @var{value} [,...,@var{value_n}]
    366 @itemx .ubyte @var{value} [,...,@var{value_n}]
    367 @itemx .char @var{value} [,...,@var{value_n}]
    368 @itemx .uchar @var{value} [,...,@var{value_n}]
    369 Place one or more bytes into consecutive words of the current section.
    370 The upper 8 bits of each word is zero-filled.  If a label is used, it
    371 points to the word allocated for the first byte encountered.
    372 
    373 @cindex @code{clink} directive, TIC54X
    374 @item .clink ["@var{section_name}"]
    375 Set STYP_CLINK flag for this section, which indicates to the linker that
    376 if no symbols from this section are referenced, the section should not
    377 be included in the link.  If @var{section_name} is omitted, the current
    378 section is used.
    379 
    380 @cindex @code{c_mode} directive, TIC54X
    381 @item .c_mode
    382 TBD.
    383 
    384 @cindex @code{copy} directive, TIC54X
    385 @item .copy "@var{filename}" | @var{filename}
    386 @itemx .include "@var{filename}" | @var{filename}
    387 Read source statements from @var{filename}.  The normal include search
    388 path is used.  Normally .copy will cause statements from the included
    389 file to be printed in the assembly listing and .include will not, but
    390 this distinction is not currently implemented.
    391 
    392 @cindex @code{data} directive, TIC54X
    393 @item .data
    394 Begin assembling code into the .data section.
    395 
    396 @cindex @code{double} directive, TIC54X
    397 @cindex @code{ldouble} directive, TIC54X
    398 @cindex @code{float} directive, TIC54X
    399 @cindex @code{xfloat} directive, TIC54X
    400 @item .double @var{value} [,...,@var{value_n}]
    401 @itemx .ldouble @var{value} [,...,@var{value_n}]
    402 @itemx .float @var{value} [,...,@var{value_n}]
    403 @itemx .xfloat @var{value} [,...,@var{value_n}]
    404 Place an IEEE single-precision floating-point representation of one or
    405 more floating-point values into the current section.  All but
    406 @code{.xfloat} align the result on a longword boundary.  Values are
    407 stored most-significant word first.
    408 
    409 @cindex @code{drlist} directive, TIC54X
    410 @cindex @code{drnolist} directive, TIC54X
    411 @item .drlist
    412 @itemx .drnolist
    413 Control printing of directives to the listing file.  Ignored.
    414 
    415 @cindex @code{emsg} directive, TIC54X
    416 @cindex @code{mmsg} directive, TIC54X
    417 @cindex @code{wmsg} directive, TIC54X
    418 @item .emsg @var{string}
    419 @itemx .mmsg @var{string}
    420 @itemx .wmsg @var{string}
    421 Emit a user-defined error, message, or warning, respectively.
    422 
    423 @cindex @code{far_mode} directive, TIC54X
    424 @item .far_mode
    425 Use extended addressing when assembling statements.  This should appear
    426 only once per file, and is equivalent to the -mfar-mode option @pxref{TIC54X-Opts,,@code{-mfar-mode}}.
    427 
    428 @cindex @code{fclist} directive, TIC54X
    429 @cindex @code{fcnolist} directive, TIC54X
    430 @item .fclist
    431 @itemx .fcnolist
    432 Control printing of false conditional blocks to the listing file.
    433 
    434 @cindex @code{field} directive, TIC54X
    435 @item .field @var{value} [,@var{size}]
    436 Initialize a bitfield of @var{size} bits in the current section.  If
    437 @var{value} is relocatable, then @var{size} must be 16.  @var{size}
    438 defaults to 16 bits.  If @var{value} does not fit into @var{size} bits,
    439 the value will be truncated.  Successive @code{.field} directives will
    440 pack starting at the current word, filling the most significant bits
    441 first, and aligning to the start of the next word if the field size does
    442 not fit into the space remaining in the current word.  A @code{.align}
    443 directive with an operand of 1 will force the next @code{.field}
    444 directive to begin packing into a new word.  If a label is used, it
    445 points to the word that contains the specified field.
    446 
    447 @cindex @code{global} directive, TIC54X
    448 @cindex @code{def} directive, TIC54X
    449 @cindex @code{ref} directive, TIC54X
    450 @item .global @var{symbol} [,...,@var{symbol_n}]
    451 @itemx .def @var{symbol} [,...,@var{symbol_n}]
    452 @itemx .ref @var{symbol} [,...,@var{symbol_n}]
    453 @code{.def} nominally identifies a symbol defined in the current file
    454 and available to other files.  @code{.ref} identifies a symbol used in
    455 the current file but defined elsewhere.  Both map to the standard
    456 @code{.global} directive.
    457 
    458 @cindex @code{half} directive, TIC54X
    459 @cindex @code{uhalf} directive, TIC54X
    460 @cindex @code{short} directive, TIC54X
    461 @cindex @code{ushort} directive, TIC54X
    462 @cindex @code{int} directive, TIC54X
    463 @cindex @code{uint} directive, TIC54X
    464 @cindex @code{word} directive, TIC54X
    465 @cindex @code{uword} directive, TIC54X
    466 @item .half @var{value} [,...,@var{value_n}]
    467 @itemx .uhalf @var{value} [,...,@var{value_n}]
    468 @itemx .short @var{value} [,...,@var{value_n}]
    469 @itemx .ushort @var{value} [,...,@var{value_n}]
    470 @itemx .int @var{value} [,...,@var{value_n}]
    471 @itemx .uint @var{value} [,...,@var{value_n}]
    472 @itemx .word @var{value} [,...,@var{value_n}]
    473 @itemx .uword @var{value} [,...,@var{value_n}]
    474 Place one or more values into consecutive words of the current section.
    475 If a label is used, it points to the word allocated for the first value
    476 encountered.
    477 
    478 @cindex @code{label} directive, TIC54X
    479 @item .label @var{symbol}
    480 Define a special @var{symbol} to refer to the load time address of the
    481 current section program counter.
    482 
    483 @cindex @code{length} directive, TIC54X
    484 @cindex @code{width} directive, TIC54X
    485 @item .length
    486 @itemx .width
    487 Set the page length and width of the output listing file.  Ignored.
    488 
    489 @cindex @code{list} directive, TIC54X
    490 @cindex @code{nolist} directive, TIC54X
    491 @item .list
    492 @itemx .nolist
    493 Control whether the source listing is printed.  Ignored.
    494 
    495 @cindex @code{long} directive, TIC54X
    496 @cindex @code{ulong} directive, TIC54X
    497 @cindex @code{xlong} directive, TIC54X
    498 @item .long @var{value} [,...,@var{value_n}]
    499 @itemx .ulong @var{value} [,...,@var{value_n}]
    500 @itemx .xlong @var{value} [,...,@var{value_n}]
    501 Place one or more 32-bit values into consecutive words in the current
    502 section.  The most significant word is stored first.  @code{.long} and
    503 @code{.ulong} align the result on a longword boundary; @code{xlong} does
    504 not.
    505 
    506 @cindex @code{loop} directive, TIC54X
    507 @cindex @code{break} directive, TIC54X
    508 @cindex @code{endloop} directive, TIC54X
    509 @item .loop [@var{count}]
    510 @itemx .break [@var{condition}]
    511 @itemx .endloop
    512 Repeatedly assemble a block of code.  @code{.loop} begins the block, and
    513 @code{.endloop} marks its termination.  @var{count} defaults to 1024,
    514 and indicates the number of times the block should be repeated.
    515 @code{.break} terminates the loop so that assembly begins after the
    516 @code{.endloop} directive.  The optional @var{condition} will cause the
    517 loop to terminate only if it evaluates to zero.
    518 
    519 @cindex @code{macro} directive, TIC54X
    520 @cindex @code{endm} directive, TIC54X
    521 @item @var{macro_name} .macro [@var{param1}][,...@var{param_n}]
    522 @itemx [.mexit]
    523 @itemx .endm
    524 See the section on macros for more explanation (@xref{TIC54X-Macros}.
    525 
    526 @cindex @code{mlib} directive, TIC54X
    527 @item .mlib "@var{filename}" | @var{filename}
    528 Load the macro library @var{filename}.  @var{filename} must be an
    529 archived library (BFD ar-compatible) of text files, expected to contain
    530 only macro definitions.   The standard include search path is used.
    531 
    532 @cindex @code{mlist} directive, TIC54X
    533 @cindex @code{mnolist} directive, TIC54X
    534 @item .mlist
    535 @itemx .mnolist
    536 Control whether to include macro and loop block expansions in the
    537 listing output.  Ignored.
    538 
    539 @cindex @code{mmregs} directive, TIC54X
    540 @item .mmregs
    541 Define global symbolic names for the 'c54x registers.  Supposedly
    542 equivalent to executing @code{.set} directives for each register with
    543 its memory-mapped value, but in reality is provided only for
    544 compatibility and does nothing.
    545 
    546 @cindex @code{newblock} directive, TIC54X
    547 @item .newblock
    548 This directive resets any TIC54X local labels currently defined.  Normal
    549 @code{@value{AS}} local labels are unaffected.
    550 
    551 @cindex @code{option} directive, TIC54X
    552 @item .option @var{option_list}
    553 Set listing options.  Ignored.
    554 
    555 @cindex @code{sblock} directive, TIC54X
    556 @item .sblock "@var{section_name}" | @var{section_name} [,"@var{name_n}" | @var{name_n}]
    557 Designate @var{section_name} for blocking.  Blocking guarantees that a
    558 section will start on a page boundary (128 words) if it would otherwise
    559 cross a page boundary.  Only initialized sections may be designated with
    560 this directive.  See also @xref{TIC54X-Block}.
    561 
    562 @cindex @code{sect} directive, TIC54X
    563 @item .sect "@var{section_name}"
    564 Define a named initialized section and make it the current section.
    565 
    566 @cindex @code{set} directive, TIC54X
    567 @cindex @code{equ} directive, TIC54X
    568 @item @var{symbol} .set "@var{value}"
    569 @itemx @var{symbol} .equ "@var{value}"
    570 Equate a constant @var{value} to a @var{symbol}, which is placed in the
    571 symbol table.  @var{symbol} may not be previously defined.
    572 
    573 @cindex @code{space} directive, TIC54X
    574 @cindex @code{bes} directive, TIC54X
    575 @item .space @var{size_in_bits}
    576 @itemx .bes @var{size_in_bits}
    577 Reserve the given number of bits in the current section and zero-fill
    578 them.  If a label is used with @code{.space}, it points to the
    579 @strong{first} word reserved.  With @code{.bes}, the label points to the
    580 @strong{last} word reserved.
    581 
    582 @cindex @code{sslist} directive, TIC54X
    583 @cindex @code{ssnolist} directive, TIC54X
    584 @item .sslist
    585 @itemx .ssnolist
    586 Controls the inclusion of subsym replacement in the listing output.  Ignored.
    587 
    588 @cindex @code{string} directive, TIC54X
    589 @cindex @code{pstring} directive, TIC54X
    590 @item .string "@var{string}" [,...,"@var{string_n}"]
    591 @itemx .pstring "@var{string}" [,...,"@var{string_n}"]
    592 Place 8-bit characters from @var{string} into the current section.
    593 @code{.string} zero-fills the upper 8 bits of each word, while
    594 @code{.pstring} puts two characters into each word, filling the
    595 most-significant bits first.  Unused space is zero-filled.  If a label
    596 is used, it points to the first word initialized.
    597 
    598 @cindex @code{struct} directive, TIC54X
    599 @cindex @code{tag} directive, TIC54X
    600 @cindex @code{endstruct} directive, TIC54X
    601 @item [@var{stag}] .struct [@var{offset}]
    602 @itemx [@var{name_1}] element [@var{count_1}]
    603 @itemx [@var{name_2}] element [@var{count_2}]
    604 @itemx [@var{tname}] .tag @var{stagx} [@var{tcount}]
    605 @itemx ...
    606 @itemx [@var{name_n}] element [@var{count_n}]
    607 @itemx [@var{ssize}] .endstruct
    608 @itemx @var{label} .tag [@var{stag}]
    609 Assign symbolic offsets to the elements of a structure.  @var{stag}
    610 defines a symbol to use to reference the structure.  @var{offset}
    611 indicates a starting value to use for the first element encountered;
    612 otherwise it defaults to zero.  Each element can have a named offset,
    613 @var{name}, which is a symbol assigned the value of the element's offset
    614 into the structure.  If @var{stag} is missing, these become global
    615 symbols.  @var{count} adjusts the offset that many times, as if
    616 @code{element} were an array.  @code{element} may be one of
    617 @code{.byte}, @code{.word}, @code{.long}, @code{.float}, or any
    618 equivalent of those, and the structure offset is adjusted accordingly.
    619 @code{.field} and @code{.string} are also allowed; the size of
    620 @code{.field} is one bit, and @code{.string} is considered to be one
    621 word in size.  Only element descriptors, structure/union tags,
    622 @code{.align} and conditional assembly directives are allowed within
    623 @code{.struct}/@code{.endstruct}.  @code{.align} aligns member offsets
    624 to word boundaries only.  @var{ssize}, if provided, will always be
    625 assigned the size of the structure.
    626 
    627 The @code{.tag} directive, in addition to being used to define a
    628 structure/union element within a structure, may be used to apply a
    629 structure to a symbol.  Once applied to @var{label}, the individual
    630 structure elements may be applied to @var{label} to produce the desired
    631 offsets using @var{label} as the structure base.
    632 
    633 @cindex @code{tab} directive, TIC54X
    634 @item .tab
    635 Set the tab size in the output listing.  Ignored.
    636 
    637 @cindex @code{union} directive, TIC54X
    638 @cindex @code{tag} directive, TIC54X
    639 @cindex @code{endunion} directive, TIC54X
    640 @item [@var{utag}] .union
    641 @itemx [@var{name_1}] element [@var{count_1}]
    642 @itemx [@var{name_2}] element [@var{count_2}]
    643 @itemx [@var{tname}] .tag @var{utagx}[,@var{tcount}]
    644 @itemx ...
    645 @itemx [@var{name_n}] element [@var{count_n}]
    646 @itemx [@var{usize}] .endstruct
    647 @itemx @var{label} .tag [@var{utag}]
    648 Similar to @code{.struct}, but the offset after each element is reset to
    649 zero, and the @var{usize} is set to the maximum of all defined elements.
    650 Starting offset for the union is always zero.
    651 
    652 @cindex @code{usect} directive, TIC54X
    653 @item [@var{symbol}] .usect "@var{section_name}", @var{size}, [,[@var{blocking_flag}] [,@var{alignment_flag}]]
    654 Reserve space for variables in a named, uninitialized section (similar to
    655 .bss).  @code{.usect} allows definitions sections independent of .bss.
    656 @var{symbol} points to the first location reserved by this allocation.
    657 The symbol may be used as a variable name.  @var{size} is the allocated
    658 size in words.  @var{blocking_flag} indicates whether to block this
    659 section on a page boundary (128 words) (@pxref{TIC54X-Block}).
    660 @var{alignment flag} indicates whether the section should be
    661 longword-aligned.
    662 
    663 @cindex @code{var} directive, TIC54X
    664 @item .var @var{sym}[,..., @var{sym_n}]
    665 Define a subsym to be a local variable within a macro.  See
    666 @xref{TIC54X-Macros}.
    667 
    668 @cindex @code{version} directive, TIC54X
    669 @item .version @var{version}
    670 Set which processor to build instructions for.  Though the following
    671 values are accepted, the op is ignored.
    672 @table @code
    673 @item 541
    674 @itemx 542
    675 @itemx 543
    676 @itemx 545
    677 @itemx 545LP
    678 @itemx 546LP
    679 @itemx 548
    680 @itemx 549
    681 @end table
    682 @end table
    683 
    684 @node TIC54X-Macros
    685 @section Macros
    686 
    687 @cindex TIC54X-specific macros
    688 @cindex macros, TIC54X
    689 Macros do not require explicit dereferencing of arguments (i.e., \ARG).
    690 
    691 During macro expansion, the macro parameters are converted to subsyms.
    692 If the number of arguments passed the macro invocation exceeds the
    693 number of parameters defined, the last parameter is assigned the string
    694 equivalent of all remaining arguments.  If fewer arguments are given
    695 than parameters, the missing parameters are assigned empty strings.  To
    696 include a comma in an argument, you must enclose the argument in quotes.
    697 
    698 @cindex subsym builtins, TIC54X
    699 @cindex TIC54X subsym builtins
    700 @cindex builtin subsym functions, TIC54X
    701 The following built-in subsym functions allow examination of the string
    702 value of subsyms (or ordinary strings).  The arguments are strings
    703 unless otherwise indicated (subsyms passed as args will be replaced by
    704 the strings they represent).
    705 @table @code
    706 @cindex @code{$symlen} subsym builtin, TIC54X
    707 @item @code{$symlen(@var{str})}
    708 Returns the length of @var{str}.
    709 
    710 @cindex @code{$symcmp} subsym builtin, TIC54X
    711 @item @code{$symcmp(@var{str1},@var{str2})}
    712 Returns 0 if @var{str1} == @var{str2}, non-zero otherwise.
    713 
    714 @cindex @code{$firstch} subsym builtin, TIC54X
    715 @item @code{$firstch(@var{str},@var{ch})}
    716 Returns index of the first occurrence of character constant @var{ch} in
    717 @var{str}.
    718 
    719 @cindex @code{$lastch} subsym builtin, TIC54X
    720 @item @code{$lastch(@var{str},@var{ch})}
    721 Returns index of the last occurrence of character constant @var{ch} in
    722 @var{str}.
    723 
    724 @cindex @code{$isdefed} subsym builtin, TIC54X
    725 @item @code{$isdefed(@var{symbol})}
    726 Returns zero if the symbol @var{symbol} is not in the symbol table,
    727 non-zero otherwise.
    728 
    729 @cindex @code{$ismember} subsym builtin, TIC54X
    730 @item @code{$ismember(@var{symbol},@var{list})}
    731 Assign the first member of comma-separated string @var{list} to
    732 @var{symbol}; @var{list} is reassigned the remainder of the list.  Returns
    733 zero if @var{list} is a null string.  Both arguments must be subsyms.
    734 
    735 @cindex @code{$iscons} subsym builtin, TIC54X
    736 @item @code{$iscons(@var{expr})}
    737 Returns 1 if string @var{expr} is binary, 2 if octal, 3 if hexadecimal,
    738 4 if a character, 5 if decimal, and zero if not an integer.
    739 
    740 @cindex @code{$isname} subsym builtin, TIC54X
    741 @item @code{$isname(@var{name})}
    742 Returns 1 if @var{name} is a valid symbol name, zero otherwise.
    743 
    744 @cindex @code{$isreg} subsym builtin, TIC54X
    745 @item @code{$isreg(@var{reg})}
    746 Returns 1 if @var{reg} is a valid predefined register name (AR0-AR7 only).
    747 
    748 @cindex @code{$structsz} subsym builtin, TIC54X
    749 @item @code{$structsz(@var{stag})}
    750 Returns the size of the structure or union represented by @var{stag}.
    751 
    752 @cindex @code{$structacc} subsym builtin, TIC54X
    753 @item @code{$structacc(@var{stag})}
    754 Returns the reference point of the structure or union represented by
    755 @var{stag}.   Always returns zero.
    756 
    757 @end table
    758 
    759 @node TIC54X-MMRegs
    760 @section Memory-mapped Registers
    761 
    762 @cindex TIC54X memory-mapped registers
    763 @cindex registers, TIC54X memory-mapped
    764 @cindex memory-mapped registers, TIC54X
    765 The following symbols are recognized as memory-mapped registers:
    766 
    767 @table @code
    768 @end table
    769 
    770 @node TIC54X-Syntax
    771 @section TIC54X Syntax
    772 @menu
    773 * TIC54X-Chars::                Special Characters
    774 @end menu
    775 
    776 @node TIC54X-Chars
    777 @subsection Special Characters
    778 
    779 @cindex line comment character, TIC54X
    780 @cindex TIC54X line comment character
    781 The presence of a @samp{;} appearing anywhere on a line indicates the
    782 start of a comment that extends to the end of that line.
    783 
    784 If a @samp{#} appears as the first character of a line then the whole
    785 line is treated as a comment, but in this case the line can also be a
    786 logical line number directive (@pxref{Comments}) or a preprocessor
    787 control command (@pxref{Preprocessing}).
    788 
    789 The presence of an asterisk (@samp{*}) at the start of a line also
    790 indicates a comment that extends to the end of that line.
    791 
    792 @cindex line separator, TIC54X
    793 @cindex statement separator, TIC54X
    794 @cindex TIC54X line separator
    795 The TIC54X assembler does not currently support a line separator
    796 character.
    797 
    798