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@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 36The 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 40You can use the @samp{-mfar-mode} option to enable extended addressing mode. 41All addresses will be assumed to be > 16 bits, and the appropriate 42relocation 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. 45This option may be abbreviated to @samp{-mf}. 46 47@cindex @samp{-mcpu} option, cpu 48You can use the @samp{-mcpu} option to specify a particular CPU. 49This option is equivalent to using the @samp{.version} directive in the 50assembly 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 56You can use the @samp{-merrors-to-file} option to redirect error output 57to a file (this provided for those deficient environments which don't 58provide adequate output redirection). This option may be abbreviated to 59@samp{-me}. 60 61@node TIC54X-Block 62@section Blocking 63A blocked section or memory block is guaranteed not to cross the blocking 64boundary (usually a page, or 128 words) if it is smaller than the 65blocking size, or to start on a page boundary if it is larger than the 66blocking 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 75paths which are added to the list of directories normally searched for 76source 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 82The TIC54X version of @code{@value{AS}} allows the following additional 83constant formats, using a suffix to indicate the radix: 84@smallexample 85@cindex binary constants, TIC54X 86 87Binary @code{000000B, 011000b} 88Octal @code{10Q, 224q} 89Hexadecimal @code{45h, 0FH} 90 91@end smallexample 92 93@node TIC54X-Subsyms 94@section String Substitution 95A subset of allowable symbols (which we'll call subsyms) may be assigned 96arbitrary string values. This is roughly equivalent to C preprocessor 97#define macros. When @code{@value{AS}} encounters one of these 98symbols, the symbol is replaced in the input stream by its string value. 99Subsym names @strong{must} begin with a letter. 100 101Subsyms may be defined using the @code{.asg} and @code{.eval} directives 102(@xref{TIC54X-Directives,,@code{.asg}}, 103@xref{TIC54X-Directives,,@code{.eval}}. 104 105Expansion is recursive until a previously encountered symbol is seen, at 106which point substitution stops. 107 108In this example, x is replaced with SYM2; SYM2 is replaced with SYM1, and SYM1 109is replaced with x. At this point, x has already been encountered 110and 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 119Macro parameters are converted to subsyms; a side effect of this is the normal 120@code{@value{AS}} '\ARG' dereferencing syntax is unnecessary. Subsyms 121defined within a macro will have global scope, unless the @code{.var} 122directive is used to identify the subsym as a local macro variable 123@pxref{TIC54X-Directives,,@code{.var}}. 124 125Substitution may be forced in situations where replacement might be 126ambiguous by placing colons on either side of the subsym. The following 127code: 128 129@smallexample 130 .eval "10",x 131LAB:X: add #x, a 132@end smallexample 133 134When assembled becomes: 135 136@smallexample 137LAB10 add #10, a 138@end smallexample 139 140Smaller parts of the string assigned to a subsym may be accessed with 141the following syntax: 142 143@table @code 144@item @code{:@var{symbol}(@var{char_index}):} 145Evaluates to a single-character string, the character at @var{char_index}. 146@item @code{:@var{symbol}(@var{start},@var{length}):} 147Evaluates to a substring of @var{symbol} beginning at @var{start} with 148length @var{length}. 149@end table 150 151@node TIC54X-Locals 152@section Local Labels 153Local 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 159LABEL?, where LABEL is any legal symbol name. 160@end itemize 161 162Local labels thus defined may be redefined or automatically generated. 163The scope of a local label is based on when it may be undefined or reset. 164This 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 170The current section is changed (.sect, .text, or .data) 171@item 172Entering or leaving an included file 173@item 174The 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 184The following built-in functions may be used to generate a 185floating-point value. All return a floating-point value except 186@samp{$cvi}, @samp{$int}, and @samp{$sgn}, which return an integer 187value. 188 189@table @code 190@cindex @code{$acos} math builtin, TIC54X 191@item @code{$acos(@var{expr})} 192Returns the floating point arccosine of @var{expr}. 193 194@cindex @code{$asin} math builtin, TIC54X 195@item @code{$asin(@var{expr})} 196Returns the floating point arcsine of @var{expr}. 197 198@cindex @code{$atan} math builtin, TIC54X 199@item @code{$atan(@var{expr})} 200Returns the floating point arctangent of @var{expr}. 201 202@cindex @code{$atan2} math builtin, TIC54X 203@item @code{$atan2(@var{expr1},@var{expr2})} 204Returns the floating point arctangent of @var{expr1} / @var{expr2}. 205 206@cindex @code{$ceil} math builtin, TIC54X 207@item @code{$ceil(@var{expr})} 208Returns 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})} 212Returns the floating point hyperbolic cosine of @var{expr}. 213 214@cindex @code{$cos} math builtin, TIC54X 215@item @code{$cos(@var{expr})} 216Returns the floating point cosine of @var{expr}. 217 218@cindex @code{$cvf} math builtin, TIC54X 219@item @code{$cvf(@var{expr})} 220Returns the integer value @var{expr} converted to floating-point. 221 222@cindex @code{$cvi} math builtin, TIC54X 223@item @code{$cvi(@var{expr})} 224Returns the floating point value @var{expr} converted to integer. 225 226@cindex @code{$exp} math builtin, TIC54X 227@item @code{$exp(@var{expr})} 228Returns the floating point value e ^ @var{expr}. 229 230@cindex @code{$fabs} math builtin, TIC54X 231@item @code{$fabs(@var{expr})} 232Returns the floating point absolute value of @var{expr}. 233 234@cindex @code{$floor} math builtin, TIC54X 235@item @code{$floor(@var{expr})} 236Returns the largest integer that is not greater than @var{expr} as 237floating point. 238 239@cindex @code{$fmod} math builtin, TIC54X 240@item @code{$fmod(@var{expr1},@var{expr2})} 241Returns the floating point remainder of @var{expr1} / @var{expr2}. 242 243@cindex @code{$int} math builtin, TIC54X 244@item @code{$int(@var{expr})} 245Returns 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})} 249Returns the floating point value @var{expr1} * 2 ^ @var{expr2}. 250 251@cindex @code{$log10} math builtin, TIC54X 252@item @code{$log10(@var{expr})} 253Returns the base 10 logarithm of @var{expr}. 254 255@cindex @code{$log} math builtin, TIC54X 256@item @code{$log(@var{expr})} 257Returns the natural logarithm of @var{expr}. 258 259@cindex @code{$max} math builtin, TIC54X 260@item @code{$max(@var{expr1},@var{expr2})} 261Returns 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})} 265Returns 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})} 269Returns the floating point value @var{expr1} ^ @var{expr2}. 270 271@cindex @code{$round} math builtin, TIC54X 272@item @code{$round(@var{expr})} 273Returns 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})} 277Returns -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})} 281Returns the floating point sine of @var{expr}. 282 283@cindex @code{$sinh} math builtin, TIC54X 284@item @code{$sinh(@var{expr})} 285Returns the floating point hyperbolic sine of @var{expr}. 286 287@cindex @code{$sqrt} math builtin, TIC54X 288@item @code{$sqrt(@var{expr})} 289Returns the floating point square root of @var{expr}. 290 291@cindex @code{$tan} math builtin, TIC54X 292@item @code{$tan(@var{expr})} 293Returns the floating point tangent of @var{expr}. 294 295@cindex @code{$tanh} math builtin, TIC54X 296@item @code{$tanh(@var{expr})} 297Returns the floating point hyperbolic tangent of @var{expr}. 298 299@cindex @code{$trunc} math builtin, TIC54X 300@item @code{$trunc(@var{expr})} 301Returns the integer value of @var{expr} truncated towards zero as 302floating point. 303 304@end table 305 306@node TIC54X-Ext 307@section Extended Addressing 308The @code{LDX} pseudo-op is provided for loading the extended addressing bits 309of a label or address. For example, if an address @code{_label} resides 310in extended program memory, the value of @code{_label} may be loaded as 311follows: 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 330Align the section program counter on the next boundary, based on 331@var{size}. @var{size} may be any power of 2. @code{.even} is 332equivalent to @code{.align} with a @var{size} of 2. 333@table @code 334@item 1 335Align SPC to word boundary 336@item 2 337Align SPC to longword boundary (same as .even) 338@item 128 339Align SPC to page boundary 340@end table 341 342@cindex @code{asg} directive, TIC54X 343@item .asg @var{string}, @var{name} 344Assign @var{name} the string @var{string}. String replacement is 345performed on @var{string} before assignment. 346 347@cindex @code{eval} directive, TIC54X 348@item .eval @var{string}, @var{name} 349Evaluate the contents of string @var{string} and assign the result as a 350string 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}]] 355Reserve space for @var{symbol} in the .bss section. @var{size} is in 356words. If present, @var{blocking_flag} indicates the allocated space 357should be aligned on a page boundary if it would otherwise cross a page 358boundary. If present, @var{alignment_flag} causes the assembler to 359allocate @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}] 369Place one or more bytes into consecutive words of the current section. 370The upper 8 bits of each word is zero-filled. If a label is used, it 371points to the word allocated for the first byte encountered. 372 373@cindex @code{clink} directive, TIC54X 374@item .clink ["@var{section_name}"] 375Set STYP_CLINK flag for this section, which indicates to the linker that 376if no symbols from this section are referenced, the section should not 377be included in the link. If @var{section_name} is omitted, the current 378section is used. 379 380@cindex @code{c_mode} directive, TIC54X 381@item .c_mode 382TBD. 383 384@cindex @code{copy} directive, TIC54X 385@item .copy "@var{filename}" | @var{filename} 386@itemx .include "@var{filename}" | @var{filename} 387Read source statements from @var{filename}. The normal include search 388path is used. Normally .copy will cause statements from the included 389file to be printed in the assembly listing and .include will not, but 390this distinction is not currently implemented. 391 392@cindex @code{data} directive, TIC54X 393@item .data 394Begin 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}] 404Place an IEEE single-precision floating-point representation of one or 405more floating-point values into the current section. All but 406@code{.xfloat} align the result on a longword boundary. Values are 407stored most-significant word first. 408 409@cindex @code{drlist} directive, TIC54X 410@cindex @code{drnolist} directive, TIC54X 411@item .drlist 412@itemx .drnolist 413Control 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} 421Emit a user-defined error, message, or warning, respectively. 422 423@cindex @code{far_mode} directive, TIC54X 424@item .far_mode 425Use extended addressing when assembling statements. This should appear 426only 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 432Control printing of false conditional blocks to the listing file. 433 434@cindex @code{field} directive, TIC54X 435@item .field @var{value} [,@var{size}] 436Initialize a bitfield of @var{size} bits in the current section. If 437@var{value} is relocatable, then @var{size} must be 16. @var{size} 438defaults to 16 bits. If @var{value} does not fit into @var{size} bits, 439the value will be truncated. Successive @code{.field} directives will 440pack starting at the current word, filling the most significant bits 441first, and aligning to the start of the next word if the field size does 442not fit into the space remaining in the current word. A @code{.align} 443directive with an operand of 1 will force the next @code{.field} 444directive to begin packing into a new word. If a label is used, it 445points 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 454and available to other files. @code{.ref} identifies a symbol used in 455the 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}] 474Place one or more values into consecutive words of the current section. 475If a label is used, it points to the word allocated for the first value 476encountered. 477 478@cindex @code{label} directive, TIC54X 479@item .label @var{symbol} 480Define a special @var{symbol} to refer to the load time address of the 481current section program counter. 482 483@cindex @code{length} directive, TIC54X 484@cindex @code{width} directive, TIC54X 485@item .length 486@itemx .width 487Set 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 493Control 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}] 501Place one or more 32-bit values into consecutive words in the current 502section. The most significant word is stored first. @code{.long} and 503@code{.ulong} align the result on a longword boundary; @code{xlong} does 504not. 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 512Repeatedly assemble a block of code. @code{.loop} begins the block, and 513@code{.endloop} marks its termination. @var{count} defaults to 1024, 514and 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 517loop 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 524See the section on macros for more explanation (@xref{TIC54X-Macros}. 525 526@cindex @code{mlib} directive, TIC54X 527@item .mlib "@var{filename}" | @var{filename} 528Load the macro library @var{filename}. @var{filename} must be an 529archived library (BFD ar-compatible) of text files, expected to contain 530only 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 536Control whether to include macro and loop block expansions in the 537listing output. Ignored. 538 539@cindex @code{mmregs} directive, TIC54X 540@item .mmregs 541Define global symbolic names for the 'c54x registers. Supposedly 542equivalent to executing @code{.set} directives for each register with 543its memory-mapped value, but in reality is provided only for 544compatibility and does nothing. 545 546@cindex @code{newblock} directive, TIC54X 547@item .newblock 548This 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} 553Set 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}] 557Designate @var{section_name} for blocking. Blocking guarantees that a 558section will start on a page boundary (128 words) if it would otherwise 559cross a page boundary. Only initialized sections may be designated with 560this directive. See also @xref{TIC54X-Block}. 561 562@cindex @code{sect} directive, TIC54X 563@item .sect "@var{section_name}" 564Define 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}" 570Equate a constant @var{value} to a @var{symbol}, which is placed in the 571symbol 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} 577Reserve the given number of bits in the current section and zero-fill 578them. 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 586Controls 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}"] 592Place 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 595most-significant bits first. Unused space is zero-filled. If a label 596is 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}] 609Assign symbolic offsets to the elements of a structure. @var{stag} 610defines a symbol to use to reference the structure. @var{offset} 611indicates a starting value to use for the first element encountered; 612otherwise 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 614into the structure. If @var{stag} is missing, these become global 615symbols. @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 618equivalent 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 621word 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 624to word boundaries only. @var{ssize}, if provided, will always be 625assigned the size of the structure. 626 627The @code{.tag} directive, in addition to being used to define a 628structure/union element within a structure, may be used to apply a 629structure to a symbol. Once applied to @var{label}, the individual 630structure elements may be applied to @var{label} to produce the desired 631offsets using @var{label} as the structure base. 632 633@cindex @code{tab} directive, TIC54X 634@item .tab 635Set 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}] 648Similar to @code{.struct}, but the offset after each element is reset to 649zero, and the @var{usize} is set to the maximum of all defined elements. 650Starting 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}]] 654Reserve 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. 657The symbol may be used as a variable name. @var{size} is the allocated 658size in words. @var{blocking_flag} indicates whether to block this 659section on a page boundary (128 words) (@pxref{TIC54X-Block}). 660@var{alignment flag} indicates whether the section should be 661longword-aligned. 662 663@cindex @code{var} directive, TIC54X 664@item .var @var{sym}[,..., @var{sym_n}] 665Define 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} 670Set which processor to build instructions for. Though the following 671values 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 689Macros do not require explicit dereferencing of arguments (i.e., \ARG). 690 691During macro expansion, the macro parameters are converted to subsyms. 692If the number of arguments passed the macro invocation exceeds the 693number of parameters defined, the last parameter is assigned the string 694equivalent of all remaining arguments. If fewer arguments are given 695than parameters, the missing parameters are assigned empty strings. To 696include 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 701The following built-in subsym functions allow examination of the string 702value of subsyms (or ordinary strings). The arguments are strings 703unless otherwise indicated (subsyms passed as args will be replaced by 704the strings they represent). 705@table @code 706@cindex @code{$symlen} subsym builtin, TIC54X 707@item @code{$symlen(@var{str})} 708Returns the length of @var{str}. 709 710@cindex @code{$symcmp} subsym builtin, TIC54X 711@item @code{$symcmp(@var{str1},@var{str2})} 712Returns 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})} 716Returns 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})} 721Returns 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})} 726Returns zero if the symbol @var{symbol} is not in the symbol table, 727non-zero otherwise. 728 729@cindex @code{$ismember} subsym builtin, TIC54X 730@item @code{$ismember(@var{symbol},@var{list})} 731Assign the first member of comma-separated string @var{list} to 732@var{symbol}; @var{list} is reassigned the remainder of the list. Returns 733zero 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})} 737Returns 1 if string @var{expr} is binary, 2 if octal, 3 if hexadecimal, 7384 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})} 742Returns 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})} 746Returns 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})} 750Returns 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})} 754Returns 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 765The 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 781The presence of a @samp{;} appearing anywhere on a line indicates the 782start of a comment that extends to the end of that line. 783 784If a @samp{#} appears as the first character of a line then the whole 785line is treated as a comment, but in this case the line can also be a 786logical line number directive (@pxref{Comments}) or a preprocessor 787control command (@pxref{Preprocessing}). 788 789The presence of an asterisk (@samp{*}) at the start of a line also 790indicates 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 795The TIC54X assembler does not currently support a line separator 796character. 797 798