Annotation of gcc/gcc.info-9, revision 1.1.1.9

1.1.1.9 ! root        1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the
        !             2: input file gcc.texi.
1.1       root        3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
1.1.1.8   root        6:    Published by the Free Software Foundation 59 Temple Place - Suite 330
                      7: Boston, MA 02111-1307 USA
1.1.1.5   root        8: 
1.1.1.8   root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
                     10: Foundation, Inc.
1.1       root       11: 
1.1.1.3   root       12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
1.1       root       15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.7   root       18: that the sections entitled "GNU General Public License," "Funding for
                     19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
                     20: included exactly as in the original, and provided that the entire
                     21: resulting derived work is distributed under the terms of a permission
                     22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
1.1.1.3   root       26: versions, except that the sections entitled "GNU General Public
1.1.1.7   root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
                     28: `Look And Feel'", and this permission notice, may be included in
                     29: translations approved by the Free Software Foundation instead of in the
                     30: original English.
1.1.1.3   root       31: 
                     32: 
1.1.1.8   root       33: File: gcc.info,  Node: Constructors,  Next: Labeled Elements,  Prev: Initializers,  Up: C Extensions
1.1.1.6   root       34: 
1.1.1.8   root       35: Constructor Expressions
                     36: =======================
1.1.1.6   root       37: 
1.1.1.8   root       38:    GNU C supports constructor expressions.  A constructor looks like a
                     39: cast containing an initializer.  Its value is an object of the type
                     40: specified in the cast, containing the elements specified in the
                     41: initializer.
1.1.1.6   root       42: 
1.1.1.8   root       43:    Usually, the specified type is a structure.  Assume that `struct
                     44: foo' and `structure' are declared as shown:
1.1.1.6   root       45: 
1.1.1.8   root       46:      struct foo {int a; char b[2];} structure;
1.1.1.6   root       47: 
1.1.1.8   root       48: Here is an example of constructing a `struct foo' with a constructor:
1.1.1.6   root       49: 
1.1.1.8   root       50:      structure = ((struct foo) {x + y, 'a', 0});
1.1.1.6   root       51: 
1.1.1.8   root       52: This is equivalent to writing the following:
1.1.1.6   root       53: 
                     54:      {
1.1.1.8   root       55:        struct foo temp = {x + y, 'a', 0};
                     56:        structure = temp;
                     57:      }
                     58: 
                     59:    You can also construct an array.  If all the elements of the
                     60: constructor are (made up of) simple constant expressions, suitable for
                     61: use in initializers, then the constructor is an lvalue and can be
                     62: coerced to a pointer to its first element, as shown here:
                     63: 
                     64:      char **foo = (char *[]) { "x", "y", "z" };
                     65: 
                     66:    Array constructors whose elements are not simple constants are not
                     67: very useful, because the constructor is not an lvalue.  There are only
                     68: two valid ways to use it: to subscript it, or initialize an array
                     69: variable with it.  The former is probably slower than a `switch'
                     70: statement, while the latter does the same thing an ordinary C
                     71: initializer would do.  Here is an example of subscripting an array
                     72: constructor:
1.1.1.3   root       73: 
1.1.1.8   root       74:      output = ((int[]) { 2, x, 28 }) [input];
1.1.1.5   root       75: 
1.1.1.8   root       76:    Constructor expressions for scalar types and union types are is also
                     77: allowed, but then the constructor expression is equivalent to a cast.
1.1.1.3   root       78: 
1.1.1.7   root       79: 
1.1.1.8   root       80: File: gcc.info,  Node: Labeled Elements,  Next: Cast to Union,  Prev: Constructors,  Up: C Extensions
1.1.1.5   root       81: 
1.1.1.8   root       82: Labeled Elements in Initializers
1.1.1.7   root       83: ================================
1.1.1.5   root       84: 
1.1.1.8   root       85:    Standard C requires the elements of an initializer to appear in a
                     86: fixed order, the same as the order of the elements in the array or
                     87: structure being initialized.
1.1.1.5   root       88: 
1.1.1.8   root       89:    In GNU C you can give the elements in any order, specifying the array
                     90: indices or structure field names they apply to.  This extension is not
                     91: implemented in GNU C++.
1.1.1.5   root       92: 
1.1.1.8   root       93:    To specify an array index, write `[INDEX]' or `[INDEX] =' before the
                     94: element value.  For example,
1.1.1.7   root       95: 
1.1.1.8   root       96:      int a[6] = { [4] 29, [2] = 15 };
1.1.1.7   root       97: 
1.1.1.8   root       98: is equivalent to
1.1.1.7   root       99: 
1.1.1.8   root      100:      int a[6] = { 0, 0, 15, 0, 29, 0 };
1.1.1.7   root      101: 
1.1.1.8   root      102: The index values must be constant expressions, even if the array being
                    103: initialized is automatic.
1.1.1.7   root      104: 
1.1.1.8   root      105:    To initialize a range of elements to the same value, write `[FIRST
                    106: ... LAST] = VALUE'.  For example,
1.1.1.7   root      107: 
1.1.1.8   root      108:      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
1.1.1.7   root      109: 
1.1.1.8   root      110: Note that the length of the array is the highest value specified plus
                    111: one.
1.1.1.7   root      112: 
1.1.1.8   root      113:    In a structure initializer, specify the name of a field to initialize
                    114: with `FIELDNAME:' before the element value.  For example, given the
                    115: following structure,
1.1.1.7   root      116: 
1.1.1.8   root      117:      struct point { int x, y; };
1.1.1.7   root      118: 
1.1.1.8   root      119: the following initialization
1.1.1.7   root      120: 
1.1.1.8   root      121:      struct point p = { y: yvalue, x: xvalue };
1.1.1.7   root      122: 
1.1.1.8   root      123: is equivalent to
1.1.1.7   root      124: 
1.1.1.8   root      125:      struct point p = { xvalue, yvalue };
1.1.1.7   root      126: 
1.1.1.8   root      127:    Another syntax which has the same meaning is `.FIELDNAME ='., as
                    128: shown here:
1.1.1.7   root      129: 
1.1.1.8   root      130:      struct point p = { .y = yvalue, .x = xvalue };
1.1.1.7   root      131: 
1.1.1.8   root      132:    You can also use an element label (with either the colon syntax or
                    133: the period-equal syntax) when initializing a union, to specify which
                    134: element of the union should be used.  For example,
1.1.1.7   root      135: 
1.1.1.8   root      136:      union foo { int i; double d; };
                    137:      
                    138:      union foo f = { d: 4 };
1.1.1.7   root      139: 
1.1.1.8   root      140: will convert 4 to a `double' to store it in the union using the second
                    141: element.  By contrast, casting 4 to type `union foo' would store it
                    142: into the union as the integer `i', since it is an integer.  (*Note Cast
                    143: to Union::.)
1.1.1.7   root      144: 
1.1.1.8   root      145:    You can combine this technique of naming elements with ordinary C
                    146: initialization of successive elements.  Each initializer element that
                    147: does not have a label applies to the next consecutive element of the
                    148: array or structure.  For example,
1.1.1.7   root      149: 
1.1.1.8   root      150:      int a[6] = { [1] = v1, v2, [4] = v4 };
1.1.1.7   root      151: 
1.1.1.8   root      152: is equivalent to
1.1.1.7   root      153: 
1.1.1.8   root      154:      int a[6] = { 0, v1, v2, 0, v4, 0 };
1.1.1.7   root      155: 
1.1.1.8   root      156:    Labeling the elements of an array initializer is especially useful
                    157: when the indices are characters or belong to an `enum' type.  For
                    158: example:
1.1.1.7   root      159: 
1.1.1.8   root      160:      int whitespace[256]
                    161:        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
                    162:            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
1.1.1.7   root      163: 
1.1.1.8   root      164: 
                    165: File: gcc.info,  Node: Case Ranges,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
1.1.1.7   root      166: 
1.1.1.8   root      167: Case Ranges
                    168: ===========
1.1.1.7   root      169: 
1.1.1.8   root      170:    You can specify a range of consecutive values in a single `case'
                    171: label, like this:
1.1.1.7   root      172: 
1.1.1.8   root      173:      case LOW ... HIGH:
1.1.1.7   root      174: 
1.1.1.8   root      175: This has the same effect as the proper number of individual `case'
                    176: labels, one for each integer value from LOW to HIGH, inclusive.
1.1.1.7   root      177: 
1.1.1.8   root      178:    This feature is especially useful for ranges of ASCII character
                    179: codes:
1.1.1.7   root      180: 
1.1.1.8   root      181:      case 'A' ... 'Z':
1.1.1.7   root      182: 
1.1.1.8   root      183:    *Be careful:* Write spaces around the `...', for otherwise it may be
                    184: parsed wrong when you use it with integer values.  For example, write
                    185: this:
1.1.1.7   root      186: 
1.1.1.8   root      187:      case 1 ... 5:
1.1.1.7   root      188: 
1.1.1.8   root      189: rather than this:
1.1.1.7   root      190: 
1.1.1.8   root      191:      case 1...5:
1.1.1.7   root      192: 
1.1.1.8   root      193: 
                    194: File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Labeled Elements,  Up: C Extensions
1.1.1.7   root      195: 
1.1.1.8   root      196: Cast to a Union Type
                    197: ====================
1.1.1.7   root      198: 
1.1.1.8   root      199:    A cast to union type is similar to other casts, except that the type
                    200: specified is a union type.  You can specify the type either with `union
                    201: TAG' or with a typedef name.  A cast to union is actually a constructor
                    202: though, not a cast, and hence does not yield an lvalue like normal
                    203: casts.  (*Note Constructors::.)
1.1.1.7   root      204: 
1.1.1.8   root      205:    The types that may be cast to the union type are those of the members
                    206: of the union.  Thus, given the following union and variables:
1.1.1.7   root      207: 
1.1.1.8   root      208:      union foo { int i; double d; };
                    209:      int x;
                    210:      double y;
1.1.1.7   root      211: 
1.1.1.8   root      212: both `x' and `y' can be cast to type `union' foo.
1.1.1.7   root      213: 
1.1.1.8   root      214:    Using the cast as the right-hand side of an assignment to a variable
                    215: of union type is equivalent to storing in a member of the union:
1.1.1.7   root      216: 
1.1.1.8   root      217:      union foo u;
                    218:      ...
                    219:      u = (union foo) x  ==  u.i = x
                    220:      u = (union foo) y  ==  u.d = y
1.1.1.7   root      221: 
1.1.1.8   root      222:    You can also use the union cast as a function argument:
1.1.1.7   root      223: 
1.1.1.8   root      224:      void hack (union foo);
                    225:      ...
                    226:      hack ((union foo) x);
1.1.1.7   root      227: 
1.1.1.8   root      228: 
                    229: File: gcc.info,  Node: Function Attributes,  Next: Function Prototypes,  Prev: Case Ranges,  Up: C Extensions
1.1.1.7   root      230: 
1.1.1.8   root      231: Declaring Attributes of Functions
                    232: =================================
1.1.1.7   root      233: 
1.1.1.8   root      234:    In GNU C, you declare certain things about functions called in your
                    235: program which help the compiler optimize function calls and check your
                    236: code more carefully.
                    237: 
                    238:    The keyword `__attribute__' allows you to specify special attributes
                    239: when making a declaration.  This keyword is followed by an attribute
                    240: specification inside double parentheses.  Eight attributes, `noreturn',
                    241: `const', `format', `section', `constructor', `destructor', `unused' and
                    242: `weak' are currently defined for functions.  Other attributes, including
                    243: `section' are supported for variables declarations (*note Variable
                    244: Attributes::.) and for types (*note Type Attributes::.).
                    245: 
                    246:    You may also specify attributes with `__' preceding and following
                    247: each keyword.  This allows you to use them in header files without
                    248: being concerned about a possible macro of the same name.  For example,
                    249: you may use `__noreturn__' instead of `noreturn'.
                    250: 
                    251: `noreturn'
                    252:      A few standard library functions, such as `abort' and `exit',
                    253:      cannot return.  GNU CC knows this automatically.  Some programs
                    254:      define their own functions that never return.  You can declare them
                    255:      `noreturn' to tell the compiler this fact.  For example,
1.1.1.7   root      256: 
1.1.1.8   root      257:           void fatal () __attribute__ ((noreturn));
                    258:           
                    259:           void
                    260:           fatal (...)
                    261:           {
                    262:             ... /* Print error message. */ ...
                    263:             exit (1);
                    264:           }
1.1.1.7   root      265: 
1.1.1.8   root      266:      The `noreturn' keyword tells the compiler to assume that `fatal'
                    267:      cannot return.  It can then optimize without regard to what would
                    268:      happen if `fatal' ever did return.  This makes slightly better
                    269:      code.  More importantly, it helps avoid spurious warnings of
                    270:      uninitialized variables.
                    271: 
                    272:      Do not assume that registers saved by the calling function are
                    273:      restored before calling the `noreturn' function.
                    274: 
                    275:      It does not make sense for a `noreturn' function to have a return
                    276:      type other than `void'.
                    277: 
                    278:      The attribute `noreturn' is not implemented in GNU C versions
                    279:      earlier than 2.5.  An alternative way to declare that a function
                    280:      does not return, which works in the current version and in some
                    281:      older versions, is as follows:
1.1.1.7   root      282: 
1.1.1.8   root      283:           typedef void voidfn ();
                    284:           
                    285:           volatile voidfn fatal;
1.1.1.7   root      286: 
1.1.1.8   root      287: `const'
                    288:      Many functions do not examine any values except their arguments,
                    289:      and have no effects except the return value.  Such a function can
                    290:      be subject to common subexpression elimination and loop
                    291:      optimization just as an arithmetic operator would be.  These
                    292:      functions should be declared with the attribute `const'.  For
                    293:      example,
                    294: 
                    295:           int square (int) __attribute__ ((const));
                    296: 
                    297:      says that the hypothetical function `square' is safe to call fewer
                    298:      times than the program says.
                    299: 
                    300:      The attribute `const' is not implemented in GNU C versions earlier
                    301:      than 2.5.  An alternative way to declare that a function has no
                    302:      side effects, which works in the current version and in some older
                    303:      versions, is as follows:
1.1.1.7   root      304: 
1.1.1.8   root      305:           typedef int intfn ();
                    306:           
                    307:           extern const intfn square;
1.1.1.7   root      308: 
1.1.1.8   root      309:      This approach does not work in GNU C++ from 2.6.0 on, since the
                    310:      language specifies that the `const' must be attached to the return
                    311:      value.
                    312: 
                    313:      Note that a function that has pointer arguments and examines the
                    314:      data pointed to must *not* be declared `const'.  Likewise, a
                    315:      function that calls a non-`const' function usually must not be
                    316:      `const'.  It does not make sense for a `const' function to return
                    317:      `void'.
                    318: 
                    319: `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
                    320:      The `format' attribute specifies that a function takes `printf' or
                    321:      `scanf' style arguments which should be type-checked against a
                    322:      format string.  For example, the declaration:
                    323: 
                    324:           extern int
                    325:           my_printf (void *my_object, const char *my_format, ...)
                    326:                 __attribute__ ((format (printf, 2, 3)));
                    327: 
                    328:      causes the compiler to check the arguments in calls to `my_printf'
                    329:      for consistency with the `printf' style format string argument
                    330:      `my_format'.
                    331: 
                    332:      The parameter ARCHETYPE determines how the format string is
                    333:      interpreted, and should be either `printf' or `scanf'.  The
                    334:      parameter STRING-INDEX specifies which argument is the format
                    335:      string argument (starting from 1), while FIRST-TO-CHECK is the
                    336:      number of the first argument to check against the format string.
                    337:      For functions where the arguments are not available to be checked
                    338:      (such as `vprintf'), specify the third parameter as zero.  In this
                    339:      case the compiler only checks the format string for consistency.
                    340: 
                    341:      In the example above, the format string (`my_format') is the second
                    342:      argument of the function `my_print', and the arguments to check
                    343:      start with the third argument, so the correct parameters for the
                    344:      format attribute are 2 and 3.
                    345: 
                    346:      The `format' attribute allows you to identify your own functions
                    347:      which take format strings as arguments, so that GNU CC can check
                    348:      the calls to these functions for errors.  The compiler always
                    349:      checks formats for the ANSI library functions `printf', `fprintf',
                    350:      `sprintf', `scanf', `fscanf', `sscanf', `vprintf', `vfprintf' and
                    351:      `vsprintf' whenever such warnings are requested (using
                    352:      `-Wformat'), so there is no need to modify the header file
                    353:      `stdio.h'.
                    354: 
                    355: `section ("section-name")'
                    356:      Normally, the compiler places the code it generates in the `text'
                    357:      section.  Sometimes, however, you need additional sections, or you
                    358:      need certain particular functions to appear in special sections.
                    359:      The `section' attribute specifies that a function lives in a
                    360:      particular section.  For example, the declaration:
                    361: 
                    362:           extern void foobar (void) __attribute__ ((section ("bar")));
                    363: 
                    364:      puts the function `foobar' in the `bar' section.
                    365: 
                    366:      Some file formats do not support arbitrary sections so the
                    367:      `section' attribute is not available on all platforms.  If you
                    368:      need to map the entire contents of a module to a particular
                    369:      section, consider using the facilities of the linker instead.
                    370: 
                    371: `constructor'
                    372: `destructor'
                    373:      The `constructor' attribute causes the function to be called
                    374:      automatically before execution enters `main ()'.  Similarly, the
                    375:      `destructor' attribute causes the function to be called
                    376:      automatically after `main ()' has completed or `exit ()' has been
                    377:      called.  Functions with these attributes are useful for
                    378:      initializing data that will be used implicitly during the
                    379:      execution of the program.
                    380: 
                    381:      These attributes are not currently implemented for Objective C.
                    382: 
                    383: `unused'
                    384:      This attribute, attached to a function, means that the function is
                    385:      meant to be possibly unused.  GNU CC will not produce a warning
                    386:      for this function.
                    387: 
                    388: `weak'
                    389:      The `weak' attribute causes the declaration to be emitted as a weak
                    390:      symbol rather than a global.  This is primarily useful in defining
                    391:      library functions which can be overridden in user code, though it
                    392:      can also be used with non-function declarations.  Weak symbols are
                    393:      supported for ELF targets, and also for a.out targets when using
                    394:      the GNU assembler and linker.
                    395: 
                    396: `alias ("target")'
                    397:      The `alias' attribute causes the declaration to be emitted as an
                    398:      alias for another symbol, which must be specified.  For instance,
                    399: 
                    400:           void __f () { /* do something */; }
                    401:           void f () __attribute__ ((weak, alias ("__f")));
                    402: 
                    403:      declares `f' to be a weak alias for `__f'.  In C++, the mangled
                    404:      name for the target must be used.
                    405: 
                    406: `regparm (NUMBER)'
                    407:      On the Intel 386, the `regparm' attribute causes the compiler to
                    408:      pass up to NUMBER integer arguments in registers EAX, EDX, and ECX
                    409:      instead of on the stack.  Functions that take a variable number of
                    410:      arguments will continue to be passed all of their arguments on the
                    411:      stack.
                    412: 
                    413: `stdcall'
                    414:      On the Intel 386, the `stdcall' attribute causes the compiler to
                    415:      assume that the called function will pop off the stack space used
                    416:      to pass arguments, unless it takes a variable number of arguments.
                    417: 
                    418: `cdecl'
                    419:      On the Intel 386, the `cdecl' attribute causes the compiler to
                    420:      assume that the called function will pop off the stack space used
                    421:      to pass arguments, unless it takes a variable number of arguments.
                    422:      This is useful to override the effects of the `-mrtd' switch.
                    423: 
                    424:    You can specify multiple attributes in a declaration by separating
                    425: them by commas within the double parentheses or by immediately
                    426: following an attribute declaration with another attribute declaration.
                    427: 
                    428:    Some people object to the `__attribute__' feature, suggesting that
                    429: ANSI C's `#pragma' should be used instead.  There are two reasons for
                    430: not doing this.
                    431: 
                    432:   1. It is impossible to generate `#pragma' commands from a macro.
                    433: 
                    434:   2. There is no telling what the same `#pragma' might mean in another
                    435:      compiler.
                    436: 
                    437:    These two reasons apply to almost any application that might be
                    438: proposed for `#pragma'.  It is basically a mistake to use `#pragma' for
                    439: *anything*.
1.1.1.7   root      440: 
1.1.1.8   root      441: 
                    442: File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Function Attributes,  Up: C Extensions
1.1.1.7   root      443: 
1.1.1.8   root      444: Prototypes and Old-Style Function Definitions
                    445: =============================================
1.1.1.7   root      446: 
1.1.1.8   root      447:    GNU C extends ANSI C to allow a function prototype to override a
                    448: later old-style non-prototype definition.  Consider the following
                    449: example:
                    450: 
                    451:      /* Use prototypes unless the compiler is old-fashioned.  */
                    452:      #if __STDC__
                    453:      #define P(x) x
                    454:      #else
                    455:      #define P(x) ()
                    456:      #endif
                    457:      
                    458:      /* Prototype function declaration.  */
                    459:      int isroot P((uid_t));
                    460:      
                    461:      /* Old-style function definition.  */
                    462:      int
                    463:      isroot (x)   /* ??? lossage here ??? */
                    464:           uid_t x;
                    465:      {
                    466:        return x == 0;
                    467:      }
1.1.1.7   root      468: 
1.1.1.8   root      469:    Suppose the type `uid_t' happens to be `short'.  ANSI C does not
                    470: allow this example, because subword arguments in old-style
                    471: non-prototype definitions are promoted.  Therefore in this example the
                    472: function definition's argument is really an `int', which does not match
                    473: the prototype argument type of `short'.
                    474: 
                    475:    This restriction of ANSI C makes it hard to write code that is
                    476: portable to traditional C compilers, because the programmer does not
                    477: know whether the `uid_t' type is `short', `int', or `long'.  Therefore,
                    478: in cases like these GNU C allows a prototype to override a later
                    479: old-style definition.  More precisely, in GNU C, a function prototype
                    480: argument type overrides the argument type specified by a later
                    481: old-style definition if the former type is the same as the latter type
                    482: before promotion.  Thus in GNU C the above example is equivalent to the
                    483: following:
                    484: 
                    485:      int isroot (uid_t);
                    486:      
                    487:      int
                    488:      isroot (uid_t x)
                    489:      {
                    490:        return x == 0;
                    491:      }
1.1.1.7   root      492: 
1.1.1.8   root      493:    GNU C++ does not support old-style function definitions, so this
                    494: extension is irrelevant.
1.1.1.7   root      495: 
1.1.1.8   root      496: 
                    497: File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
1.1.1.7   root      498: 
1.1.1.8   root      499: C++ Style Comments
                    500: ==================
1.1.1.7   root      501: 
1.1.1.8   root      502:    In GNU C, you may use C++ style comments, which start with `//' and
                    503: continue until the end of the line.  Many other C implementations allow
                    504: such comments, and they are likely to be in a future C standard.
                    505: However, C++ style comments are not recognized if you specify `-ansi'
                    506: or `-traditional', since they are incompatible with traditional
                    507: constructs like `dividend//*comment*/divisor'.
1.1.1.5   root      508: 
1.1.1.8   root      509: 
                    510: File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
1.1.1.5   root      511: 
1.1.1.8   root      512: Dollar Signs in Identifier Names
                    513: ================================
1.1.1.5   root      514: 
1.1.1.8   root      515:    In GNU C, you may use dollar signs in identifier names.  This is
                    516: because many traditional C implementations allow such identifiers.
1.1.1.5   root      517: 
1.1.1.8   root      518:    On some machines, dollar signs are allowed in identifiers if you
                    519: specify `-traditional'.  On a few systems they are allowed by default,
                    520: even if you do not use `-traditional'.  But they are never allowed if
                    521: you specify `-ansi'.
                    522: 
                    523:    There are certain ANSI C programs (obscure, to be sure) that would
                    524: compile incorrectly if dollar signs were permitted in identifiers.  For
                    525: example:
                    526: 
                    527:      #define foo(a) #a
                    528:      #define lose(b) foo (b)
                    529:      #define test$
                    530:      lose (test)
1.1.1.5   root      531: 
1.1.1.8   root      532: 
                    533: File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
1.1.1.5   root      534: 
1.1.1.9 ! root      535: The Character <ESC> in Constants
        !           536: ================================
1.1.1.5   root      537: 
1.1.1.8   root      538:    You can use the sequence `\e' in a string or character constant to
1.1.1.9 ! root      539: stand for the ASCII character <ESC>.
1.1.1.3   root      540: 
1.1.1.8   root      541: 
                    542: File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
1.1.1.5   root      543: 
1.1.1.8   root      544: Inquiring on Alignment of Types or Variables
                    545: ============================================
1.1.1.3   root      546: 
1.1.1.8   root      547:    The keyword `__alignof__' allows you to inquire about how an object
                    548: is aligned, or the minimum alignment usually required by a type.  Its
                    549: syntax is just like `sizeof'.
                    550: 
                    551:    For example, if the target machine requires a `double' value to be
                    552: aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
                    553: is true on many RISC machines.  On more traditional machine designs,
                    554: `__alignof__ (double)' is 4 or even 2.
                    555: 
                    556:    Some machines never actually require alignment; they allow reference
                    557: to any data type even at an odd addresses.  For these machines,
                    558: `__alignof__' reports the *recommended* alignment of a type.
                    559: 
                    560:    When the operand of `__alignof__' is an lvalue rather than a type,
                    561: the value is the largest alignment that the lvalue is known to have.
                    562: It may have this alignment as a result of its data type, or because it
                    563: is part of a structure and inherits alignment from that structure.  For
                    564: example, after this declaration:
                    565: 
                    566:      struct foo { int x; char y; } foo1;
                    567: 
                    568: the value of `__alignof__ (foo1.y)' is probably 2 or 4, the same as
                    569: `__alignof__ (int)', even though the data type of `foo1.y' does not
                    570: itself demand any alignment.
1.1.1.3   root      571: 
1.1.1.8   root      572:    A related feature which lets you specify the alignment of an object
                    573: is `__attribute__ ((aligned (ALIGNMENT)))'; see the following section.
1.1.1.6   root      574: 
1.1.1.8   root      575: 
                    576: File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
1.1.1.5   root      577: 
1.1.1.8   root      578: Specifying Attributes of Variables
                    579: ==================================
1.1.1.5   root      580: 
1.1.1.8   root      581:    The keyword `__attribute__' allows you to specify special attributes
                    582: of variables or structure fields.  This keyword is followed by an
                    583: attribute specification inside double parentheses.  Eight attributes
                    584: are currently defined for variables: `aligned', `mode', `nocommon',
                    585: `packed', `section', `transparent_union', `unused', and `weak'.  Other
                    586: attributes are available for functions (*note Function Attributes::.)
                    587: and for types (*note Type Attributes::.).
                    588: 
                    589:    You may also specify attributes with `__' preceding and following
                    590: each keyword.  This allows you to use them in header files without
                    591: being concerned about a possible macro of the same name.  For example,
                    592: you may use `__aligned__' instead of `aligned'.
                    593: 
                    594: `aligned (ALIGNMENT)'
                    595:      This attribute specifies a minimum alignment for the variable or
                    596:      structure field, measured in bytes.  For example, the declaration:
                    597: 
                    598:           int x __attribute__ ((aligned (16))) = 0;
                    599: 
                    600:      causes the compiler to allocate the global variable `x' on a
                    601:      16-byte boundary.  On a 68040, this could be used in conjunction
                    602:      with an `asm' expression to access the `move16' instruction which
                    603:      requires 16-byte aligned operands.
                    604: 
                    605:      You can also specify the alignment of structure fields.  For
                    606:      example, to create a double-word aligned `int' pair, you could
                    607:      write:
                    608: 
                    609:           struct foo { int x[2] __attribute__ ((aligned (8))); };
                    610: 
                    611:      This is an alternative to creating a union with a `double' member
                    612:      that forces the union to be double-word aligned.
                    613: 
                    614:      It is not possible to specify the alignment of functions; the
                    615:      alignment of functions is determined by the machine's requirements
                    616:      and cannot be changed.  You cannot specify alignment for a typedef
                    617:      name because such a name is just an alias, not a distinct type.
                    618: 
                    619:      As in the preceding examples, you can explicitly specify the
                    620:      alignment (in bytes) that you wish the compiler to use for a given
                    621:      variable or structure field.  Alternatively, you can leave out the
                    622:      alignment factor and just ask the compiler to align a variable or
                    623:      field to the maximum useful alignment for the target machine you
                    624:      are compiling for.  For example, you could write:
                    625: 
                    626:           short array[3] __attribute__ ((aligned));
                    627: 
                    628:      Whenever you leave out the alignment factor in an `aligned'
                    629:      attribute specification, the compiler automatically sets the
                    630:      alignment for the declared variable or field to the largest
                    631:      alignment which is ever used for any data type on the target
                    632:      machine you are compiling for.  Doing this can often make copy
                    633:      operations more efficient, because the compiler can use whatever
                    634:      instructions copy the biggest chunks of memory when performing
                    635:      copies to or from the variables or fields that you have aligned
                    636:      this way.
                    637: 
                    638:      The `aligned' attribute can only increase the alignment; but you
                    639:      can decrease it by specifying `packed' as well.  See below.
                    640: 
                    641:      Note that the effectiveness of `aligned' attributes may be limited
                    642:      by inherent limitations in your linker.  On many systems, the
                    643:      linker is only able to arrange for variables to be aligned up to a
                    644:      certain maximum alignment.  (For some linkers, the maximum
                    645:      supported alignment may be very very small.)  If your linker is
                    646:      only able to align variables up to a maximum of 8 byte alignment,
                    647:      then specifying `aligned(16)' in an `__attribute__' will still
                    648:      only provide you with 8 byte alignment.  See your linker
                    649:      documentation for further information.
                    650: 
                    651: `mode (MODE)'
                    652:      This attribute specifies the data type for the
                    653:      declaration--whichever type corresponds to the mode MODE.  This in
                    654:      effect lets you request an integer or floating point type
                    655:      according to its width.
                    656: 
                    657:      You may also specify a mode of `byte' or `__byte__' to indicate
                    658:      the mode corresponding to a one-byte integer, `word' or `__word__'
                    659:      for the mode of a one-word integer, and `pointer' or `__pointer__'
                    660:      for the mode used to represent pointers.
                    661: 
                    662: `nocommon'
                    663:      This attribute specifies requests GNU CC not to place a variable
                    664:      "common" but instead to allocate space for it directly.  If you
                    665:      specify the `-fno-common' flag, GNU CC will do this for all
                    666:      variables.
                    667: 
                    668:      Specifying the `nocommon' attribute for a variable provides an
                    669:      initialization of zeros.  A variable may only be initialized in one
                    670:      source file.
                    671: 
                    672: `packed'
                    673:      The `packed' attribute specifies that a variable or structure field
                    674:      should have the smallest possible alignment--one byte for a
                    675:      variable, and one bit for a field, unless you specify a larger
                    676:      value with the `aligned' attribute.
1.1       root      677: 
1.1.1.8   root      678:      Here is a structure in which the field `x' is packed, so that it
                    679:      immediately follows `a':
1.1.1.2   root      680: 
1.1.1.8   root      681:           struct foo
                    682:           {
                    683:             char a;
                    684:             int x[2] __attribute__ ((packed));
                    685:           };
                    686: 
                    687: `section ("section-name")'
                    688:      Normally, the compiler places the objects it generates in sections
                    689:      like `data' and `bss'.  Sometimes, however, you need additional
                    690:      sections, or you need certain particular variables to appear in
                    691:      special sections, for example to map to special hardware.  The
                    692:      `section' attribute specifies that a variable (or function) lives
                    693:      in a particular section.  For example, this small program uses
                    694:      several specific section names:
                    695: 
                    696:           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
                    697:           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
                    698:           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
                    699:           int init_data_copy __attribute__ ((section ("INITDATACOPY"))) = 0;
                    700:           
                    701:           main()
                    702:           {
                    703:             /* Initialize stack pointer */
                    704:             init_sp (stack + sizeof (stack));
                    705:           
                    706:             /* Initialize initialized data */
                    707:             memcpy (&init_data_copy, &data, &edata - &data);
                    708:           
                    709:             /* Turn on the serial ports */
                    710:             init_duart (&a);
                    711:             init_duart (&b);
                    712:           }
1.1.1.2   root      713: 
1.1.1.8   root      714:      Use the `section' attribute with an *initialized* definition of a
                    715:      *global* variable, as shown in the example.  GNU CC issues a
                    716:      warning and otherwise ignores the `section' attribute in
                    717:      uninitialized variable declarations.
                    718: 
                    719:      You may only use the `section' attribute with a fully initialized
                    720:      global definition because of the way linkers work.  The linker
                    721:      requires each object be defined once, with the exception that
                    722:      uninitialized variables tentatively go in the `common' (or `bss')
                    723:      section and can be multiply "defined".  You can force a variable
                    724:      to be initialized with the `-fno-common' flag or the `nocommon'
                    725:      attribute.
                    726: 
                    727:      Some file formats do not support arbitrary sections so the
                    728:      `section' attribute is not available on all platforms.  If you
                    729:      need to map the entire contents of a module to a particular
                    730:      section, consider using the facilities of the linker instead.
                    731: 
                    732: `transparent_union'
                    733:      This attribute, attached to a function argument variable which is a
                    734:      union, means to pass the argument in the same way that the first
                    735:      union member would be passed.  You can also use this attribute on a
                    736:      `typedef' for a union data type; then it applies to all function
                    737:      arguments with that type.
                    738: 
                    739: `unused'
                    740:      This attribute, attached to a variable, means that the variable is
                    741:      meant to be possibly unused.  GNU CC will not produce a warning
                    742:      for this variable.
                    743: 
                    744: `weak'
                    745:      The `weak' attribute is described in *Note Function Attributes::.
                    746: 
                    747:    To specify multiple attributes, separate them by commas within the
                    748: double parentheses: for example, `__attribute__ ((aligned (16),
                    749: packed))'.
1.1.1.2   root      750: 
1.1.1.7   root      751: 
1.1.1.8   root      752: File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
1.1.1.2   root      753: 
1.1.1.8   root      754: Specifying Attributes of Types
                    755: ==============================
1.1.1.2   root      756: 
1.1.1.8   root      757:    The keyword `__attribute__' allows you to specify special attributes
                    758: of `struct' and `union' types when you define such types.  This keyword
                    759: is followed by an attribute specification inside double parentheses.
                    760: Three attributes are currently defined for types: `aligned', `packed',
                    761: and `transparent_union'.  Other attributes are defined for functions
                    762: (*note Function Attributes::.) and for variables (*note Variable
                    763: Attributes::.).
                    764: 
                    765:    You may also specify any one of these attributes with `__' preceding
                    766: and following its keyword.  This allows you to use these attributes in
                    767: header files without being concerned about a possible macro of the same
                    768: name.  For example, you may use `__aligned__' instead of `aligned'.
                    769: 
                    770:    You may specify the `aligned' and `transparent_union' attributes
                    771: either in a `typedef' declaration or just past the closing curly brace
                    772: of a complete enum, struct or union type *definition* and the `packed'
                    773: attribute only past the closing brace of a definition.
                    774: 
                    775: `aligned (ALIGNMENT)'
                    776:      This attribute specifies a minimum alignment (in bytes) for
                    777:      variables of the specified type.  For example, the declarations:
                    778: 
                    779:           struct S { short f[3]; } __attribute__ ((aligned (8));
                    780:           typedef int more_aligned_int __attribute__ ((aligned (8));
                    781: 
                    782:      force the compiler to insure (as fas as it can) that each variable
                    783:      whose type is `struct S' or `more_aligned_int' will be allocated
                    784:      and aligned *at least* on a 8-byte boundary.  On a Sparc, having
                    785:      all variables of type `struct S' aligned to 8-byte boundaries
                    786:      allows the compiler to use the `ldd' and `std' (doubleword load and
                    787:      store) instructions when copying one variable of type `struct S' to
                    788:      another, thus improving run-time efficiency.
                    789: 
                    790:      Note that the alignment of any given `struct' or `union' type is
                    791:      required by the ANSI C standard to be at least a perfect multiple
                    792:      of the lowest common multiple of the alignments of all of the
                    793:      members of the `struct' or `union' in question.  This means that
                    794:      you *can* effectively adjust the alignment of a `struct' or `union'
                    795:      type by attaching an `aligned' attribute to any one of the members
                    796:      of such a type, but the notation illustrated in the example above
                    797:      is a more obvious, intuitive, and readable way to request the
                    798:      compiler to adjust the alignment of an entire `struct' or `union'
                    799:      type.
                    800: 
                    801:      As in the preceding example, you can explicitly specify the
                    802:      alignment (in bytes) that you wish the compiler to use for a given
                    803:      `struct' or `union' type.  Alternatively, you can leave out the
                    804:      alignment factor and just ask the compiler to align a type to the
                    805:      maximum useful alignment for the target machine you are compiling
                    806:      for.  For example, you could write:
                    807: 
                    808:           struct S { short f[3]; } __attribute__ ((aligned));
                    809: 
                    810:      Whenever you leave out the alignment factor in an `aligned'
                    811:      attribute specification, the compiler automatically sets the
                    812:      alignment for the type to the largest alignment which is ever used
                    813:      for any data type on the target machine you are compiling for.
                    814:      Doing this can often make copy operations more efficient, because
                    815:      the compiler can use whatever instructions copy the biggest chunks
                    816:      of memory when performing copies to or from the variables which
                    817:      have types that you have aligned this way.
                    818: 
                    819:      In the example above, if the size of each `short' is 2 bytes, then
                    820:      the size of the entire `struct S' type is 6 bytes.  The smallest
                    821:      power of two which is greater than or equal to that is 8, so the
                    822:      compiler sets the alignment for the entire `struct S' type to 8
                    823:      bytes.
                    824: 
                    825:      Note that although you can ask the compiler to select a
                    826:      time-efficient alignment for a given type and then declare only
                    827:      individual stand-alone objects of that type, the compiler's
                    828:      ability to select a time-efficient alignment is primarily useful
                    829:      only when you plan to create arrays of variables having the
                    830:      relevant (efficiently aligned) type.  If you declare or use arrays
                    831:      of variables of an efficiently-aligned type, then it is likely
                    832:      that your program will also be doing pointer arithmetic (or
                    833:      subscripting, which amounts to the same thing) on pointers to the
                    834:      relevant type, and the code that the compiler generates for these
                    835:      pointer arithmetic operations will often be more efficient for
                    836:      efficiently-aligned types than for other types.
                    837: 
                    838:      The `aligned' attribute can only increase the alignment; but you
                    839:      can decrease it by specifying `packed' as well.  See below.
                    840: 
                    841:      Note that the effectiveness of `aligned' attributes may be limited
                    842:      by inherent limitations in your linker.  On many systems, the
                    843:      linker is only able to arrange for variables to be aligned up to a
                    844:      certain maximum alignment.  (For some linkers, the maximum
                    845:      supported alignment may be very very small.)  If your linker is
                    846:      only able to align variables up to a maximum of 8 byte alignment,
                    847:      then specifying `aligned(16)' in an `__attribute__' will still
                    848:      only provide you with 8 byte alignment.  See your linker
                    849:      documentation for further information.
                    850: 
                    851: `packed'
                    852:      This attribute, attached to an `enum', `struct', or `union' type
                    853:      definition, specified that the minimum required memory be used to
                    854:      represent the type.
                    855: 
                    856:      Specifying this attribute for `struct' and `union' types is
                    857:      equivalent to specifying the `packed' attribute on each of the
                    858:      structure or union members.  Specifying the `-fshort-enums' flag
                    859:      on the line is equivalent to specifying the `packed' attribute on
                    860:      all `enum' definitions.
                    861: 
                    862:      You may only specify this attribute after a closing curly brace on
                    863:      an `enum' definition, not in a `typedef' declaration.
                    864: 
                    865: `transparent_union'
                    866:      This attribute, attached to a `union' type definition, indicates
                    867:      that any variable having that union type should, if passed to a
                    868:      function, be passed in the same way that the first union member
                    869:      would be passed.  For example:
1.1.1.2   root      870: 
1.1.1.8   root      871:           union foo
                    872:           {
                    873:             char a;
                    874:             int x[2];
                    875:           } __attribute__ ((transparent_union));
                    876: 
                    877:    To specify multiple attributes, separate them by commas within the
                    878: double parentheses: for example, `__attribute__ ((aligned (16),
                    879: packed))'.
1.1.1.2   root      880: 
1.1.1.7   root      881: 
1.1.1.8   root      882: File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
1.1.1.5   root      883: 
1.1.1.8   root      884: An Inline Function is As Fast As a Macro
                    885: ========================================
1.1.1.2   root      886: 
1.1.1.8   root      887:    By declaring a function `inline', you can direct GNU CC to integrate
                    888: that function's code into the code for its callers.  This makes
                    889: execution faster by eliminating the function-call overhead; in
                    890: addition, if any of the actual argument values are constant, their known
                    891: values may permit simplifications at compile time so that not all of the
                    892: inline function's code needs to be included.  The effect on code size is
                    893: less predictable; object code may be larger or smaller with function
                    894: inlining, depending on the particular case.  Inlining of functions is an
                    895: optimization and it really "works" only in optimizing compilation.  If
                    896: you don't use `-O', no function is really inline.
1.1.1.5   root      897: 
1.1.1.8   root      898:    To declare a function inline, use the `inline' keyword in its
                    899: declaration, like this:
1.1.1.5   root      900: 
1.1.1.8   root      901:      inline int
                    902:      inc (int *a)
                    903:      {
                    904:        (*a)++;
                    905:      }
1.1.1.5   root      906: 
1.1.1.8   root      907:    (If you are writing a header file to be included in ANSI C programs,
                    908: write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
1.1.1.5   root      909: 
1.1.1.8   root      910:    You can also make all "simple enough" functions inline with the
                    911: option `-finline-functions'.  Note that certain usages in a function
                    912: definition can make it unsuitable for inline substitution.
                    913: 
                    914:    Note that in C and Objective C, unlike C++, the `inline' keyword
                    915: does not affect the linkage of the function.
                    916: 
                    917:    GNU CC automatically inlines member functions defined within the
                    918: class body of C++ programs even if they are not explicitly declared
                    919: `inline'.  (You can override this with `-fno-default-inline'; *note
                    920: Options Controlling C++ Dialect: C++ Dialect Options..)
                    921: 
                    922:    When a function is both inline and `static', if all calls to the
                    923: function are integrated into the caller, and the function's address is
                    924: never used, then the function's own assembler code is never referenced.
                    925: In this case, GNU CC does not actually output assembler code for the
                    926: function, unless you specify the option `-fkeep-inline-functions'.
                    927: Some calls cannot be integrated for various reasons (in particular,
                    928: calls that precede the function's definition cannot be integrated, and
                    929: neither can recursive calls within the definition).  If there is a
                    930: nonintegrated call, then the function is compiled to assembler code as
                    931: usual.  The function must also be compiled as usual if the program
                    932: refers to its address, because that can't be inlined.
                    933: 
                    934:    When an inline function is not `static', then the compiler must
                    935: assume that there may be calls from other source files; since a global
                    936: symbol can be defined only once in any program, the function must not
                    937: be defined in the other source files, so the calls therein cannot be
                    938: integrated.  Therefore, a non-`static' inline function is always
                    939: compiled on its own in the usual fashion.
                    940: 
                    941:    If you specify both `inline' and `extern' in the function
                    942: definition, then the definition is used only for inlining.  In no case
                    943: is the function compiled on its own, not even if you refer to its
                    944: address explicitly.  Such an address becomes an external reference, as
                    945: if you had only declared the function, and had not defined it.
                    946: 
                    947:    This combination of `inline' and `extern' has almost the effect of a
                    948: macro.  The way to use it is to put a function definition in a header
                    949: file with these keywords, and put another copy of the definition
                    950: (lacking `inline' and `extern') in a library file.  The definition in
                    951: the header file will cause most calls to the function to be inlined.
                    952: If any uses of the function remain, they will refer to the single copy
                    953: in the library.
                    954: 
                    955:    GNU C does not inline any functions when not optimizing.  It is not
                    956: clear whether it is better to inline or not, in this case, but we found
                    957: that a correct implementation when not optimizing was difficult.  So we
                    958: did the easy thing, and turned it off.
1.1.1.5   root      959: 
1.1.1.8   root      960: 
                    961: File: gcc.info,  Node: Extended Asm,  Next: Asm Labels,  Prev: Inline,  Up: C Extensions
                    962: 
                    963: Assembler Instructions with C Expression Operands
                    964: =================================================
                    965: 
                    966:    In an assembler instruction using `asm', you can now specify the
                    967: operands of the instruction using C expressions.  This means no more
                    968: guessing which registers or memory locations will contain the data you
                    969: want to use.
                    970: 
                    971:    You must specify an assembler instruction template much like what
                    972: appears in a machine description, plus an operand constraint string for
                    973: each operand.
                    974: 
                    975:    For example, here is how to use the 68881's `fsinx' instruction:
                    976: 
                    977:      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                    978: 
                    979: Here `angle' is the C expression for the input operand while `result'
                    980: is that of the output operand.  Each has `"f"' as its operand
                    981: constraint, saying that a floating point register is required.  The `='
                    982: in `=f' indicates that the operand is an output; all output operands'
                    983: constraints must use `='.  The constraints use the same language used
                    984: in the machine description (*note Constraints::.).
                    985: 
                    986:    Each operand is described by an operand-constraint string followed
                    987: by the C expression in parentheses.  A colon separates the assembler
                    988: template from the first output operand, and another separates the last
                    989: output operand from the first input, if any.  Commas separate output
                    990: operands and separate inputs.  The total number of operands is limited
                    991: to ten or to the maximum number of operands in any instruction pattern
                    992: in the machine description, whichever is greater.
                    993: 
                    994:    If there are no output operands, and there are input operands, then
                    995: there must be two consecutive colons surrounding the place where the
                    996: output operands would go.
                    997: 
                    998:    Output operand expressions must be lvalues; the compiler can check
                    999: this.  The input operands need not be lvalues.  The compiler cannot
                   1000: check whether the operands have data types that are reasonable for the
                   1001: instruction being executed.  It does not parse the assembler
                   1002: instruction template and does not know what it means, or whether it is
                   1003: valid assembler input.  The extended `asm' feature is most often used
                   1004: for machine instructions that the compiler itself does not know exist.
                   1005: If the output expression cannot be directly addressed (for example, it
                   1006: is a bit field), your constraint must allow a register.  In that case,
                   1007: GNU CC will use the register as the output of the `asm', and then store
                   1008: that register into the output.
                   1009: 
                   1010:    The output operands must be write-only; GNU CC will assume that the
                   1011: values in these operands before the instruction are dead and need not be
                   1012: generated.  Extended asm does not support input-output or read-write
                   1013: operands.  For this reason, the constraint character `+', which
                   1014: indicates such an operand, may not be used.
                   1015: 
                   1016:    When the assembler instruction has a read-write operand, or an
                   1017: operand in which only some of the bits are to be changed, you must
                   1018: logically split its function into two separate operands, one input
                   1019: operand and one write-only output operand.  The connection between them
                   1020: is expressed by constraints which say they need to be in the same
                   1021: location when the instruction executes.  You can use the same C
                   1022: expression for both operands, or different expressions.  For example,
                   1023: here we write the (fictitious) `combine' instruction with `bar' as its
                   1024: read-only source operand and `foo' as its read-write destination:
                   1025: 
                   1026:      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                   1027: 
                   1028: The constraint `"0"' for operand 1 says that it must occupy the same
                   1029: location as operand 0.  A digit in constraint is allowed only in an
                   1030: input operand, and it must refer to an output operand.
                   1031: 
                   1032:    Only a digit in the constraint can guarantee that one operand will
                   1033: be in the same place as another.  The mere fact that `foo' is the value
                   1034: of both operands is not enough to guarantee that they will be in the
                   1035: same place in the generated assembler code.  The following would not
                   1036: work:
                   1037: 
                   1038:      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
                   1039: 
                   1040:    Various optimizations or reloading could cause operands 0 and 1 to
                   1041: be in different registers; GNU CC knows no reason not to do so.  For
                   1042: example, the compiler might find a copy of the value of `foo' in one
                   1043: register and use it for operand 1, but generate the output operand 0 in
                   1044: a different register (copying it afterward to `foo''s own address).  Of
                   1045: course, since the register for operand 1 is not even mentioned in the
                   1046: assembler code, the result will not work, but GNU CC can't tell that.
                   1047: 
                   1048:    Some instructions clobber specific hard registers.  To describe
                   1049: this, write a third colon after the input operands, followed by the
                   1050: names of the clobbered hard registers (given as strings).  Here is a
                   1051: realistic example for the Vax:
                   1052: 
                   1053:      asm volatile ("movc3 %0,%1,%2"
                   1054:                    : /* no outputs */
                   1055:                    : "g" (from), "g" (to), "g" (count)
                   1056:                    : "r0", "r1", "r2", "r3", "r4", "r5");
                   1057: 
                   1058:    If you refer to a particular hardware register from the assembler
                   1059: code, then you will probably have to list the register after the third
                   1060: colon to tell the compiler that the register's value is modified.  In
                   1061: many assemblers, the register names begin with `%'; to produce one `%'
                   1062: in the assembler code, you must write `%%' in the input.
                   1063: 
                   1064:    If your assembler instruction can alter the condition code register,
                   1065: add `cc' to the list of clobbered registers.  GNU CC on some machines
                   1066: represents the condition codes as a specific hardware register; `cc'
                   1067: serves to name this register.  On other machines, the condition code is
                   1068: handled differently, and specifying `cc' has no effect.  But it is
                   1069: valid no matter what the machine.
                   1070: 
                   1071:    If your assembler instruction modifies memory in an unpredictable
                   1072: fashion, add `memory' to the list of clobbered registers.  This will
                   1073: cause GNU CC to not keep memory values cached in registers across the
                   1074: assembler instruction.
                   1075: 
                   1076:    You can put multiple assembler instructions together in a single
                   1077: `asm' template, separated either with newlines (written as `\n') or with
                   1078: semicolons if the assembler allows such semicolons.  The GNU assembler
                   1079: allows semicolons and all Unix assemblers seem to do so.  The input
                   1080: operands are guaranteed not to use any of the clobbered registers, and
                   1081: neither will the output operands' addresses, so you can read and write
                   1082: the clobbered registers as many times as you like.  Here is an example
                   1083: of multiple instructions in a template; it assumes that the subroutine
                   1084: `_foo' accepts arguments in registers 9 and 10:
                   1085: 
                   1086:      asm ("movl %0,r9;movl %1,r10;call _foo"
                   1087:           : /* no outputs */
                   1088:           : "g" (from), "g" (to)
                   1089:           : "r9", "r10");
                   1090: 
                   1091:    Unless an output operand has the `&' constraint modifier, GNU CC may
                   1092: allocate it in the same register as an unrelated input operand, on the
                   1093: assumption that the inputs are consumed before the outputs are produced.
                   1094: This assumption may be false if the assembler code actually consists of
                   1095: more than one instruction.  In such a case, use `&' for each output
                   1096: operand that may not overlap an input.  *Note Modifiers::.
                   1097: 
                   1098:    If you want to test the condition code produced by an assembler
                   1099: instruction, you must include a branch and a label in the `asm'
                   1100: construct, as follows:
                   1101: 
                   1102:      asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
                   1103:           : "g" (result)
                   1104:           : "g" (input));
                   1105: 
                   1106: This assumes your assembler supports local labels, as the GNU assembler
                   1107: and most Unix assemblers do.
                   1108: 
                   1109:    Speaking of labels, jumps from one `asm' to another are not
                   1110: supported.  The compiler's optimizers do not know about these jumps,
                   1111: and therefore they cannot take account of them when deciding how to
                   1112: optimize.
                   1113: 
                   1114:    Usually the most convenient way to use these `asm' instructions is to
                   1115: encapsulate them in macros that look like functions.  For example,
                   1116: 
                   1117:      #define sin(x)       \
                   1118:      ({ double __value, __arg = (x);   \
                   1119:         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                   1120:         __value; })
                   1121: 
                   1122: Here the variable `__arg' is used to make sure that the instruction
                   1123: operates on a proper `double' value, and to accept only those arguments
                   1124: `x' which can convert automatically to a `double'.
                   1125: 
                   1126:    Another way to make sure the instruction operates on the correct
                   1127: data type is to use a cast in the `asm'.  This is different from using a
                   1128: variable `__arg' in that it converts more different types.  For
                   1129: example, if the desired type were `int', casting the argument to `int'
                   1130: would accept a pointer with no complaint, while assigning the argument
                   1131: to an `int' variable named `__arg' would warn about using a pointer
                   1132: unless the caller explicitly casts it.
                   1133: 
                   1134:    If an `asm' has output operands, GNU CC assumes for optimization
                   1135: purposes that the instruction has no side effects except to change the
                   1136: output operands.  This does not mean that instructions with a side
                   1137: effect cannot be used, but you must be careful, because the compiler
                   1138: may eliminate them if the output operands aren't used, or move them out
                   1139: of loops, or replace two with one if they constitute a common
                   1140: subexpression.  Also, if your instruction does have a side effect on a
                   1141: variable that otherwise appears not to change, the old value of the
                   1142: variable may be reused later if it happens to be found in a register.
                   1143: 
                   1144:    You can prevent an `asm' instruction from being deleted, moved
                   1145: significantly, or combined, by writing the keyword `volatile' after the
                   1146: `asm'.  For example:
                   1147: 
                   1148:      #define set_priority(x)  \
                   1149:      asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
                   1150: 
                   1151: An instruction without output operands will not be deleted or moved
                   1152: significantly, regardless, unless it is unreachable.
                   1153: 
                   1154:    Note that even a volatile `asm' instruction can be moved in ways
                   1155: that appear insignificant to the compiler, such as across jump
                   1156: instructions.  You can't expect a sequence of volatile `asm'
                   1157: instructions to remain perfectly consecutive.  If you want consecutive
                   1158: output, use a single `asm'.
                   1159: 
                   1160:    It is a natural idea to look for a way to give access to the
                   1161: condition code left by the assembler instruction.  However, when we
                   1162: attempted to implement this, we found no way to make it work reliably.
                   1163: The problem is that output operands might need reloading, which would
                   1164: result in additional following "store" instructions.  On most machines,
                   1165: these instructions would alter the condition code before there was time
                   1166: to test it.  This problem doesn't arise for ordinary "test" and
                   1167: "compare" instructions because they don't have any output operands.
1.1.1.5   root     1168: 
1.1.1.8   root     1169:    If you are writing a header file that should be includable in ANSI C
                   1170: programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
1.1.1.2   root     1171: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.