PR libstdc++/83279 handle sendfile not copying entire file
[official-gcc.git] / gcc / doc / extend.texi
blob57c436b08e7d2d777da487ea0c38652883bbea92
1 c Copyright (C) 1988-2017 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
6 @node C Extensions
7 @chapter Extensions to the C Language Family
8 @cindex extensions, C language
9 @cindex C language extensions
11 @opindex pedantic
12 GNU C provides several language features not found in ISO standard C@.
13 (The @option{-pedantic} option directs GCC to print a warning message if
14 any of these features is used.)  To test for the availability of these
15 features in conditional compilation, check for a predefined macro
16 @code{__GNUC__}, which is always defined under GCC@.
18 These extensions are available in C and Objective-C@.  Most of them are
19 also available in C++.  @xref{C++ Extensions,,Extensions to the
20 C++ Language}, for extensions that apply @emph{only} to C++.
22 Some features that are in ISO C99 but not C90 or C++ are also, as
23 extensions, accepted by GCC in C90 mode and in C++.
25 @menu
26 * Statement Exprs::     Putting statements and declarations inside expressions.
27 * Local Labels::        Labels local to a block.
28 * Labels as Values::    Getting pointers to labels, and computed gotos.
29 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
30 * Constructing Calls::  Dispatching a call to another function.
31 * Typeof::              @code{typeof}: referring to the type of an expression.
32 * Conditionals::        Omitting the middle operand of a @samp{?:} expression.
33 * __int128::            128-bit integers---@code{__int128}.
34 * Long Long::           Double-word integers---@code{long long int}.
35 * Complex::             Data types for complex numbers.
36 * Floating Types::      Additional Floating Types.
37 * Half-Precision::      Half-Precision Floating Point.
38 * Decimal Float::       Decimal Floating Types.
39 * Hex Floats::          Hexadecimal floating-point constants.
40 * Fixed-Point::         Fixed-Point Types.
41 * Named Address Spaces::Named address spaces.
42 * Zero Length::         Zero-length arrays.
43 * Empty Structures::    Structures with no members.
44 * Variable Length::     Arrays whose length is computed at run time.
45 * Variadic Macros::     Macros with a variable number of arguments.
46 * Escaped Newlines::    Slightly looser rules for escaped newlines.
47 * Subscripting::        Any array can be subscripted, even if not an lvalue.
48 * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
49 * Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
50 * Initializers::        Non-constant initializers.
51 * Compound Literals::   Compound literals give structures, unions
52                         or arrays as values.
53 * Designated Inits::    Labeling elements of initializers.
54 * Case Ranges::         `case 1 ... 9' and such.
55 * Cast to Union::       Casting to union type from any member of the union.
56 * Mixed Declarations::  Mixing declarations and code.
57 * Function Attributes:: Declaring that functions have no side effects,
58                         or that they can never return.
59 * Variable Attributes:: Specifying attributes of variables.
60 * Type Attributes::     Specifying attributes of types.
61 * Label Attributes::    Specifying attributes on labels.
62 * Enumerator Attributes:: Specifying attributes on enumerators.
63 * Statement Attributes:: Specifying attributes on statements.
64 * Attribute Syntax::    Formal syntax for attributes.
65 * Function Prototypes:: Prototype declarations and old-style definitions.
66 * C++ Comments::        C++ comments are recognized.
67 * Dollar Signs::        Dollar sign is allowed in identifiers.
68 * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
69 * Alignment::           Inquiring about the alignment of a type or variable.
70 * Inline::              Defining inline functions (as fast as macros).
71 * Volatiles::           What constitutes an access to a volatile object.
72 * Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
73 * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
74 * Incomplete Enums::    @code{enum foo;}, with details to follow.
75 * Function Names::      Printable strings which are the name of the current
76                         function.
77 * Return Address::      Getting the return or frame address of a function.
78 * Vector Extensions::   Using vector instructions through built-in functions.
79 * Offsetof::            Special syntax for implementing @code{offsetof}.
80 * __sync Builtins::     Legacy built-in functions for atomic memory access.
81 * __atomic Builtins::   Atomic built-in functions with memory model.
82 * Integer Overflow Builtins:: Built-in functions to perform arithmetics and
83                         arithmetic overflow checking.
84 * x86 specific memory model extensions for transactional memory:: x86 memory models.
85 * Object Size Checking:: Built-in functions for limited buffer overflow
86                         checking.
87 * Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
88 * Other Builtins::      Other built-in functions.
89 * Target Builtins::     Built-in functions specific to particular targets.
90 * Target Format Checks:: Format checks specific to particular targets.
91 * Pragmas::             Pragmas accepted by GCC.
92 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
93 * Thread-Local::        Per-thread variables.
94 * Binary constants::    Binary constants using the @samp{0b} prefix.
95 @end menu
97 @node Statement Exprs
98 @section Statements and Declarations in Expressions
99 @cindex statements inside expressions
100 @cindex declarations inside expressions
101 @cindex expressions containing statements
102 @cindex macros, statements in expressions
104 @c the above section title wrapped and causes an underfull hbox.. i
105 @c changed it from "within" to "in". --mew 4feb93
106 A compound statement enclosed in parentheses may appear as an expression
107 in GNU C@.  This allows you to use loops, switches, and local variables
108 within an expression.
110 Recall that a compound statement is a sequence of statements surrounded
111 by braces; in this construct, parentheses go around the braces.  For
112 example:
114 @smallexample
115 (@{ int y = foo (); int z;
116    if (y > 0) z = y;
117    else z = - y;
118    z; @})
119 @end smallexample
121 @noindent
122 is a valid (though slightly more complex than necessary) expression
123 for the absolute value of @code{foo ()}.
125 The last thing in the compound statement should be an expression
126 followed by a semicolon; the value of this subexpression serves as the
127 value of the entire construct.  (If you use some other kind of statement
128 last within the braces, the construct has type @code{void}, and thus
129 effectively no value.)
131 This feature is especially useful in making macro definitions ``safe'' (so
132 that they evaluate each operand exactly once).  For example, the
133 ``maximum'' function is commonly defined as a macro in standard C as
134 follows:
136 @smallexample
137 #define max(a,b) ((a) > (b) ? (a) : (b))
138 @end smallexample
140 @noindent
141 @cindex side effects, macro argument
142 But this definition computes either @var{a} or @var{b} twice, with bad
143 results if the operand has side effects.  In GNU C, if you know the
144 type of the operands (here taken as @code{int}), you can define
145 the macro safely as follows:
147 @smallexample
148 #define maxint(a,b) \
149   (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
150 @end smallexample
152 Embedded statements are not allowed in constant expressions, such as
153 the value of an enumeration constant, the width of a bit-field, or
154 the initial value of a static variable.
156 If you don't know the type of the operand, you can still do this, but you
157 must use @code{typeof} or @code{__auto_type} (@pxref{Typeof}).
159 In G++, the result value of a statement expression undergoes array and
160 function pointer decay, and is returned by value to the enclosing
161 expression.  For instance, if @code{A} is a class, then
163 @smallexample
164         A a;
166         (@{a;@}).Foo ()
167 @end smallexample
169 @noindent
170 constructs a temporary @code{A} object to hold the result of the
171 statement expression, and that is used to invoke @code{Foo}.
172 Therefore the @code{this} pointer observed by @code{Foo} is not the
173 address of @code{a}.
175 In a statement expression, any temporaries created within a statement
176 are destroyed at that statement's end.  This makes statement
177 expressions inside macros slightly different from function calls.  In
178 the latter case temporaries introduced during argument evaluation are
179 destroyed at the end of the statement that includes the function
180 call.  In the statement expression case they are destroyed during
181 the statement expression.  For instance,
183 @smallexample
184 #define macro(a)  (@{__typeof__(a) b = (a); b + 3; @})
185 template<typename T> T function(T a) @{ T b = a; return b + 3; @}
187 void foo ()
189   macro (X ());
190   function (X ());
192 @end smallexample
194 @noindent
195 has different places where temporaries are destroyed.  For the
196 @code{macro} case, the temporary @code{X} is destroyed just after
197 the initialization of @code{b}.  In the @code{function} case that
198 temporary is destroyed when the function returns.
200 These considerations mean that it is probably a bad idea to use
201 statement expressions of this form in header files that are designed to
202 work with C++.  (Note that some versions of the GNU C Library contained
203 header files using statement expressions that lead to precisely this
204 bug.)
206 Jumping into a statement expression with @code{goto} or using a
207 @code{switch} statement outside the statement expression with a
208 @code{case} or @code{default} label inside the statement expression is
209 not permitted.  Jumping into a statement expression with a computed
210 @code{goto} (@pxref{Labels as Values}) has undefined behavior.
211 Jumping out of a statement expression is permitted, but if the
212 statement expression is part of a larger expression then it is
213 unspecified which other subexpressions of that expression have been
214 evaluated except where the language definition requires certain
215 subexpressions to be evaluated before or after the statement
216 expression.  In any case, as with a function call, the evaluation of a
217 statement expression is not interleaved with the evaluation of other
218 parts of the containing expression.  For example,
220 @smallexample
221   foo (), ((@{ bar1 (); goto a; 0; @}) + bar2 ()), baz();
222 @end smallexample
224 @noindent
225 calls @code{foo} and @code{bar1} and does not call @code{baz} but
226 may or may not call @code{bar2}.  If @code{bar2} is called, it is
227 called after @code{foo} and before @code{bar1}.
229 @node Local Labels
230 @section Locally Declared Labels
231 @cindex local labels
232 @cindex macros, local labels
234 GCC allows you to declare @dfn{local labels} in any nested block
235 scope.  A local label is just like an ordinary label, but you can
236 only reference it (with a @code{goto} statement, or by taking its
237 address) within the block in which it is declared.
239 A local label declaration looks like this:
241 @smallexample
242 __label__ @var{label};
243 @end smallexample
245 @noindent
248 @smallexample
249 __label__ @var{label1}, @var{label2}, /* @r{@dots{}} */;
250 @end smallexample
252 Local label declarations must come at the beginning of the block,
253 before any ordinary declarations or statements.
255 The label declaration defines the label @emph{name}, but does not define
256 the label itself.  You must do this in the usual way, with
257 @code{@var{label}:}, within the statements of the statement expression.
259 The local label feature is useful for complex macros.  If a macro
260 contains nested loops, a @code{goto} can be useful for breaking out of
261 them.  However, an ordinary label whose scope is the whole function
262 cannot be used: if the macro can be expanded several times in one
263 function, the label is multiply defined in that function.  A
264 local label avoids this problem.  For example:
266 @smallexample
267 #define SEARCH(value, array, target)              \
268 do @{                                              \
269   __label__ found;                                \
270   typeof (target) _SEARCH_target = (target);      \
271   typeof (*(array)) *_SEARCH_array = (array);     \
272   int i, j;                                       \
273   int value;                                      \
274   for (i = 0; i < max; i++)                       \
275     for (j = 0; j < max; j++)                     \
276       if (_SEARCH_array[i][j] == _SEARCH_target)  \
277         @{ (value) = i; goto found; @}              \
278   (value) = -1;                                   \
279  found:;                                          \
280 @} while (0)
281 @end smallexample
283 This could also be written using a statement expression:
285 @smallexample
286 #define SEARCH(array, target)                     \
287 (@{                                                \
288   __label__ found;                                \
289   typeof (target) _SEARCH_target = (target);      \
290   typeof (*(array)) *_SEARCH_array = (array);     \
291   int i, j;                                       \
292   int value;                                      \
293   for (i = 0; i < max; i++)                       \
294     for (j = 0; j < max; j++)                     \
295       if (_SEARCH_array[i][j] == _SEARCH_target)  \
296         @{ value = i; goto found; @}                \
297   value = -1;                                     \
298  found:                                           \
299   value;                                          \
301 @end smallexample
303 Local label declarations also make the labels they declare visible to
304 nested functions, if there are any.  @xref{Nested Functions}, for details.
306 @node Labels as Values
307 @section Labels as Values
308 @cindex labels as values
309 @cindex computed gotos
310 @cindex goto with computed label
311 @cindex address of a label
313 You can get the address of a label defined in the current function
314 (or a containing function) with the unary operator @samp{&&}.  The
315 value has type @code{void *}.  This value is a constant and can be used
316 wherever a constant of that type is valid.  For example:
318 @smallexample
319 void *ptr;
320 /* @r{@dots{}} */
321 ptr = &&foo;
322 @end smallexample
324 To use these values, you need to be able to jump to one.  This is done
325 with the computed goto statement@footnote{The analogous feature in
326 Fortran is called an assigned goto, but that name seems inappropriate in
327 C, where one can do more than simply store label addresses in label
328 variables.}, @code{goto *@var{exp};}.  For example,
330 @smallexample
331 goto *ptr;
332 @end smallexample
334 @noindent
335 Any expression of type @code{void *} is allowed.
337 One way of using these constants is in initializing a static array that
338 serves as a jump table:
340 @smallexample
341 static void *array[] = @{ &&foo, &&bar, &&hack @};
342 @end smallexample
344 @noindent
345 Then you can select a label with indexing, like this:
347 @smallexample
348 goto *array[i];
349 @end smallexample
351 @noindent
352 Note that this does not check whether the subscript is in bounds---array
353 indexing in C never does that.
355 Such an array of label values serves a purpose much like that of the
356 @code{switch} statement.  The @code{switch} statement is cleaner, so
357 use that rather than an array unless the problem does not fit a
358 @code{switch} statement very well.
360 Another use of label values is in an interpreter for threaded code.
361 The labels within the interpreter function can be stored in the
362 threaded code for super-fast dispatching.
364 You may not use this mechanism to jump to code in a different function.
365 If you do that, totally unpredictable things happen.  The best way to
366 avoid this is to store the label address only in automatic variables and
367 never pass it as an argument.
369 An alternate way to write the above example is
371 @smallexample
372 static const int array[] = @{ &&foo - &&foo, &&bar - &&foo,
373                              &&hack - &&foo @};
374 goto *(&&foo + array[i]);
375 @end smallexample
377 @noindent
378 This is more friendly to code living in shared libraries, as it reduces
379 the number of dynamic relocations that are needed, and by consequence,
380 allows the data to be read-only.
381 This alternative with label differences is not supported for the AVR target,
382 please use the first approach for AVR programs.
384 The @code{&&foo} expressions for the same label might have different
385 values if the containing function is inlined or cloned.  If a program
386 relies on them being always the same,
387 @code{__attribute__((__noinline__,__noclone__))} should be used to
388 prevent inlining and cloning.  If @code{&&foo} is used in a static
389 variable initializer, inlining and cloning is forbidden.
391 @node Nested Functions
392 @section Nested Functions
393 @cindex nested functions
394 @cindex downward funargs
395 @cindex thunks
397 A @dfn{nested function} is a function defined inside another function.
398 Nested functions are supported as an extension in GNU C, but are not
399 supported by GNU C++.
401 The nested function's name is local to the block where it is defined.
402 For example, here we define a nested function named @code{square}, and
403 call it twice:
405 @smallexample
406 @group
407 foo (double a, double b)
409   double square (double z) @{ return z * z; @}
411   return square (a) + square (b);
413 @end group
414 @end smallexample
416 The nested function can access all the variables of the containing
417 function that are visible at the point of its definition.  This is
418 called @dfn{lexical scoping}.  For example, here we show a nested
419 function which uses an inherited variable named @code{offset}:
421 @smallexample
422 @group
423 bar (int *array, int offset, int size)
425   int access (int *array, int index)
426     @{ return array[index + offset]; @}
427   int i;
428   /* @r{@dots{}} */
429   for (i = 0; i < size; i++)
430     /* @r{@dots{}} */ access (array, i) /* @r{@dots{}} */
432 @end group
433 @end smallexample
435 Nested function definitions are permitted within functions in the places
436 where variable definitions are allowed; that is, in any block, mixed
437 with the other declarations and statements in the block.
439 It is possible to call the nested function from outside the scope of its
440 name by storing its address or passing the address to another function:
442 @smallexample
443 hack (int *array, int size)
445   void store (int index, int value)
446     @{ array[index] = value; @}
448   intermediate (store, size);
450 @end smallexample
452 Here, the function @code{intermediate} receives the address of
453 @code{store} as an argument.  If @code{intermediate} calls @code{store},
454 the arguments given to @code{store} are used to store into @code{array}.
455 But this technique works only so long as the containing function
456 (@code{hack}, in this example) does not exit.
458 If you try to call the nested function through its address after the
459 containing function exits, all hell breaks loose.  If you try
460 to call it after a containing scope level exits, and if it refers
461 to some of the variables that are no longer in scope, you may be lucky,
462 but it's not wise to take the risk.  If, however, the nested function
463 does not refer to anything that has gone out of scope, you should be
464 safe.
466 GCC implements taking the address of a nested function using a technique
467 called @dfn{trampolines}.  This technique was described in
468 @cite{Lexical Closures for C++} (Thomas M. Breuel, USENIX
469 C++ Conference Proceedings, October 17-21, 1988).
471 A nested function can jump to a label inherited from a containing
472 function, provided the label is explicitly declared in the containing
473 function (@pxref{Local Labels}).  Such a jump returns instantly to the
474 containing function, exiting the nested function that did the
475 @code{goto} and any intermediate functions as well.  Here is an example:
477 @smallexample
478 @group
479 bar (int *array, int offset, int size)
481   __label__ failure;
482   int access (int *array, int index)
483     @{
484       if (index > size)
485         goto failure;
486       return array[index + offset];
487     @}
488   int i;
489   /* @r{@dots{}} */
490   for (i = 0; i < size; i++)
491     /* @r{@dots{}} */ access (array, i) /* @r{@dots{}} */
492   /* @r{@dots{}} */
493   return 0;
495  /* @r{Control comes here from @code{access}
496     if it detects an error.}  */
497  failure:
498   return -1;
500 @end group
501 @end smallexample
503 A nested function always has no linkage.  Declaring one with
504 @code{extern} or @code{static} is erroneous.  If you need to declare the nested function
505 before its definition, use @code{auto} (which is otherwise meaningless
506 for function declarations).
508 @smallexample
509 bar (int *array, int offset, int size)
511   __label__ failure;
512   auto int access (int *, int);
513   /* @r{@dots{}} */
514   int access (int *array, int index)
515     @{
516       if (index > size)
517         goto failure;
518       return array[index + offset];
519     @}
520   /* @r{@dots{}} */
522 @end smallexample
524 @node Constructing Calls
525 @section Constructing Function Calls
526 @cindex constructing calls
527 @cindex forwarding calls
529 Using the built-in functions described below, you can record
530 the arguments a function received, and call another function
531 with the same arguments, without knowing the number or types
532 of the arguments.
534 You can also record the return value of that function call,
535 and later return that value, without knowing what data type
536 the function tried to return (as long as your caller expects
537 that data type).
539 However, these built-in functions may interact badly with some
540 sophisticated features or other extensions of the language.  It
541 is, therefore, not recommended to use them outside very simple
542 functions acting as mere forwarders for their arguments.
544 @deftypefn {Built-in Function} {void *} __builtin_apply_args ()
545 This built-in function returns a pointer to data
546 describing how to perform a call with the same arguments as are passed
547 to the current function.
549 The function saves the arg pointer register, structure value address,
550 and all registers that might be used to pass arguments to a function
551 into a block of memory allocated on the stack.  Then it returns the
552 address of that block.
553 @end deftypefn
555 @deftypefn {Built-in Function} {void *} __builtin_apply (void (*@var{function})(), void *@var{arguments}, size_t @var{size})
556 This built-in function invokes @var{function}
557 with a copy of the parameters described by @var{arguments}
558 and @var{size}.
560 The value of @var{arguments} should be the value returned by
561 @code{__builtin_apply_args}.  The argument @var{size} specifies the size
562 of the stack argument data, in bytes.
564 This function returns a pointer to data describing
565 how to return whatever value is returned by @var{function}.  The data
566 is saved in a block of memory allocated on the stack.
568 It is not always simple to compute the proper value for @var{size}.  The
569 value is used by @code{__builtin_apply} to compute the amount of data
570 that should be pushed on the stack and copied from the incoming argument
571 area.
572 @end deftypefn
574 @deftypefn {Built-in Function} {void} __builtin_return (void *@var{result})
575 This built-in function returns the value described by @var{result} from
576 the containing function.  You should specify, for @var{result}, a value
577 returned by @code{__builtin_apply}.
578 @end deftypefn
580 @deftypefn {Built-in Function} {} __builtin_va_arg_pack ()
581 This built-in function represents all anonymous arguments of an inline
582 function.  It can be used only in inline functions that are always
583 inlined, never compiled as a separate function, such as those using
584 @code{__attribute__ ((__always_inline__))} or
585 @code{__attribute__ ((__gnu_inline__))} extern inline functions.
586 It must be only passed as last argument to some other function
587 with variable arguments.  This is useful for writing small wrapper
588 inlines for variable argument functions, when using preprocessor
589 macros is undesirable.  For example:
590 @smallexample
591 extern int myprintf (FILE *f, const char *format, ...);
592 extern inline __attribute__ ((__gnu_inline__)) int
593 myprintf (FILE *f, const char *format, ...)
595   int r = fprintf (f, "myprintf: ");
596   if (r < 0)
597     return r;
598   int s = fprintf (f, format, __builtin_va_arg_pack ());
599   if (s < 0)
600     return s;
601   return r + s;
603 @end smallexample
604 @end deftypefn
606 @deftypefn {Built-in Function} {size_t} __builtin_va_arg_pack_len ()
607 This built-in function returns the number of anonymous arguments of
608 an inline function.  It can be used only in inline functions that
609 are always inlined, never compiled as a separate function, such
610 as those using @code{__attribute__ ((__always_inline__))} or
611 @code{__attribute__ ((__gnu_inline__))} extern inline functions.
612 For example following does link- or run-time checking of open
613 arguments for optimized code:
614 @smallexample
615 #ifdef __OPTIMIZE__
616 extern inline __attribute__((__gnu_inline__)) int
617 myopen (const char *path, int oflag, ...)
619   if (__builtin_va_arg_pack_len () > 1)
620     warn_open_too_many_arguments ();
622   if (__builtin_constant_p (oflag))
623     @{
624       if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
625         @{
626           warn_open_missing_mode ();
627           return __open_2 (path, oflag);
628         @}
629       return open (path, oflag, __builtin_va_arg_pack ());
630     @}
632   if (__builtin_va_arg_pack_len () < 1)
633     return __open_2 (path, oflag);
635   return open (path, oflag, __builtin_va_arg_pack ());
637 #endif
638 @end smallexample
639 @end deftypefn
641 @node Typeof
642 @section Referring to a Type with @code{typeof}
643 @findex typeof
644 @findex sizeof
645 @cindex macros, types of arguments
647 Another way to refer to the type of an expression is with @code{typeof}.
648 The syntax of using of this keyword looks like @code{sizeof}, but the
649 construct acts semantically like a type name defined with @code{typedef}.
651 There are two ways of writing the argument to @code{typeof}: with an
652 expression or with a type.  Here is an example with an expression:
654 @smallexample
655 typeof (x[0](1))
656 @end smallexample
658 @noindent
659 This assumes that @code{x} is an array of pointers to functions;
660 the type described is that of the values of the functions.
662 Here is an example with a typename as the argument:
664 @smallexample
665 typeof (int *)
666 @end smallexample
668 @noindent
669 Here the type described is that of pointers to @code{int}.
671 If you are writing a header file that must work when included in ISO C
672 programs, write @code{__typeof__} instead of @code{typeof}.
673 @xref{Alternate Keywords}.
675 A @code{typeof} construct can be used anywhere a typedef name can be
676 used.  For example, you can use it in a declaration, in a cast, or inside
677 of @code{sizeof} or @code{typeof}.
679 The operand of @code{typeof} is evaluated for its side effects if and
680 only if it is an expression of variably modified type or the name of
681 such a type.
683 @code{typeof} is often useful in conjunction with
684 statement expressions (@pxref{Statement Exprs}).
685 Here is how the two together can
686 be used to define a safe ``maximum'' macro which operates on any
687 arithmetic type and evaluates each of its arguments exactly once:
689 @smallexample
690 #define max(a,b) \
691   (@{ typeof (a) _a = (a); \
692       typeof (b) _b = (b); \
693     _a > _b ? _a : _b; @})
694 @end smallexample
696 @cindex underscores in variables in macros
697 @cindex @samp{_} in variables in macros
698 @cindex local variables in macros
699 @cindex variables, local, in macros
700 @cindex macros, local variables in
702 The reason for using names that start with underscores for the local
703 variables is to avoid conflicts with variable names that occur within the
704 expressions that are substituted for @code{a} and @code{b}.  Eventually we
705 hope to design a new form of declaration syntax that allows you to declare
706 variables whose scopes start only after their initializers; this will be a
707 more reliable way to prevent such conflicts.
709 @noindent
710 Some more examples of the use of @code{typeof}:
712 @itemize @bullet
713 @item
714 This declares @code{y} with the type of what @code{x} points to.
716 @smallexample
717 typeof (*x) y;
718 @end smallexample
720 @item
721 This declares @code{y} as an array of such values.
723 @smallexample
724 typeof (*x) y[4];
725 @end smallexample
727 @item
728 This declares @code{y} as an array of pointers to characters:
730 @smallexample
731 typeof (typeof (char *)[4]) y;
732 @end smallexample
734 @noindent
735 It is equivalent to the following traditional C declaration:
737 @smallexample
738 char *y[4];
739 @end smallexample
741 To see the meaning of the declaration using @code{typeof}, and why it
742 might be a useful way to write, rewrite it with these macros:
744 @smallexample
745 #define pointer(T)  typeof(T *)
746 #define array(T, N) typeof(T [N])
747 @end smallexample
749 @noindent
750 Now the declaration can be rewritten this way:
752 @smallexample
753 array (pointer (char), 4) y;
754 @end smallexample
756 @noindent
757 Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
758 pointers to @code{char}.
759 @end itemize
761 In GNU C, but not GNU C++, you may also declare the type of a variable
762 as @code{__auto_type}.  In that case, the declaration must declare
763 only one variable, whose declarator must just be an identifier, the
764 declaration must be initialized, and the type of the variable is
765 determined by the initializer; the name of the variable is not in
766 scope until after the initializer.  (In C++, you should use C++11
767 @code{auto} for this purpose.)  Using @code{__auto_type}, the
768 ``maximum'' macro above could be written as:
770 @smallexample
771 #define max(a,b) \
772   (@{ __auto_type _a = (a); \
773       __auto_type _b = (b); \
774     _a > _b ? _a : _b; @})
775 @end smallexample
777 Using @code{__auto_type} instead of @code{typeof} has two advantages:
779 @itemize @bullet
780 @item Each argument to the macro appears only once in the expansion of
781 the macro.  This prevents the size of the macro expansion growing
782 exponentially when calls to such macros are nested inside arguments of
783 such macros.
785 @item If the argument to the macro has variably modified type, it is
786 evaluated only once when using @code{__auto_type}, but twice if
787 @code{typeof} is used.
788 @end itemize
790 @node Conditionals
791 @section Conditionals with Omitted Operands
792 @cindex conditional expressions, extensions
793 @cindex omitted middle-operands
794 @cindex middle-operands, omitted
795 @cindex extensions, @code{?:}
796 @cindex @code{?:} extensions
798 The middle operand in a conditional expression may be omitted.  Then
799 if the first operand is nonzero, its value is the value of the conditional
800 expression.
802 Therefore, the expression
804 @smallexample
805 x ? : y
806 @end smallexample
808 @noindent
809 has the value of @code{x} if that is nonzero; otherwise, the value of
810 @code{y}.
812 This example is perfectly equivalent to
814 @smallexample
815 x ? x : y
816 @end smallexample
818 @cindex side effect in @code{?:}
819 @cindex @code{?:} side effect
820 @noindent
821 In this simple case, the ability to omit the middle operand is not
822 especially useful.  When it becomes useful is when the first operand does,
823 or may (if it is a macro argument), contain a side effect.  Then repeating
824 the operand in the middle would perform the side effect twice.  Omitting
825 the middle operand uses the value already computed without the undesirable
826 effects of recomputing it.
828 @node __int128
829 @section 128-bit Integers
830 @cindex @code{__int128} data types
832 As an extension the integer scalar type @code{__int128} is supported for
833 targets which have an integer mode wide enough to hold 128 bits.
834 Simply write @code{__int128} for a signed 128-bit integer, or
835 @code{unsigned __int128} for an unsigned 128-bit integer.  There is no
836 support in GCC for expressing an integer constant of type @code{__int128}
837 for targets with @code{long long} integer less than 128 bits wide.
839 @node Long Long
840 @section Double-Word Integers
841 @cindex @code{long long} data types
842 @cindex double-word arithmetic
843 @cindex multiprecision arithmetic
844 @cindex @code{LL} integer suffix
845 @cindex @code{ULL} integer suffix
847 ISO C99 supports data types for integers that are at least 64 bits wide,
848 and as an extension GCC supports them in C90 mode and in C++.
849 Simply write @code{long long int} for a signed integer, or
850 @code{unsigned long long int} for an unsigned integer.  To make an
851 integer constant of type @code{long long int}, add the suffix @samp{LL}
852 to the integer.  To make an integer constant of type @code{unsigned long
853 long int}, add the suffix @samp{ULL} to the integer.
855 You can use these types in arithmetic like any other integer types.
856 Addition, subtraction, and bitwise boolean operations on these types
857 are open-coded on all types of machines.  Multiplication is open-coded
858 if the machine supports a fullword-to-doubleword widening multiply
859 instruction.  Division and shifts are open-coded only on machines that
860 provide special support.  The operations that are not open-coded use
861 special library routines that come with GCC@.
863 There may be pitfalls when you use @code{long long} types for function
864 arguments without function prototypes.  If a function
865 expects type @code{int} for its argument, and you pass a value of type
866 @code{long long int}, confusion results because the caller and the
867 subroutine disagree about the number of bytes for the argument.
868 Likewise, if the function expects @code{long long int} and you pass
869 @code{int}.  The best way to avoid such problems is to use prototypes.
871 @node Complex
872 @section Complex Numbers
873 @cindex complex numbers
874 @cindex @code{_Complex} keyword
875 @cindex @code{__complex__} keyword
877 ISO C99 supports complex floating data types, and as an extension GCC
878 supports them in C90 mode and in C++.  GCC also supports complex integer data
879 types which are not part of ISO C99.  You can declare complex types
880 using the keyword @code{_Complex}.  As an extension, the older GNU
881 keyword @code{__complex__} is also supported.
883 For example, @samp{_Complex double x;} declares @code{x} as a
884 variable whose real part and imaginary part are both of type
885 @code{double}.  @samp{_Complex short int y;} declares @code{y} to
886 have real and imaginary parts of type @code{short int}; this is not
887 likely to be useful, but it shows that the set of complex types is
888 complete.
890 To write a constant with a complex data type, use the suffix @samp{i} or
891 @samp{j} (either one; they are equivalent).  For example, @code{2.5fi}
892 has type @code{_Complex float} and @code{3i} has type
893 @code{_Complex int}.  Such a constant always has a pure imaginary
894 value, but you can form any complex value you like by adding one to a
895 real constant.  This is a GNU extension; if you have an ISO C99
896 conforming C library (such as the GNU C Library), and want to construct complex
897 constants of floating type, you should include @code{<complex.h>} and
898 use the macros @code{I} or @code{_Complex_I} instead.
900 The ISO C++14 library also defines the @samp{i} suffix, so C++14 code
901 that includes the @samp{<complex>} header cannot use @samp{i} for the
902 GNU extension.  The @samp{j} suffix still has the GNU meaning.
904 @cindex @code{__real__} keyword
905 @cindex @code{__imag__} keyword
906 To extract the real part of a complex-valued expression @var{exp}, write
907 @code{__real__ @var{exp}}.  Likewise, use @code{__imag__} to
908 extract the imaginary part.  This is a GNU extension; for values of
909 floating type, you should use the ISO C99 functions @code{crealf},
910 @code{creal}, @code{creall}, @code{cimagf}, @code{cimag} and
911 @code{cimagl}, declared in @code{<complex.h>} and also provided as
912 built-in functions by GCC@.
914 @cindex complex conjugation
915 The operator @samp{~} performs complex conjugation when used on a value
916 with a complex type.  This is a GNU extension; for values of
917 floating type, you should use the ISO C99 functions @code{conjf},
918 @code{conj} and @code{conjl}, declared in @code{<complex.h>} and also
919 provided as built-in functions by GCC@.
921 GCC can allocate complex automatic variables in a noncontiguous
922 fashion; it's even possible for the real part to be in a register while
923 the imaginary part is on the stack (or vice versa).  Only the DWARF
924 debug info format can represent this, so use of DWARF is recommended.
925 If you are using the stabs debug info format, GCC describes a noncontiguous
926 complex variable as if it were two separate variables of noncomplex type.
927 If the variable's actual name is @code{foo}, the two fictitious
928 variables are named @code{foo$real} and @code{foo$imag}.  You can
929 examine and set these two fictitious variables with your debugger.
931 @node Floating Types
932 @section Additional Floating Types
933 @cindex additional floating types
934 @cindex @code{_Float@var{n}} data types
935 @cindex @code{_Float@var{n}x} data types
936 @cindex @code{__float80} data type
937 @cindex @code{__float128} data type
938 @cindex @code{__ibm128} data type
939 @cindex @code{w} floating point suffix
940 @cindex @code{q} floating point suffix
941 @cindex @code{W} floating point suffix
942 @cindex @code{Q} floating point suffix
944 ISO/IEC TS 18661-3:2015 defines C support for additional floating
945 types @code{_Float@var{n}} and @code{_Float@var{n}x}, and GCC supports
946 these type names; the set of types supported depends on the target
947 architecture.  These types are not supported when compiling C++.
948 Constants with these types use suffixes @code{f@var{n}} or
949 @code{F@var{n}} and @code{f@var{n}x} or @code{F@var{n}x}.  These type
950 names can be used together with @code{_Complex} to declare complex
951 types.
953 As an extension, GNU C and GNU C++ support additional floating
954 types, which are not supported by all targets.
955 @itemize @bullet
956 @item @code{__float128} is available on i386, x86_64, IA-64, and
957 hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable
958 the vector scalar (VSX) instruction set.  @code{__float128} supports
959 the 128-bit floating type.  On i386, x86_64, PowerPC, and IA-64
960 other than HP-UX, @code{__float128} is an alias for @code{_Float128}.
961 On hppa and IA-64 HP-UX, @code{__float128} is an alias for @code{long
962 double}.
964 @item @code{__float80} is available on the i386, x86_64, and IA-64
965 targets, and supports the 80-bit (@code{XFmode}) floating type.  It is
966 an alias for the type name @code{_Float64x} on these targets.
968 @item @code{__ibm128} is available on PowerPC targets, and provides
969 access to the IBM extended double format which is the current format
970 used for @code{long double}.  When @code{long double} transitions to
971 @code{__float128} on PowerPC in the future, @code{__ibm128} will remain
972 for use in conversions between the two types.
973 @end itemize
975 Support for these additional types includes the arithmetic operators:
976 add, subtract, multiply, divide; unary arithmetic operators;
977 relational operators; equality operators; and conversions to and from
978 integer and other floating types.  Use a suffix @samp{w} or @samp{W}
979 in a literal constant of type @code{__float80} or type
980 @code{__ibm128}.  Use a suffix @samp{q} or @samp{Q} for @code{_float128}.
982 In order to use @code{_Float128}, @code{__float128}, and @code{__ibm128}
983 on PowerPC Linux systems, you must use the @option{-mfloat128} option. It is
984 expected in future versions of GCC that @code{_Float128} and @code{__float128}
985 will be enabled automatically.
987 The @code{_Float128} type is supported on all systems where
988 @code{__float128} is supported or where @code{long double} has the
989 IEEE binary128 format.  The @code{_Float64x} type is supported on all
990 systems where @code{__float128} is supported.  The @code{_Float32}
991 type is supported on all systems supporting IEEE binary32; the
992 @code{_Float64} and @code{_Float32x} types are supported on all systems
993 supporting IEEE binary64.  The @code{_Float16} type is supported on AArch64
994 systems by default, and on ARM systems when the IEEE format for 16-bit
995 floating-point types is selected with @option{-mfp16-format=ieee}.
996 GCC does not currently support @code{_Float128x} on any systems.
998 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
999 types using the corresponding internal complex type, @code{XCmode} for
1000 @code{__float80} type and @code{TCmode} for @code{__float128} type:
1002 @smallexample
1003 typedef _Complex float __attribute__((mode(TC))) _Complex128;
1004 typedef _Complex float __attribute__((mode(XC))) _Complex80;
1005 @end smallexample
1007 On the PowerPC Linux VSX targets, you can declare complex types using
1008 the corresponding internal complex type, @code{KCmode} for
1009 @code{__float128} type and @code{ICmode} for @code{__ibm128} type:
1011 @smallexample
1012 typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
1013 typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
1014 @end smallexample
1016 @node Half-Precision
1017 @section Half-Precision Floating Point
1018 @cindex half-precision floating point
1019 @cindex @code{__fp16} data type
1021 On ARM and AArch64 targets, GCC supports half-precision (16-bit) floating
1022 point via the @code{__fp16} type defined in the ARM C Language Extensions.
1023 On ARM systems, you must enable this type explicitly with the
1024 @option{-mfp16-format} command-line option in order to use it.
1026 ARM targets support two incompatible representations for half-precision
1027 floating-point values.  You must choose one of the representations and
1028 use it consistently in your program.
1030 Specifying @option{-mfp16-format=ieee} selects the IEEE 754-2008 format.
1031 This format can represent normalized values in the range of @math{2^{-14}} to 65504.
1032 There are 11 bits of significand precision, approximately 3
1033 decimal digits.
1035 Specifying @option{-mfp16-format=alternative} selects the ARM
1036 alternative format.  This representation is similar to the IEEE
1037 format, but does not support infinities or NaNs.  Instead, the range
1038 of exponents is extended, so that this format can represent normalized
1039 values in the range of @math{2^{-14}} to 131008.
1041 The GCC port for AArch64 only supports the IEEE 754-2008 format, and does
1042 not require use of the @option{-mfp16-format} command-line option.
1044 The @code{__fp16} type may only be used as an argument to intrinsics defined
1045 in @code{<arm_fp16.h>}, or as a storage format.  For purposes of
1046 arithmetic and other operations, @code{__fp16} values in C or C++
1047 expressions are automatically promoted to @code{float}.
1049 The ARM target provides hardware support for conversions between
1050 @code{__fp16} and @code{float} values
1051 as an extension to VFP and NEON (Advanced SIMD), and from ARMv8-A provides
1052 hardware support for conversions between @code{__fp16} and @code{double}
1053 values.  GCC generates code using these hardware instructions if you
1054 compile with options to select an FPU that provides them;
1055 for example, @option{-mfpu=neon-fp16 -mfloat-abi=softfp},
1056 in addition to the @option{-mfp16-format} option to select
1057 a half-precision format.
1059 Language-level support for the @code{__fp16} data type is
1060 independent of whether GCC generates code using hardware floating-point
1061 instructions.  In cases where hardware support is not specified, GCC
1062 implements conversions between @code{__fp16} and other types as library
1063 calls.
1065 It is recommended that portable code use the @code{_Float16} type defined
1066 by ISO/IEC TS 18661-3:2015.  @xref{Floating Types}.
1068 @node Decimal Float
1069 @section Decimal Floating Types
1070 @cindex decimal floating types
1071 @cindex @code{_Decimal32} data type
1072 @cindex @code{_Decimal64} data type
1073 @cindex @code{_Decimal128} data type
1074 @cindex @code{df} integer suffix
1075 @cindex @code{dd} integer suffix
1076 @cindex @code{dl} integer suffix
1077 @cindex @code{DF} integer suffix
1078 @cindex @code{DD} integer suffix
1079 @cindex @code{DL} integer suffix
1081 As an extension, GNU C supports decimal floating types as
1082 defined in the N1312 draft of ISO/IEC WDTR24732.  Support for decimal
1083 floating types in GCC will evolve as the draft technical report changes.
1084 Calling conventions for any target might also change.  Not all targets
1085 support decimal floating types.
1087 The decimal floating types are @code{_Decimal32}, @code{_Decimal64}, and
1088 @code{_Decimal128}.  They use a radix of ten, unlike the floating types
1089 @code{float}, @code{double}, and @code{long double} whose radix is not
1090 specified by the C standard but is usually two.
1092 Support for decimal floating types includes the arithmetic operators
1093 add, subtract, multiply, divide; unary arithmetic operators;
1094 relational operators; equality operators; and conversions to and from
1095 integer and other floating types.  Use a suffix @samp{df} or
1096 @samp{DF} in a literal constant of type @code{_Decimal32}, @samp{dd}
1097 or @samp{DD} for @code{_Decimal64}, and @samp{dl} or @samp{DL} for
1098 @code{_Decimal128}.
1100 GCC support of decimal float as specified by the draft technical report
1101 is incomplete:
1103 @itemize @bullet
1104 @item
1105 When the value of a decimal floating type cannot be represented in the
1106 integer type to which it is being converted, the result is undefined
1107 rather than the result value specified by the draft technical report.
1109 @item
1110 GCC does not provide the C library functionality associated with
1111 @file{math.h}, @file{fenv.h}, @file{stdio.h}, @file{stdlib.h}, and
1112 @file{wchar.h}, which must come from a separate C library implementation.
1113 Because of this the GNU C compiler does not define macro
1114 @code{__STDC_DEC_FP__} to indicate that the implementation conforms to
1115 the technical report.
1116 @end itemize
1118 Types @code{_Decimal32}, @code{_Decimal64}, and @code{_Decimal128}
1119 are supported by the DWARF debug information format.
1121 @node Hex Floats
1122 @section Hex Floats
1123 @cindex hex floats
1125 ISO C99 supports floating-point numbers written not only in the usual
1126 decimal notation, such as @code{1.55e1}, but also numbers such as
1127 @code{0x1.fp3} written in hexadecimal format.  As a GNU extension, GCC
1128 supports this in C90 mode (except in some cases when strictly
1129 conforming) and in C++.  In that format the
1130 @samp{0x} hex introducer and the @samp{p} or @samp{P} exponent field are
1131 mandatory.  The exponent is a decimal number that indicates the power of
1132 2 by which the significant part is multiplied.  Thus @samp{0x1.f} is
1133 @tex
1134 $1 {15\over16}$,
1135 @end tex
1136 @ifnottex
1137 1 15/16,
1138 @end ifnottex
1139 @samp{p3} multiplies it by 8, and the value of @code{0x1.fp3}
1140 is the same as @code{1.55e1}.
1142 Unlike for floating-point numbers in the decimal notation the exponent
1143 is always required in the hexadecimal notation.  Otherwise the compiler
1144 would not be able to resolve the ambiguity of, e.g., @code{0x1.f}.  This
1145 could mean @code{1.0f} or @code{1.9375} since @samp{f} is also the
1146 extension for floating-point constants of type @code{float}.
1148 @node Fixed-Point
1149 @section Fixed-Point Types
1150 @cindex fixed-point types
1151 @cindex @code{_Fract} data type
1152 @cindex @code{_Accum} data type
1153 @cindex @code{_Sat} data type
1154 @cindex @code{hr} fixed-suffix
1155 @cindex @code{r} fixed-suffix
1156 @cindex @code{lr} fixed-suffix
1157 @cindex @code{llr} fixed-suffix
1158 @cindex @code{uhr} fixed-suffix
1159 @cindex @code{ur} fixed-suffix
1160 @cindex @code{ulr} fixed-suffix
1161 @cindex @code{ullr} fixed-suffix
1162 @cindex @code{hk} fixed-suffix
1163 @cindex @code{k} fixed-suffix
1164 @cindex @code{lk} fixed-suffix
1165 @cindex @code{llk} fixed-suffix
1166 @cindex @code{uhk} fixed-suffix
1167 @cindex @code{uk} fixed-suffix
1168 @cindex @code{ulk} fixed-suffix
1169 @cindex @code{ullk} fixed-suffix
1170 @cindex @code{HR} fixed-suffix
1171 @cindex @code{R} fixed-suffix
1172 @cindex @code{LR} fixed-suffix
1173 @cindex @code{LLR} fixed-suffix
1174 @cindex @code{UHR} fixed-suffix
1175 @cindex @code{UR} fixed-suffix
1176 @cindex @code{ULR} fixed-suffix
1177 @cindex @code{ULLR} fixed-suffix
1178 @cindex @code{HK} fixed-suffix
1179 @cindex @code{K} fixed-suffix
1180 @cindex @code{LK} fixed-suffix
1181 @cindex @code{LLK} fixed-suffix
1182 @cindex @code{UHK} fixed-suffix
1183 @cindex @code{UK} fixed-suffix
1184 @cindex @code{ULK} fixed-suffix
1185 @cindex @code{ULLK} fixed-suffix
1187 As an extension, GNU C supports fixed-point types as
1188 defined in the N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point
1189 types in GCC will evolve as the draft technical report changes.
1190 Calling conventions for any target might also change.  Not all targets
1191 support fixed-point types.
1193 The fixed-point types are
1194 @code{short _Fract},
1195 @code{_Fract},
1196 @code{long _Fract},
1197 @code{long long _Fract},
1198 @code{unsigned short _Fract},
1199 @code{unsigned _Fract},
1200 @code{unsigned long _Fract},
1201 @code{unsigned long long _Fract},
1202 @code{_Sat short _Fract},
1203 @code{_Sat _Fract},
1204 @code{_Sat long _Fract},
1205 @code{_Sat long long _Fract},
1206 @code{_Sat unsigned short _Fract},
1207 @code{_Sat unsigned _Fract},
1208 @code{_Sat unsigned long _Fract},
1209 @code{_Sat unsigned long long _Fract},
1210 @code{short _Accum},
1211 @code{_Accum},
1212 @code{long _Accum},
1213 @code{long long _Accum},
1214 @code{unsigned short _Accum},
1215 @code{unsigned _Accum},
1216 @code{unsigned long _Accum},
1217 @code{unsigned long long _Accum},
1218 @code{_Sat short _Accum},
1219 @code{_Sat _Accum},
1220 @code{_Sat long _Accum},
1221 @code{_Sat long long _Accum},
1222 @code{_Sat unsigned short _Accum},
1223 @code{_Sat unsigned _Accum},
1224 @code{_Sat unsigned long _Accum},
1225 @code{_Sat unsigned long long _Accum}.
1227 Fixed-point data values contain fractional and optional integral parts.
1228 The format of fixed-point data varies and depends on the target machine.
1230 Support for fixed-point types includes:
1231 @itemize @bullet
1232 @item
1233 prefix and postfix increment and decrement operators (@code{++}, @code{--})
1234 @item
1235 unary arithmetic operators (@code{+}, @code{-}, @code{!})
1236 @item
1237 binary arithmetic operators (@code{+}, @code{-}, @code{*}, @code{/})
1238 @item
1239 binary shift operators (@code{<<}, @code{>>})
1240 @item
1241 relational operators (@code{<}, @code{<=}, @code{>=}, @code{>})
1242 @item
1243 equality operators (@code{==}, @code{!=})
1244 @item
1245 assignment operators (@code{+=}, @code{-=}, @code{*=}, @code{/=},
1246 @code{<<=}, @code{>>=})
1247 @item
1248 conversions to and from integer, floating-point, or fixed-point types
1249 @end itemize
1251 Use a suffix in a fixed-point literal constant:
1252 @itemize
1253 @item @samp{hr} or @samp{HR} for @code{short _Fract} and
1254 @code{_Sat short _Fract}
1255 @item @samp{r} or @samp{R} for @code{_Fract} and @code{_Sat _Fract}
1256 @item @samp{lr} or @samp{LR} for @code{long _Fract} and
1257 @code{_Sat long _Fract}
1258 @item @samp{llr} or @samp{LLR} for @code{long long _Fract} and
1259 @code{_Sat long long _Fract}
1260 @item @samp{uhr} or @samp{UHR} for @code{unsigned short _Fract} and
1261 @code{_Sat unsigned short _Fract}
1262 @item @samp{ur} or @samp{UR} for @code{unsigned _Fract} and
1263 @code{_Sat unsigned _Fract}
1264 @item @samp{ulr} or @samp{ULR} for @code{unsigned long _Fract} and
1265 @code{_Sat unsigned long _Fract}
1266 @item @samp{ullr} or @samp{ULLR} for @code{unsigned long long _Fract}
1267 and @code{_Sat unsigned long long _Fract}
1268 @item @samp{hk} or @samp{HK} for @code{short _Accum} and
1269 @code{_Sat short _Accum}
1270 @item @samp{k} or @samp{K} for @code{_Accum} and @code{_Sat _Accum}
1271 @item @samp{lk} or @samp{LK} for @code{long _Accum} and
1272 @code{_Sat long _Accum}
1273 @item @samp{llk} or @samp{LLK} for @code{long long _Accum} and
1274 @code{_Sat long long _Accum}
1275 @item @samp{uhk} or @samp{UHK} for @code{unsigned short _Accum} and
1276 @code{_Sat unsigned short _Accum}
1277 @item @samp{uk} or @samp{UK} for @code{unsigned _Accum} and
1278 @code{_Sat unsigned _Accum}
1279 @item @samp{ulk} or @samp{ULK} for @code{unsigned long _Accum} and
1280 @code{_Sat unsigned long _Accum}
1281 @item @samp{ullk} or @samp{ULLK} for @code{unsigned long long _Accum}
1282 and @code{_Sat unsigned long long _Accum}
1283 @end itemize
1285 GCC support of fixed-point types as specified by the draft technical report
1286 is incomplete:
1288 @itemize @bullet
1289 @item
1290 Pragmas to control overflow and rounding behaviors are not implemented.
1291 @end itemize
1293 Fixed-point types are supported by the DWARF debug information format.
1295 @node Named Address Spaces
1296 @section Named Address Spaces
1297 @cindex Named Address Spaces
1299 As an extension, GNU C supports named address spaces as
1300 defined in the N1275 draft of ISO/IEC DTR 18037.  Support for named
1301 address spaces in GCC will evolve as the draft technical report
1302 changes.  Calling conventions for any target might also change.  At
1303 present, only the AVR, SPU, M32C, RL78, and x86 targets support
1304 address spaces other than the generic address space.
1306 Address space identifiers may be used exactly like any other C type
1307 qualifier (e.g., @code{const} or @code{volatile}).  See the N1275
1308 document for more details.
1310 @anchor{AVR Named Address Spaces}
1311 @subsection AVR Named Address Spaces
1313 On the AVR target, there are several address spaces that can be used
1314 in order to put read-only data into the flash memory and access that
1315 data by means of the special instructions @code{LPM} or @code{ELPM}
1316 needed to read from flash.
1318 Devices belonging to @code{avrtiny} and @code{avrxmega3} can access
1319 flash memory by means of @code{LD*} instructions because the flash
1320 memory is mapped into the RAM address space.  There is @emph{no need}
1321 for language extensions like @code{__flash} or attribute
1322 @ref{AVR Variable Attributes,,@code{progmem}}.
1323 The default linker description files for these devices cater for that
1324 feature and @code{.rodata} stays in flash: The compiler just generates
1325 @code{LD*} instructions, and the linker script adds core specific
1326 offsets to all @code{.rodata} symbols: @code{0x4000} in the case of
1327 @code{avrtiny} and @code{0x8000} in the case of @code{avrxmega3}.
1328 See @ref{AVR Options} for a list of respective devices.
1330 For devices not in @code{avrtiny} or @code{avrxmega3},
1331 any data including read-only data is located in RAM (the generic
1332 address space) because flash memory is not visible in the RAM address
1333 space.  In order to locate read-only data in flash memory @emph{and}
1334 to generate the right instructions to access this data without
1335 using (inline) assembler code, special address spaces are needed.
1337 @table @code
1338 @item __flash
1339 @cindex @code{__flash} AVR Named Address Spaces
1340 The @code{__flash} qualifier locates data in the
1341 @code{.progmem.data} section. Data is read using the @code{LPM}
1342 instruction. Pointers to this address space are 16 bits wide.
1344 @item __flash1
1345 @itemx __flash2
1346 @itemx __flash3
1347 @itemx __flash4
1348 @itemx __flash5
1349 @cindex @code{__flash1} AVR Named Address Spaces
1350 @cindex @code{__flash2} AVR Named Address Spaces
1351 @cindex @code{__flash3} AVR Named Address Spaces
1352 @cindex @code{__flash4} AVR Named Address Spaces
1353 @cindex @code{__flash5} AVR Named Address Spaces
1354 These are 16-bit address spaces locating data in section
1355 @code{.progmem@var{N}.data} where @var{N} refers to
1356 address space @code{__flash@var{N}}.
1357 The compiler sets the @code{RAMPZ} segment register appropriately 
1358 before reading data by means of the @code{ELPM} instruction.
1360 @item __memx
1361 @cindex @code{__memx} AVR Named Address Spaces
1362 This is a 24-bit address space that linearizes flash and RAM:
1363 If the high bit of the address is set, data is read from
1364 RAM using the lower two bytes as RAM address.
1365 If the high bit of the address is clear, data is read from flash
1366 with @code{RAMPZ} set according to the high byte of the address.
1367 @xref{AVR Built-in Functions,,@code{__builtin_avr_flash_segment}}.
1369 Objects in this address space are located in @code{.progmemx.data}.
1370 @end table
1372 @b{Example}
1374 @smallexample
1375 char my_read (const __flash char ** p)
1377     /* p is a pointer to RAM that points to a pointer to flash.
1378        The first indirection of p reads that flash pointer
1379        from RAM and the second indirection reads a char from this
1380        flash address.  */
1382     return **p;
1385 /* Locate array[] in flash memory */
1386 const __flash int array[] = @{ 3, 5, 7, 11, 13, 17, 19 @};
1388 int i = 1;
1390 int main (void)
1392    /* Return 17 by reading from flash memory */
1393    return array[array[i]];
1395 @end smallexample
1397 @noindent
1398 For each named address space supported by avr-gcc there is an equally
1399 named but uppercase built-in macro defined. 
1400 The purpose is to facilitate testing if respective address space
1401 support is available or not:
1403 @smallexample
1404 #ifdef __FLASH
1405 const __flash int var = 1;
1407 int read_var (void)
1409     return var;
1411 #else
1412 #include <avr/pgmspace.h> /* From AVR-LibC */
1414 const int var PROGMEM = 1;
1416 int read_var (void)
1418     return (int) pgm_read_word (&var);
1420 #endif /* __FLASH */
1421 @end smallexample
1423 @noindent
1424 Notice that attribute @ref{AVR Variable Attributes,,@code{progmem}}
1425 locates data in flash but
1426 accesses to these data read from generic address space, i.e.@:
1427 from RAM,
1428 so that you need special accessors like @code{pgm_read_byte}
1429 from @w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC}}
1430 together with attribute @code{progmem}.
1432 @noindent
1433 @b{Limitations and caveats}
1435 @itemize
1436 @item
1437 Reading across the 64@tie{}KiB section boundary of
1438 the @code{__flash} or @code{__flash@var{N}} address spaces
1439 shows undefined behavior. The only address space that
1440 supports reading across the 64@tie{}KiB flash segment boundaries is
1441 @code{__memx}.
1443 @item
1444 If you use one of the @code{__flash@var{N}} address spaces
1445 you must arrange your linker script to locate the
1446 @code{.progmem@var{N}.data} sections according to your needs.
1448 @item
1449 Any data or pointers to the non-generic address spaces must
1450 be qualified as @code{const}, i.e.@: as read-only data.
1451 This still applies if the data in one of these address
1452 spaces like software version number or calibration lookup table are intended to
1453 be changed after load time by, say, a boot loader. In this case
1454 the right qualification is @code{const} @code{volatile} so that the compiler
1455 must not optimize away known values or insert them
1456 as immediates into operands of instructions.
1458 @item
1459 The following code initializes a variable @code{pfoo}
1460 located in static storage with a 24-bit address:
1461 @smallexample
1462 extern const __memx char foo;
1463 const __memx void *pfoo = &foo;
1464 @end smallexample
1466 @item
1467 On the reduced Tiny devices like ATtiny40, no address spaces are supported.
1468 Just use vanilla C / C++ code without overhead as outlined above.
1469 Attribute @code{progmem} is supported but works differently,
1470 see @ref{AVR Variable Attributes}.
1472 @end itemize
1474 @subsection M32C Named Address Spaces
1475 @cindex @code{__far} M32C Named Address Spaces
1477 On the M32C target, with the R8C and M16C CPU variants, variables
1478 qualified with @code{__far} are accessed using 32-bit addresses in
1479 order to access memory beyond the first 64@tie{}Ki bytes.  If
1480 @code{__far} is used with the M32CM or M32C CPU variants, it has no
1481 effect.
1483 @subsection RL78 Named Address Spaces
1484 @cindex @code{__far} RL78 Named Address Spaces
1486 On the RL78 target, variables qualified with @code{__far} are accessed
1487 with 32-bit pointers (20-bit addresses) rather than the default 16-bit
1488 addresses.  Non-far variables are assumed to appear in the topmost
1489 64@tie{}KiB of the address space.
1491 @subsection SPU Named Address Spaces
1492 @cindex @code{__ea} SPU Named Address Spaces
1494 On the SPU target variables may be declared as
1495 belonging to another address space by qualifying the type with the
1496 @code{__ea} address space identifier:
1498 @smallexample
1499 extern int __ea i;
1500 @end smallexample
1502 @noindent 
1503 The compiler generates special code to access the variable @code{i}.
1504 It may use runtime library
1505 support, or generate special machine instructions to access that address
1506 space.
1508 @subsection x86 Named Address Spaces
1509 @cindex x86 named address spaces
1511 On the x86 target, variables may be declared as being relative
1512 to the @code{%fs} or @code{%gs} segments.
1514 @table @code
1515 @item __seg_fs
1516 @itemx __seg_gs
1517 @cindex @code{__seg_fs} x86 named address space
1518 @cindex @code{__seg_gs} x86 named address space
1519 The object is accessed with the respective segment override prefix.
1521 The respective segment base must be set via some method specific to
1522 the operating system.  Rather than require an expensive system call
1523 to retrieve the segment base, these address spaces are not considered
1524 to be subspaces of the generic (flat) address space.  This means that
1525 explicit casts are required to convert pointers between these address
1526 spaces and the generic address space.  In practice the application
1527 should cast to @code{uintptr_t} and apply the segment base offset
1528 that it installed previously.
1530 The preprocessor symbols @code{__SEG_FS} and @code{__SEG_GS} are
1531 defined when these address spaces are supported.
1532 @end table
1534 @node Zero Length
1535 @section Arrays of Length Zero
1536 @cindex arrays of length zero
1537 @cindex zero-length arrays
1538 @cindex length-zero arrays
1539 @cindex flexible array members
1541 Zero-length arrays are allowed in GNU C@.  They are very useful as the
1542 last element of a structure that is really a header for a variable-length
1543 object:
1545 @smallexample
1546 struct line @{
1547   int length;
1548   char contents[0];
1551 struct line *thisline = (struct line *)
1552   malloc (sizeof (struct line) + this_length);
1553 thisline->length = this_length;
1554 @end smallexample
1556 In ISO C90, you would have to give @code{contents} a length of 1, which
1557 means either you waste space or complicate the argument to @code{malloc}.
1559 In ISO C99, you would use a @dfn{flexible array member}, which is
1560 slightly different in syntax and semantics:
1562 @itemize @bullet
1563 @item
1564 Flexible array members are written as @code{contents[]} without
1565 the @code{0}.
1567 @item
1568 Flexible array members have incomplete type, and so the @code{sizeof}
1569 operator may not be applied.  As a quirk of the original implementation
1570 of zero-length arrays, @code{sizeof} evaluates to zero.
1572 @item
1573 Flexible array members may only appear as the last member of a
1574 @code{struct} that is otherwise non-empty.
1576 @item
1577 A structure containing a flexible array member, or a union containing
1578 such a structure (possibly recursively), may not be a member of a
1579 structure or an element of an array.  (However, these uses are
1580 permitted by GCC as extensions.)
1581 @end itemize
1583 Non-empty initialization of zero-length
1584 arrays is treated like any case where there are more initializer
1585 elements than the array holds, in that a suitable warning about ``excess
1586 elements in array'' is given, and the excess elements (all of them, in
1587 this case) are ignored.
1589 GCC allows static initialization of flexible array members.
1590 This is equivalent to defining a new structure containing the original
1591 structure followed by an array of sufficient size to contain the data.
1592 E.g.@: in the following, @code{f1} is constructed as if it were declared
1593 like @code{f2}.
1595 @smallexample
1596 struct f1 @{
1597   int x; int y[];
1598 @} f1 = @{ 1, @{ 2, 3, 4 @} @};
1600 struct f2 @{
1601   struct f1 f1; int data[3];
1602 @} f2 = @{ @{ 1 @}, @{ 2, 3, 4 @} @};
1603 @end smallexample
1605 @noindent
1606 The convenience of this extension is that @code{f1} has the desired
1607 type, eliminating the need to consistently refer to @code{f2.f1}.
1609 This has symmetry with normal static arrays, in that an array of
1610 unknown size is also written with @code{[]}.
1612 Of course, this extension only makes sense if the extra data comes at
1613 the end of a top-level object, as otherwise we would be overwriting
1614 data at subsequent offsets.  To avoid undue complication and confusion
1615 with initialization of deeply nested arrays, we simply disallow any
1616 non-empty initialization except when the structure is the top-level
1617 object.  For example:
1619 @smallexample
1620 struct foo @{ int x; int y[]; @};
1621 struct bar @{ struct foo z; @};
1623 struct foo a = @{ 1, @{ 2, 3, 4 @} @};        // @r{Valid.}
1624 struct bar b = @{ @{ 1, @{ 2, 3, 4 @} @} @};    // @r{Invalid.}
1625 struct bar c = @{ @{ 1, @{ @} @} @};            // @r{Valid.}
1626 struct foo d[1] = @{ @{ 1, @{ 2, 3, 4 @} @} @};  // @r{Invalid.}
1627 @end smallexample
1629 @node Empty Structures
1630 @section Structures with No Members
1631 @cindex empty structures
1632 @cindex zero-size structures
1634 GCC permits a C structure to have no members:
1636 @smallexample
1637 struct empty @{
1639 @end smallexample
1641 The structure has size zero.  In C++, empty structures are part
1642 of the language.  G++ treats empty structures as if they had a single
1643 member of type @code{char}.
1645 @node Variable Length
1646 @section Arrays of Variable Length
1647 @cindex variable-length arrays
1648 @cindex arrays of variable length
1649 @cindex VLAs
1651 Variable-length automatic arrays are allowed in ISO C99, and as an
1652 extension GCC accepts them in C90 mode and in C++.  These arrays are
1653 declared like any other automatic arrays, but with a length that is not
1654 a constant expression.  The storage is allocated at the point of
1655 declaration and deallocated when the block scope containing the declaration
1656 exits.  For
1657 example:
1659 @smallexample
1660 FILE *
1661 concat_fopen (char *s1, char *s2, char *mode)
1663   char str[strlen (s1) + strlen (s2) + 1];
1664   strcpy (str, s1);
1665   strcat (str, s2);
1666   return fopen (str, mode);
1668 @end smallexample
1670 @cindex scope of a variable length array
1671 @cindex variable-length array scope
1672 @cindex deallocating variable length arrays
1673 Jumping or breaking out of the scope of the array name deallocates the
1674 storage.  Jumping into the scope is not allowed; you get an error
1675 message for it.
1677 @cindex variable-length array in a structure
1678 As an extension, GCC accepts variable-length arrays as a member of
1679 a structure or a union.  For example:
1681 @smallexample
1682 void
1683 foo (int n)
1685   struct S @{ int x[n]; @};
1687 @end smallexample
1689 @cindex @code{alloca} vs variable-length arrays
1690 You can use the function @code{alloca} to get an effect much like
1691 variable-length arrays.  The function @code{alloca} is available in
1692 many other C implementations (but not in all).  On the other hand,
1693 variable-length arrays are more elegant.
1695 There are other differences between these two methods.  Space allocated
1696 with @code{alloca} exists until the containing @emph{function} returns.
1697 The space for a variable-length array is deallocated as soon as the array
1698 name's scope ends, unless you also use @code{alloca} in this scope.
1700 You can also use variable-length arrays as arguments to functions:
1702 @smallexample
1703 struct entry
1704 tester (int len, char data[len][len])
1706   /* @r{@dots{}} */
1708 @end smallexample
1710 The length of an array is computed once when the storage is allocated
1711 and is remembered for the scope of the array in case you access it with
1712 @code{sizeof}.
1714 If you want to pass the array first and the length afterward, you can
1715 use a forward declaration in the parameter list---another GNU extension.
1717 @smallexample
1718 struct entry
1719 tester (int len; char data[len][len], int len)
1721   /* @r{@dots{}} */
1723 @end smallexample
1725 @cindex parameter forward declaration
1726 The @samp{int len} before the semicolon is a @dfn{parameter forward
1727 declaration}, and it serves the purpose of making the name @code{len}
1728 known when the declaration of @code{data} is parsed.
1730 You can write any number of such parameter forward declarations in the
1731 parameter list.  They can be separated by commas or semicolons, but the
1732 last one must end with a semicolon, which is followed by the ``real''
1733 parameter declarations.  Each forward declaration must match a ``real''
1734 declaration in parameter name and data type.  ISO C99 does not support
1735 parameter forward declarations.
1737 @node Variadic Macros
1738 @section Macros with a Variable Number of Arguments.
1739 @cindex variable number of arguments
1740 @cindex macro with variable arguments
1741 @cindex rest argument (in macro)
1742 @cindex variadic macros
1744 In the ISO C standard of 1999, a macro can be declared to accept a
1745 variable number of arguments much as a function can.  The syntax for
1746 defining the macro is similar to that of a function.  Here is an
1747 example:
1749 @smallexample
1750 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
1751 @end smallexample
1753 @noindent
1754 Here @samp{@dots{}} is a @dfn{variable argument}.  In the invocation of
1755 such a macro, it represents the zero or more tokens until the closing
1756 parenthesis that ends the invocation, including any commas.  This set of
1757 tokens replaces the identifier @code{__VA_ARGS__} in the macro body
1758 wherever it appears.  See the CPP manual for more information.
1760 GCC has long supported variadic macros, and used a different syntax that
1761 allowed you to give a name to the variable arguments just like any other
1762 argument.  Here is an example:
1764 @smallexample
1765 #define debug(format, args...) fprintf (stderr, format, args)
1766 @end smallexample
1768 @noindent
1769 This is in all ways equivalent to the ISO C example above, but arguably
1770 more readable and descriptive.
1772 GNU CPP has two further variadic macro extensions, and permits them to
1773 be used with either of the above forms of macro definition.
1775 In standard C, you are not allowed to leave the variable argument out
1776 entirely; but you are allowed to pass an empty argument.  For example,
1777 this invocation is invalid in ISO C, because there is no comma after
1778 the string:
1780 @smallexample
1781 debug ("A message")
1782 @end smallexample
1784 GNU CPP permits you to completely omit the variable arguments in this
1785 way.  In the above examples, the compiler would complain, though since
1786 the expansion of the macro still has the extra comma after the format
1787 string.
1789 To help solve this problem, CPP behaves specially for variable arguments
1790 used with the token paste operator, @samp{##}.  If instead you write
1792 @smallexample
1793 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
1794 @end smallexample
1796 @noindent
1797 and if the variable arguments are omitted or empty, the @samp{##}
1798 operator causes the preprocessor to remove the comma before it.  If you
1799 do provide some variable arguments in your macro invocation, GNU CPP
1800 does not complain about the paste operation and instead places the
1801 variable arguments after the comma.  Just like any other pasted macro
1802 argument, these arguments are not macro expanded.
1804 @node Escaped Newlines
1805 @section Slightly Looser Rules for Escaped Newlines
1806 @cindex escaped newlines
1807 @cindex newlines (escaped)
1809 The preprocessor treatment of escaped newlines is more relaxed 
1810 than that specified by the C90 standard, which requires the newline
1811 to immediately follow a backslash.  
1812 GCC's implementation allows whitespace in the form
1813 of spaces, horizontal and vertical tabs, and form feeds between the
1814 backslash and the subsequent newline.  The preprocessor issues a
1815 warning, but treats it as a valid escaped newline and combines the two
1816 lines to form a single logical line.  This works within comments and
1817 tokens, as well as between tokens.  Comments are @emph{not} treated as
1818 whitespace for the purposes of this relaxation, since they have not
1819 yet been replaced with spaces.
1821 @node Subscripting
1822 @section Non-Lvalue Arrays May Have Subscripts
1823 @cindex subscripting
1824 @cindex arrays, non-lvalue
1826 @cindex subscripting and function values
1827 In ISO C99, arrays that are not lvalues still decay to pointers, and
1828 may be subscripted, although they may not be modified or used after
1829 the next sequence point and the unary @samp{&} operator may not be
1830 applied to them.  As an extension, GNU C allows such arrays to be
1831 subscripted in C90 mode, though otherwise they do not decay to
1832 pointers outside C99 mode.  For example,
1833 this is valid in GNU C though not valid in C90:
1835 @smallexample
1836 @group
1837 struct foo @{int a[4];@};
1839 struct foo f();
1841 bar (int index)
1843   return f().a[index];
1845 @end group
1846 @end smallexample
1848 @node Pointer Arith
1849 @section Arithmetic on @code{void}- and Function-Pointers
1850 @cindex void pointers, arithmetic
1851 @cindex void, size of pointer to
1852 @cindex function pointers, arithmetic
1853 @cindex function, size of pointer to
1855 In GNU C, addition and subtraction operations are supported on pointers to
1856 @code{void} and on pointers to functions.  This is done by treating the
1857 size of a @code{void} or of a function as 1.
1859 A consequence of this is that @code{sizeof} is also allowed on @code{void}
1860 and on function types, and returns 1.
1862 @opindex Wpointer-arith
1863 The option @option{-Wpointer-arith} requests a warning if these extensions
1864 are used.
1866 @node Pointers to Arrays
1867 @section Pointers to Arrays with Qualifiers Work as Expected
1868 @cindex pointers to arrays
1869 @cindex const qualifier
1871 In GNU C, pointers to arrays with qualifiers work similar to pointers
1872 to other qualified types. For example, a value of type @code{int (*)[5]}
1873 can be used to initialize a variable of type @code{const int (*)[5]}.
1874 These types are incompatible in ISO C because the @code{const} qualifier
1875 is formally attached to the element type of the array and not the
1876 array itself.
1878 @smallexample
1879 extern void
1880 transpose (int N, int M, double out[M][N], const double in[N][M]);
1881 double x[3][2];
1882 double y[2][3];
1883 @r{@dots{}}
1884 transpose(3, 2, y, x);
1885 @end smallexample
1887 @node Initializers
1888 @section Non-Constant Initializers
1889 @cindex initializers, non-constant
1890 @cindex non-constant initializers
1892 As in standard C++ and ISO C99, the elements of an aggregate initializer for an
1893 automatic variable are not required to be constant expressions in GNU C@.
1894 Here is an example of an initializer with run-time varying elements:
1896 @smallexample
1897 foo (float f, float g)
1899   float beat_freqs[2] = @{ f-g, f+g @};
1900   /* @r{@dots{}} */
1902 @end smallexample
1904 @node Compound Literals
1905 @section Compound Literals
1906 @cindex constructor expressions
1907 @cindex initializations in expressions
1908 @cindex structures, constructor expression
1909 @cindex expressions, constructor
1910 @cindex compound literals
1911 @c The GNU C name for what C99 calls compound literals was "constructor expressions".
1913 A compound literal looks like a cast of a brace-enclosed aggregate
1914 initializer list.  Its value is an object of the type specified in
1915 the cast, containing the elements specified in the initializer.
1916 Unlike the result of a cast, a compound literal is an lvalue.  ISO
1917 C99 and later support compound literals.  As an extension, GCC
1918 supports compound literals also in C90 mode and in C++, although
1919 as explained below, the C++ semantics are somewhat different.
1921 Usually, the specified type of a compound literal is a structure.  Assume
1922 that @code{struct foo} and @code{structure} are declared as shown:
1924 @smallexample
1925 struct foo @{int a; char b[2];@} structure;
1926 @end smallexample
1928 @noindent
1929 Here is an example of constructing a @code{struct foo} with a compound literal:
1931 @smallexample
1932 structure = ((struct foo) @{x + y, 'a', 0@});
1933 @end smallexample
1935 @noindent
1936 This is equivalent to writing the following:
1938 @smallexample
1940   struct foo temp = @{x + y, 'a', 0@};
1941   structure = temp;
1943 @end smallexample
1945 You can also construct an array, though this is dangerous in C++, as
1946 explained below.  If all the elements of the compound literal are
1947 (made up of) simple constant expressions suitable for use in
1948 initializers of objects of static storage duration, then the compound
1949 literal can be coerced to a pointer to its first element and used in
1950 such an initializer, as shown here:
1952 @smallexample
1953 char **foo = (char *[]) @{ "x", "y", "z" @};
1954 @end smallexample
1956 Compound literals for scalar types and union types are also allowed.  In
1957 the following example the variable @code{i} is initialized to the value
1958 @code{2}, the result of incrementing the unnamed object created by
1959 the compound literal.
1961 @smallexample
1962 int i = ++(int) @{ 1 @};
1963 @end smallexample
1965 As a GNU extension, GCC allows initialization of objects with static storage
1966 duration by compound literals (which is not possible in ISO C99 because
1967 the initializer is not a constant).
1968 It is handled as if the object were initialized only with the brace-enclosed
1969 list if the types of the compound literal and the object match.
1970 The elements of the compound literal must be constant.
1971 If the object being initialized has array type of unknown size, the size is
1972 determined by the size of the compound literal.
1974 @smallexample
1975 static struct foo x = (struct foo) @{1, 'a', 'b'@};
1976 static int y[] = (int []) @{1, 2, 3@};
1977 static int z[] = (int [3]) @{1@};
1978 @end smallexample
1980 @noindent
1981 The above lines are equivalent to the following:
1982 @smallexample
1983 static struct foo x = @{1, 'a', 'b'@};
1984 static int y[] = @{1, 2, 3@};
1985 static int z[] = @{1, 0, 0@};
1986 @end smallexample
1988 In C, a compound literal designates an unnamed object with static or
1989 automatic storage duration.  In C++, a compound literal designates a
1990 temporary object that only lives until the end of its full-expression.
1991 As a result, well-defined C code that takes the address of a subobject
1992 of a compound literal can be undefined in C++, so G++ rejects
1993 the conversion of a temporary array to a pointer.  For instance, if
1994 the array compound literal example above appeared inside a function,
1995 any subsequent use of @code{foo} in C++ would have undefined behavior
1996 because the lifetime of the array ends after the declaration of @code{foo}.
1998 As an optimization, G++ sometimes gives array compound literals longer
1999 lifetimes: when the array either appears outside a function or has
2000 a @code{const}-qualified type.  If @code{foo} and its initializer had
2001 elements of type @code{char *const} rather than @code{char *}, or if
2002 @code{foo} were a global variable, the array would have static storage
2003 duration.  But it is probably safest just to avoid the use of array
2004 compound literals in C++ code.
2006 @node Designated Inits
2007 @section Designated Initializers
2008 @cindex initializers with labeled elements
2009 @cindex labeled elements in initializers
2010 @cindex case labels in initializers
2011 @cindex designated initializers
2013 Standard C90 requires the elements of an initializer to appear in a fixed
2014 order, the same as the order of the elements in the array or structure
2015 being initialized.
2017 In ISO C99 you can give the elements in any order, specifying the array
2018 indices or structure field names they apply to, and GNU C allows this as
2019 an extension in C90 mode as well.  This extension is not
2020 implemented in GNU C++.
2022 To specify an array index, write
2023 @samp{[@var{index}] =} before the element value.  For example,
2025 @smallexample
2026 int a[6] = @{ [4] = 29, [2] = 15 @};
2027 @end smallexample
2029 @noindent
2030 is equivalent to
2032 @smallexample
2033 int a[6] = @{ 0, 0, 15, 0, 29, 0 @};
2034 @end smallexample
2036 @noindent
2037 The index values must be constant expressions, even if the array being
2038 initialized is automatic.
2040 An alternative syntax for this that has been obsolete since GCC 2.5 but
2041 GCC still accepts is to write @samp{[@var{index}]} before the element
2042 value, with no @samp{=}.
2044 To initialize a range of elements to the same value, write
2045 @samp{[@var{first} ... @var{last}] = @var{value}}.  This is a GNU
2046 extension.  For example,
2048 @smallexample
2049 int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @};
2050 @end smallexample
2052 @noindent
2053 If the value in it has side-effects, the side-effects happen only once,
2054 not for each initialized field by the range initializer.
2056 @noindent
2057 Note that the length of the array is the highest value specified
2058 plus one.
2060 In a structure initializer, specify the name of a field to initialize
2061 with @samp{.@var{fieldname} =} before the element value.  For example,
2062 given the following structure,
2064 @smallexample
2065 struct point @{ int x, y; @};
2066 @end smallexample
2068 @noindent
2069 the following initialization
2071 @smallexample
2072 struct point p = @{ .y = yvalue, .x = xvalue @};
2073 @end smallexample
2075 @noindent
2076 is equivalent to
2078 @smallexample
2079 struct point p = @{ xvalue, yvalue @};
2080 @end smallexample
2082 Another syntax that has the same meaning, obsolete since GCC 2.5, is
2083 @samp{@var{fieldname}:}, as shown here:
2085 @smallexample
2086 struct point p = @{ y: yvalue, x: xvalue @};
2087 @end smallexample
2089 Omitted field members are implicitly initialized the same as objects
2090 that have static storage duration.
2092 @cindex designators
2093 The @samp{[@var{index}]} or @samp{.@var{fieldname}} is known as a
2094 @dfn{designator}.  You can also use a designator (or the obsolete colon
2095 syntax) when initializing a union, to specify which element of the union
2096 should be used.  For example,
2098 @smallexample
2099 union foo @{ int i; double d; @};
2101 union foo f = @{ .d = 4 @};
2102 @end smallexample
2104 @noindent
2105 converts 4 to a @code{double} to store it in the union using
2106 the second element.  By contrast, casting 4 to type @code{union foo}
2107 stores it into the union as the integer @code{i}, since it is
2108 an integer.  @xref{Cast to Union}.
2110 You can combine this technique of naming elements with ordinary C
2111 initialization of successive elements.  Each initializer element that
2112 does not have a designator applies to the next consecutive element of the
2113 array or structure.  For example,
2115 @smallexample
2116 int a[6] = @{ [1] = v1, v2, [4] = v4 @};
2117 @end smallexample
2119 @noindent
2120 is equivalent to
2122 @smallexample
2123 int a[6] = @{ 0, v1, v2, 0, v4, 0 @};
2124 @end smallexample
2126 Labeling the elements of an array initializer is especially useful
2127 when the indices are characters or belong to an @code{enum} type.
2128 For example:
2130 @smallexample
2131 int whitespace[256]
2132   = @{ [' '] = 1, ['\t'] = 1, ['\h'] = 1,
2133       ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 @};
2134 @end smallexample
2136 @cindex designator lists
2137 You can also write a series of @samp{.@var{fieldname}} and
2138 @samp{[@var{index}]} designators before an @samp{=} to specify a
2139 nested subobject to initialize; the list is taken relative to the
2140 subobject corresponding to the closest surrounding brace pair.  For
2141 example, with the @samp{struct point} declaration above:
2143 @smallexample
2144 struct point ptarray[10] = @{ [2].y = yv2, [2].x = xv2, [0].x = xv0 @};
2145 @end smallexample
2147 @noindent
2148 If the same field is initialized multiple times, it has the value from
2149 the last initialization.  If any such overridden initialization has
2150 side-effect, it is unspecified whether the side-effect happens or not.
2151 Currently, GCC discards them and issues a warning.
2153 @node Case Ranges
2154 @section Case Ranges
2155 @cindex case ranges
2156 @cindex ranges in case statements
2158 You can specify a range of consecutive values in a single @code{case} label,
2159 like this:
2161 @smallexample
2162 case @var{low} ... @var{high}:
2163 @end smallexample
2165 @noindent
2166 This has the same effect as the proper number of individual @code{case}
2167 labels, one for each integer value from @var{low} to @var{high}, inclusive.
2169 This feature is especially useful for ranges of ASCII character codes:
2171 @smallexample
2172 case 'A' ... 'Z':
2173 @end smallexample
2175 @strong{Be careful:} Write spaces around the @code{...}, for otherwise
2176 it may be parsed wrong when you use it with integer values.  For example,
2177 write this:
2179 @smallexample
2180 case 1 ... 5:
2181 @end smallexample
2183 @noindent
2184 rather than this:
2186 @smallexample
2187 case 1...5:
2188 @end smallexample
2190 @node Cast to Union
2191 @section Cast to a Union Type
2192 @cindex cast to a union
2193 @cindex union, casting to a
2195 A cast to union type looks similar to other casts, except that the type
2196 specified is a union type.  You can specify the type either with the
2197 @code{union} keyword or with a @code{typedef} name that refers to
2198 a union.  A cast to a union actually creates a compound literal and
2199 yields an lvalue, not an rvalue like true casts do.
2200 @xref{Compound Literals}.
2202 The types that may be cast to the union type are those of the members
2203 of the union.  Thus, given the following union and variables:
2205 @smallexample
2206 union foo @{ int i; double d; @};
2207 int x;
2208 double y;
2209 @end smallexample
2211 @noindent
2212 both @code{x} and @code{y} can be cast to type @code{union foo}.
2214 Using the cast as the right-hand side of an assignment to a variable of
2215 union type is equivalent to storing in a member of the union:
2217 @smallexample
2218 union foo u;
2219 /* @r{@dots{}} */
2220 u = (union foo) x  @equiv{}  u.i = x
2221 u = (union foo) y  @equiv{}  u.d = y
2222 @end smallexample
2224 You can also use the union cast as a function argument:
2226 @smallexample
2227 void hack (union foo);
2228 /* @r{@dots{}} */
2229 hack ((union foo) x);
2230 @end smallexample
2232 @node Mixed Declarations
2233 @section Mixed Declarations and Code
2234 @cindex mixed declarations and code
2235 @cindex declarations, mixed with code
2236 @cindex code, mixed with declarations
2238 ISO C99 and ISO C++ allow declarations and code to be freely mixed
2239 within compound statements.  As an extension, GNU C also allows this in
2240 C90 mode.  For example, you could do:
2242 @smallexample
2243 int i;
2244 /* @r{@dots{}} */
2245 i++;
2246 int j = i + 2;
2247 @end smallexample
2249 Each identifier is visible from where it is declared until the end of
2250 the enclosing block.
2252 @node Function Attributes
2253 @section Declaring Attributes of Functions
2254 @cindex function attributes
2255 @cindex declaring attributes of functions
2256 @cindex @code{volatile} applied to function
2257 @cindex @code{const} applied to function
2259 In GNU C, you can use function attributes to declare certain things
2260 about functions called in your program which help the compiler
2261 optimize calls and check your code more carefully.  For example, you
2262 can use attributes to declare that a function never returns
2263 (@code{noreturn}), returns a value depending only on its arguments
2264 (@code{pure}), or has @code{printf}-style arguments (@code{format}).
2266 You can also use attributes to control memory placement, code
2267 generation options or call/return conventions within the function
2268 being annotated.  Many of these attributes are target-specific.  For
2269 example, many targets support attributes for defining interrupt
2270 handler functions, which typically must follow special register usage
2271 and return conventions.
2273 Function attributes are introduced by the @code{__attribute__} keyword
2274 on a declaration, followed by an attribute specification inside double
2275 parentheses.  You can specify multiple attributes in a declaration by
2276 separating them by commas within the double parentheses or by
2277 immediately following an attribute declaration with another attribute
2278 declaration.  @xref{Attribute Syntax}, for the exact rules on
2279 attribute syntax and placement.
2281 GCC also supports attributes on
2282 variable declarations (@pxref{Variable Attributes}),
2283 labels (@pxref{Label Attributes}),
2284 enumerators (@pxref{Enumerator Attributes}),
2285 statements (@pxref{Statement Attributes}),
2286 and types (@pxref{Type Attributes}).
2288 There is some overlap between the purposes of attributes and pragmas
2289 (@pxref{Pragmas,,Pragmas Accepted by GCC}).  It has been
2290 found convenient to use @code{__attribute__} to achieve a natural
2291 attachment of attributes to their corresponding declarations, whereas
2292 @code{#pragma} is of use for compatibility with other compilers
2293 or constructs that do not naturally form part of the grammar.
2295 In addition to the attributes documented here,
2296 GCC plugins may provide their own attributes.
2298 @menu
2299 * Common Function Attributes::
2300 * AArch64 Function Attributes::
2301 * ARC Function Attributes::
2302 * ARM Function Attributes::
2303 * AVR Function Attributes::
2304 * Blackfin Function Attributes::
2305 * CR16 Function Attributes::
2306 * Epiphany Function Attributes::
2307 * H8/300 Function Attributes::
2308 * IA-64 Function Attributes::
2309 * M32C Function Attributes::
2310 * M32R/D Function Attributes::
2311 * m68k Function Attributes::
2312 * MCORE Function Attributes::
2313 * MeP Function Attributes::
2314 * MicroBlaze Function Attributes::
2315 * Microsoft Windows Function Attributes::
2316 * MIPS Function Attributes::
2317 * MSP430 Function Attributes::
2318 * NDS32 Function Attributes::
2319 * Nios II Function Attributes::
2320 * Nvidia PTX Function Attributes::
2321 * PowerPC Function Attributes::
2322 * RL78 Function Attributes::
2323 * RX Function Attributes::
2324 * S/390 Function Attributes::
2325 * SH Function Attributes::
2326 * SPU Function Attributes::
2327 * Symbian OS Function Attributes::
2328 * V850 Function Attributes::
2329 * Visium Function Attributes::
2330 * x86 Function Attributes::
2331 * Xstormy16 Function Attributes::
2332 @end menu
2334 @node Common Function Attributes
2335 @subsection Common Function Attributes
2337 The following attributes are supported on most targets.
2339 @table @code
2340 @c Keep this table alphabetized by attribute name.  Treat _ as space.
2342 @item alias ("@var{target}")
2343 @cindex @code{alias} function attribute
2344 The @code{alias} attribute causes the declaration to be emitted as an
2345 alias for another symbol, which must be specified.  For instance,
2347 @smallexample
2348 void __f () @{ /* @r{Do something.} */; @}
2349 void f () __attribute__ ((weak, alias ("__f")));
2350 @end smallexample
2352 @noindent
2353 defines @samp{f} to be a weak alias for @samp{__f}.  In C++, the
2354 mangled name for the target must be used.  It is an error if @samp{__f}
2355 is not defined in the same translation unit.
2357 This attribute requires assembler and object file support,
2358 and may not be available on all targets.
2360 @item aligned (@var{alignment})
2361 @cindex @code{aligned} function attribute
2362 This attribute specifies a minimum alignment for the function,
2363 measured in bytes.
2365 You cannot use this attribute to decrease the alignment of a function,
2366 only to increase it.  However, when you explicitly specify a function
2367 alignment this overrides the effect of the
2368 @option{-falign-functions} (@pxref{Optimize Options}) option for this
2369 function.
2371 Note that the effectiveness of @code{aligned} attributes may be
2372 limited by inherent limitations in your linker.  On many systems, the
2373 linker is only able to arrange for functions to be aligned up to a
2374 certain maximum alignment.  (For some linkers, the maximum supported
2375 alignment may be very very small.)  See your linker documentation for
2376 further information.
2378 The @code{aligned} attribute can also be used for variables and fields
2379 (@pxref{Variable Attributes}.)
2381 @item alloc_align
2382 @cindex @code{alloc_align} function attribute
2383 The @code{alloc_align} attribute is used to tell the compiler that the
2384 function return value points to memory, where the returned pointer minimum
2385 alignment is given by one of the functions parameters.  GCC uses this
2386 information to improve pointer alignment analysis.
2388 The function parameter denoting the allocated alignment is specified by
2389 one integer argument, whose number is the argument of the attribute.
2390 Argument numbering starts at one.
2392 For instance,
2394 @smallexample
2395 void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
2396 @end smallexample
2398 @noindent
2399 declares that @code{my_memalign} returns memory with minimum alignment
2400 given by parameter 1.
2402 @item alloc_size
2403 @cindex @code{alloc_size} function attribute
2404 The @code{alloc_size} attribute is used to tell the compiler that the
2405 function return value points to memory, where the size is given by
2406 one or two of the functions parameters.  GCC uses this
2407 information to improve the correctness of @code{__builtin_object_size}.
2409 The function parameter(s) denoting the allocated size are specified by
2410 one or two integer arguments supplied to the attribute.  The allocated size
2411 is either the value of the single function argument specified or the product
2412 of the two function arguments specified.  Argument numbering starts at
2413 one.
2415 For instance,
2417 @smallexample
2418 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
2419 void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))
2420 @end smallexample
2422 @noindent
2423 declares that @code{my_calloc} returns memory of the size given by
2424 the product of parameter 1 and 2 and that @code{my_realloc} returns memory
2425 of the size given by parameter 2.
2427 @item always_inline
2428 @cindex @code{always_inline} function attribute
2429 Generally, functions are not inlined unless optimization is specified.
2430 For functions declared inline, this attribute inlines the function
2431 independent of any restrictions that otherwise apply to inlining.
2432 Failure to inline such a function is diagnosed as an error.
2433 Note that if such a function is called indirectly the compiler may
2434 or may not inline it depending on optimization level and a failure
2435 to inline an indirect call may or may not be diagnosed.
2437 @item artificial
2438 @cindex @code{artificial} function attribute
2439 This attribute is useful for small inline wrappers that if possible
2440 should appear during debugging as a unit.  Depending on the debug
2441 info format it either means marking the function as artificial
2442 or using the caller location for all instructions within the inlined
2443 body.
2445 @item assume_aligned
2446 @cindex @code{assume_aligned} function attribute
2447 The @code{assume_aligned} attribute is used to tell the compiler that the
2448 function return value points to memory, where the returned pointer minimum
2449 alignment is given by the first argument.
2450 If the attribute has two arguments, the second argument is misalignment offset.
2452 For instance
2454 @smallexample
2455 void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
2456 void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))
2457 @end smallexample
2459 @noindent
2460 declares that @code{my_alloc1} returns 16-byte aligned pointer and
2461 that @code{my_alloc2} returns a pointer whose value modulo 32 is equal
2462 to 8.
2464 @item bnd_instrument
2465 @cindex @code{bnd_instrument} function attribute
2466 The @code{bnd_instrument} attribute on functions is used to inform the
2467 compiler that the function should be instrumented when compiled
2468 with the @option{-fchkp-instrument-marked-only} option.
2470 @item bnd_legacy
2471 @cindex @code{bnd_legacy} function attribute
2472 @cindex Pointer Bounds Checker attributes
2473 The @code{bnd_legacy} attribute on functions is used to inform the
2474 compiler that the function should not be instrumented when compiled
2475 with the @option{-fcheck-pointer-bounds} option.
2477 @item cold
2478 @cindex @code{cold} function attribute
2479 The @code{cold} attribute on functions is used to inform the compiler that
2480 the function is unlikely to be executed.  The function is optimized for
2481 size rather than speed and on many targets it is placed into a special
2482 subsection of the text section so all cold functions appear close together,
2483 improving code locality of non-cold parts of program.  The paths leading
2484 to calls of cold functions within code are marked as unlikely by the branch
2485 prediction mechanism.  It is thus useful to mark functions used to handle
2486 unlikely conditions, such as @code{perror}, as cold to improve optimization
2487 of hot functions that do call marked functions in rare occasions.
2489 When profile feedback is available, via @option{-fprofile-use}, cold functions
2490 are automatically detected and this attribute is ignored.
2492 @item const
2493 @cindex @code{const} function attribute
2494 @cindex functions that have no side effects
2495 Many functions do not examine any values except their arguments, and
2496 have no effects except to return a value.  Calls to such functions lend
2497 themselves to optimization such as common subexpression elimination.
2498 The @code{const} attribute imposes greater restrictions on a function's
2499 definition than the similar @code{pure} attribute below because it prohibits
2500 the function from reading global variables.  Consequently, the presence of
2501 the attribute on a function declarations allows GCC to emit more efficient
2502 code for some calls to the function.  Decorating the same function with
2503 both the @code{const} and the @code{pure} attribute is diagnnosed.
2505 @cindex pointer arguments
2506 Note that a function that has pointer arguments and examines the data
2507 pointed to must @emph{not} be declared @code{const}.  Likewise, a
2508 function that calls a non-@code{const} function usually must not be
2509 @code{const}.  It does not make sense for a @code{const} function to
2510 return @code{void}.
2512 @item constructor
2513 @itemx destructor
2514 @itemx constructor (@var{priority})
2515 @itemx destructor (@var{priority})
2516 @cindex @code{constructor} function attribute
2517 @cindex @code{destructor} function attribute
2518 The @code{constructor} attribute causes the function to be called
2519 automatically before execution enters @code{main ()}.  Similarly, the
2520 @code{destructor} attribute causes the function to be called
2521 automatically after @code{main ()} completes or @code{exit ()} is
2522 called.  Functions with these attributes are useful for
2523 initializing data that is used implicitly during the execution of
2524 the program.
2526 You may provide an optional integer priority to control the order in
2527 which constructor and destructor functions are run.  A constructor
2528 with a smaller priority number runs before a constructor with a larger
2529 priority number; the opposite relationship holds for destructors.  So,
2530 if you have a constructor that allocates a resource and a destructor
2531 that deallocates the same resource, both functions typically have the
2532 same priority.  The priorities for constructor and destructor
2533 functions are the same as those specified for namespace-scope C++
2534 objects (@pxref{C++ Attributes}).  However, at present, the order in which
2535 constructors for C++ objects with static storage duration and functions
2536 decorated with attribute @code{constructor} are invoked is unspecified.
2537 In mixed declarations, attribute @code{init_priority} can be used to
2538 impose a specific ordering.
2540 @item deprecated
2541 @itemx deprecated (@var{msg})
2542 @cindex @code{deprecated} function attribute
2543 The @code{deprecated} attribute results in a warning if the function
2544 is used anywhere in the source file.  This is useful when identifying
2545 functions that are expected to be removed in a future version of a
2546 program.  The warning also includes the location of the declaration
2547 of the deprecated function, to enable users to easily find further
2548 information about why the function is deprecated, or what they should
2549 do instead.  Note that the warnings only occurs for uses:
2551 @smallexample
2552 int old_fn () __attribute__ ((deprecated));
2553 int old_fn ();
2554 int (*fn_ptr)() = old_fn;
2555 @end smallexample
2557 @noindent
2558 results in a warning on line 3 but not line 2.  The optional @var{msg}
2559 argument, which must be a string, is printed in the warning if
2560 present.
2562 The @code{deprecated} attribute can also be used for variables and
2563 types (@pxref{Variable Attributes}, @pxref{Type Attributes}.)
2565 @item error ("@var{message}")
2566 @itemx warning ("@var{message}")
2567 @cindex @code{error} function attribute
2568 @cindex @code{warning} function attribute
2569 If the @code{error} or @code{warning} attribute 
2570 is used on a function declaration and a call to such a function
2571 is not eliminated through dead code elimination or other optimizations, 
2572 an error or warning (respectively) that includes @var{message} is diagnosed.  
2573 This is useful
2574 for compile-time checking, especially together with @code{__builtin_constant_p}
2575 and inline functions where checking the inline function arguments is not
2576 possible through @code{extern char [(condition) ? 1 : -1];} tricks.
2578 While it is possible to leave the function undefined and thus invoke
2579 a link failure (to define the function with
2580 a message in @code{.gnu.warning*} section),
2581 when using these attributes the problem is diagnosed
2582 earlier and with exact location of the call even in presence of inline
2583 functions or when not emitting debugging information.
2585 @item externally_visible
2586 @cindex @code{externally_visible} function attribute
2587 This attribute, attached to a global variable or function, nullifies
2588 the effect of the @option{-fwhole-program} command-line option, so the
2589 object remains visible outside the current compilation unit.
2591 If @option{-fwhole-program} is used together with @option{-flto} and 
2592 @command{gold} is used as the linker plugin, 
2593 @code{externally_visible} attributes are automatically added to functions 
2594 (not variable yet due to a current @command{gold} issue) 
2595 that are accessed outside of LTO objects according to resolution file
2596 produced by @command{gold}.
2597 For other linkers that cannot generate resolution file,
2598 explicit @code{externally_visible} attributes are still necessary.
2600 @item flatten
2601 @cindex @code{flatten} function attribute
2602 Generally, inlining into a function is limited.  For a function marked with
2603 this attribute, every call inside this function is inlined, if possible.
2604 Whether the function itself is considered for inlining depends on its size and
2605 the current inlining parameters.
2607 @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
2608 @cindex @code{format} function attribute
2609 @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments
2610 @opindex Wformat
2611 The @code{format} attribute specifies that a function takes @code{printf},
2612 @code{scanf}, @code{strftime} or @code{strfmon} style arguments that
2613 should be type-checked against a format string.  For example, the
2614 declaration:
2616 @smallexample
2617 extern int
2618 my_printf (void *my_object, const char *my_format, ...)
2619       __attribute__ ((format (printf, 2, 3)));
2620 @end smallexample
2622 @noindent
2623 causes the compiler to check the arguments in calls to @code{my_printf}
2624 for consistency with the @code{printf} style format string argument
2625 @code{my_format}.
2627 The parameter @var{archetype} determines how the format string is
2628 interpreted, and should be @code{printf}, @code{scanf}, @code{strftime},
2629 @code{gnu_printf}, @code{gnu_scanf}, @code{gnu_strftime} or
2630 @code{strfmon}.  (You can also use @code{__printf__},
2631 @code{__scanf__}, @code{__strftime__} or @code{__strfmon__}.)  On
2632 MinGW targets, @code{ms_printf}, @code{ms_scanf}, and
2633 @code{ms_strftime} are also present.
2634 @var{archetype} values such as @code{printf} refer to the formats accepted
2635 by the system's C runtime library,
2636 while values prefixed with @samp{gnu_} always refer
2637 to the formats accepted by the GNU C Library.  On Microsoft Windows
2638 targets, values prefixed with @samp{ms_} refer to the formats accepted by the
2639 @file{msvcrt.dll} library.
2640 The parameter @var{string-index}
2641 specifies which argument is the format string argument (starting
2642 from 1), while @var{first-to-check} is the number of the first
2643 argument to check against the format string.  For functions
2644 where the arguments are not available to be checked (such as
2645 @code{vprintf}), specify the third parameter as zero.  In this case the
2646 compiler only checks the format string for consistency.  For
2647 @code{strftime} formats, the third parameter is required to be zero.
2648 Since non-static C++ methods have an implicit @code{this} argument, the
2649 arguments of such methods should be counted from two, not one, when
2650 giving values for @var{string-index} and @var{first-to-check}.
2652 In the example above, the format string (@code{my_format}) is the second
2653 argument of the function @code{my_print}, and the arguments to check
2654 start with the third argument, so the correct parameters for the format
2655 attribute are 2 and 3.
2657 @opindex ffreestanding
2658 @opindex fno-builtin
2659 The @code{format} attribute allows you to identify your own functions
2660 that take format strings as arguments, so that GCC can check the
2661 calls to these functions for errors.  The compiler always (unless
2662 @option{-ffreestanding} or @option{-fno-builtin} is used) checks formats
2663 for the standard library functions @code{printf}, @code{fprintf},
2664 @code{sprintf}, @code{scanf}, @code{fscanf}, @code{sscanf}, @code{strftime},
2665 @code{vprintf}, @code{vfprintf} and @code{vsprintf} whenever such
2666 warnings are requested (using @option{-Wformat}), so there is no need to
2667 modify the header file @file{stdio.h}.  In C99 mode, the functions
2668 @code{snprintf}, @code{vsnprintf}, @code{vscanf}, @code{vfscanf} and
2669 @code{vsscanf} are also checked.  Except in strictly conforming C
2670 standard modes, the X/Open function @code{strfmon} is also checked as
2671 are @code{printf_unlocked} and @code{fprintf_unlocked}.
2672 @xref{C Dialect Options,,Options Controlling C Dialect}.
2674 For Objective-C dialects, @code{NSString} (or @code{__NSString__}) is
2675 recognized in the same context.  Declarations including these format attributes
2676 are parsed for correct syntax, however the result of checking of such format
2677 strings is not yet defined, and is not carried out by this version of the
2678 compiler.
2680 The target may also provide additional types of format checks.
2681 @xref{Target Format Checks,,Format Checks Specific to Particular
2682 Target Machines}.
2684 @item format_arg (@var{string-index})
2685 @cindex @code{format_arg} function attribute
2686 @opindex Wformat-nonliteral
2687 The @code{format_arg} attribute specifies that a function takes a format
2688 string for a @code{printf}, @code{scanf}, @code{strftime} or
2689 @code{strfmon} style function and modifies it (for example, to translate
2690 it into another language), so the result can be passed to a
2691 @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style
2692 function (with the remaining arguments to the format function the same
2693 as they would have been for the unmodified string).  For example, the
2694 declaration:
2696 @smallexample
2697 extern char *
2698 my_dgettext (char *my_domain, const char *my_format)
2699       __attribute__ ((format_arg (2)));
2700 @end smallexample
2702 @noindent
2703 causes the compiler to check the arguments in calls to a @code{printf},
2704 @code{scanf}, @code{strftime} or @code{strfmon} type function, whose
2705 format string argument is a call to the @code{my_dgettext} function, for
2706 consistency with the format string argument @code{my_format}.  If the
2707 @code{format_arg} attribute had not been specified, all the compiler
2708 could tell in such calls to format functions would be that the format
2709 string argument is not constant; this would generate a warning when
2710 @option{-Wformat-nonliteral} is used, but the calls could not be checked
2711 without the attribute.
2713 The parameter @var{string-index} specifies which argument is the format
2714 string argument (starting from one).  Since non-static C++ methods have
2715 an implicit @code{this} argument, the arguments of such methods should
2716 be counted from two.
2718 The @code{format_arg} attribute allows you to identify your own
2719 functions that modify format strings, so that GCC can check the
2720 calls to @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon}
2721 type function whose operands are a call to one of your own function.
2722 The compiler always treats @code{gettext}, @code{dgettext}, and
2723 @code{dcgettext} in this manner except when strict ISO C support is
2724 requested by @option{-ansi} or an appropriate @option{-std} option, or
2725 @option{-ffreestanding} or @option{-fno-builtin}
2726 is used.  @xref{C Dialect Options,,Options
2727 Controlling C Dialect}.
2729 For Objective-C dialects, the @code{format-arg} attribute may refer to an
2730 @code{NSString} reference for compatibility with the @code{format} attribute
2731 above.
2733 The target may also allow additional types in @code{format-arg} attributes.
2734 @xref{Target Format Checks,,Format Checks Specific to Particular
2735 Target Machines}.
2737 @item gnu_inline
2738 @cindex @code{gnu_inline} function attribute
2739 This attribute should be used with a function that is also declared
2740 with the @code{inline} keyword.  It directs GCC to treat the function
2741 as if it were defined in gnu90 mode even when compiling in C99 or
2742 gnu99 mode.
2744 If the function is declared @code{extern}, then this definition of the
2745 function is used only for inlining.  In no case is the function
2746 compiled as a standalone function, not even if you take its address
2747 explicitly.  Such an address becomes an external reference, as if you
2748 had only declared the function, and had not defined it.  This has
2749 almost the effect of a macro.  The way to use this is to put a
2750 function definition in a header file with this attribute, and put
2751 another copy of the function, without @code{extern}, in a library
2752 file.  The definition in the header file causes most calls to the
2753 function to be inlined.  If any uses of the function remain, they
2754 refer to the single copy in the library.  Note that the two
2755 definitions of the functions need not be precisely the same, although
2756 if they do not have the same effect your program may behave oddly.
2758 In C, if the function is neither @code{extern} nor @code{static}, then
2759 the function is compiled as a standalone function, as well as being
2760 inlined where possible.
2762 This is how GCC traditionally handled functions declared
2763 @code{inline}.  Since ISO C99 specifies a different semantics for
2764 @code{inline}, this function attribute is provided as a transition
2765 measure and as a useful feature in its own right.  This attribute is
2766 available in GCC 4.1.3 and later.  It is available if either of the
2767 preprocessor macros @code{__GNUC_GNU_INLINE__} or
2768 @code{__GNUC_STDC_INLINE__} are defined.  @xref{Inline,,An Inline
2769 Function is As Fast As a Macro}.
2771 In C++, this attribute does not depend on @code{extern} in any way,
2772 but it still requires the @code{inline} keyword to enable its special
2773 behavior.
2775 @item hot
2776 @cindex @code{hot} function attribute
2777 The @code{hot} attribute on a function is used to inform the compiler that
2778 the function is a hot spot of the compiled program.  The function is
2779 optimized more aggressively and on many targets it is placed into a special
2780 subsection of the text section so all hot functions appear close together,
2781 improving locality.
2783 When profile feedback is available, via @option{-fprofile-use}, hot functions
2784 are automatically detected and this attribute is ignored.
2786 @item ifunc ("@var{resolver}")
2787 @cindex @code{ifunc} function attribute
2788 @cindex indirect functions
2789 @cindex functions that are dynamically resolved
2790 The @code{ifunc} attribute is used to mark a function as an indirect
2791 function using the STT_GNU_IFUNC symbol type extension to the ELF
2792 standard.  This allows the resolution of the symbol value to be
2793 determined dynamically at load time, and an optimized version of the
2794 routine to be selected for the particular processor or other system
2795 characteristics determined then.  To use this attribute, first define
2796 the implementation functions available, and a resolver function that
2797 returns a pointer to the selected implementation function.  The
2798 implementation functions' declarations must match the API of the
2799 function being implemented.  The resolver should be declared to
2800 be a function taking no arguments and returning a pointer to
2801 a function of the same type as the implementation.  For example:
2803 @smallexample
2804 void *my_memcpy (void *dst, const void *src, size_t len)
2806   @dots{}
2807   return dst;
2810 static void * (*resolve_memcpy (void))(void *, const void *, size_t)
2812   return my_memcpy; // we will just always select this routine
2814 @end smallexample
2816 @noindent
2817 The exported header file declaring the function the user calls would
2818 contain:
2820 @smallexample
2821 extern void *memcpy (void *, const void *, size_t);
2822 @end smallexample
2824 @noindent
2825 allowing the user to call @code{memcpy} as a regular function, unaware of
2826 the actual implementation.  Finally, the indirect function needs to be
2827 defined in the same translation unit as the resolver function:
2829 @smallexample
2830 void *memcpy (void *, const void *, size_t)
2831      __attribute__ ((ifunc ("resolve_memcpy")));
2832 @end smallexample
2834 In C++, the @code{ifunc} attribute takes a string that is the mangled name
2835 of the resolver function.  A C++ resolver for a non-static member function
2836 of class @code{C} should be declared to return a pointer to a non-member
2837 function taking pointer to @code{C} as the first argument, followed by
2838 the same arguments as of the implementation function.  G++ checks
2839 the signatures of the two functions and issues
2840 a @option{-Wattribute-alias} warning for mismatches.  To suppress a warning
2841 for the necessary cast from a pointer to the implementation member function
2842 to the type of the corresponding non-member function use
2843 the @option{-Wno-pmf-conversions} option.  For example:
2845 @smallexample
2846 class S
2848 private:
2849   int debug_impl (int);
2850   int optimized_impl (int);
2852   typedef int Func (S*, int);
2854   static Func* resolver ();
2855 public:
2857   int interface (int);
2860 int S::debug_impl (int) @{ /* @r{@dots{}} */ @}
2861 int S::optimized_impl (int) @{ /* @r{@dots{}} */ @}
2863 S::Func* S::resolver ()
2865   int (S::*pimpl) (int)
2866     = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
2868   // Cast triggers -Wno-pmf-conversions.
2869   return reinterpret_cast<Func*>(pimpl);
2872 int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
2873 @end smallexample
2875 Indirect functions cannot be weak.  Binutils version 2.20.1 or higher
2876 and GNU C Library version 2.11.1 are required to use this feature.
2878 @item interrupt
2879 @itemx interrupt_handler
2880 Many GCC back ends support attributes to indicate that a function is
2881 an interrupt handler, which tells the compiler to generate function
2882 entry and exit sequences that differ from those from regular
2883 functions.  The exact syntax and behavior are target-specific;
2884 refer to the following subsections for details.
2886 @item leaf
2887 @cindex @code{leaf} function attribute
2888 Calls to external functions with this attribute must return to the
2889 current compilation unit only by return or by exception handling.  In
2890 particular, a leaf function is not allowed to invoke callback functions
2891 passed to it from the current compilation unit, directly call functions
2892 exported by the unit, or @code{longjmp} into the unit.  Leaf functions
2893 might still call functions from other compilation units and thus they
2894 are not necessarily leaf in the sense that they contain no function
2895 calls at all.
2897 The attribute is intended for library functions to improve dataflow
2898 analysis.  The compiler takes the hint that any data not escaping the
2899 current compilation unit cannot be used or modified by the leaf
2900 function.  For example, the @code{sin} function is a leaf function, but
2901 @code{qsort} is not.
2903 Note that leaf functions might indirectly run a signal handler defined
2904 in the current compilation unit that uses static variables.  Similarly,
2905 when lazy symbol resolution is in effect, leaf functions might invoke
2906 indirect functions whose resolver function or implementation function is
2907 defined in the current compilation unit and uses static variables.  There
2908 is no standard-compliant way to write such a signal handler, resolver
2909 function, or implementation function, and the best that you can do is to
2910 remove the @code{leaf} attribute or mark all such static variables
2911 @code{volatile}.  Lastly, for ELF-based systems that support symbol
2912 interposition, care should be taken that functions defined in the
2913 current compilation unit do not unexpectedly interpose other symbols
2914 based on the defined standards mode and defined feature test macros;
2915 otherwise an inadvertent callback would be added.
2917 The attribute has no effect on functions defined within the current
2918 compilation unit.  This is to allow easy merging of multiple compilation
2919 units into one, for example, by using the link-time optimization.  For
2920 this reason the attribute is not allowed on types to annotate indirect
2921 calls.
2923 @item malloc
2924 @cindex @code{malloc} function attribute
2925 @cindex functions that behave like malloc
2926 This tells the compiler that a function is @code{malloc}-like, i.e.,
2927 that the pointer @var{P} returned by the function cannot alias any
2928 other pointer valid when the function returns, and moreover no
2929 pointers to valid objects occur in any storage addressed by @var{P}.
2931 Using this attribute can improve optimization.  Functions like
2932 @code{malloc} and @code{calloc} have this property because they return
2933 a pointer to uninitialized or zeroed-out storage.  However, functions
2934 like @code{realloc} do not have this property, as they can return a
2935 pointer to storage containing pointers.
2937 @item no_icf
2938 @cindex @code{no_icf} function attribute
2939 This function attribute prevents a functions from being merged with another
2940 semantically equivalent function.
2942 @item no_instrument_function
2943 @cindex @code{no_instrument_function} function attribute
2944 @opindex finstrument-functions
2945 If @option{-finstrument-functions} is given, profiling function calls are
2946 generated at entry and exit of most user-compiled functions.
2947 Functions with this attribute are not so instrumented.
2949 @item no_profile_instrument_function
2950 @cindex @code{no_profile_instrument_function} function attribute
2951 The @code{no_profile_instrument_function} attribute on functions is used
2952 to inform the compiler that it should not process any profile feedback based
2953 optimization code instrumentation.
2955 @item no_reorder
2956 @cindex @code{no_reorder} function attribute
2957 Do not reorder functions or variables marked @code{no_reorder}
2958 against each other or top level assembler statements the executable.
2959 The actual order in the program will depend on the linker command
2960 line. Static variables marked like this are also not removed.
2961 This has a similar effect
2962 as the @option{-fno-toplevel-reorder} option, but only applies to the
2963 marked symbols.
2965 @item no_sanitize ("@var{sanitize_option}")
2966 @cindex @code{no_sanitize} function attribute
2967 The @code{no_sanitize} attribute on functions is used
2968 to inform the compiler that it should not do sanitization of all options
2969 mentioned in @var{sanitize_option}.  A list of values acceptable by
2970 @option{-fsanitize} option can be provided.
2972 @smallexample
2973 void __attribute__ ((no_sanitize ("alignment", "object-size")))
2974 f () @{ /* @r{Do something.} */; @}
2975 @end smallexample
2977 @item no_sanitize_address
2978 @itemx no_address_safety_analysis
2979 @cindex @code{no_sanitize_address} function attribute
2980 The @code{no_sanitize_address} attribute on functions is used
2981 to inform the compiler that it should not instrument memory accesses
2982 in the function when compiling with the @option{-fsanitize=address} option.
2983 The @code{no_address_safety_analysis} is a deprecated alias of the
2984 @code{no_sanitize_address} attribute, new code should use
2985 @code{no_sanitize_address}.
2987 @item no_sanitize_thread
2988 @cindex @code{no_sanitize_thread} function attribute
2989 The @code{no_sanitize_thread} attribute on functions is used
2990 to inform the compiler that it should not instrument memory accesses
2991 in the function when compiling with the @option{-fsanitize=thread} option.
2993 @item no_sanitize_undefined
2994 @cindex @code{no_sanitize_undefined} function attribute
2995 The @code{no_sanitize_undefined} attribute on functions is used
2996 to inform the compiler that it should not check for undefined behavior
2997 in the function when compiling with the @option{-fsanitize=undefined} option.
2999 @item no_split_stack
3000 @cindex @code{no_split_stack} function attribute
3001 @opindex fsplit-stack
3002 If @option{-fsplit-stack} is given, functions have a small
3003 prologue which decides whether to split the stack.  Functions with the
3004 @code{no_split_stack} attribute do not have that prologue, and thus
3005 may run with only a small amount of stack space available.
3007 @item no_stack_limit
3008 @cindex @code{no_stack_limit} function attribute
3009 This attribute locally overrides the @option{-fstack-limit-register}
3010 and @option{-fstack-limit-symbol} command-line options; it has the effect
3011 of disabling stack limit checking in the function it applies to.
3013 @item noclone
3014 @cindex @code{noclone} function attribute
3015 This function attribute prevents a function from being considered for
3016 cloning---a mechanism that produces specialized copies of functions
3017 and which is (currently) performed by interprocedural constant
3018 propagation.
3020 @item noinline
3021 @cindex @code{noinline} function attribute
3022 This function attribute prevents a function from being considered for
3023 inlining.
3024 @c Don't enumerate the optimizations by name here; we try to be
3025 @c future-compatible with this mechanism.
3026 If the function does not have side-effects, there are optimizations
3027 other than inlining that cause function calls to be optimized away,
3028 although the function call is live.  To keep such calls from being
3029 optimized away, put
3030 @smallexample
3031 asm ("");
3032 @end smallexample
3034 @noindent
3035 (@pxref{Extended Asm}) in the called function, to serve as a special
3036 side-effect.
3038 @item noipa
3039 @cindex @code{noipa} function attribute
3040 Disable interprocedural optimizations between the function with this
3041 attribute and its callers, as if the body of the function is not available
3042 when optimizing callers and the callers are unavailable when optimizing
3043 the body.  This attribute implies @code{noinline}, @code{noclone} and
3044 @code{no_icf} attributes.    However, this attribute is not equivalent
3045 to a combination of other attributes, because its purpose is to suppress
3046 existing and future optimizations employing interprocedural analysis,
3047 including those that do not have an attribute suitable for disabling
3048 them individually.  This attribute is supported mainly for the purpose
3049 of testing the compiler.
3051 @item nonnull (@var{arg-index}, @dots{})
3052 @cindex @code{nonnull} function attribute
3053 @cindex functions with non-null pointer arguments
3054 The @code{nonnull} attribute specifies that some function parameters should
3055 be non-null pointers.  For instance, the declaration:
3057 @smallexample
3058 extern void *
3059 my_memcpy (void *dest, const void *src, size_t len)
3060         __attribute__((nonnull (1, 2)));
3061 @end smallexample
3063 @noindent
3064 causes the compiler to check that, in calls to @code{my_memcpy},
3065 arguments @var{dest} and @var{src} are non-null.  If the compiler
3066 determines that a null pointer is passed in an argument slot marked
3067 as non-null, and the @option{-Wnonnull} option is enabled, a warning
3068 is issued.  The compiler may also choose to make optimizations based
3069 on the knowledge that certain function arguments will never be null.
3071 If no argument index list is given to the @code{nonnull} attribute,
3072 all pointer arguments are marked as non-null.  To illustrate, the
3073 following declaration is equivalent to the previous example:
3075 @smallexample
3076 extern void *
3077 my_memcpy (void *dest, const void *src, size_t len)
3078         __attribute__((nonnull));
3079 @end smallexample
3081 @item noplt
3082 @cindex @code{noplt} function attribute
3083 The @code{noplt} attribute is the counterpart to option @option{-fno-plt}.
3084 Calls to functions marked with this attribute in position-independent code
3085 do not use the PLT.
3087 @smallexample
3088 @group
3089 /* Externally defined function foo.  */
3090 int foo () __attribute__ ((noplt));
3093 main (/* @r{@dots{}} */)
3095   /* @r{@dots{}} */
3096   foo ();
3097   /* @r{@dots{}} */
3099 @end group
3100 @end smallexample
3102 The @code{noplt} attribute on function @code{foo}
3103 tells the compiler to assume that
3104 the function @code{foo} is externally defined and that the call to
3105 @code{foo} must avoid the PLT
3106 in position-independent code.
3108 In position-dependent code, a few targets also convert calls to
3109 functions that are marked to not use the PLT to use the GOT instead.
3111 @item noreturn
3112 @cindex @code{noreturn} function attribute
3113 @cindex functions that never return
3114 A few standard library functions, such as @code{abort} and @code{exit},
3115 cannot return.  GCC knows this automatically.  Some programs define
3116 their own functions that never return.  You can declare them
3117 @code{noreturn} to tell the compiler this fact.  For example,
3119 @smallexample
3120 @group
3121 void fatal () __attribute__ ((noreturn));
3123 void
3124 fatal (/* @r{@dots{}} */)
3126   /* @r{@dots{}} */ /* @r{Print error message.} */ /* @r{@dots{}} */
3127   exit (1);
3129 @end group
3130 @end smallexample
3132 The @code{noreturn} keyword tells the compiler to assume that
3133 @code{fatal} cannot return.  It can then optimize without regard to what
3134 would happen if @code{fatal} ever did return.  This makes slightly
3135 better code.  More importantly, it helps avoid spurious warnings of
3136 uninitialized variables.
3138 The @code{noreturn} keyword does not affect the exceptional path when that
3139 applies: a @code{noreturn}-marked function may still return to the caller
3140 by throwing an exception or calling @code{longjmp}.
3142 Do not assume that registers saved by the calling function are
3143 restored before calling the @code{noreturn} function.
3145 It does not make sense for a @code{noreturn} function to have a return
3146 type other than @code{void}.
3148 @item nothrow
3149 @cindex @code{nothrow} function attribute
3150 The @code{nothrow} attribute is used to inform the compiler that a
3151 function cannot throw an exception.  For example, most functions in
3152 the standard C library can be guaranteed not to throw an exception
3153 with the notable exceptions of @code{qsort} and @code{bsearch} that
3154 take function pointer arguments.
3156 @item optimize
3157 @cindex @code{optimize} function attribute
3158 The @code{optimize} attribute is used to specify that a function is to
3159 be compiled with different optimization options than specified on the
3160 command line.  Arguments can either be numbers or strings.  Numbers
3161 are assumed to be an optimization level.  Strings that begin with
3162 @code{O} are assumed to be an optimization option, while other options
3163 are assumed to be used with a @code{-f} prefix.  You can also use the
3164 @samp{#pragma GCC optimize} pragma to set the optimization options
3165 that affect more than one function.
3166 @xref{Function Specific Option Pragmas}, for details about the
3167 @samp{#pragma GCC optimize} pragma.
3169 This attribute should be used for debugging purposes only.  It is not
3170 suitable in production code.
3172 @item patchable_function_entry
3173 @cindex @code{patchable_function_entry} function attribute
3174 @cindex extra NOP instructions at the function entry point
3175 In case the target's text segment can be made writable at run time by
3176 any means, padding the function entry with a number of NOPs can be
3177 used to provide a universal tool for instrumentation.
3179 The @code{patchable_function_entry} function attribute can be used to
3180 change the number of NOPs to any desired value.  The two-value syntax
3181 is the same as for the command-line switch
3182 @option{-fpatchable-function-entry=N,M}, generating @var{N} NOPs, with
3183 the function entry point before the @var{M}th NOP instruction.
3184 @var{M} defaults to 0 if omitted e.g. function entry point is before
3185 the first NOP.
3187 If patchable function entries are enabled globally using the command-line
3188 option @option{-fpatchable-function-entry=N,M}, then you must disable
3189 instrumentation on all functions that are part of the instrumentation
3190 framework with the attribute @code{patchable_function_entry (0)}
3191 to prevent recursion.
3193 @item pure
3194 @cindex @code{pure} function attribute
3195 @cindex functions that have no side effects
3196 Many functions have no effects except the return value and their
3197 return value depends only on the parameters and/or global variables.
3198 Calls to such functions can be subject
3199 to common subexpression elimination and loop optimization just as an
3200 arithmetic operator would be.  These functions should be declared
3201 with the attribute @code{pure}.  For example,
3203 @smallexample
3204 int square (int) __attribute__ ((pure));
3205 @end smallexample
3207 @noindent
3208 says that the hypothetical function @code{square} is safe to call
3209 fewer times than the program says.
3211 Some common examples of pure functions are @code{strlen} or @code{memcmp}.
3212 Interesting non-pure functions are functions with infinite loops or those
3213 depending on volatile memory or other system resource, that may change between
3214 two consecutive calls (such as @code{feof} in a multithreading environment).
3216 The @code{pure} attribute imposes similar but looser restrictions on
3217 a function's defintion than the @code{const} attribute: it allows the
3218 function to read global variables.  Decorating the same function with
3219 both the @code{pure} and the @code{const} attribute is diagnosed.
3221 @item returns_nonnull
3222 @cindex @code{returns_nonnull} function attribute
3223 The @code{returns_nonnull} attribute specifies that the function
3224 return value should be a non-null pointer.  For instance, the declaration:
3226 @smallexample
3227 extern void *
3228 mymalloc (size_t len) __attribute__((returns_nonnull));
3229 @end smallexample
3231 @noindent
3232 lets the compiler optimize callers based on the knowledge
3233 that the return value will never be null.
3235 @item returns_twice
3236 @cindex @code{returns_twice} function attribute
3237 @cindex functions that return more than once
3238 The @code{returns_twice} attribute tells the compiler that a function may
3239 return more than one time.  The compiler ensures that all registers
3240 are dead before calling such a function and emits a warning about
3241 the variables that may be clobbered after the second return from the
3242 function.  Examples of such functions are @code{setjmp} and @code{vfork}.
3243 The @code{longjmp}-like counterpart of such function, if any, might need
3244 to be marked with the @code{noreturn} attribute.
3246 @item section ("@var{section-name}")
3247 @cindex @code{section} function attribute
3248 @cindex functions in arbitrary sections
3249 Normally, the compiler places the code it generates in the @code{text} section.
3250 Sometimes, however, you need additional sections, or you need certain
3251 particular functions to appear in special sections.  The @code{section}
3252 attribute specifies that a function lives in a particular section.
3253 For example, the declaration:
3255 @smallexample
3256 extern void foobar (void) __attribute__ ((section ("bar")));
3257 @end smallexample
3259 @noindent
3260 puts the function @code{foobar} in the @code{bar} section.
3262 Some file formats do not support arbitrary sections so the @code{section}
3263 attribute is not available on all platforms.
3264 If you need to map the entire contents of a module to a particular
3265 section, consider using the facilities of the linker instead.
3267 @item sentinel
3268 @cindex @code{sentinel} function attribute
3269 This function attribute ensures that a parameter in a function call is
3270 an explicit @code{NULL}.  The attribute is only valid on variadic
3271 functions.  By default, the sentinel is located at position zero, the
3272 last parameter of the function call.  If an optional integer position
3273 argument P is supplied to the attribute, the sentinel must be located at
3274 position P counting backwards from the end of the argument list.
3276 @smallexample
3277 __attribute__ ((sentinel))
3278 is equivalent to
3279 __attribute__ ((sentinel(0)))
3280 @end smallexample
3282 The attribute is automatically set with a position of 0 for the built-in
3283 functions @code{execl} and @code{execlp}.  The built-in function
3284 @code{execle} has the attribute set with a position of 1.
3286 A valid @code{NULL} in this context is defined as zero with any pointer
3287 type.  If your system defines the @code{NULL} macro with an integer type
3288 then you need to add an explicit cast.  GCC replaces @code{stddef.h}
3289 with a copy that redefines NULL appropriately.
3291 The warnings for missing or incorrect sentinels are enabled with
3292 @option{-Wformat}.
3294 @item simd
3295 @itemx simd("@var{mask}")
3296 @cindex @code{simd} function attribute
3297 This attribute enables creation of one or more function versions that
3298 can process multiple arguments using SIMD instructions from a
3299 single invocation.  Specifying this attribute allows compiler to
3300 assume that such versions are available at link time (provided
3301 in the same or another translation unit).  Generated versions are
3302 target-dependent and described in the corresponding Vector ABI document.  For
3303 x86_64 target this document can be found
3304 @w{@uref{https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt,here}}.
3306 The optional argument @var{mask} may have the value
3307 @code{notinbranch} or @code{inbranch},
3308 and instructs the compiler to generate non-masked or masked
3309 clones correspondingly. By default, all clones are generated.
3311 If the attribute is specified and @code{#pragma omp declare simd} is
3312 present on a declaration and the @option{-fopenmp} or @option{-fopenmp-simd}
3313 switch is specified, then the attribute is ignored.
3315 @item stack_protect
3316 @cindex @code{stack_protect} function attribute
3317 This attribute adds stack protection code to the function if 
3318 flags @option{-fstack-protector}, @option{-fstack-protector-strong}
3319 or @option{-fstack-protector-explicit} are set.
3321 @item target (@var{options})
3322 @cindex @code{target} function attribute
3323 Multiple target back ends implement the @code{target} attribute
3324 to specify that a function is to
3325 be compiled with different target options than specified on the
3326 command line.  This can be used for instance to have functions
3327 compiled with a different ISA (instruction set architecture) than the
3328 default.  You can also use the @samp{#pragma GCC target} pragma to set
3329 more than one function to be compiled with specific target options.
3330 @xref{Function Specific Option Pragmas}, for details about the
3331 @samp{#pragma GCC target} pragma.
3333 For instance, on an x86, you could declare one function with the
3334 @code{target("sse4.1,arch=core2")} attribute and another with
3335 @code{target("sse4a,arch=amdfam10")}.  This is equivalent to
3336 compiling the first function with @option{-msse4.1} and
3337 @option{-march=core2} options, and the second function with
3338 @option{-msse4a} and @option{-march=amdfam10} options.  It is up to you
3339 to make sure that a function is only invoked on a machine that
3340 supports the particular ISA it is compiled for (for example by using
3341 @code{cpuid} on x86 to determine what feature bits and architecture
3342 family are used).
3344 @smallexample
3345 int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
3346 int sse3_func (void) __attribute__ ((__target__ ("sse3")));
3347 @end smallexample
3349 You can either use multiple
3350 strings separated by commas to specify multiple options,
3351 or separate the options with a comma (@samp{,}) within a single string.
3353 The options supported are specific to each target; refer to @ref{x86
3354 Function Attributes}, @ref{PowerPC Function Attributes},
3355 @ref{ARM Function Attributes}, @ref{AArch64 Function Attributes},
3356 @ref{Nios II Function Attributes}, and @ref{S/390 Function Attributes}
3357 for details.
3359 @item target_clones (@var{options})
3360 @cindex @code{target_clones} function attribute
3361 The @code{target_clones} attribute is used to specify that a function
3362 be cloned into multiple versions compiled with different target options
3363 than specified on the command line.  The supported options and restrictions
3364 are the same as for @code{target} attribute.
3366 For instance, on an x86, you could compile a function with
3367 @code{target_clones("sse4.1,avx")}.  GCC creates two function clones,
3368 one compiled with @option{-msse4.1} and another with @option{-mavx}.
3370 On a PowerPC, you can compile a function with
3371 @code{target_clones("cpu=power9,default")}.  GCC will create two
3372 function clones, one compiled with @option{-mcpu=power9} and another
3373 with the default options.  GCC must be configured to use GLIBC 2.23 or
3374 newer in order to use the @code{target_clones} attribute.
3376 It also creates a resolver function (see
3377 the @code{ifunc} attribute above) that dynamically selects a clone
3378 suitable for current architecture.  The resolver is created only if there
3379 is a usage of a function with @code{target_clones} attribute.
3381 @item unused
3382 @cindex @code{unused} function attribute
3383 This attribute, attached to a function, means that the function is meant
3384 to be possibly unused.  GCC does not produce a warning for this
3385 function.
3387 @item used
3388 @cindex @code{used} function attribute
3389 This attribute, attached to a function, means that code must be emitted
3390 for the function even if it appears that the function is not referenced.
3391 This is useful, for example, when the function is referenced only in
3392 inline assembly.
3394 When applied to a member function of a C++ class template, the
3395 attribute also means that the function is instantiated if the
3396 class itself is instantiated.
3398 @item visibility ("@var{visibility_type}")
3399 @cindex @code{visibility} function attribute
3400 This attribute affects the linkage of the declaration to which it is attached.
3401 It can be applied to variables (@pxref{Common Variable Attributes}) and types
3402 (@pxref{Common Type Attributes}) as well as functions.
3404 There are four supported @var{visibility_type} values: default,
3405 hidden, protected or internal visibility.
3407 @smallexample
3408 void __attribute__ ((visibility ("protected")))
3409 f () @{ /* @r{Do something.} */; @}
3410 int i __attribute__ ((visibility ("hidden")));
3411 @end smallexample
3413 The possible values of @var{visibility_type} correspond to the
3414 visibility settings in the ELF gABI.
3416 @table @code
3417 @c keep this list of visibilities in alphabetical order.
3419 @item default
3420 Default visibility is the normal case for the object file format.
3421 This value is available for the visibility attribute to override other
3422 options that may change the assumed visibility of entities.
3424 On ELF, default visibility means that the declaration is visible to other
3425 modules and, in shared libraries, means that the declared entity may be
3426 overridden.
3428 On Darwin, default visibility means that the declaration is visible to
3429 other modules.
3431 Default visibility corresponds to ``external linkage'' in the language.
3433 @item hidden
3434 Hidden visibility indicates that the entity declared has a new
3435 form of linkage, which we call ``hidden linkage''.  Two
3436 declarations of an object with hidden linkage refer to the same object
3437 if they are in the same shared object.
3439 @item internal
3440 Internal visibility is like hidden visibility, but with additional
3441 processor specific semantics.  Unless otherwise specified by the
3442 psABI, GCC defines internal visibility to mean that a function is
3443 @emph{never} called from another module.  Compare this with hidden
3444 functions which, while they cannot be referenced directly by other
3445 modules, can be referenced indirectly via function pointers.  By
3446 indicating that a function cannot be called from outside the module,
3447 GCC may for instance omit the load of a PIC register since it is known
3448 that the calling function loaded the correct value.
3450 @item protected
3451 Protected visibility is like default visibility except that it
3452 indicates that references within the defining module bind to the
3453 definition in that module.  That is, the declared entity cannot be
3454 overridden by another module.
3456 @end table
3458 All visibilities are supported on many, but not all, ELF targets
3459 (supported when the assembler supports the @samp{.visibility}
3460 pseudo-op).  Default visibility is supported everywhere.  Hidden
3461 visibility is supported on Darwin targets.
3463 The visibility attribute should be applied only to declarations that
3464 would otherwise have external linkage.  The attribute should be applied
3465 consistently, so that the same entity should not be declared with
3466 different settings of the attribute.
3468 In C++, the visibility attribute applies to types as well as functions
3469 and objects, because in C++ types have linkage.  A class must not have
3470 greater visibility than its non-static data member types and bases,
3471 and class members default to the visibility of their class.  Also, a
3472 declaration without explicit visibility is limited to the visibility
3473 of its type.
3475 In C++, you can mark member functions and static member variables of a
3476 class with the visibility attribute.  This is useful if you know a
3477 particular method or static member variable should only be used from
3478 one shared object; then you can mark it hidden while the rest of the
3479 class has default visibility.  Care must be taken to avoid breaking
3480 the One Definition Rule; for example, it is usually not useful to mark
3481 an inline method as hidden without marking the whole class as hidden.
3483 A C++ namespace declaration can also have the visibility attribute.
3485 @smallexample
3486 namespace nspace1 __attribute__ ((visibility ("protected")))
3487 @{ /* @r{Do something.} */; @}
3488 @end smallexample
3490 This attribute applies only to the particular namespace body, not to
3491 other definitions of the same namespace; it is equivalent to using
3492 @samp{#pragma GCC visibility} before and after the namespace
3493 definition (@pxref{Visibility Pragmas}).
3495 In C++, if a template argument has limited visibility, this
3496 restriction is implicitly propagated to the template instantiation.
3497 Otherwise, template instantiations and specializations default to the
3498 visibility of their template.
3500 If both the template and enclosing class have explicit visibility, the
3501 visibility from the template is used.
3503 @item warn_unused_result
3504 @cindex @code{warn_unused_result} function attribute
3505 The @code{warn_unused_result} attribute causes a warning to be emitted
3506 if a caller of the function with this attribute does not use its
3507 return value.  This is useful for functions where not checking
3508 the result is either a security problem or always a bug, such as
3509 @code{realloc}.
3511 @smallexample
3512 int fn () __attribute__ ((warn_unused_result));
3513 int foo ()
3515   if (fn () < 0) return -1;
3516   fn ();
3517   return 0;
3519 @end smallexample
3521 @noindent
3522 results in warning on line 5.
3524 @item weak
3525 @cindex @code{weak} function attribute
3526 The @code{weak} attribute causes the declaration to be emitted as a weak
3527 symbol rather than a global.  This is primarily useful in defining
3528 library functions that can be overridden in user code, though it can
3529 also be used with non-function declarations.  Weak symbols are supported
3530 for ELF targets, and also for a.out targets when using the GNU assembler
3531 and linker.
3533 @item weakref
3534 @itemx weakref ("@var{target}")
3535 @cindex @code{weakref} function attribute
3536 The @code{weakref} attribute marks a declaration as a weak reference.
3537 Without arguments, it should be accompanied by an @code{alias} attribute
3538 naming the target symbol.  Optionally, the @var{target} may be given as
3539 an argument to @code{weakref} itself.  In either case, @code{weakref}
3540 implicitly marks the declaration as @code{weak}.  Without a
3541 @var{target}, given as an argument to @code{weakref} or to @code{alias},
3542 @code{weakref} is equivalent to @code{weak}.
3544 @smallexample
3545 static int x() __attribute__ ((weakref ("y")));
3546 /* is equivalent to... */
3547 static int x() __attribute__ ((weak, weakref, alias ("y")));
3548 /* and to... */
3549 static int x() __attribute__ ((weakref));
3550 static int x() __attribute__ ((alias ("y")));
3551 @end smallexample
3553 A weak reference is an alias that does not by itself require a
3554 definition to be given for the target symbol.  If the target symbol is
3555 only referenced through weak references, then it becomes a @code{weak}
3556 undefined symbol.  If it is directly referenced, however, then such
3557 strong references prevail, and a definition is required for the
3558 symbol, not necessarily in the same translation unit.
3560 The effect is equivalent to moving all references to the alias to a
3561 separate translation unit, renaming the alias to the aliased symbol,
3562 declaring it as weak, compiling the two separate translation units and
3563 performing a reloadable link on them.
3565 At present, a declaration to which @code{weakref} is attached can
3566 only be @code{static}.
3569 @end table
3571 @c This is the end of the target-independent attribute table
3573 @node AArch64 Function Attributes
3574 @subsection AArch64 Function Attributes
3576 The following target-specific function attributes are available for the
3577 AArch64 target.  For the most part, these options mirror the behavior of
3578 similar command-line options (@pxref{AArch64 Options}), but on a
3579 per-function basis.
3581 @table @code
3582 @item general-regs-only
3583 @cindex @code{general-regs-only} function attribute, AArch64
3584 Indicates that no floating-point or Advanced SIMD registers should be
3585 used when generating code for this function.  If the function explicitly
3586 uses floating-point code, then the compiler gives an error.  This is
3587 the same behavior as that of the command-line option
3588 @option{-mgeneral-regs-only}.
3590 @item fix-cortex-a53-835769
3591 @cindex @code{fix-cortex-a53-835769} function attribute, AArch64
3592 Indicates that the workaround for the Cortex-A53 erratum 835769 should be
3593 applied to this function.  To explicitly disable the workaround for this
3594 function specify the negated form: @code{no-fix-cortex-a53-835769}.
3595 This corresponds to the behavior of the command line options
3596 @option{-mfix-cortex-a53-835769} and @option{-mno-fix-cortex-a53-835769}.
3598 @item cmodel=
3599 @cindex @code{cmodel=} function attribute, AArch64
3600 Indicates that code should be generated for a particular code model for
3601 this function.  The behavior and permissible arguments are the same as
3602 for the command line option @option{-mcmodel=}.
3604 @item strict-align
3605 @cindex @code{strict-align} function attribute, AArch64
3606 Indicates that the compiler should not assume that unaligned memory references
3607 are handled by the system.  The behavior is the same as for the command-line
3608 option @option{-mstrict-align}.
3610 @item omit-leaf-frame-pointer
3611 @cindex @code{omit-leaf-frame-pointer} function attribute, AArch64
3612 Indicates that the frame pointer should be omitted for a leaf function call.
3613 To keep the frame pointer, the inverse attribute
3614 @code{no-omit-leaf-frame-pointer} can be specified.  These attributes have
3615 the same behavior as the command-line options @option{-momit-leaf-frame-pointer}
3616 and @option{-mno-omit-leaf-frame-pointer}.
3618 @item tls-dialect=
3619 @cindex @code{tls-dialect=} function attribute, AArch64
3620 Specifies the TLS dialect to use for this function.  The behavior and
3621 permissible arguments are the same as for the command-line option
3622 @option{-mtls-dialect=}.
3624 @item arch=
3625 @cindex @code{arch=} function attribute, AArch64
3626 Specifies the architecture version and architectural extensions to use
3627 for this function.  The behavior and permissible arguments are the same as
3628 for the @option{-march=} command-line option.
3630 @item tune=
3631 @cindex @code{tune=} function attribute, AArch64
3632 Specifies the core for which to tune the performance of this function.
3633 The behavior and permissible arguments are the same as for the @option{-mtune=}
3634 command-line option.
3636 @item cpu=
3637 @cindex @code{cpu=} function attribute, AArch64
3638 Specifies the core for which to tune the performance of this function and also
3639 whose architectural features to use.  The behavior and valid arguments are the
3640 same as for the @option{-mcpu=} command-line option.
3642 @item sign-return-address
3643 @cindex @code{sign-return-address} function attribute, AArch64
3644 Select the function scope on which return address signing will be applied.  The
3645 behavior and permissible arguments are the same as for the command-line option
3646 @option{-msign-return-address=}.  The default value is @code{none}.
3648 @end table
3650 The above target attributes can be specified as follows:
3652 @smallexample
3653 __attribute__((target("@var{attr-string}")))
3655 f (int a)
3657   return a + 5;
3659 @end smallexample
3661 where @code{@var{attr-string}} is one of the attribute strings specified above.
3663 Additionally, the architectural extension string may be specified on its
3664 own.  This can be used to turn on and off particular architectural extensions
3665 without having to specify a particular architecture version or core.  Example:
3667 @smallexample
3668 __attribute__((target("+crc+nocrypto")))
3670 foo (int a)
3672   return a + 5;
3674 @end smallexample
3676 In this example @code{target("+crc+nocrypto")} enables the @code{crc}
3677 extension and disables the @code{crypto} extension for the function @code{foo}
3678 without modifying an existing @option{-march=} or @option{-mcpu} option.
3680 Multiple target function attributes can be specified by separating them with
3681 a comma.  For example:
3682 @smallexample
3683 __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
3685 foo (int a)
3687   return a + 5;
3689 @end smallexample
3691 is valid and compiles function @code{foo} for ARMv8-A with @code{crc}
3692 and @code{crypto} extensions and tunes it for @code{cortex-a53}.
3694 @subsubsection Inlining rules
3695 Specifying target attributes on individual functions or performing link-time
3696 optimization across translation units compiled with different target options
3697 can affect function inlining rules:
3699 In particular, a caller function can inline a callee function only if the
3700 architectural features available to the callee are a subset of the features
3701 available to the caller.
3702 For example: A function @code{foo} compiled with @option{-march=armv8-a+crc},
3703 or tagged with the equivalent @code{arch=armv8-a+crc} attribute,
3704 can inline a function @code{bar} compiled with @option{-march=armv8-a+nocrc}
3705 because the all the architectural features that function @code{bar} requires
3706 are available to function @code{foo}.  Conversely, function @code{bar} cannot
3707 inline function @code{foo}.
3709 Additionally inlining a function compiled with @option{-mstrict-align} into a
3710 function compiled without @code{-mstrict-align} is not allowed.
3711 However, inlining a function compiled without @option{-mstrict-align} into a
3712 function compiled with @option{-mstrict-align} is allowed.
3714 Note that CPU tuning options and attributes such as the @option{-mcpu=},
3715 @option{-mtune=} do not inhibit inlining unless the CPU specified by the
3716 @option{-mcpu=} option or the @code{cpu=} attribute conflicts with the
3717 architectural feature rules specified above.
3719 @node ARC Function Attributes
3720 @subsection ARC Function Attributes
3722 These function attributes are supported by the ARC back end:
3724 @table @code
3725 @item interrupt
3726 @cindex @code{interrupt} function attribute, ARC
3727 Use this attribute to indicate
3728 that the specified function is an interrupt handler.  The compiler generates
3729 function entry and exit sequences suitable for use in an interrupt handler
3730 when this attribute is present.
3732 On the ARC, you must specify the kind of interrupt to be handled
3733 in a parameter to the interrupt attribute like this:
3735 @smallexample
3736 void f () __attribute__ ((interrupt ("ilink1")));
3737 @end smallexample
3739 Permissible values for this parameter are: @w{@code{ilink1}} and
3740 @w{@code{ilink2}}.
3742 @item long_call
3743 @itemx medium_call
3744 @itemx short_call
3745 @cindex @code{long_call} function attribute, ARC
3746 @cindex @code{medium_call} function attribute, ARC
3747 @cindex @code{short_call} function attribute, ARC
3748 @cindex indirect calls, ARC
3749 These attributes specify how a particular function is called.
3750 These attributes override the
3751 @option{-mlong-calls} and @option{-mmedium-calls} (@pxref{ARC Options})
3752 command-line switches and @code{#pragma long_calls} settings.
3754 For ARC, a function marked with the @code{long_call} attribute is
3755 always called using register-indirect jump-and-link instructions,
3756 thereby enabling the called function to be placed anywhere within the
3757 32-bit address space.  A function marked with the @code{medium_call}
3758 attribute will always be close enough to be called with an unconditional
3759 branch-and-link instruction, which has a 25-bit offset from
3760 the call site.  A function marked with the @code{short_call}
3761 attribute will always be close enough to be called with a conditional
3762 branch-and-link instruction, which has a 21-bit offset from
3763 the call site.
3764 @end table
3766 @node ARM Function Attributes
3767 @subsection ARM Function Attributes
3769 These function attributes are supported for ARM targets:
3771 @table @code
3772 @item interrupt
3773 @cindex @code{interrupt} function attribute, ARM
3774 Use this attribute to indicate
3775 that the specified function is an interrupt handler.  The compiler generates
3776 function entry and exit sequences suitable for use in an interrupt handler
3777 when this attribute is present.
3779 You can specify the kind of interrupt to be handled by
3780 adding an optional parameter to the interrupt attribute like this:
3782 @smallexample
3783 void f () __attribute__ ((interrupt ("IRQ")));
3784 @end smallexample
3786 @noindent
3787 Permissible values for this parameter are: @code{IRQ}, @code{FIQ},
3788 @code{SWI}, @code{ABORT} and @code{UNDEF}.
3790 On ARMv7-M the interrupt type is ignored, and the attribute means the function
3791 may be called with a word-aligned stack pointer.
3793 @item isr
3794 @cindex @code{isr} function attribute, ARM
3795 Use this attribute on ARM to write Interrupt Service Routines. This is an
3796 alias to the @code{interrupt} attribute above.
3798 @item long_call
3799 @itemx short_call
3800 @cindex @code{long_call} function attribute, ARM
3801 @cindex @code{short_call} function attribute, ARM
3802 @cindex indirect calls, ARM
3803 These attributes specify how a particular function is called.
3804 These attributes override the
3805 @option{-mlong-calls} (@pxref{ARM Options})
3806 command-line switch and @code{#pragma long_calls} settings.  For ARM, the
3807 @code{long_call} attribute indicates that the function might be far
3808 away from the call site and require a different (more expensive)
3809 calling sequence.   The @code{short_call} attribute always places
3810 the offset to the function from the call site into the @samp{BL}
3811 instruction directly.
3813 @item naked
3814 @cindex @code{naked} function attribute, ARM
3815 This attribute allows the compiler to construct the
3816 requisite function declaration, while allowing the body of the
3817 function to be assembly code. The specified function will not have
3818 prologue/epilogue sequences generated by the compiler. Only basic
3819 @code{asm} statements can safely be included in naked functions
3820 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
3821 basic @code{asm} and C code may appear to work, they cannot be
3822 depended upon to work reliably and are not supported.
3824 @item pcs
3825 @cindex @code{pcs} function attribute, ARM
3827 The @code{pcs} attribute can be used to control the calling convention
3828 used for a function on ARM.  The attribute takes an argument that specifies
3829 the calling convention to use.
3831 When compiling using the AAPCS ABI (or a variant of it) then valid
3832 values for the argument are @code{"aapcs"} and @code{"aapcs-vfp"}.  In
3833 order to use a variant other than @code{"aapcs"} then the compiler must
3834 be permitted to use the appropriate co-processor registers (i.e., the
3835 VFP registers must be available in order to use @code{"aapcs-vfp"}).
3836 For example,
3838 @smallexample
3839 /* Argument passed in r0, and result returned in r0+r1.  */
3840 double f2d (float) __attribute__((pcs("aapcs")));
3841 @end smallexample
3843 Variadic functions always use the @code{"aapcs"} calling convention and
3844 the compiler rejects attempts to specify an alternative.
3846 @item target (@var{options})
3847 @cindex @code{target} function attribute
3848 As discussed in @ref{Common Function Attributes}, this attribute 
3849 allows specification of target-specific compilation options.
3851 On ARM, the following options are allowed:
3853 @table @samp
3854 @item thumb
3855 @cindex @code{target("thumb")} function attribute, ARM
3856 Force code generation in the Thumb (T16/T32) ISA, depending on the
3857 architecture level.
3859 @item arm
3860 @cindex @code{target("arm")} function attribute, ARM
3861 Force code generation in the ARM (A32) ISA.
3863 Functions from different modes can be inlined in the caller's mode.
3865 @item fpu=
3866 @cindex @code{target("fpu=")} function attribute, ARM
3867 Specifies the fpu for which to tune the performance of this function.
3868 The behavior and permissible arguments are the same as for the @option{-mfpu=}
3869 command-line option.
3871 @item arch=
3872 @cindex @code{arch=} function attribute, ARM
3873 Specifies the architecture version and architectural extensions to use
3874 for this function.  The behavior and permissible arguments are the same as
3875 for the @option{-march=} command-line option.
3877 The above target attributes can be specified as follows:
3879 @smallexample
3880 __attribute__((target("arch=armv8-a+crc")))
3882 f (int a)
3884   return a + 5;
3886 @end smallexample
3888 Additionally, the architectural extension string may be specified on its
3889 own.  This can be used to turn on and off particular architectural extensions
3890 without having to specify a particular architecture version or core.  Example:
3892 @smallexample
3893 __attribute__((target("+crc+nocrypto")))
3895 foo (int a)
3897   return a + 5;
3899 @end smallexample
3901 In this example @code{target("+crc+nocrypto")} enables the @code{crc}
3902 extension and disables the @code{crypto} extension for the function @code{foo}
3903 without modifying an existing @option{-march=} or @option{-mcpu} option.
3905 @end table
3907 @end table
3909 @node AVR Function Attributes
3910 @subsection AVR Function Attributes
3912 These function attributes are supported by the AVR back end:
3914 @table @code
3915 @item interrupt
3916 @cindex @code{interrupt} function attribute, AVR
3917 Use this attribute to indicate
3918 that the specified function is an interrupt handler.  The compiler generates
3919 function entry and exit sequences suitable for use in an interrupt handler
3920 when this attribute is present.
3922 On the AVR, the hardware globally disables interrupts when an
3923 interrupt is executed.  The first instruction of an interrupt handler
3924 declared with this attribute is a @code{SEI} instruction to
3925 re-enable interrupts.  See also the @code{signal} function attribute
3926 that does not insert a @code{SEI} instruction.  If both @code{signal} and
3927 @code{interrupt} are specified for the same function, @code{signal}
3928 is silently ignored.
3930 @item naked
3931 @cindex @code{naked} function attribute, AVR
3932 This attribute allows the compiler to construct the
3933 requisite function declaration, while allowing the body of the
3934 function to be assembly code. The specified function will not have
3935 prologue/epilogue sequences generated by the compiler. Only basic
3936 @code{asm} statements can safely be included in naked functions
3937 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
3938 basic @code{asm} and C code may appear to work, they cannot be
3939 depended upon to work reliably and are not supported.
3941 @item no_gccisr
3942 @cindex @code{no_gccisr} function attribute, AVR
3943 Do not use @code{__gcc_isr} pseudo instructions in a function with
3944 the @code{interrupt} or @code{signal} attribute aka. interrupt
3945 service routine (ISR).
3946 Use this attribute if the preamble of the ISR prologue should always read
3947 @example
3948 push  __zero_reg__
3949 push  __tmp_reg__
3950 in    __tmp_reg__, __SREG__
3951 push  __tmp_reg__
3952 clr   __zero_reg__
3953 @end example
3954 and accordingly for the postamble of the epilogue --- no matter whether
3955 the mentioned registers are actually used in the ISR or not.
3956 Situations where you might want to use this attribute include:
3957 @itemize @bullet
3958 @item
3959 Code that (effectively) clobbers bits of @code{SREG} other than the
3960 @code{I}-flag by writing to the memory location of @code{SREG}.
3961 @item
3962 Code that uses inline assembler to jump to a different function which
3963 expects (parts of) the prologue code as outlined above to be present.
3964 @end itemize
3965 To disable @code{__gcc_isr} generation for the whole compilation unit,
3966 there is option @option{-mno-gas-isr-prologues}, @pxref{AVR Options}.
3968 @item OS_main
3969 @itemx OS_task
3970 @cindex @code{OS_main} function attribute, AVR
3971 @cindex @code{OS_task} function attribute, AVR
3972 On AVR, functions with the @code{OS_main} or @code{OS_task} attribute
3973 do not save/restore any call-saved register in their prologue/epilogue.
3975 The @code{OS_main} attribute can be used when there @emph{is
3976 guarantee} that interrupts are disabled at the time when the function
3977 is entered.  This saves resources when the stack pointer has to be
3978 changed to set up a frame for local variables.
3980 The @code{OS_task} attribute can be used when there is @emph{no
3981 guarantee} that interrupts are disabled at that time when the function
3982 is entered like for, e@.g@. task functions in a multi-threading operating
3983 system. In that case, changing the stack pointer register is
3984 guarded by save/clear/restore of the global interrupt enable flag.
3986 The differences to the @code{naked} function attribute are:
3987 @itemize @bullet
3988 @item @code{naked} functions do not have a return instruction whereas 
3989 @code{OS_main} and @code{OS_task} functions have a @code{RET} or
3990 @code{RETI} return instruction.
3991 @item @code{naked} functions do not set up a frame for local variables
3992 or a frame pointer whereas @code{OS_main} and @code{OS_task} do this
3993 as needed.
3994 @end itemize
3996 @item signal
3997 @cindex @code{signal} function attribute, AVR
3998 Use this attribute on the AVR to indicate that the specified
3999 function is an interrupt handler.  The compiler generates function
4000 entry and exit sequences suitable for use in an interrupt handler when this
4001 attribute is present.
4003 See also the @code{interrupt} function attribute. 
4005 The AVR hardware globally disables interrupts when an interrupt is executed.
4006 Interrupt handler functions defined with the @code{signal} attribute
4007 do not re-enable interrupts.  It is save to enable interrupts in a
4008 @code{signal} handler.  This ``save'' only applies to the code
4009 generated by the compiler and not to the IRQ layout of the
4010 application which is responsibility of the application.
4012 If both @code{signal} and @code{interrupt} are specified for the same
4013 function, @code{signal} is silently ignored.
4014 @end table
4016 @node Blackfin Function Attributes
4017 @subsection Blackfin Function Attributes
4019 These function attributes are supported by the Blackfin back end:
4021 @table @code
4023 @item exception_handler
4024 @cindex @code{exception_handler} function attribute
4025 @cindex exception handler functions, Blackfin
4026 Use this attribute on the Blackfin to indicate that the specified function
4027 is an exception handler.  The compiler generates function entry and
4028 exit sequences suitable for use in an exception handler when this
4029 attribute is present.
4031 @item interrupt_handler
4032 @cindex @code{interrupt_handler} function attribute, Blackfin
4033 Use this attribute to
4034 indicate that the specified function is an interrupt handler.  The compiler
4035 generates function entry and exit sequences suitable for use in an
4036 interrupt handler when this attribute is present.
4038 @item kspisusp
4039 @cindex @code{kspisusp} function attribute, Blackfin
4040 @cindex User stack pointer in interrupts on the Blackfin
4041 When used together with @code{interrupt_handler}, @code{exception_handler}
4042 or @code{nmi_handler}, code is generated to load the stack pointer
4043 from the USP register in the function prologue.
4045 @item l1_text
4046 @cindex @code{l1_text} function attribute, Blackfin
4047 This attribute specifies a function to be placed into L1 Instruction
4048 SRAM@. The function is put into a specific section named @code{.l1.text}.
4049 With @option{-mfdpic}, function calls with a such function as the callee
4050 or caller uses inlined PLT.
4052 @item l2
4053 @cindex @code{l2} function attribute, Blackfin
4054 This attribute specifies a function to be placed into L2
4055 SRAM. The function is put into a specific section named
4056 @code{.l2.text}. With @option{-mfdpic}, callers of such functions use
4057 an inlined PLT.
4059 @item longcall
4060 @itemx shortcall
4061 @cindex indirect calls, Blackfin
4062 @cindex @code{longcall} function attribute, Blackfin
4063 @cindex @code{shortcall} function attribute, Blackfin
4064 The @code{longcall} attribute
4065 indicates that the function might be far away from the call site and
4066 require a different (more expensive) calling sequence.  The
4067 @code{shortcall} attribute indicates that the function is always close
4068 enough for the shorter calling sequence to be used.  These attributes
4069 override the @option{-mlongcall} switch.
4071 @item nesting
4072 @cindex @code{nesting} function attribute, Blackfin
4073 @cindex Allow nesting in an interrupt handler on the Blackfin processor
4074 Use this attribute together with @code{interrupt_handler},
4075 @code{exception_handler} or @code{nmi_handler} to indicate that the function
4076 entry code should enable nested interrupts or exceptions.
4078 @item nmi_handler
4079 @cindex @code{nmi_handler} function attribute, Blackfin
4080 @cindex NMI handler functions on the Blackfin processor
4081 Use this attribute on the Blackfin to indicate that the specified function
4082 is an NMI handler.  The compiler generates function entry and
4083 exit sequences suitable for use in an NMI handler when this
4084 attribute is present.
4086 @item saveall
4087 @cindex @code{saveall} function attribute, Blackfin
4088 @cindex save all registers on the Blackfin
4089 Use this attribute to indicate that
4090 all registers except the stack pointer should be saved in the prologue
4091 regardless of whether they are used or not.
4092 @end table
4094 @node CR16 Function Attributes
4095 @subsection CR16 Function Attributes
4097 These function attributes are supported by the CR16 back end:
4099 @table @code
4100 @item interrupt
4101 @cindex @code{interrupt} function attribute, CR16
4102 Use this attribute to indicate
4103 that the specified function is an interrupt handler.  The compiler generates
4104 function entry and exit sequences suitable for use in an interrupt handler
4105 when this attribute is present.
4106 @end table
4108 @node Epiphany Function Attributes
4109 @subsection Epiphany Function Attributes
4111 These function attributes are supported by the Epiphany back end:
4113 @table @code
4114 @item disinterrupt
4115 @cindex @code{disinterrupt} function attribute, Epiphany
4116 This attribute causes the compiler to emit
4117 instructions to disable interrupts for the duration of the given
4118 function.
4120 @item forwarder_section
4121 @cindex @code{forwarder_section} function attribute, Epiphany
4122 This attribute modifies the behavior of an interrupt handler.
4123 The interrupt handler may be in external memory which cannot be
4124 reached by a branch instruction, so generate a local memory trampoline
4125 to transfer control.  The single parameter identifies the section where
4126 the trampoline is placed.
4128 @item interrupt
4129 @cindex @code{interrupt} function attribute, Epiphany
4130 Use this attribute to indicate
4131 that the specified function is an interrupt handler.  The compiler generates
4132 function entry and exit sequences suitable for use in an interrupt handler
4133 when this attribute is present.  It may also generate
4134 a special section with code to initialize the interrupt vector table.
4136 On Epiphany targets one or more optional parameters can be added like this:
4138 @smallexample
4139 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
4140 @end smallexample
4142 Permissible values for these parameters are: @w{@code{reset}},
4143 @w{@code{software_exception}}, @w{@code{page_miss}},
4144 @w{@code{timer0}}, @w{@code{timer1}}, @w{@code{message}},
4145 @w{@code{dma0}}, @w{@code{dma1}}, @w{@code{wand}} and @w{@code{swi}}.
4146 Multiple parameters indicate that multiple entries in the interrupt
4147 vector table should be initialized for this function, i.e.@: for each
4148 parameter @w{@var{name}}, a jump to the function is emitted in
4149 the section @w{ivt_entry_@var{name}}.  The parameter(s) may be omitted
4150 entirely, in which case no interrupt vector table entry is provided.
4152 Note that interrupts are enabled inside the function
4153 unless the @code{disinterrupt} attribute is also specified.
4155 The following examples are all valid uses of these attributes on
4156 Epiphany targets:
4157 @smallexample
4158 void __attribute__ ((interrupt)) universal_handler ();
4159 void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
4160 void __attribute__ ((interrupt ("dma0, dma1"))) 
4161   universal_dma_handler ();
4162 void __attribute__ ((interrupt ("timer0"), disinterrupt))
4163   fast_timer_handler ();
4164 void __attribute__ ((interrupt ("dma0, dma1"), 
4165                      forwarder_section ("tramp")))
4166   external_dma_handler ();
4167 @end smallexample
4169 @item long_call
4170 @itemx short_call
4171 @cindex @code{long_call} function attribute, Epiphany
4172 @cindex @code{short_call} function attribute, Epiphany
4173 @cindex indirect calls, Epiphany
4174 These attributes specify how a particular function is called.
4175 These attributes override the
4176 @option{-mlong-calls} (@pxref{Adapteva Epiphany Options})
4177 command-line switch and @code{#pragma long_calls} settings.
4178 @end table
4181 @node H8/300 Function Attributes
4182 @subsection H8/300 Function Attributes
4184 These function attributes are available for H8/300 targets:
4186 @table @code
4187 @item function_vector
4188 @cindex @code{function_vector} function attribute, H8/300
4189 Use this attribute on the H8/300, H8/300H, and H8S to indicate 
4190 that the specified function should be called through the function vector.
4191 Calling a function through the function vector reduces code size; however,
4192 the function vector has a limited size (maximum 128 entries on the H8/300
4193 and 64 entries on the H8/300H and H8S)
4194 and shares space with the interrupt vector.
4196 @item interrupt_handler
4197 @cindex @code{interrupt_handler} function attribute, H8/300
4198 Use this attribute on the H8/300, H8/300H, and H8S to
4199 indicate that the specified function is an interrupt handler.  The compiler
4200 generates function entry and exit sequences suitable for use in an
4201 interrupt handler when this attribute is present.
4203 @item saveall
4204 @cindex @code{saveall} function attribute, H8/300
4205 @cindex save all registers on the H8/300, H8/300H, and H8S
4206 Use this attribute on the H8/300, H8/300H, and H8S to indicate that
4207 all registers except the stack pointer should be saved in the prologue
4208 regardless of whether they are used or not.
4209 @end table
4211 @node IA-64 Function Attributes
4212 @subsection IA-64 Function Attributes
4214 These function attributes are supported on IA-64 targets:
4216 @table @code
4217 @item syscall_linkage
4218 @cindex @code{syscall_linkage} function attribute, IA-64
4219 This attribute is used to modify the IA-64 calling convention by marking
4220 all input registers as live at all function exits.  This makes it possible
4221 to restart a system call after an interrupt without having to save/restore
4222 the input registers.  This also prevents kernel data from leaking into
4223 application code.
4225 @item version_id
4226 @cindex @code{version_id} function attribute, IA-64
4227 This IA-64 HP-UX attribute, attached to a global variable or function, renames a
4228 symbol to contain a version string, thus allowing for function level
4229 versioning.  HP-UX system header files may use function level versioning
4230 for some system calls.
4232 @smallexample
4233 extern int foo () __attribute__((version_id ("20040821")));
4234 @end smallexample
4236 @noindent
4237 Calls to @code{foo} are mapped to calls to @code{foo@{20040821@}}.
4238 @end table
4240 @node M32C Function Attributes
4241 @subsection M32C Function Attributes
4243 These function attributes are supported by the M32C back end:
4245 @table @code
4246 @item bank_switch
4247 @cindex @code{bank_switch} function attribute, M32C
4248 When added to an interrupt handler with the M32C port, causes the
4249 prologue and epilogue to use bank switching to preserve the registers
4250 rather than saving them on the stack.
4252 @item fast_interrupt
4253 @cindex @code{fast_interrupt} function attribute, M32C
4254 Use this attribute on the M32C port to indicate that the specified
4255 function is a fast interrupt handler.  This is just like the
4256 @code{interrupt} attribute, except that @code{freit} is used to return
4257 instead of @code{reit}.
4259 @item function_vector
4260 @cindex @code{function_vector} function attribute, M16C/M32C
4261 On M16C/M32C targets, the @code{function_vector} attribute declares a
4262 special page subroutine call function. Use of this attribute reduces
4263 the code size by 2 bytes for each call generated to the
4264 subroutine. The argument to the attribute is the vector number entry
4265 from the special page vector table which contains the 16 low-order
4266 bits of the subroutine's entry address. Each vector table has special
4267 page number (18 to 255) that is used in @code{jsrs} instructions.
4268 Jump addresses of the routines are generated by adding 0x0F0000 (in
4269 case of M16C targets) or 0xFF0000 (in case of M32C targets), to the
4270 2-byte addresses set in the vector table. Therefore you need to ensure
4271 that all the special page vector routines should get mapped within the
4272 address range 0x0F0000 to 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF
4273 (for M32C).
4275 In the following example 2 bytes are saved for each call to
4276 function @code{foo}.
4278 @smallexample
4279 void foo (void) __attribute__((function_vector(0x18)));
4280 void foo (void)
4284 void bar (void)
4286     foo();
4288 @end smallexample
4290 If functions are defined in one file and are called in another file,
4291 then be sure to write this declaration in both files.
4293 This attribute is ignored for R8C target.
4295 @item interrupt
4296 @cindex @code{interrupt} function attribute, M32C
4297 Use this attribute to indicate
4298 that the specified function is an interrupt handler.  The compiler generates
4299 function entry and exit sequences suitable for use in an interrupt handler
4300 when this attribute is present.
4301 @end table
4303 @node M32R/D Function Attributes
4304 @subsection M32R/D Function Attributes
4306 These function attributes are supported by the M32R/D back end:
4308 @table @code
4309 @item interrupt
4310 @cindex @code{interrupt} function attribute, M32R/D
4311 Use this attribute to indicate
4312 that the specified function is an interrupt handler.  The compiler generates
4313 function entry and exit sequences suitable for use in an interrupt handler
4314 when this attribute is present.
4316 @item model (@var{model-name})
4317 @cindex @code{model} function attribute, M32R/D
4318 @cindex function addressability on the M32R/D
4320 On the M32R/D, use this attribute to set the addressability of an
4321 object, and of the code generated for a function.  The identifier
4322 @var{model-name} is one of @code{small}, @code{medium}, or
4323 @code{large}, representing each of the code models.
4325 Small model objects live in the lower 16MB of memory (so that their
4326 addresses can be loaded with the @code{ld24} instruction), and are
4327 callable with the @code{bl} instruction.
4329 Medium model objects may live anywhere in the 32-bit address space (the
4330 compiler generates @code{seth/add3} instructions to load their addresses),
4331 and are callable with the @code{bl} instruction.
4333 Large model objects may live anywhere in the 32-bit address space (the
4334 compiler generates @code{seth/add3} instructions to load their addresses),
4335 and may not be reachable with the @code{bl} instruction (the compiler
4336 generates the much slower @code{seth/add3/jl} instruction sequence).
4337 @end table
4339 @node m68k Function Attributes
4340 @subsection m68k Function Attributes
4342 These function attributes are supported by the m68k back end:
4344 @table @code
4345 @item interrupt
4346 @itemx interrupt_handler
4347 @cindex @code{interrupt} function attribute, m68k
4348 @cindex @code{interrupt_handler} function attribute, m68k
4349 Use this attribute to
4350 indicate that the specified function is an interrupt handler.  The compiler
4351 generates function entry and exit sequences suitable for use in an
4352 interrupt handler when this attribute is present.  Either name may be used.
4354 @item interrupt_thread
4355 @cindex @code{interrupt_thread} function attribute, fido
4356 Use this attribute on fido, a subarchitecture of the m68k, to indicate
4357 that the specified function is an interrupt handler that is designed
4358 to run as a thread.  The compiler omits generate prologue/epilogue
4359 sequences and replaces the return instruction with a @code{sleep}
4360 instruction.  This attribute is available only on fido.
4361 @end table
4363 @node MCORE Function Attributes
4364 @subsection MCORE Function Attributes
4366 These function attributes are supported by the MCORE back end:
4368 @table @code
4369 @item naked
4370 @cindex @code{naked} function attribute, MCORE
4371 This attribute allows the compiler to construct the
4372 requisite function declaration, while allowing the body of the
4373 function to be assembly code. The specified function will not have
4374 prologue/epilogue sequences generated by the compiler. Only basic
4375 @code{asm} statements can safely be included in naked functions
4376 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
4377 basic @code{asm} and C code may appear to work, they cannot be
4378 depended upon to work reliably and are not supported.
4379 @end table
4381 @node MeP Function Attributes
4382 @subsection MeP Function Attributes
4384 These function attributes are supported by the MeP back end:
4386 @table @code
4387 @item disinterrupt
4388 @cindex @code{disinterrupt} function attribute, MeP
4389 On MeP targets, this attribute causes the compiler to emit
4390 instructions to disable interrupts for the duration of the given
4391 function.
4393 @item interrupt
4394 @cindex @code{interrupt} function attribute, MeP
4395 Use this attribute to indicate
4396 that the specified function is an interrupt handler.  The compiler generates
4397 function entry and exit sequences suitable for use in an interrupt handler
4398 when this attribute is present.
4400 @item near
4401 @cindex @code{near} function attribute, MeP
4402 This attribute causes the compiler to assume the called
4403 function is close enough to use the normal calling convention,
4404 overriding the @option{-mtf} command-line option.
4406 @item far
4407 @cindex @code{far} function attribute, MeP
4408 On MeP targets this causes the compiler to use a calling convention
4409 that assumes the called function is too far away for the built-in
4410 addressing modes.
4412 @item vliw
4413 @cindex @code{vliw} function attribute, MeP
4414 The @code{vliw} attribute tells the compiler to emit
4415 instructions in VLIW mode instead of core mode.  Note that this
4416 attribute is not allowed unless a VLIW coprocessor has been configured
4417 and enabled through command-line options.
4418 @end table
4420 @node MicroBlaze Function Attributes
4421 @subsection MicroBlaze Function Attributes
4423 These function attributes are supported on MicroBlaze targets:
4425 @table @code
4426 @item save_volatiles
4427 @cindex @code{save_volatiles} function attribute, MicroBlaze
4428 Use this attribute to indicate that the function is
4429 an interrupt handler.  All volatile registers (in addition to non-volatile
4430 registers) are saved in the function prologue.  If the function is a leaf
4431 function, only volatiles used by the function are saved.  A normal function
4432 return is generated instead of a return from interrupt.
4434 @item break_handler
4435 @cindex @code{break_handler} function attribute, MicroBlaze
4436 @cindex break handler functions
4437 Use this attribute to indicate that
4438 the specified function is a break handler.  The compiler generates function
4439 entry and exit sequences suitable for use in an break handler when this
4440 attribute is present. The return from @code{break_handler} is done through
4441 the @code{rtbd} instead of @code{rtsd}.
4443 @smallexample
4444 void f () __attribute__ ((break_handler));
4445 @end smallexample
4447 @item interrupt_handler
4448 @itemx fast_interrupt 
4449 @cindex @code{interrupt_handler} function attribute, MicroBlaze
4450 @cindex @code{fast_interrupt} function attribute, MicroBlaze
4451 These attributes indicate that the specified function is an interrupt
4452 handler.  Use the @code{fast_interrupt} attribute to indicate handlers
4453 used in low-latency interrupt mode, and @code{interrupt_handler} for
4454 interrupts that do not use low-latency handlers.  In both cases, GCC
4455 emits appropriate prologue code and generates a return from the handler
4456 using @code{rtid} instead of @code{rtsd}.
4457 @end table
4459 @node Microsoft Windows Function Attributes
4460 @subsection Microsoft Windows Function Attributes
4462 The following attributes are available on Microsoft Windows and Symbian OS
4463 targets.
4465 @table @code
4466 @item dllexport
4467 @cindex @code{dllexport} function attribute
4468 @cindex @code{__declspec(dllexport)}
4469 On Microsoft Windows targets and Symbian OS targets the
4470 @code{dllexport} attribute causes the compiler to provide a global
4471 pointer to a pointer in a DLL, so that it can be referenced with the
4472 @code{dllimport} attribute.  On Microsoft Windows targets, the pointer
4473 name is formed by combining @code{_imp__} and the function or variable
4474 name.
4476 You can use @code{__declspec(dllexport)} as a synonym for
4477 @code{__attribute__ ((dllexport))} for compatibility with other
4478 compilers.
4480 On systems that support the @code{visibility} attribute, this
4481 attribute also implies ``default'' visibility.  It is an error to
4482 explicitly specify any other visibility.
4484 GCC's default behavior is to emit all inline functions with the
4485 @code{dllexport} attribute.  Since this can cause object file-size bloat,
4486 you can use @option{-fno-keep-inline-dllexport}, which tells GCC to
4487 ignore the attribute for inlined functions unless the 
4488 @option{-fkeep-inline-functions} flag is used instead.
4490 The attribute is ignored for undefined symbols.
4492 When applied to C++ classes, the attribute marks defined non-inlined
4493 member functions and static data members as exports.  Static consts
4494 initialized in-class are not marked unless they are also defined
4495 out-of-class.
4497 For Microsoft Windows targets there are alternative methods for
4498 including the symbol in the DLL's export table such as using a
4499 @file{.def} file with an @code{EXPORTS} section or, with GNU ld, using
4500 the @option{--export-all} linker flag.
4502 @item dllimport
4503 @cindex @code{dllimport} function attribute
4504 @cindex @code{__declspec(dllimport)}
4505 On Microsoft Windows and Symbian OS targets, the @code{dllimport}
4506 attribute causes the compiler to reference a function or variable via
4507 a global pointer to a pointer that is set up by the DLL exporting the
4508 symbol.  The attribute implies @code{extern}.  On Microsoft Windows
4509 targets, the pointer name is formed by combining @code{_imp__} and the
4510 function or variable name.
4512 You can use @code{__declspec(dllimport)} as a synonym for
4513 @code{__attribute__ ((dllimport))} for compatibility with other
4514 compilers.
4516 On systems that support the @code{visibility} attribute, this
4517 attribute also implies ``default'' visibility.  It is an error to
4518 explicitly specify any other visibility.
4520 Currently, the attribute is ignored for inlined functions.  If the
4521 attribute is applied to a symbol @emph{definition}, an error is reported.
4522 If a symbol previously declared @code{dllimport} is later defined, the
4523 attribute is ignored in subsequent references, and a warning is emitted.
4524 The attribute is also overridden by a subsequent declaration as
4525 @code{dllexport}.
4527 When applied to C++ classes, the attribute marks non-inlined
4528 member functions and static data members as imports.  However, the
4529 attribute is ignored for virtual methods to allow creation of vtables
4530 using thunks.
4532 On the SH Symbian OS target the @code{dllimport} attribute also has
4533 another affect---it can cause the vtable and run-time type information
4534 for a class to be exported.  This happens when the class has a
4535 dllimported constructor or a non-inline, non-pure virtual function
4536 and, for either of those two conditions, the class also has an inline
4537 constructor or destructor and has a key function that is defined in
4538 the current translation unit.
4540 For Microsoft Windows targets the use of the @code{dllimport}
4541 attribute on functions is not necessary, but provides a small
4542 performance benefit by eliminating a thunk in the DLL@.  The use of the
4543 @code{dllimport} attribute on imported variables can be avoided by passing the
4544 @option{--enable-auto-import} switch to the GNU linker.  As with
4545 functions, using the attribute for a variable eliminates a thunk in
4546 the DLL@.
4548 One drawback to using this attribute is that a pointer to a
4549 @emph{variable} marked as @code{dllimport} cannot be used as a constant
4550 address. However, a pointer to a @emph{function} with the
4551 @code{dllimport} attribute can be used as a constant initializer; in
4552 this case, the address of a stub function in the import lib is
4553 referenced.  On Microsoft Windows targets, the attribute can be disabled
4554 for functions by setting the @option{-mnop-fun-dllimport} flag.
4555 @end table
4557 @node MIPS Function Attributes
4558 @subsection MIPS Function Attributes
4560 These function attributes are supported by the MIPS back end:
4562 @table @code
4563 @item interrupt
4564 @cindex @code{interrupt} function attribute, MIPS
4565 Use this attribute to indicate that the specified function is an interrupt
4566 handler.  The compiler generates function entry and exit sequences suitable
4567 for use in an interrupt handler when this attribute is present.
4568 An optional argument is supported for the interrupt attribute which allows
4569 the interrupt mode to be described.  By default GCC assumes the external
4570 interrupt controller (EIC) mode is in use, this can be explicitly set using
4571 @code{eic}.  When interrupts are non-masked then the requested Interrupt
4572 Priority Level (IPL) is copied to the current IPL which has the effect of only
4573 enabling higher priority interrupts.  To use vectored interrupt mode use
4574 the argument @code{vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]}, this will change
4575 the behavior of the non-masked interrupt support and GCC will arrange to mask
4576 all interrupts from sw0 up to and including the specified interrupt vector.
4578 You can use the following attributes to modify the behavior
4579 of an interrupt handler:
4580 @table @code
4581 @item use_shadow_register_set
4582 @cindex @code{use_shadow_register_set} function attribute, MIPS
4583 Assume that the handler uses a shadow register set, instead of
4584 the main general-purpose registers.  An optional argument @code{intstack} is
4585 supported to indicate that the shadow register set contains a valid stack
4586 pointer.
4588 @item keep_interrupts_masked
4589 @cindex @code{keep_interrupts_masked} function attribute, MIPS
4590 Keep interrupts masked for the whole function.  Without this attribute,
4591 GCC tries to reenable interrupts for as much of the function as it can.
4593 @item use_debug_exception_return
4594 @cindex @code{use_debug_exception_return} function attribute, MIPS
4595 Return using the @code{deret} instruction.  Interrupt handlers that don't
4596 have this attribute return using @code{eret} instead.
4597 @end table
4599 You can use any combination of these attributes, as shown below:
4600 @smallexample
4601 void __attribute__ ((interrupt)) v0 ();
4602 void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
4603 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
4604 void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
4605 void __attribute__ ((interrupt, use_shadow_register_set,
4606                      keep_interrupts_masked)) v4 ();
4607 void __attribute__ ((interrupt, use_shadow_register_set,
4608                      use_debug_exception_return)) v5 ();
4609 void __attribute__ ((interrupt, keep_interrupts_masked,
4610                      use_debug_exception_return)) v6 ();
4611 void __attribute__ ((interrupt, use_shadow_register_set,
4612                      keep_interrupts_masked,
4613                      use_debug_exception_return)) v7 ();
4614 void __attribute__ ((interrupt("eic"))) v8 ();
4615 void __attribute__ ((interrupt("vector=hw3"))) v9 ();
4616 @end smallexample
4618 @item long_call
4619 @itemx short_call
4620 @itemx near
4621 @itemx far
4622 @cindex indirect calls, MIPS
4623 @cindex @code{long_call} function attribute, MIPS
4624 @cindex @code{short_call} function attribute, MIPS
4625 @cindex @code{near} function attribute, MIPS
4626 @cindex @code{far} function attribute, MIPS
4627 These attributes specify how a particular function is called on MIPS@.
4628 The attributes override the @option{-mlong-calls} (@pxref{MIPS Options})
4629 command-line switch.  The @code{long_call} and @code{far} attributes are
4630 synonyms, and cause the compiler to always call
4631 the function by first loading its address into a register, and then using
4632 the contents of that register.  The @code{short_call} and @code{near}
4633 attributes are synonyms, and have the opposite
4634 effect; they specify that non-PIC calls should be made using the more
4635 efficient @code{jal} instruction.
4637 @item mips16
4638 @itemx nomips16
4639 @cindex @code{mips16} function attribute, MIPS
4640 @cindex @code{nomips16} function attribute, MIPS
4642 On MIPS targets, you can use the @code{mips16} and @code{nomips16}
4643 function attributes to locally select or turn off MIPS16 code generation.
4644 A function with the @code{mips16} attribute is emitted as MIPS16 code,
4645 while MIPS16 code generation is disabled for functions with the
4646 @code{nomips16} attribute.  These attributes override the
4647 @option{-mips16} and @option{-mno-mips16} options on the command line
4648 (@pxref{MIPS Options}).
4650 When compiling files containing mixed MIPS16 and non-MIPS16 code, the
4651 preprocessor symbol @code{__mips16} reflects the setting on the command line,
4652 not that within individual functions.  Mixed MIPS16 and non-MIPS16 code
4653 may interact badly with some GCC extensions such as @code{__builtin_apply}
4654 (@pxref{Constructing Calls}).
4656 @item micromips, MIPS
4657 @itemx nomicromips, MIPS
4658 @cindex @code{micromips} function attribute
4659 @cindex @code{nomicromips} function attribute
4661 On MIPS targets, you can use the @code{micromips} and @code{nomicromips}
4662 function attributes to locally select or turn off microMIPS code generation.
4663 A function with the @code{micromips} attribute is emitted as microMIPS code,
4664 while microMIPS code generation is disabled for functions with the
4665 @code{nomicromips} attribute.  These attributes override the
4666 @option{-mmicromips} and @option{-mno-micromips} options on the command line
4667 (@pxref{MIPS Options}).
4669 When compiling files containing mixed microMIPS and non-microMIPS code, the
4670 preprocessor symbol @code{__mips_micromips} reflects the setting on the
4671 command line,
4672 not that within individual functions.  Mixed microMIPS and non-microMIPS code
4673 may interact badly with some GCC extensions such as @code{__builtin_apply}
4674 (@pxref{Constructing Calls}).
4676 @item nocompression
4677 @cindex @code{nocompression} function attribute, MIPS
4678 On MIPS targets, you can use the @code{nocompression} function attribute
4679 to locally turn off MIPS16 and microMIPS code generation.  This attribute
4680 overrides the @option{-mips16} and @option{-mmicromips} options on the
4681 command line (@pxref{MIPS Options}).
4682 @end table
4684 @node MSP430 Function Attributes
4685 @subsection MSP430 Function Attributes
4687 These function attributes are supported by the MSP430 back end:
4689 @table @code
4690 @item critical
4691 @cindex @code{critical} function attribute, MSP430
4692 Critical functions disable interrupts upon entry and restore the
4693 previous interrupt state upon exit.  Critical functions cannot also
4694 have the @code{naked} or @code{reentrant} attributes.  They can have
4695 the @code{interrupt} attribute.
4697 @item interrupt
4698 @cindex @code{interrupt} function attribute, MSP430
4699 Use this attribute to indicate
4700 that the specified function is an interrupt handler.  The compiler generates
4701 function entry and exit sequences suitable for use in an interrupt handler
4702 when this attribute is present.
4704 You can provide an argument to the interrupt
4705 attribute which specifies a name or number.  If the argument is a
4706 number it indicates the slot in the interrupt vector table (0 - 31) to
4707 which this handler should be assigned.  If the argument is a name it
4708 is treated as a symbolic name for the vector slot.  These names should
4709 match up with appropriate entries in the linker script.  By default
4710 the names @code{watchdog} for vector 26, @code{nmi} for vector 30 and
4711 @code{reset} for vector 31 are recognized.
4713 @item naked
4714 @cindex @code{naked} function attribute, MSP430
4715 This attribute allows the compiler to construct the
4716 requisite function declaration, while allowing the body of the
4717 function to be assembly code. The specified function will not have
4718 prologue/epilogue sequences generated by the compiler. Only basic
4719 @code{asm} statements can safely be included in naked functions
4720 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
4721 basic @code{asm} and C code may appear to work, they cannot be
4722 depended upon to work reliably and are not supported.
4724 @item reentrant
4725 @cindex @code{reentrant} function attribute, MSP430
4726 Reentrant functions disable interrupts upon entry and enable them
4727 upon exit.  Reentrant functions cannot also have the @code{naked}
4728 or @code{critical} attributes.  They can have the @code{interrupt}
4729 attribute.
4731 @item wakeup
4732 @cindex @code{wakeup} function attribute, MSP430
4733 This attribute only applies to interrupt functions.  It is silently
4734 ignored if applied to a non-interrupt function.  A wakeup interrupt
4735 function will rouse the processor from any low-power state that it
4736 might be in when the function exits.
4738 @item lower
4739 @itemx upper
4740 @itemx either
4741 @cindex @code{lower} function attribute, MSP430
4742 @cindex @code{upper} function attribute, MSP430
4743 @cindex @code{either} function attribute, MSP430
4744 On the MSP430 target these attributes can be used to specify whether
4745 the function or variable should be placed into low memory, high
4746 memory, or the placement should be left to the linker to decide.  The
4747 attributes are only significant if compiling for the MSP430X
4748 architecture.
4750 The attributes work in conjunction with a linker script that has been
4751 augmented to specify where to place sections with a @code{.lower} and
4752 a @code{.upper} prefix.  So, for example, as well as placing the
4753 @code{.data} section, the script also specifies the placement of a
4754 @code{.lower.data} and a @code{.upper.data} section.  The intention
4755 is that @code{lower} sections are placed into a small but easier to
4756 access memory region and the upper sections are placed into a larger, but
4757 slower to access, region.
4759 The @code{either} attribute is special.  It tells the linker to place
4760 the object into the corresponding @code{lower} section if there is
4761 room for it.  If there is insufficient room then the object is placed
4762 into the corresponding @code{upper} section instead.  Note that the
4763 placement algorithm is not very sophisticated.  It does not attempt to
4764 find an optimal packing of the @code{lower} sections.  It just makes
4765 one pass over the objects and does the best that it can.  Using the
4766 @option{-ffunction-sections} and @option{-fdata-sections} command-line
4767 options can help the packing, however, since they produce smaller,
4768 easier to pack regions.
4769 @end table
4771 @node NDS32 Function Attributes
4772 @subsection NDS32 Function Attributes
4774 These function attributes are supported by the NDS32 back end:
4776 @table @code
4777 @item exception
4778 @cindex @code{exception} function attribute
4779 @cindex exception handler functions, NDS32
4780 Use this attribute on the NDS32 target to indicate that the specified function
4781 is an exception handler.  The compiler will generate corresponding sections
4782 for use in an exception handler.
4784 @item interrupt
4785 @cindex @code{interrupt} function attribute, NDS32
4786 On NDS32 target, this attribute indicates that the specified function
4787 is an interrupt handler.  The compiler generates corresponding sections
4788 for use in an interrupt handler.  You can use the following attributes
4789 to modify the behavior:
4790 @table @code
4791 @item nested
4792 @cindex @code{nested} function attribute, NDS32
4793 This interrupt service routine is interruptible.
4794 @item not_nested
4795 @cindex @code{not_nested} function attribute, NDS32
4796 This interrupt service routine is not interruptible.
4797 @item nested_ready
4798 @cindex @code{nested_ready} function attribute, NDS32
4799 This interrupt service routine is interruptible after @code{PSW.GIE}
4800 (global interrupt enable) is set.  This allows interrupt service routine to
4801 finish some short critical code before enabling interrupts.
4802 @item save_all
4803 @cindex @code{save_all} function attribute, NDS32
4804 The system will help save all registers into stack before entering
4805 interrupt handler.
4806 @item partial_save
4807 @cindex @code{partial_save} function attribute, NDS32
4808 The system will help save caller registers into stack before entering
4809 interrupt handler.
4810 @end table
4812 @item naked
4813 @cindex @code{naked} function attribute, NDS32
4814 This attribute allows the compiler to construct the
4815 requisite function declaration, while allowing the body of the
4816 function to be assembly code. The specified function will not have
4817 prologue/epilogue sequences generated by the compiler. Only basic
4818 @code{asm} statements can safely be included in naked functions
4819 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
4820 basic @code{asm} and C code may appear to work, they cannot be
4821 depended upon to work reliably and are not supported.
4823 @item reset
4824 @cindex @code{reset} function attribute, NDS32
4825 @cindex reset handler functions
4826 Use this attribute on the NDS32 target to indicate that the specified function
4827 is a reset handler.  The compiler will generate corresponding sections
4828 for use in a reset handler.  You can use the following attributes
4829 to provide extra exception handling:
4830 @table @code
4831 @item nmi
4832 @cindex @code{nmi} function attribute, NDS32
4833 Provide a user-defined function to handle NMI exception.
4834 @item warm
4835 @cindex @code{warm} function attribute, NDS32
4836 Provide a user-defined function to handle warm reset exception.
4837 @end table
4838 @end table
4840 @node Nios II Function Attributes
4841 @subsection Nios II Function Attributes
4843 These function attributes are supported by the Nios II back end:
4845 @table @code
4846 @item target (@var{options})
4847 @cindex @code{target} function attribute
4848 As discussed in @ref{Common Function Attributes}, this attribute 
4849 allows specification of target-specific compilation options.
4851 When compiling for Nios II, the following options are allowed:
4853 @table @samp
4854 @item custom-@var{insn}=@var{N}
4855 @itemx no-custom-@var{insn}
4856 @cindex @code{target("custom-@var{insn}=@var{N}")} function attribute, Nios II
4857 @cindex @code{target("no-custom-@var{insn}")} function attribute, Nios II
4858 Each @samp{custom-@var{insn}=@var{N}} attribute locally enables use of a
4859 custom instruction with encoding @var{N} when generating code that uses 
4860 @var{insn}.  Similarly, @samp{no-custom-@var{insn}} locally inhibits use of
4861 the custom instruction @var{insn}.
4862 These target attributes correspond to the
4863 @option{-mcustom-@var{insn}=@var{N}} and @option{-mno-custom-@var{insn}}
4864 command-line options, and support the same set of @var{insn} keywords.
4865 @xref{Nios II Options}, for more information.
4867 @item custom-fpu-cfg=@var{name}
4868 @cindex @code{target("custom-fpu-cfg=@var{name}")} function attribute, Nios II
4869 This attribute corresponds to the @option{-mcustom-fpu-cfg=@var{name}}
4870 command-line option, to select a predefined set of custom instructions
4871 named @var{name}.
4872 @xref{Nios II Options}, for more information.
4873 @end table
4874 @end table
4876 @node Nvidia PTX Function Attributes
4877 @subsection Nvidia PTX Function Attributes
4879 These function attributes are supported by the Nvidia PTX back end:
4881 @table @code
4882 @item kernel
4883 @cindex @code{kernel} attribute, Nvidia PTX
4884 This attribute indicates that the corresponding function should be compiled
4885 as a kernel function, which can be invoked from the host via the CUDA RT 
4886 library.
4887 By default functions are only callable only from other PTX functions.
4889 Kernel functions must have @code{void} return type.
4890 @end table
4892 @node PowerPC Function Attributes
4893 @subsection PowerPC Function Attributes
4895 These function attributes are supported by the PowerPC back end:
4897 @table @code
4898 @item longcall
4899 @itemx shortcall
4900 @cindex indirect calls, PowerPC
4901 @cindex @code{longcall} function attribute, PowerPC
4902 @cindex @code{shortcall} function attribute, PowerPC
4903 The @code{longcall} attribute
4904 indicates that the function might be far away from the call site and
4905 require a different (more expensive) calling sequence.  The
4906 @code{shortcall} attribute indicates that the function is always close
4907 enough for the shorter calling sequence to be used.  These attributes
4908 override both the @option{-mlongcall} switch and
4909 the @code{#pragma longcall} setting.
4911 @xref{RS/6000 and PowerPC Options}, for more information on whether long
4912 calls are necessary.
4914 @item target (@var{options})
4915 @cindex @code{target} function attribute
4916 As discussed in @ref{Common Function Attributes}, this attribute 
4917 allows specification of target-specific compilation options.
4919 On the PowerPC, the following options are allowed:
4921 @table @samp
4922 @item altivec
4923 @itemx no-altivec
4924 @cindex @code{target("altivec")} function attribute, PowerPC
4925 Generate code that uses (does not use) AltiVec instructions.  In
4926 32-bit code, you cannot enable AltiVec instructions unless
4927 @option{-mabi=altivec} is used on the command line.
4929 @item cmpb
4930 @itemx no-cmpb
4931 @cindex @code{target("cmpb")} function attribute, PowerPC
4932 Generate code that uses (does not use) the compare bytes instruction
4933 implemented on the POWER6 processor and other processors that support
4934 the PowerPC V2.05 architecture.
4936 @item dlmzb
4937 @itemx no-dlmzb
4938 @cindex @code{target("dlmzb")} function attribute, PowerPC
4939 Generate code that uses (does not use) the string-search @samp{dlmzb}
4940 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
4941 generated by default when targeting those processors.
4943 @item fprnd
4944 @itemx no-fprnd
4945 @cindex @code{target("fprnd")} function attribute, PowerPC
4946 Generate code that uses (does not use) the FP round to integer
4947 instructions implemented on the POWER5+ processor and other processors
4948 that support the PowerPC V2.03 architecture.
4950 @item hard-dfp
4951 @itemx no-hard-dfp
4952 @cindex @code{target("hard-dfp")} function attribute, PowerPC
4953 Generate code that uses (does not use) the decimal floating-point
4954 instructions implemented on some POWER processors.
4956 @item isel
4957 @itemx no-isel
4958 @cindex @code{target("isel")} function attribute, PowerPC
4959 Generate code that uses (does not use) ISEL instruction.
4961 @item mfcrf
4962 @itemx no-mfcrf
4963 @cindex @code{target("mfcrf")} function attribute, PowerPC
4964 Generate code that uses (does not use) the move from condition
4965 register field instruction implemented on the POWER4 processor and
4966 other processors that support the PowerPC V2.01 architecture.
4968 @item mfpgpr
4969 @itemx no-mfpgpr
4970 @cindex @code{target("mfpgpr")} function attribute, PowerPC
4971 Generate code that uses (does not use) the FP move to/from general
4972 purpose register instructions implemented on the POWER6X processor and
4973 other processors that support the extended PowerPC V2.05 architecture.
4975 @item mulhw
4976 @itemx no-mulhw
4977 @cindex @code{target("mulhw")} function attribute, PowerPC
4978 Generate code that uses (does not use) the half-word multiply and
4979 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
4980 These instructions are generated by default when targeting those
4981 processors.
4983 @item multiple
4984 @itemx no-multiple
4985 @cindex @code{target("multiple")} function attribute, PowerPC
4986 Generate code that uses (does not use) the load multiple word
4987 instructions and the store multiple word instructions.
4989 @item update
4990 @itemx no-update
4991 @cindex @code{target("update")} function attribute, PowerPC
4992 Generate code that uses (does not use) the load or store instructions
4993 that update the base register to the address of the calculated memory
4994 location.
4996 @item popcntb
4997 @itemx no-popcntb
4998 @cindex @code{target("popcntb")} function attribute, PowerPC
4999 Generate code that uses (does not use) the popcount and double-precision
5000 FP reciprocal estimate instruction implemented on the POWER5
5001 processor and other processors that support the PowerPC V2.02
5002 architecture.
5004 @item popcntd
5005 @itemx no-popcntd
5006 @cindex @code{target("popcntd")} function attribute, PowerPC
5007 Generate code that uses (does not use) the popcount instruction
5008 implemented on the POWER7 processor and other processors that support
5009 the PowerPC V2.06 architecture.
5011 @item powerpc-gfxopt
5012 @itemx no-powerpc-gfxopt
5013 @cindex @code{target("powerpc-gfxopt")} function attribute, PowerPC
5014 Generate code that uses (does not use) the optional PowerPC
5015 architecture instructions in the Graphics group, including
5016 floating-point select.
5018 @item powerpc-gpopt
5019 @itemx no-powerpc-gpopt
5020 @cindex @code{target("powerpc-gpopt")} function attribute, PowerPC
5021 Generate code that uses (does not use) the optional PowerPC
5022 architecture instructions in the General Purpose group, including
5023 floating-point square root.
5025 @item recip-precision
5026 @itemx no-recip-precision
5027 @cindex @code{target("recip-precision")} function attribute, PowerPC
5028 Assume (do not assume) that the reciprocal estimate instructions
5029 provide higher-precision estimates than is mandated by the PowerPC
5030 ABI.
5032 @item string
5033 @itemx no-string
5034 @cindex @code{target("string")} function attribute, PowerPC
5035 Generate code that uses (does not use) the load string instructions
5036 and the store string word instructions to save multiple registers and
5037 do small block moves.
5039 @item vsx
5040 @itemx no-vsx
5041 @cindex @code{target("vsx")} function attribute, PowerPC
5042 Generate code that uses (does not use) vector/scalar (VSX)
5043 instructions, and also enable the use of built-in functions that allow
5044 more direct access to the VSX instruction set.  In 32-bit code, you
5045 cannot enable VSX or AltiVec instructions unless
5046 @option{-mabi=altivec} is used on the command line.
5048 @item friz
5049 @itemx no-friz
5050 @cindex @code{target("friz")} function attribute, PowerPC
5051 Generate (do not generate) the @code{friz} instruction when the
5052 @option{-funsafe-math-optimizations} option is used to optimize
5053 rounding a floating-point value to 64-bit integer and back to floating
5054 point.  The @code{friz} instruction does not return the same value if
5055 the floating-point number is too large to fit in an integer.
5057 @item avoid-indexed-addresses
5058 @itemx no-avoid-indexed-addresses
5059 @cindex @code{target("avoid-indexed-addresses")} function attribute, PowerPC
5060 Generate code that tries to avoid (not avoid) the use of indexed load
5061 or store instructions.
5063 @item paired
5064 @itemx no-paired
5065 @cindex @code{target("paired")} function attribute, PowerPC
5066 Generate code that uses (does not use) the generation of PAIRED simd
5067 instructions.
5069 @item longcall
5070 @itemx no-longcall
5071 @cindex @code{target("longcall")} function attribute, PowerPC
5072 Generate code that assumes (does not assume) that all calls are far
5073 away so that a longer more expensive calling sequence is required.
5075 @item cpu=@var{CPU}
5076 @cindex @code{target("cpu=@var{CPU}")} function attribute, PowerPC
5077 Specify the architecture to generate code for when compiling the
5078 function.  If you select the @code{target("cpu=power7")} attribute when
5079 generating 32-bit code, VSX and AltiVec instructions are not generated
5080 unless you use the @option{-mabi=altivec} option on the command line.
5082 @item tune=@var{TUNE}
5083 @cindex @code{target("tune=@var{TUNE}")} function attribute, PowerPC
5084 Specify the architecture to tune for when compiling the function.  If
5085 you do not specify the @code{target("tune=@var{TUNE}")} attribute and
5086 you do specify the @code{target("cpu=@var{CPU}")} attribute,
5087 compilation tunes for the @var{CPU} architecture, and not the
5088 default tuning specified on the command line.
5089 @end table
5091 On the PowerPC, the inliner does not inline a
5092 function that has different target options than the caller, unless the
5093 callee has a subset of the target options of the caller.
5094 @end table
5096 @node RL78 Function Attributes
5097 @subsection RL78 Function Attributes
5099 These function attributes are supported by the RL78 back end:
5101 @table @code
5102 @item interrupt
5103 @itemx brk_interrupt
5104 @cindex @code{interrupt} function attribute, RL78
5105 @cindex @code{brk_interrupt} function attribute, RL78
5106 These attributes indicate
5107 that the specified function is an interrupt handler.  The compiler generates
5108 function entry and exit sequences suitable for use in an interrupt handler
5109 when this attribute is present.
5111 Use @code{brk_interrupt} instead of @code{interrupt} for
5112 handlers intended to be used with the @code{BRK} opcode (i.e.@: those
5113 that must end with @code{RETB} instead of @code{RETI}).
5115 @item naked
5116 @cindex @code{naked} function attribute, RL78
5117 This attribute allows the compiler to construct the
5118 requisite function declaration, while allowing the body of the
5119 function to be assembly code. The specified function will not have
5120 prologue/epilogue sequences generated by the compiler. Only basic
5121 @code{asm} statements can safely be included in naked functions
5122 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
5123 basic @code{asm} and C code may appear to work, they cannot be
5124 depended upon to work reliably and are not supported.
5125 @end table
5127 @node RX Function Attributes
5128 @subsection RX Function Attributes
5130 These function attributes are supported by the RX back end:
5132 @table @code
5133 @item fast_interrupt
5134 @cindex @code{fast_interrupt} function attribute, RX
5135 Use this attribute on the RX port to indicate that the specified
5136 function is a fast interrupt handler.  This is just like the
5137 @code{interrupt} attribute, except that @code{freit} is used to return
5138 instead of @code{reit}.
5140 @item interrupt
5141 @cindex @code{interrupt} function attribute, RX
5142 Use this attribute to indicate
5143 that the specified function is an interrupt handler.  The compiler generates
5144 function entry and exit sequences suitable for use in an interrupt handler
5145 when this attribute is present.
5147 On RX targets, you may specify one or more vector numbers as arguments
5148 to the attribute, as well as naming an alternate table name.
5149 Parameters are handled sequentially, so one handler can be assigned to
5150 multiple entries in multiple tables.  One may also pass the magic
5151 string @code{"$default"} which causes the function to be used for any
5152 unfilled slots in the current table.
5154 This example shows a simple assignment of a function to one vector in
5155 the default table (note that preprocessor macros may be used for
5156 chip-specific symbolic vector names):
5157 @smallexample
5158 void __attribute__ ((interrupt (5))) txd1_handler ();
5159 @end smallexample
5161 This example assigns a function to two slots in the default table
5162 (using preprocessor macros defined elsewhere) and makes it the default
5163 for the @code{dct} table:
5164 @smallexample
5165 void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
5166         txd1_handler ();
5167 @end smallexample
5169 @item naked
5170 @cindex @code{naked} function attribute, RX
5171 This attribute allows the compiler to construct the
5172 requisite function declaration, while allowing the body of the
5173 function to be assembly code. The specified function will not have
5174 prologue/epilogue sequences generated by the compiler. Only basic
5175 @code{asm} statements can safely be included in naked functions
5176 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
5177 basic @code{asm} and C code may appear to work, they cannot be
5178 depended upon to work reliably and are not supported.
5180 @item vector
5181 @cindex @code{vector} function attribute, RX
5182 This RX attribute is similar to the @code{interrupt} attribute, including its
5183 parameters, but does not make the function an interrupt-handler type
5184 function (i.e. it retains the normal C function calling ABI).  See the
5185 @code{interrupt} attribute for a description of its arguments.
5186 @end table
5188 @node S/390 Function Attributes
5189 @subsection S/390 Function Attributes
5191 These function attributes are supported on the S/390:
5193 @table @code
5194 @item hotpatch (@var{halfwords-before-function-label},@var{halfwords-after-function-label})
5195 @cindex @code{hotpatch} function attribute, S/390
5197 On S/390 System z targets, you can use this function attribute to
5198 make GCC generate a ``hot-patching'' function prologue.  If the
5199 @option{-mhotpatch=} command-line option is used at the same time,
5200 the @code{hotpatch} attribute takes precedence.  The first of the
5201 two arguments specifies the number of halfwords to be added before
5202 the function label.  A second argument can be used to specify the
5203 number of halfwords to be added after the function label.  For
5204 both arguments the maximum allowed value is 1000000.
5206 If both arguments are zero, hotpatching is disabled.
5208 @item target (@var{options})
5209 @cindex @code{target} function attribute
5210 As discussed in @ref{Common Function Attributes}, this attribute
5211 allows specification of target-specific compilation options.
5213 On S/390, the following options are supported:
5215 @table @samp
5216 @item arch=
5217 @item tune=
5218 @item stack-guard=
5219 @item stack-size=
5220 @item branch-cost=
5221 @item warn-framesize=
5222 @item backchain
5223 @itemx no-backchain
5224 @item hard-dfp
5225 @itemx no-hard-dfp
5226 @item hard-float
5227 @itemx soft-float
5228 @item htm
5229 @itemx no-htm
5230 @item vx
5231 @itemx no-vx
5232 @item packed-stack
5233 @itemx no-packed-stack
5234 @item small-exec
5235 @itemx no-small-exec
5236 @item mvcle
5237 @itemx no-mvcle
5238 @item warn-dynamicstack
5239 @itemx no-warn-dynamicstack
5240 @end table
5242 The options work exactly like the S/390 specific command line
5243 options (without the prefix @option{-m}) except that they do not
5244 change any feature macros.  For example,
5246 @smallexample
5247 @code{target("no-vx")}
5248 @end smallexample
5250 does not undefine the @code{__VEC__} macro.
5251 @end table
5253 @node SH Function Attributes
5254 @subsection SH Function Attributes
5256 These function attributes are supported on the SH family of processors:
5258 @table @code
5259 @item function_vector
5260 @cindex @code{function_vector} function attribute, SH
5261 @cindex calling functions through the function vector on SH2A
5262 On SH2A targets, this attribute declares a function to be called using the
5263 TBR relative addressing mode.  The argument to this attribute is the entry
5264 number of the same function in a vector table containing all the TBR
5265 relative addressable functions.  For correct operation the TBR must be setup
5266 accordingly to point to the start of the vector table before any functions with
5267 this attribute are invoked.  Usually a good place to do the initialization is
5268 the startup routine.  The TBR relative vector table can have at max 256 function
5269 entries.  The jumps to these functions are generated using a SH2A specific,
5270 non delayed branch instruction JSR/N @@(disp8,TBR).  You must use GAS and GLD
5271 from GNU binutils version 2.7 or later for this attribute to work correctly.
5273 In an application, for a function being called once, this attribute
5274 saves at least 8 bytes of code; and if other successive calls are being
5275 made to the same function, it saves 2 bytes of code per each of these
5276 calls.
5278 @item interrupt_handler
5279 @cindex @code{interrupt_handler} function attribute, SH
5280 Use this attribute to
5281 indicate that the specified function is an interrupt handler.  The compiler
5282 generates function entry and exit sequences suitable for use in an
5283 interrupt handler when this attribute is present.
5285 @item nosave_low_regs
5286 @cindex @code{nosave_low_regs} function attribute, SH
5287 Use this attribute on SH targets to indicate that an @code{interrupt_handler}
5288 function should not save and restore registers R0..R7.  This can be used on SH3*
5289 and SH4* targets that have a second R0..R7 register bank for non-reentrant
5290 interrupt handlers.
5292 @item renesas
5293 @cindex @code{renesas} function attribute, SH
5294 On SH targets this attribute specifies that the function or struct follows the
5295 Renesas ABI.
5297 @item resbank
5298 @cindex @code{resbank} function attribute, SH
5299 On the SH2A target, this attribute enables the high-speed register
5300 saving and restoration using a register bank for @code{interrupt_handler}
5301 routines.  Saving to the bank is performed automatically after the CPU
5302 accepts an interrupt that uses a register bank.
5304 The nineteen 32-bit registers comprising general register R0 to R14,
5305 control register GBR, and system registers MACH, MACL, and PR and the
5306 vector table address offset are saved into a register bank.  Register
5307 banks are stacked in first-in last-out (FILO) sequence.  Restoration
5308 from the bank is executed by issuing a RESBANK instruction.
5310 @item sp_switch
5311 @cindex @code{sp_switch} function attribute, SH
5312 Use this attribute on the SH to indicate an @code{interrupt_handler}
5313 function should switch to an alternate stack.  It expects a string
5314 argument that names a global variable holding the address of the
5315 alternate stack.
5317 @smallexample
5318 void *alt_stack;
5319 void f () __attribute__ ((interrupt_handler,
5320                           sp_switch ("alt_stack")));
5321 @end smallexample
5323 @item trap_exit
5324 @cindex @code{trap_exit} function attribute, SH
5325 Use this attribute on the SH for an @code{interrupt_handler} to return using
5326 @code{trapa} instead of @code{rte}.  This attribute expects an integer
5327 argument specifying the trap number to be used.
5329 @item trapa_handler
5330 @cindex @code{trapa_handler} function attribute, SH
5331 On SH targets this function attribute is similar to @code{interrupt_handler}
5332 but it does not save and restore all registers.
5333 @end table
5335 @node SPU Function Attributes
5336 @subsection SPU Function Attributes
5338 These function attributes are supported by the SPU back end:
5340 @table @code
5341 @item naked
5342 @cindex @code{naked} function attribute, SPU
5343 This attribute allows the compiler to construct the
5344 requisite function declaration, while allowing the body of the
5345 function to be assembly code. The specified function will not have
5346 prologue/epilogue sequences generated by the compiler. Only basic
5347 @code{asm} statements can safely be included in naked functions
5348 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
5349 basic @code{asm} and C code may appear to work, they cannot be
5350 depended upon to work reliably and are not supported.
5351 @end table
5353 @node Symbian OS Function Attributes
5354 @subsection Symbian OS Function Attributes
5356 @xref{Microsoft Windows Function Attributes}, for discussion of the
5357 @code{dllexport} and @code{dllimport} attributes.
5359 @node V850 Function Attributes
5360 @subsection V850 Function Attributes
5362 The V850 back end supports these function attributes:
5364 @table @code
5365 @item interrupt
5366 @itemx interrupt_handler
5367 @cindex @code{interrupt} function attribute, V850
5368 @cindex @code{interrupt_handler} function attribute, V850
5369 Use these attributes to indicate
5370 that the specified function is an interrupt handler.  The compiler generates
5371 function entry and exit sequences suitable for use in an interrupt handler
5372 when either attribute is present.
5373 @end table
5375 @node Visium Function Attributes
5376 @subsection Visium Function Attributes
5378 These function attributes are supported by the Visium back end:
5380 @table @code
5381 @item interrupt
5382 @cindex @code{interrupt} function attribute, Visium
5383 Use this attribute to indicate
5384 that the specified function is an interrupt handler.  The compiler generates
5385 function entry and exit sequences suitable for use in an interrupt handler
5386 when this attribute is present.
5387 @end table
5389 @node x86 Function Attributes
5390 @subsection x86 Function Attributes
5392 These function attributes are supported by the x86 back end:
5394 @table @code
5395 @item cdecl
5396 @cindex @code{cdecl} function attribute, x86-32
5397 @cindex functions that pop the argument stack on x86-32
5398 @opindex mrtd
5399 On the x86-32 targets, the @code{cdecl} attribute causes the compiler to
5400 assume that the calling function pops off the stack space used to
5401 pass arguments.  This is
5402 useful to override the effects of the @option{-mrtd} switch.
5404 @item fastcall
5405 @cindex @code{fastcall} function attribute, x86-32
5406 @cindex functions that pop the argument stack on x86-32
5407 On x86-32 targets, the @code{fastcall} attribute causes the compiler to
5408 pass the first argument (if of integral type) in the register ECX and
5409 the second argument (if of integral type) in the register EDX@.  Subsequent
5410 and other typed arguments are passed on the stack.  The called function
5411 pops the arguments off the stack.  If the number of arguments is variable all
5412 arguments are pushed on the stack.
5414 @item thiscall
5415 @cindex @code{thiscall} function attribute, x86-32
5416 @cindex functions that pop the argument stack on x86-32
5417 On x86-32 targets, the @code{thiscall} attribute causes the compiler to
5418 pass the first argument (if of integral type) in the register ECX.
5419 Subsequent and other typed arguments are passed on the stack. The called
5420 function pops the arguments off the stack.
5421 If the number of arguments is variable all arguments are pushed on the
5422 stack.
5423 The @code{thiscall} attribute is intended for C++ non-static member functions.
5424 As a GCC extension, this calling convention can be used for C functions
5425 and for static member methods.
5427 @item ms_abi
5428 @itemx sysv_abi
5429 @cindex @code{ms_abi} function attribute, x86
5430 @cindex @code{sysv_abi} function attribute, x86
5432 On 32-bit and 64-bit x86 targets, you can use an ABI attribute
5433 to indicate which calling convention should be used for a function.  The
5434 @code{ms_abi} attribute tells the compiler to use the Microsoft ABI,
5435 while the @code{sysv_abi} attribute tells the compiler to use the ABI
5436 used on GNU/Linux and other systems.  The default is to use the Microsoft ABI
5437 when targeting Windows.  On all other systems, the default is the x86/AMD ABI.
5439 Note, the @code{ms_abi} attribute for Microsoft Windows 64-bit targets currently
5440 requires the @option{-maccumulate-outgoing-args} option.
5442 @item callee_pop_aggregate_return (@var{number})
5443 @cindex @code{callee_pop_aggregate_return} function attribute, x86
5445 On x86-32 targets, you can use this attribute to control how
5446 aggregates are returned in memory.  If the caller is responsible for
5447 popping the hidden pointer together with the rest of the arguments, specify
5448 @var{number} equal to zero.  If callee is responsible for popping the
5449 hidden pointer, specify @var{number} equal to one.  
5451 The default x86-32 ABI assumes that the callee pops the
5452 stack for hidden pointer.  However, on x86-32 Microsoft Windows targets,
5453 the compiler assumes that the
5454 caller pops the stack for hidden pointer.
5456 @item ms_hook_prologue
5457 @cindex @code{ms_hook_prologue} function attribute, x86
5459 On 32-bit and 64-bit x86 targets, you can use
5460 this function attribute to make GCC generate the ``hot-patching'' function
5461 prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
5462 and newer.
5464 @item naked
5465 @cindex @code{naked} function attribute, x86
5466 This attribute allows the compiler to construct the
5467 requisite function declaration, while allowing the body of the
5468 function to be assembly code. The specified function will not have
5469 prologue/epilogue sequences generated by the compiler. Only basic
5470 @code{asm} statements can safely be included in naked functions
5471 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
5472 basic @code{asm} and C code may appear to work, they cannot be
5473 depended upon to work reliably and are not supported.
5475 @item regparm (@var{number})
5476 @cindex @code{regparm} function attribute, x86
5477 @cindex functions that are passed arguments in registers on x86-32
5478 On x86-32 targets, the @code{regparm} attribute causes the compiler to
5479 pass arguments number one to @var{number} if they are of integral type
5480 in registers EAX, EDX, and ECX instead of on the stack.  Functions that
5481 take a variable number of arguments continue to be passed all of their
5482 arguments on the stack.
5484 Beware that on some ELF systems this attribute is unsuitable for
5485 global functions in shared libraries with lazy binding (which is the
5486 default).  Lazy binding sends the first call via resolving code in
5487 the loader, which might assume EAX, EDX and ECX can be clobbered, as
5488 per the standard calling conventions.  Solaris 8 is affected by this.
5489 Systems with the GNU C Library version 2.1 or higher
5490 and FreeBSD are believed to be
5491 safe since the loaders there save EAX, EDX and ECX.  (Lazy binding can be
5492 disabled with the linker or the loader if desired, to avoid the
5493 problem.)
5495 @item sseregparm
5496 @cindex @code{sseregparm} function attribute, x86
5497 On x86-32 targets with SSE support, the @code{sseregparm} attribute
5498 causes the compiler to pass up to 3 floating-point arguments in
5499 SSE registers instead of on the stack.  Functions that take a
5500 variable number of arguments continue to pass all of their
5501 floating-point arguments on the stack.
5503 @item force_align_arg_pointer
5504 @cindex @code{force_align_arg_pointer} function attribute, x86
5505 On x86 targets, the @code{force_align_arg_pointer} attribute may be
5506 applied to individual function definitions, generating an alternate
5507 prologue and epilogue that realigns the run-time stack if necessary.
5508 This supports mixing legacy codes that run with a 4-byte aligned stack
5509 with modern codes that keep a 16-byte stack for SSE compatibility.
5511 @item stdcall
5512 @cindex @code{stdcall} function attribute, x86-32
5513 @cindex functions that pop the argument stack on x86-32
5514 On x86-32 targets, the @code{stdcall} attribute causes the compiler to
5515 assume that the called function pops off the stack space used to
5516 pass arguments, unless it takes a variable number of arguments.
5518 @item no_caller_saved_registers
5519 @cindex @code{no_caller_saved_registers} function attribute, x86
5520 Use this attribute to indicate that the specified function has no
5521 caller-saved registers. That is, all registers are callee-saved. For
5522 example, this attribute can be used for a function called from an
5523 interrupt handler. The compiler generates proper function entry and
5524 exit sequences to save and restore any modified registers, except for
5525 the EFLAGS register.  Since GCC doesn't preserve MPX, SSE, MMX nor x87
5526 states, the GCC option @option{-mgeneral-regs-only} should be used to
5527 compile functions with @code{no_caller_saved_registers} attribute.
5529 @item interrupt
5530 @cindex @code{interrupt} function attribute, x86
5531 Use this attribute to indicate that the specified function is an
5532 interrupt handler or an exception handler (depending on parameters passed
5533 to the function, explained further).  The compiler generates function
5534 entry and exit sequences suitable for use in an interrupt handler when
5535 this attribute is present.  The @code{IRET} instruction, instead of the
5536 @code{RET} instruction, is used to return from interrupt handlers.  All
5537 registers, except for the EFLAGS register which is restored by the
5538 @code{IRET} instruction, are preserved by the compiler.  Since GCC
5539 doesn't preserve MPX, SSE, MMX nor x87 states, the GCC option
5540 @option{-mgeneral-regs-only} should be used to compile interrupt and
5541 exception handlers.
5543 Any interruptible-without-stack-switch code must be compiled with
5544 @option{-mno-red-zone} since interrupt handlers can and will, because
5545 of the hardware design, touch the red zone.
5547 An interrupt handler must be declared with a mandatory pointer
5548 argument:
5550 @smallexample
5551 struct interrupt_frame;
5553 __attribute__ ((interrupt))
5554 void
5555 f (struct interrupt_frame *frame)
5558 @end smallexample
5560 @noindent
5561 and you must define @code{struct interrupt_frame} as described in the
5562 processor's manual.
5564 Exception handlers differ from interrupt handlers because the system
5565 pushes an error code on the stack.  An exception handler declaration is
5566 similar to that for an interrupt handler, but with a different mandatory
5567 function signature.  The compiler arranges to pop the error code off the
5568 stack before the @code{IRET} instruction.
5570 @smallexample
5571 #ifdef __x86_64__
5572 typedef unsigned long long int uword_t;
5573 #else
5574 typedef unsigned int uword_t;
5575 #endif
5577 struct interrupt_frame;
5579 __attribute__ ((interrupt))
5580 void
5581 f (struct interrupt_frame *frame, uword_t error_code)
5583   ...
5585 @end smallexample
5587 Exception handlers should only be used for exceptions that push an error
5588 code; you should use an interrupt handler in other cases.  The system
5589 will crash if the wrong kind of handler is used.
5591 @item target (@var{options})
5592 @cindex @code{target} function attribute
5593 As discussed in @ref{Common Function Attributes}, this attribute 
5594 allows specification of target-specific compilation options.
5596 On the x86, the following options are allowed:
5597 @table @samp
5598 @item abm
5599 @itemx no-abm
5600 @cindex @code{target("abm")} function attribute, x86
5601 Enable/disable the generation of the advanced bit instructions.
5603 @item aes
5604 @itemx no-aes
5605 @cindex @code{target("aes")} function attribute, x86
5606 Enable/disable the generation of the AES instructions.
5608 @item default
5609 @cindex @code{target("default")} function attribute, x86
5610 @xref{Function Multiversioning}, where it is used to specify the
5611 default function version.
5613 @item mmx
5614 @itemx no-mmx
5615 @cindex @code{target("mmx")} function attribute, x86
5616 Enable/disable the generation of the MMX instructions.
5618 @item pclmul
5619 @itemx no-pclmul
5620 @cindex @code{target("pclmul")} function attribute, x86
5621 Enable/disable the generation of the PCLMUL instructions.
5623 @item popcnt
5624 @itemx no-popcnt
5625 @cindex @code{target("popcnt")} function attribute, x86
5626 Enable/disable the generation of the POPCNT instruction.
5628 @item sse
5629 @itemx no-sse
5630 @cindex @code{target("sse")} function attribute, x86
5631 Enable/disable the generation of the SSE instructions.
5633 @item sse2
5634 @itemx no-sse2
5635 @cindex @code{target("sse2")} function attribute, x86
5636 Enable/disable the generation of the SSE2 instructions.
5638 @item sse3
5639 @itemx no-sse3
5640 @cindex @code{target("sse3")} function attribute, x86
5641 Enable/disable the generation of the SSE3 instructions.
5643 @item sse4
5644 @itemx no-sse4
5645 @cindex @code{target("sse4")} function attribute, x86
5646 Enable/disable the generation of the SSE4 instructions (both SSE4.1
5647 and SSE4.2).
5649 @item sse4.1
5650 @itemx no-sse4.1
5651 @cindex @code{target("sse4.1")} function attribute, x86
5652 Enable/disable the generation of the sse4.1 instructions.
5654 @item sse4.2
5655 @itemx no-sse4.2
5656 @cindex @code{target("sse4.2")} function attribute, x86
5657 Enable/disable the generation of the sse4.2 instructions.
5659 @item sse4a
5660 @itemx no-sse4a
5661 @cindex @code{target("sse4a")} function attribute, x86
5662 Enable/disable the generation of the SSE4A instructions.
5664 @item fma4
5665 @itemx no-fma4
5666 @cindex @code{target("fma4")} function attribute, x86
5667 Enable/disable the generation of the FMA4 instructions.
5669 @item xop
5670 @itemx no-xop
5671 @cindex @code{target("xop")} function attribute, x86
5672 Enable/disable the generation of the XOP instructions.
5674 @item lwp
5675 @itemx no-lwp
5676 @cindex @code{target("lwp")} function attribute, x86
5677 Enable/disable the generation of the LWP instructions.
5679 @item ssse3
5680 @itemx no-ssse3
5681 @cindex @code{target("ssse3")} function attribute, x86
5682 Enable/disable the generation of the SSSE3 instructions.
5684 @item cld
5685 @itemx no-cld
5686 @cindex @code{target("cld")} function attribute, x86
5687 Enable/disable the generation of the CLD before string moves.
5689 @item fancy-math-387
5690 @itemx no-fancy-math-387
5691 @cindex @code{target("fancy-math-387")} function attribute, x86
5692 Enable/disable the generation of the @code{sin}, @code{cos}, and
5693 @code{sqrt} instructions on the 387 floating-point unit.
5695 @item ieee-fp
5696 @itemx no-ieee-fp
5697 @cindex @code{target("ieee-fp")} function attribute, x86
5698 Enable/disable the generation of floating point that depends on IEEE arithmetic.
5700 @item inline-all-stringops
5701 @itemx no-inline-all-stringops
5702 @cindex @code{target("inline-all-stringops")} function attribute, x86
5703 Enable/disable inlining of string operations.
5705 @item inline-stringops-dynamically
5706 @itemx no-inline-stringops-dynamically
5707 @cindex @code{target("inline-stringops-dynamically")} function attribute, x86
5708 Enable/disable the generation of the inline code to do small string
5709 operations and calling the library routines for large operations.
5711 @item align-stringops
5712 @itemx no-align-stringops
5713 @cindex @code{target("align-stringops")} function attribute, x86
5714 Do/do not align destination of inlined string operations.
5716 @item recip
5717 @itemx no-recip
5718 @cindex @code{target("recip")} function attribute, x86
5719 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and RSQRTPS
5720 instructions followed an additional Newton-Raphson step instead of
5721 doing a floating-point division.
5723 @item arch=@var{ARCH}
5724 @cindex @code{target("arch=@var{ARCH}")} function attribute, x86
5725 Specify the architecture to generate code for in compiling the function.
5727 @item tune=@var{TUNE}
5728 @cindex @code{target("tune=@var{TUNE}")} function attribute, x86
5729 Specify the architecture to tune for in compiling the function.
5731 @item fpmath=@var{FPMATH}
5732 @cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86
5733 Specify which floating-point unit to use.  You must specify the
5734 @code{target("fpmath=sse,387")} option as
5735 @code{target("fpmath=sse+387")} because the comma would separate
5736 different options.
5738 @item nocf_check
5739 @cindex @code{nocf_check} function attribute
5740 The @code{nocf_check} attribute on a function is used to inform the
5741 compiler that the function's prologue should not be instrumented when
5742 compiled with the @option{-fcf-protection=branch} option.  The
5743 compiler assumes that the function's address is a valid target for a
5744 control-flow transfer.
5746 The @code{nocf_check} attribute on a type of pointer to function is
5747 used to inform the compiler that a call through the pointer should
5748 not be instrumented when compiled with the
5749 @option{-fcf-protection=branch} option.  The compiler assumes
5750 that the function's address from the pointer is a valid target for
5751 a control-flow transfer.  A direct function call through a function
5752 name is assumed to be a safe call thus direct calls are not
5753 instrumented by the compiler.
5755 The @code{nocf_check} attribute is applied to an object's type.
5756 In case of assignment of a function address or a function pointer to
5757 another pointer, the attribute is not carried over from the right-hand
5758 object's type; the type of left-hand object stays unchanged.  The
5759 compiler checks for @code{nocf_check} attribute mismatch and reports
5760 a warning in case of mismatch.
5762 @smallexample
5764 int foo (void) __attribute__(nocf_check);
5765 void (*foo1)(void) __attribute__(nocf_check);
5766 void (*foo2)(void);
5769 foo (void) /* The function's address is assumed to be valid.  */
5771   /* This call site is not checked for control-flow validity.  */
5772   (*foo1)();
5774   foo1 = foo2; /* A warning is printed about attribute mismatch.  */
5775   /* This call site is still not checked for control-flow validity.  */
5776   (*foo1)();
5778   /* This call site is checked for control-flow validity.  */
5779   (*foo2)();
5781   foo2 = foo1; /* A warning is printed about attribute mismatch.  */
5782   /* This call site is still checked for control-flow validity.  */
5783   (*foo2)();
5785   return 0;
5787 @end smallexample
5789 @end table
5791 On the x86, the inliner does not inline a
5792 function that has different target options than the caller, unless the
5793 callee has a subset of the target options of the caller.  For example
5794 a function declared with @code{target("sse3")} can inline a function
5795 with @code{target("sse2")}, since @code{-msse3} implies @code{-msse2}.
5796 @end table
5798 @node Xstormy16 Function Attributes
5799 @subsection Xstormy16 Function Attributes
5801 These function attributes are supported by the Xstormy16 back end:
5803 @table @code
5804 @item interrupt
5805 @cindex @code{interrupt} function attribute, Xstormy16
5806 Use this attribute to indicate
5807 that the specified function is an interrupt handler.  The compiler generates
5808 function entry and exit sequences suitable for use in an interrupt handler
5809 when this attribute is present.
5810 @end table
5812 @node Variable Attributes
5813 @section Specifying Attributes of Variables
5814 @cindex attribute of variables
5815 @cindex variable attributes
5817 The keyword @code{__attribute__} allows you to specify special
5818 attributes of variables or structure fields.  This keyword is followed
5819 by an attribute specification inside double parentheses.  Some
5820 attributes are currently defined generically for variables.
5821 Other attributes are defined for variables on particular target
5822 systems.  Other attributes are available for functions
5823 (@pxref{Function Attributes}), labels (@pxref{Label Attributes}),
5824 enumerators (@pxref{Enumerator Attributes}), statements
5825 (@pxref{Statement Attributes}), and for types (@pxref{Type Attributes}).
5826 Other front ends might define more attributes
5827 (@pxref{C++ Extensions,,Extensions to the C++ Language}).
5829 @xref{Attribute Syntax}, for details of the exact syntax for using
5830 attributes.
5832 @menu
5833 * Common Variable Attributes::
5834 * AVR Variable Attributes::
5835 * Blackfin Variable Attributes::
5836 * H8/300 Variable Attributes::
5837 * IA-64 Variable Attributes::
5838 * M32R/D Variable Attributes::
5839 * MeP Variable Attributes::
5840 * Microsoft Windows Variable Attributes::
5841 * MSP430 Variable Attributes::
5842 * Nvidia PTX Variable Attributes::
5843 * PowerPC Variable Attributes::
5844 * RL78 Variable Attributes::
5845 * SPU Variable Attributes::
5846 * V850 Variable Attributes::
5847 * x86 Variable Attributes::
5848 * Xstormy16 Variable Attributes::
5849 @end menu
5851 @node Common Variable Attributes
5852 @subsection Common Variable Attributes
5854 The following attributes are supported on most targets.
5856 @table @code
5857 @cindex @code{aligned} variable attribute
5858 @item aligned (@var{alignment})
5859 This attribute specifies a minimum alignment for the variable or
5860 structure field, measured in bytes.  For example, the declaration:
5862 @smallexample
5863 int x __attribute__ ((aligned (16))) = 0;
5864 @end smallexample
5866 @noindent
5867 causes the compiler to allocate the global variable @code{x} on a
5868 16-byte boundary.  On a 68040, this could be used in conjunction with
5869 an @code{asm} expression to access the @code{move16} instruction which
5870 requires 16-byte aligned operands.
5872 You can also specify the alignment of structure fields.  For example, to
5873 create a double-word aligned @code{int} pair, you could write:
5875 @smallexample
5876 struct foo @{ int x[2] __attribute__ ((aligned (8))); @};
5877 @end smallexample
5879 @noindent
5880 This is an alternative to creating a union with a @code{double} member,
5881 which forces the union to be double-word aligned.
5883 As in the preceding examples, you can explicitly specify the alignment
5884 (in bytes) that you wish the compiler to use for a given variable or
5885 structure field.  Alternatively, you can leave out the alignment factor
5886 and just ask the compiler to align a variable or field to the
5887 default alignment for the target architecture you are compiling for.
5888 The default alignment is sufficient for all scalar types, but may not be
5889 enough for all vector types on a target that supports vector operations.
5890 The default alignment is fixed for a particular target ABI.
5892 GCC also provides a target specific macro @code{__BIGGEST_ALIGNMENT__},
5893 which is the largest alignment ever used for any data type on the
5894 target machine you are compiling for.  For example, you could write:
5896 @smallexample
5897 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
5898 @end smallexample
5900 The compiler automatically sets the alignment for the declared
5901 variable or field to @code{__BIGGEST_ALIGNMENT__}.  Doing this can
5902 often make copy operations more efficient, because the compiler can
5903 use whatever instructions copy the biggest chunks of memory when
5904 performing copies to or from the variables or fields that you have
5905 aligned this way.  Note that the value of @code{__BIGGEST_ALIGNMENT__}
5906 may change depending on command-line options.
5908 When used on a struct, or struct member, the @code{aligned} attribute can
5909 only increase the alignment; in order to decrease it, the @code{packed}
5910 attribute must be specified as well.  When used as part of a typedef, the
5911 @code{aligned} attribute can both increase and decrease alignment, and
5912 specifying the @code{packed} attribute generates a warning.
5914 Note that the effectiveness of @code{aligned} attributes may be limited
5915 by inherent limitations in your linker.  On many systems, the linker is
5916 only able to arrange for variables to be aligned up to a certain maximum
5917 alignment.  (For some linkers, the maximum supported alignment may
5918 be very very small.)  If your linker is only able to align variables
5919 up to a maximum of 8-byte alignment, then specifying @code{aligned(16)}
5920 in an @code{__attribute__} still only provides you with 8-byte
5921 alignment.  See your linker documentation for further information.
5923 The @code{aligned} attribute can also be used for functions
5924 (@pxref{Common Function Attributes}.)
5926 @cindex @code{warn_if_not_aligned} variable attribute
5927 @item warn_if_not_aligned (@var{alignment})
5928 This attribute specifies a threshold for the structure field, measured
5929 in bytes.  If the structure field is aligned below the threshold, a
5930 warning will be issued.  For example, the declaration:
5932 @smallexample
5933 struct foo
5935   int i1;
5936   int i2;
5937   unsigned long long x __attribute__((warn_if_not_aligned(16)));
5939 @end smallexample
5941 @noindent
5942 causes the compiler to issue an warning on @code{struct foo}, like
5943 @samp{warning: alignment 8 of 'struct foo' is less than 16}.
5944 The compiler also issues a warning, like @samp{warning: 'x' offset
5945 8 in 'struct foo' isn't aligned to 16}, when the structure field has
5946 the misaligned offset:
5948 @smallexample
5949 struct foo
5951   int i1;
5952   int i2;
5953   unsigned long long x __attribute__((warn_if_not_aligned(16)));
5954 @} __attribute__((aligned(16)));
5955 @end smallexample
5957 This warning can be disabled by @option{-Wno-if-not-aligned}.
5958 The @code{warn_if_not_aligned} attribute can also be used for types
5959 (@pxref{Common Type Attributes}.)
5961 @item cleanup (@var{cleanup_function})
5962 @cindex @code{cleanup} variable attribute
5963 The @code{cleanup} attribute runs a function when the variable goes
5964 out of scope.  This attribute can only be applied to auto function
5965 scope variables; it may not be applied to parameters or variables
5966 with static storage duration.  The function must take one parameter,
5967 a pointer to a type compatible with the variable.  The return value
5968 of the function (if any) is ignored.
5970 If @option{-fexceptions} is enabled, then @var{cleanup_function}
5971 is run during the stack unwinding that happens during the
5972 processing of the exception.  Note that the @code{cleanup} attribute
5973 does not allow the exception to be caught, only to perform an action.
5974 It is undefined what happens if @var{cleanup_function} does not
5975 return normally.
5977 @item common
5978 @itemx nocommon
5979 @cindex @code{common} variable attribute
5980 @cindex @code{nocommon} variable attribute
5981 @opindex fcommon
5982 @opindex fno-common
5983 The @code{common} attribute requests GCC to place a variable in
5984 ``common'' storage.  The @code{nocommon} attribute requests the
5985 opposite---to allocate space for it directly.
5987 These attributes override the default chosen by the
5988 @option{-fno-common} and @option{-fcommon} flags respectively.
5990 @item deprecated
5991 @itemx deprecated (@var{msg})
5992 @cindex @code{deprecated} variable attribute
5993 The @code{deprecated} attribute results in a warning if the variable
5994 is used anywhere in the source file.  This is useful when identifying
5995 variables that are expected to be removed in a future version of a
5996 program.  The warning also includes the location of the declaration
5997 of the deprecated variable, to enable users to easily find further
5998 information about why the variable is deprecated, or what they should
5999 do instead.  Note that the warning only occurs for uses:
6001 @smallexample
6002 extern int old_var __attribute__ ((deprecated));
6003 extern int old_var;
6004 int new_fn () @{ return old_var; @}
6005 @end smallexample
6007 @noindent
6008 results in a warning on line 3 but not line 2.  The optional @var{msg}
6009 argument, which must be a string, is printed in the warning if
6010 present.
6012 The @code{deprecated} attribute can also be used for functions and
6013 types (@pxref{Common Function Attributes},
6014 @pxref{Common Type Attributes}).
6016 @item nonstring
6017 @cindex @code{nonstring} variable attribute
6018 The @code{nonstring} variable attribute specifies that an object or member
6019 declaration with type array of @code{char} or pointer to @code{char} is
6020 intended to store character arrays that do not necessarily contain
6021 a terminating @code{NUL} character.  This is useful in detecting uses
6022 of such arrays or pointers with functions that expect NUL-terminated
6023 strings, and to avoid warnings when such an array or pointer is used
6024 as an argument to a bounded string manipulation function such as
6025 @code{strncpy}.  For example, without the attribute, GCC will issue
6026 a warning for the @code{strncpy} call below because it may truncate
6027 the copy without appending the terminating @code{NUL} character.  Using
6028 the attribute makes it possible to suppress the warning.  However, when
6029 the array is declared with the attribute the call to @code{strlen} is
6030 diagnosed because when the array doesn't contain a @code{NUL}-terminated
6031 string the call is undefined.  To copy, compare, of search non-string
6032 character arrays use the @code{memcpy}, @code{memcmp}, @code{memchr},
6033 and other functions that operate on arrays of bytes.  In addition,
6034 calling @code{strnlen} and @code{strndup} with such arrays is safe
6035 provided a suitable bound is specified, and not diagnosed.
6037 @smallexample
6038 struct Data
6040   char name [32] __attribute__ ((nonstring));
6043 int f (struct Data *pd, const char *s)
6045   strncpy (pd->name, s, sizeof pd->name);
6046   @dots{}
6047   return strlen (pd->name);   // unsafe, gets a warning
6049 @end smallexample
6051 @item mode (@var{mode})
6052 @cindex @code{mode} variable attribute
6053 This attribute specifies the data type for the declaration---whichever
6054 type corresponds to the mode @var{mode}.  This in effect lets you
6055 request an integer or floating-point type according to its width.
6057 @xref{Machine Modes,,, gccint, GNU Compiler Collection (GCC) Internals},
6058 for a list of the possible keywords for @var{mode}.
6059 You may also specify a mode of @code{byte} or @code{__byte__} to
6060 indicate the mode corresponding to a one-byte integer, @code{word} or
6061 @code{__word__} for the mode of a one-word integer, and @code{pointer}
6062 or @code{__pointer__} for the mode used to represent pointers.
6064 @item packed
6065 @cindex @code{packed} variable attribute
6066 The @code{packed} attribute specifies that a variable or structure field
6067 should have the smallest possible alignment---one byte for a variable,
6068 and one bit for a field, unless you specify a larger value with the
6069 @code{aligned} attribute.
6071 Here is a structure in which the field @code{x} is packed, so that it
6072 immediately follows @code{a}:
6074 @smallexample
6075 struct foo
6077   char a;
6078   int x[2] __attribute__ ((packed));
6080 @end smallexample
6082 @emph{Note:} The 4.1, 4.2 and 4.3 series of GCC ignore the
6083 @code{packed} attribute on bit-fields of type @code{char}.  This has
6084 been fixed in GCC 4.4 but the change can lead to differences in the
6085 structure layout.  See the documentation of
6086 @option{-Wpacked-bitfield-compat} for more information.
6088 @item section ("@var{section-name}")
6089 @cindex @code{section} variable attribute
6090 Normally, the compiler places the objects it generates in sections like
6091 @code{data} and @code{bss}.  Sometimes, however, you need additional sections,
6092 or you need certain particular variables to appear in special sections,
6093 for example to map to special hardware.  The @code{section}
6094 attribute specifies that a variable (or function) lives in a particular
6095 section.  For example, this small program uses several specific section names:
6097 @smallexample
6098 struct duart a __attribute__ ((section ("DUART_A"))) = @{ 0 @};
6099 struct duart b __attribute__ ((section ("DUART_B"))) = @{ 0 @};
6100 char stack[10000] __attribute__ ((section ("STACK"))) = @{ 0 @};
6101 int init_data __attribute__ ((section ("INITDATA")));
6103 main()
6105   /* @r{Initialize stack pointer} */
6106   init_sp (stack + sizeof (stack));
6108   /* @r{Initialize initialized data} */
6109   memcpy (&init_data, &data, &edata - &data);
6111   /* @r{Turn on the serial ports} */
6112   init_duart (&a);
6113   init_duart (&b);
6115 @end smallexample
6117 @noindent
6118 Use the @code{section} attribute with
6119 @emph{global} variables and not @emph{local} variables,
6120 as shown in the example.
6122 You may use the @code{section} attribute with initialized or
6123 uninitialized global variables but the linker requires
6124 each object be defined once, with the exception that uninitialized
6125 variables tentatively go in the @code{common} (or @code{bss}) section
6126 and can be multiply ``defined''.  Using the @code{section} attribute
6127 changes what section the variable goes into and may cause the
6128 linker to issue an error if an uninitialized variable has multiple
6129 definitions.  You can force a variable to be initialized with the
6130 @option{-fno-common} flag or the @code{nocommon} attribute.
6132 Some file formats do not support arbitrary sections so the @code{section}
6133 attribute is not available on all platforms.
6134 If you need to map the entire contents of a module to a particular
6135 section, consider using the facilities of the linker instead.
6137 @item tls_model ("@var{tls_model}")
6138 @cindex @code{tls_model} variable attribute
6139 The @code{tls_model} attribute sets thread-local storage model
6140 (@pxref{Thread-Local}) of a particular @code{__thread} variable,
6141 overriding @option{-ftls-model=} command-line switch on a per-variable
6142 basis.
6143 The @var{tls_model} argument should be one of @code{global-dynamic},
6144 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
6146 Not all targets support this attribute.
6148 @item unused
6149 @cindex @code{unused} variable attribute
6150 This attribute, attached to a variable, means that the variable is meant
6151 to be possibly unused.  GCC does not produce a warning for this
6152 variable.
6154 @item used
6155 @cindex @code{used} variable attribute
6156 This attribute, attached to a variable with static storage, means that
6157 the variable must be emitted even if it appears that the variable is not
6158 referenced.
6160 When applied to a static data member of a C++ class template, the
6161 attribute also means that the member is instantiated if the
6162 class itself is instantiated.
6164 @item vector_size (@var{bytes})
6165 @cindex @code{vector_size} variable attribute
6166 This attribute specifies the vector size for the variable, measured in
6167 bytes.  For example, the declaration:
6169 @smallexample
6170 int foo __attribute__ ((vector_size (16)));
6171 @end smallexample
6173 @noindent
6174 causes the compiler to set the mode for @code{foo}, to be 16 bytes,
6175 divided into @code{int} sized units.  Assuming a 32-bit int (a vector of
6176 4 units of 4 bytes), the corresponding mode of @code{foo} is V4SI@.
6178 This attribute is only applicable to integral and float scalars,
6179 although arrays, pointers, and function return values are allowed in
6180 conjunction with this construct.
6182 Aggregates with this attribute are invalid, even if they are of the same
6183 size as a corresponding scalar.  For example, the declaration:
6185 @smallexample
6186 struct S @{ int a; @};
6187 struct S  __attribute__ ((vector_size (16))) foo;
6188 @end smallexample
6190 @noindent
6191 is invalid even if the size of the structure is the same as the size of
6192 the @code{int}.
6194 @item visibility ("@var{visibility_type}")
6195 @cindex @code{visibility} variable attribute
6196 This attribute affects the linkage of the declaration to which it is attached.
6197 The @code{visibility} attribute is described in
6198 @ref{Common Function Attributes}.
6200 @item weak
6201 @cindex @code{weak} variable attribute
6202 The @code{weak} attribute is described in
6203 @ref{Common Function Attributes}.
6205 @end table
6207 @node AVR Variable Attributes
6208 @subsection AVR Variable Attributes
6210 @table @code
6211 @item progmem
6212 @cindex @code{progmem} variable attribute, AVR
6213 The @code{progmem} attribute is used on the AVR to place read-only
6214 data in the non-volatile program memory (flash). The @code{progmem}
6215 attribute accomplishes this by putting respective variables into a
6216 section whose name starts with @code{.progmem}.
6218 This attribute works similar to the @code{section} attribute
6219 but adds additional checking.
6221 @table @asis
6222 @item @bullet{}@tie{} Ordinary AVR cores with 32 general purpose registers:
6223 @code{progmem} affects the location
6224 of the data but not how this data is accessed.
6225 In order to read data located with the @code{progmem} attribute
6226 (inline) assembler must be used.
6227 @smallexample
6228 /* Use custom macros from @w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC}} */
6229 #include <avr/pgmspace.h> 
6231 /* Locate var in flash memory */
6232 const int var[2] PROGMEM = @{ 1, 2 @};
6234 int read_var (int i)
6236     /* Access var[] by accessor macro from avr/pgmspace.h */
6237     return (int) pgm_read_word (& var[i]);
6239 @end smallexample
6241 AVR is a Harvard architecture processor and data and read-only data
6242 normally resides in the data memory (RAM).
6244 See also the @ref{AVR Named Address Spaces} section for
6245 an alternate way to locate and access data in flash memory.
6247 @item @bullet{}@tie{} AVR cores with flash memory visible in the RAM address range:
6248 On such devices, there is no need for attribute @code{progmem} or
6249 @ref{AVR Named Address Spaces,,@code{__flash}} qualifier at all.
6250 Just use standard C / C++.  The compiler will generate @code{LD*}
6251 instructions.  As flash memory is visible in the RAM address range,
6252 and the default linker script does @emph{not} locate @code{.rodata} in
6253 RAM, no special features are needed in order not to waste RAM for
6254 read-only data or to read from flash.  You might even get slightly better
6255 performance by
6256 avoiding @code{progmem} and @code{__flash}.  This applies to devices from
6257 families @code{avrtiny} and @code{avrxmega3}, see @ref{AVR Options} for
6258 an overview.
6260 @item @bullet{}@tie{}Reduced AVR Tiny cores like ATtiny40:
6261 The compiler adds @code{0x4000}
6262 to the addresses of objects and declarations in @code{progmem} and locates
6263 the objects in flash memory, namely in section @code{.progmem.data}.
6264 The offset is needed because the flash memory is visible in the RAM
6265 address space starting at address @code{0x4000}.
6267 Data in @code{progmem} can be accessed by means of ordinary C@tie{}code,
6268 no special functions or macros are needed.
6270 @smallexample
6271 /* var is located in flash memory */
6272 extern const int var[2] __attribute__((progmem));
6274 int read_var (int i)
6276     return var[i];
6278 @end smallexample
6280 Please notice that on these devices, there is no need for @code{progmem}
6281 at all.
6283 @end table
6285 @item io
6286 @itemx io (@var{addr})
6287 @cindex @code{io} variable attribute, AVR
6288 Variables with the @code{io} attribute are used to address
6289 memory-mapped peripherals in the io address range.
6290 If an address is specified, the variable
6291 is assigned that address, and the value is interpreted as an
6292 address in the data address space.
6293 Example:
6295 @smallexample
6296 volatile int porta __attribute__((io (0x22)));
6297 @end smallexample
6299 The address specified in the address in the data address range.
6301 Otherwise, the variable it is not assigned an address, but the
6302 compiler will still use in/out instructions where applicable,
6303 assuming some other module assigns an address in the io address range.
6304 Example:
6306 @smallexample
6307 extern volatile int porta __attribute__((io));
6308 @end smallexample
6310 @item io_low
6311 @itemx io_low (@var{addr})
6312 @cindex @code{io_low} variable attribute, AVR
6313 This is like the @code{io} attribute, but additionally it informs the
6314 compiler that the object lies in the lower half of the I/O area,
6315 allowing the use of @code{cbi}, @code{sbi}, @code{sbic} and @code{sbis}
6316 instructions.
6318 @item address
6319 @itemx address (@var{addr})
6320 @cindex @code{address} variable attribute, AVR
6321 Variables with the @code{address} attribute are used to address
6322 memory-mapped peripherals that may lie outside the io address range.
6324 @smallexample
6325 volatile int porta __attribute__((address (0x600)));
6326 @end smallexample
6328 @item absdata
6329 @cindex @code{absdata} variable attribute, AVR
6330 Variables in static storage and with the @code{absdata} attribute can
6331 be accessed by the @code{LDS} and @code{STS} instructions which take
6332 absolute addresses.
6334 @itemize @bullet
6335 @item
6336 This attribute is only supported for the reduced AVR Tiny core
6337 like ATtiny40.
6339 @item
6340 You must make sure that respective data is located in the
6341 address range @code{0x40}@dots{}@code{0xbf} accessible by
6342 @code{LDS} and @code{STS}.  One way to achieve this as an
6343 appropriate linker description file.
6345 @item
6346 If the location does not fit the address range of @code{LDS}
6347 and @code{STS}, there is currently (Binutils 2.26) just an unspecific
6348 warning like
6349 @quotation
6350 @code{module.c:(.text+0x1c): warning: internal error: out of range error}
6351 @end quotation
6353 @end itemize
6355 See also the @option{-mabsdata} @ref{AVR Options,command-line option}.
6357 @end table
6359 @node Blackfin Variable Attributes
6360 @subsection Blackfin Variable Attributes
6362 Three attributes are currently defined for the Blackfin.
6364 @table @code
6365 @item l1_data
6366 @itemx l1_data_A
6367 @itemx l1_data_B
6368 @cindex @code{l1_data} variable attribute, Blackfin
6369 @cindex @code{l1_data_A} variable attribute, Blackfin
6370 @cindex @code{l1_data_B} variable attribute, Blackfin
6371 Use these attributes on the Blackfin to place the variable into L1 Data SRAM.
6372 Variables with @code{l1_data} attribute are put into the specific section
6373 named @code{.l1.data}. Those with @code{l1_data_A} attribute are put into
6374 the specific section named @code{.l1.data.A}. Those with @code{l1_data_B}
6375 attribute are put into the specific section named @code{.l1.data.B}.
6377 @item l2
6378 @cindex @code{l2} variable attribute, Blackfin
6379 Use this attribute on the Blackfin to place the variable into L2 SRAM.
6380 Variables with @code{l2} attribute are put into the specific section
6381 named @code{.l2.data}.
6382 @end table
6384 @node H8/300 Variable Attributes
6385 @subsection H8/300 Variable Attributes
6387 These variable attributes are available for H8/300 targets:
6389 @table @code
6390 @item eightbit_data
6391 @cindex @code{eightbit_data} variable attribute, H8/300
6392 @cindex eight-bit data on the H8/300, H8/300H, and H8S
6393 Use this attribute on the H8/300, H8/300H, and H8S to indicate that the specified
6394 variable should be placed into the eight-bit data section.
6395 The compiler generates more efficient code for certain operations
6396 on data in the eight-bit data area.  Note the eight-bit data area is limited to
6397 256 bytes of data.
6399 You must use GAS and GLD from GNU binutils version 2.7 or later for
6400 this attribute to work correctly.
6402 @item tiny_data
6403 @cindex @code{tiny_data} variable attribute, H8/300
6404 @cindex tiny data section on the H8/300H and H8S
6405 Use this attribute on the H8/300H and H8S to indicate that the specified
6406 variable should be placed into the tiny data section.
6407 The compiler generates more efficient code for loads and stores
6408 on data in the tiny data section.  Note the tiny data area is limited to
6409 slightly under 32KB of data.
6411 @end table
6413 @node IA-64 Variable Attributes
6414 @subsection IA-64 Variable Attributes
6416 The IA-64 back end supports the following variable attribute:
6418 @table @code
6419 @item model (@var{model-name})
6420 @cindex @code{model} variable attribute, IA-64
6422 On IA-64, use this attribute to set the addressability of an object.
6423 At present, the only supported identifier for @var{model-name} is
6424 @code{small}, indicating addressability via ``small'' (22-bit)
6425 addresses (so that their addresses can be loaded with the @code{addl}
6426 instruction).  Caveat: such addressing is by definition not position
6427 independent and hence this attribute must not be used for objects
6428 defined by shared libraries.
6430 @end table
6432 @node M32R/D Variable Attributes
6433 @subsection M32R/D Variable Attributes
6435 One attribute is currently defined for the M32R/D@.
6437 @table @code
6438 @item model (@var{model-name})
6439 @cindex @code{model-name} variable attribute, M32R/D
6440 @cindex variable addressability on the M32R/D
6441 Use this attribute on the M32R/D to set the addressability of an object.
6442 The identifier @var{model-name} is one of @code{small}, @code{medium},
6443 or @code{large}, representing each of the code models.
6445 Small model objects live in the lower 16MB of memory (so that their
6446 addresses can be loaded with the @code{ld24} instruction).
6448 Medium and large model objects may live anywhere in the 32-bit address space
6449 (the compiler generates @code{seth/add3} instructions to load their
6450 addresses).
6451 @end table
6453 @node MeP Variable Attributes
6454 @subsection MeP Variable Attributes
6456 The MeP target has a number of addressing modes and busses.  The
6457 @code{near} space spans the standard memory space's first 16 megabytes
6458 (24 bits).  The @code{far} space spans the entire 32-bit memory space.
6459 The @code{based} space is a 128-byte region in the memory space that
6460 is addressed relative to the @code{$tp} register.  The @code{tiny}
6461 space is a 65536-byte region relative to the @code{$gp} register.  In
6462 addition to these memory regions, the MeP target has a separate 16-bit
6463 control bus which is specified with @code{cb} attributes.
6465 @table @code
6467 @item based
6468 @cindex @code{based} variable attribute, MeP
6469 Any variable with the @code{based} attribute is assigned to the
6470 @code{.based} section, and is accessed with relative to the
6471 @code{$tp} register.
6473 @item tiny
6474 @cindex @code{tiny} variable attribute, MeP
6475 Likewise, the @code{tiny} attribute assigned variables to the
6476 @code{.tiny} section, relative to the @code{$gp} register.
6478 @item near
6479 @cindex @code{near} variable attribute, MeP
6480 Variables with the @code{near} attribute are assumed to have addresses
6481 that fit in a 24-bit addressing mode.  This is the default for large
6482 variables (@code{-mtiny=4} is the default) but this attribute can
6483 override @code{-mtiny=} for small variables, or override @code{-ml}.
6485 @item far
6486 @cindex @code{far} variable attribute, MeP
6487 Variables with the @code{far} attribute are addressed using a full
6488 32-bit address.  Since this covers the entire memory space, this
6489 allows modules to make no assumptions about where variables might be
6490 stored.
6492 @item io
6493 @cindex @code{io} variable attribute, MeP
6494 @itemx io (@var{addr})
6495 Variables with the @code{io} attribute are used to address
6496 memory-mapped peripherals.  If an address is specified, the variable
6497 is assigned that address, else it is not assigned an address (it is
6498 assumed some other module assigns an address).  Example:
6500 @smallexample
6501 int timer_count __attribute__((io(0x123)));
6502 @end smallexample
6504 @item cb
6505 @itemx cb (@var{addr})
6506 @cindex @code{cb} variable attribute, MeP
6507 Variables with the @code{cb} attribute are used to access the control
6508 bus, using special instructions.  @code{addr} indicates the control bus
6509 address.  Example:
6511 @smallexample
6512 int cpu_clock __attribute__((cb(0x123)));
6513 @end smallexample
6515 @end table
6517 @node Microsoft Windows Variable Attributes
6518 @subsection Microsoft Windows Variable Attributes
6520 You can use these attributes on Microsoft Windows targets.
6521 @ref{x86 Variable Attributes} for additional Windows compatibility
6522 attributes available on all x86 targets.
6524 @table @code
6525 @item dllimport
6526 @itemx dllexport
6527 @cindex @code{dllimport} variable attribute
6528 @cindex @code{dllexport} variable attribute
6529 The @code{dllimport} and @code{dllexport} attributes are described in
6530 @ref{Microsoft Windows Function Attributes}.
6532 @item selectany
6533 @cindex @code{selectany} variable attribute
6534 The @code{selectany} attribute causes an initialized global variable to
6535 have link-once semantics.  When multiple definitions of the variable are
6536 encountered by the linker, the first is selected and the remainder are
6537 discarded.  Following usage by the Microsoft compiler, the linker is told
6538 @emph{not} to warn about size or content differences of the multiple
6539 definitions.
6541 Although the primary usage of this attribute is for POD types, the
6542 attribute can also be applied to global C++ objects that are initialized
6543 by a constructor.  In this case, the static initialization and destruction
6544 code for the object is emitted in each translation defining the object,
6545 but the calls to the constructor and destructor are protected by a
6546 link-once guard variable.
6548 The @code{selectany} attribute is only available on Microsoft Windows
6549 targets.  You can use @code{__declspec (selectany)} as a synonym for
6550 @code{__attribute__ ((selectany))} for compatibility with other
6551 compilers.
6553 @item shared
6554 @cindex @code{shared} variable attribute
6555 On Microsoft Windows, in addition to putting variable definitions in a named
6556 section, the section can also be shared among all running copies of an
6557 executable or DLL@.  For example, this small program defines shared data
6558 by putting it in a named section @code{shared} and marking the section
6559 shareable:
6561 @smallexample
6562 int foo __attribute__((section ("shared"), shared)) = 0;
6565 main()
6567   /* @r{Read and write foo.  All running
6568      copies see the same value.}  */
6569   return 0;
6571 @end smallexample
6573 @noindent
6574 You may only use the @code{shared} attribute along with @code{section}
6575 attribute with a fully-initialized global definition because of the way
6576 linkers work.  See @code{section} attribute for more information.
6578 The @code{shared} attribute is only available on Microsoft Windows@.
6580 @end table
6582 @node MSP430 Variable Attributes
6583 @subsection MSP430 Variable Attributes
6585 @table @code
6586 @item noinit
6587 @cindex @code{noinit} variable attribute, MSP430 
6588 Any data with the @code{noinit} attribute will not be initialised by
6589 the C runtime startup code, or the program loader.  Not initialising
6590 data in this way can reduce program startup times.
6592 @item persistent
6593 @cindex @code{persistent} variable attribute, MSP430 
6594 Any variable with the @code{persistent} attribute will not be
6595 initialised by the C runtime startup code.  Instead its value will be
6596 set once, when the application is loaded, and then never initialised
6597 again, even if the processor is reset or the program restarts.
6598 Persistent data is intended to be placed into FLASH RAM, where its
6599 value will be retained across resets.  The linker script being used to
6600 create the application should ensure that persistent data is correctly
6601 placed.
6603 @item lower
6604 @itemx upper
6605 @itemx either
6606 @cindex @code{lower} variable attribute, MSP430 
6607 @cindex @code{upper} variable attribute, MSP430 
6608 @cindex @code{either} variable attribute, MSP430 
6609 These attributes are the same as the MSP430 function attributes of the
6610 same name (@pxref{MSP430 Function Attributes}).  
6611 These attributes can be applied to both functions and variables.
6612 @end table
6614 @node Nvidia PTX Variable Attributes
6615 @subsection Nvidia PTX Variable Attributes
6617 These variable attributes are supported by the Nvidia PTX back end:
6619 @table @code
6620 @item shared
6621 @cindex @code{shared} attribute, Nvidia PTX
6622 Use this attribute to place a variable in the @code{.shared} memory space.
6623 This memory space is private to each cooperative thread array; only threads
6624 within one thread block refer to the same instance of the variable.
6625 The runtime does not initialize variables in this memory space.
6626 @end table
6628 @node PowerPC Variable Attributes
6629 @subsection PowerPC Variable Attributes
6631 Three attributes currently are defined for PowerPC configurations:
6632 @code{altivec}, @code{ms_struct} and @code{gcc_struct}.
6634 @cindex @code{ms_struct} variable attribute, PowerPC
6635 @cindex @code{gcc_struct} variable attribute, PowerPC
6636 For full documentation of the struct attributes please see the
6637 documentation in @ref{x86 Variable Attributes}.
6639 @cindex @code{altivec} variable attribute, PowerPC
6640 For documentation of @code{altivec} attribute please see the
6641 documentation in @ref{PowerPC Type Attributes}.
6643 @node RL78 Variable Attributes
6644 @subsection RL78 Variable Attributes
6646 @cindex @code{saddr} variable attribute, RL78
6647 The RL78 back end supports the @code{saddr} variable attribute.  This
6648 specifies placement of the corresponding variable in the SADDR area,
6649 which can be accessed more efficiently than the default memory region.
6651 @node SPU Variable Attributes
6652 @subsection SPU Variable Attributes
6654 @cindex @code{spu_vector} variable attribute, SPU
6655 The SPU supports the @code{spu_vector} attribute for variables.  For
6656 documentation of this attribute please see the documentation in
6657 @ref{SPU Type Attributes}.
6659 @node V850 Variable Attributes
6660 @subsection V850 Variable Attributes
6662 These variable attributes are supported by the V850 back end:
6664 @table @code
6666 @item sda
6667 @cindex @code{sda} variable attribute, V850
6668 Use this attribute to explicitly place a variable in the small data area,
6669 which can hold up to 64 kilobytes.
6671 @item tda
6672 @cindex @code{tda} variable attribute, V850
6673 Use this attribute to explicitly place a variable in the tiny data area,
6674 which can hold up to 256 bytes in total.
6676 @item zda
6677 @cindex @code{zda} variable attribute, V850
6678 Use this attribute to explicitly place a variable in the first 32 kilobytes
6679 of memory.
6680 @end table
6682 @node x86 Variable Attributes
6683 @subsection x86 Variable Attributes
6685 Two attributes are currently defined for x86 configurations:
6686 @code{ms_struct} and @code{gcc_struct}.
6688 @table @code
6689 @item ms_struct
6690 @itemx gcc_struct
6691 @cindex @code{ms_struct} variable attribute, x86
6692 @cindex @code{gcc_struct} variable attribute, x86
6694 If @code{packed} is used on a structure, or if bit-fields are used,
6695 it may be that the Microsoft ABI lays out the structure differently
6696 than the way GCC normally does.  Particularly when moving packed
6697 data between functions compiled with GCC and the native Microsoft compiler
6698 (either via function call or as data in a file), it may be necessary to access
6699 either format.
6701 The @code{ms_struct} and @code{gcc_struct} attributes correspond
6702 to the @option{-mms-bitfields} and @option{-mno-ms-bitfields}
6703 command-line options, respectively;
6704 see @ref{x86 Options}, for details of how structure layout is affected.
6705 @xref{x86 Type Attributes}, for information about the corresponding
6706 attributes on types.
6708 @end table
6710 @node Xstormy16 Variable Attributes
6711 @subsection Xstormy16 Variable Attributes
6713 One attribute is currently defined for xstormy16 configurations:
6714 @code{below100}.
6716 @table @code
6717 @item below100
6718 @cindex @code{below100} variable attribute, Xstormy16
6720 If a variable has the @code{below100} attribute (@code{BELOW100} is
6721 allowed also), GCC places the variable in the first 0x100 bytes of
6722 memory and use special opcodes to access it.  Such variables are
6723 placed in either the @code{.bss_below100} section or the
6724 @code{.data_below100} section.
6726 @end table
6728 @node Type Attributes
6729 @section Specifying Attributes of Types
6730 @cindex attribute of types
6731 @cindex type attributes
6733 The keyword @code{__attribute__} allows you to specify special
6734 attributes of types.  Some type attributes apply only to @code{struct}
6735 and @code{union} types, while others can apply to any type defined
6736 via a @code{typedef} declaration.  Other attributes are defined for
6737 functions (@pxref{Function Attributes}), labels (@pxref{Label 
6738 Attributes}), enumerators (@pxref{Enumerator Attributes}), 
6739 statements (@pxref{Statement Attributes}), and for
6740 variables (@pxref{Variable Attributes}).
6742 The @code{__attribute__} keyword is followed by an attribute specification
6743 inside double parentheses.  
6745 You may specify type attributes in an enum, struct or union type
6746 declaration or definition by placing them immediately after the
6747 @code{struct}, @code{union} or @code{enum} keyword.  A less preferred
6748 syntax is to place them just past the closing curly brace of the
6749 definition.
6751 You can also include type attributes in a @code{typedef} declaration.
6752 @xref{Attribute Syntax}, for details of the exact syntax for using
6753 attributes.
6755 @menu
6756 * Common Type Attributes::
6757 * ARM Type Attributes::
6758 * MeP Type Attributes::
6759 * PowerPC Type Attributes::
6760 * SPU Type Attributes::
6761 * x86 Type Attributes::
6762 @end menu
6764 @node Common Type Attributes
6765 @subsection Common Type Attributes
6767 The following type attributes are supported on most targets.
6769 @table @code
6770 @cindex @code{aligned} type attribute
6771 @item aligned (@var{alignment})
6772 This attribute specifies a minimum alignment (in bytes) for variables
6773 of the specified type.  For example, the declarations:
6775 @smallexample
6776 struct S @{ short f[3]; @} __attribute__ ((aligned (8)));
6777 typedef int more_aligned_int __attribute__ ((aligned (8)));
6778 @end smallexample
6780 @noindent
6781 force the compiler to ensure (as far as it can) that each variable whose
6782 type is @code{struct S} or @code{more_aligned_int} is allocated and
6783 aligned @emph{at least} on a 8-byte boundary.  On a SPARC, having all
6784 variables of type @code{struct S} aligned to 8-byte boundaries allows
6785 the compiler to use the @code{ldd} and @code{std} (doubleword load and
6786 store) instructions when copying one variable of type @code{struct S} to
6787 another, thus improving run-time efficiency.
6789 Note that the alignment of any given @code{struct} or @code{union} type
6790 is required by the ISO C standard to be at least a perfect multiple of
6791 the lowest common multiple of the alignments of all of the members of
6792 the @code{struct} or @code{union} in question.  This means that you @emph{can}
6793 effectively adjust the alignment of a @code{struct} or @code{union}
6794 type by attaching an @code{aligned} attribute to any one of the members
6795 of such a type, but the notation illustrated in the example above is a
6796 more obvious, intuitive, and readable way to request the compiler to
6797 adjust the alignment of an entire @code{struct} or @code{union} type.
6799 As in the preceding example, you can explicitly specify the alignment
6800 (in bytes) that you wish the compiler to use for a given @code{struct}
6801 or @code{union} type.  Alternatively, you can leave out the alignment factor
6802 and just ask the compiler to align a type to the maximum
6803 useful alignment for the target machine you are compiling for.  For
6804 example, you could write:
6806 @smallexample
6807 struct S @{ short f[3]; @} __attribute__ ((aligned));
6808 @end smallexample
6810 Whenever you leave out the alignment factor in an @code{aligned}
6811 attribute specification, the compiler automatically sets the alignment
6812 for the type to the largest alignment that is ever used for any data
6813 type on the target machine you are compiling for.  Doing this can often
6814 make copy operations more efficient, because the compiler can use
6815 whatever instructions copy the biggest chunks of memory when performing
6816 copies to or from the variables that have types that you have aligned
6817 this way.
6819 In the example above, if the size of each @code{short} is 2 bytes, then
6820 the size of the entire @code{struct S} type is 6 bytes.  The smallest
6821 power of two that is greater than or equal to that is 8, so the
6822 compiler sets the alignment for the entire @code{struct S} type to 8
6823 bytes.
6825 Note that although you can ask the compiler to select a time-efficient
6826 alignment for a given type and then declare only individual stand-alone
6827 objects of that type, the compiler's ability to select a time-efficient
6828 alignment is primarily useful only when you plan to create arrays of
6829 variables having the relevant (efficiently aligned) type.  If you
6830 declare or use arrays of variables of an efficiently-aligned type, then
6831 it is likely that your program also does pointer arithmetic (or
6832 subscripting, which amounts to the same thing) on pointers to the
6833 relevant type, and the code that the compiler generates for these
6834 pointer arithmetic operations is often more efficient for
6835 efficiently-aligned types than for other types.
6837 Note that the effectiveness of @code{aligned} attributes may be limited
6838 by inherent limitations in your linker.  On many systems, the linker is
6839 only able to arrange for variables to be aligned up to a certain maximum
6840 alignment.  (For some linkers, the maximum supported alignment may
6841 be very very small.)  If your linker is only able to align variables
6842 up to a maximum of 8-byte alignment, then specifying @code{aligned(16)}
6843 in an @code{__attribute__} still only provides you with 8-byte
6844 alignment.  See your linker documentation for further information.
6846 The @code{aligned} attribute can only increase alignment.  Alignment
6847 can be decreased by specifying the @code{packed} attribute.  See below.
6849 @cindex @code{warn_if_not_aligned} type attribute
6850 @item warn_if_not_aligned (@var{alignment})
6851 This attribute specifies a threshold for the structure field, measured
6852 in bytes.  If the structure field is aligned below the threshold, a
6853 warning will be issued.  For example, the declaration:
6855 @smallexample
6856 typedef unsigned long long __u64
6857    __attribute__((aligned(4),warn_if_not_aligned(8)));
6859 struct foo
6861   int i1;
6862   int i2;
6863   __u64 x;
6865 @end smallexample
6867 @noindent
6868 causes the compiler to issue an warning on @code{struct foo}, like
6869 @samp{warning: alignment 4 of 'struct foo' is less than 8}.
6870 It is used to define @code{struct foo} in such a way that
6871 @code{struct foo} has the same layout and the structure field @code{x}
6872 has the same alignment when @code{__u64} is aligned at either 4 or
6873 8 bytes.  Align @code{struct foo} to 8 bytes:
6875 @smallexample
6876 struct foo
6878   int i1;
6879   int i2;
6880   __u64 x;
6881 @} __attribute__((aligned(8)));
6882 @end smallexample
6884 @noindent
6885 silences the warning.  The compiler also issues a warning, like
6886 @samp{warning: 'x' offset 12 in 'struct foo' isn't aligned to 8},
6887 when the structure field has the misaligned offset:
6889 @smallexample
6890 struct foo
6892   int i1;
6893   int i2;
6894   int i3;
6895   __u64 x;
6896 @} __attribute__((aligned(8)));
6897 @end smallexample
6899 This warning can be disabled by @option{-Wno-if-not-aligned}.
6901 @item bnd_variable_size
6902 @cindex @code{bnd_variable_size} type attribute
6903 @cindex Pointer Bounds Checker attributes
6904 When applied to a structure field, this attribute tells Pointer
6905 Bounds Checker that the size of this field should not be computed
6906 using static type information.  It may be used to mark variably-sized
6907 static array fields placed at the end of a structure.
6909 @smallexample
6910 struct S
6912   int size;
6913   char data[1];
6915 S *p = (S *)malloc (sizeof(S) + 100);
6916 p->data[10] = 0; //Bounds violation
6917 @end smallexample
6919 @noindent
6920 By using an attribute for the field we may avoid unwanted bound
6921 violation checks:
6923 @smallexample
6924 struct S
6926   int size;
6927   char data[1] __attribute__((bnd_variable_size));
6929 S *p = (S *)malloc (sizeof(S) + 100);
6930 p->data[10] = 0; //OK
6931 @end smallexample
6933 @item deprecated
6934 @itemx deprecated (@var{msg})
6935 @cindex @code{deprecated} type attribute
6936 The @code{deprecated} attribute results in a warning if the type
6937 is used anywhere in the source file.  This is useful when identifying
6938 types that are expected to be removed in a future version of a program.
6939 If possible, the warning also includes the location of the declaration
6940 of the deprecated type, to enable users to easily find further
6941 information about why the type is deprecated, or what they should do
6942 instead.  Note that the warnings only occur for uses and then only
6943 if the type is being applied to an identifier that itself is not being
6944 declared as deprecated.
6946 @smallexample
6947 typedef int T1 __attribute__ ((deprecated));
6948 T1 x;
6949 typedef T1 T2;
6950 T2 y;
6951 typedef T1 T3 __attribute__ ((deprecated));
6952 T3 z __attribute__ ((deprecated));
6953 @end smallexample
6955 @noindent
6956 results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
6957 warning is issued for line 4 because T2 is not explicitly
6958 deprecated.  Line 5 has no warning because T3 is explicitly
6959 deprecated.  Similarly for line 6.  The optional @var{msg}
6960 argument, which must be a string, is printed in the warning if
6961 present.
6963 The @code{deprecated} attribute can also be used for functions and
6964 variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.)
6966 @item designated_init
6967 @cindex @code{designated_init} type attribute
6968 This attribute may only be applied to structure types.  It indicates
6969 that any initialization of an object of this type must use designated
6970 initializers rather than positional initializers.  The intent of this
6971 attribute is to allow the programmer to indicate that a structure's
6972 layout may change, and that therefore relying on positional
6973 initialization will result in future breakage.
6975 GCC emits warnings based on this attribute by default; use
6976 @option{-Wno-designated-init} to suppress them.
6978 @item may_alias
6979 @cindex @code{may_alias} type attribute
6980 Accesses through pointers to types with this attribute are not subject
6981 to type-based alias analysis, but are instead assumed to be able to alias
6982 any other type of objects.
6983 In the context of section 6.5 paragraph 7 of the C99 standard,
6984 an lvalue expression
6985 dereferencing such a pointer is treated like having a character type.
6986 See @option{-fstrict-aliasing} for more information on aliasing issues.
6987 This extension exists to support some vector APIs, in which pointers to
6988 one vector type are permitted to alias pointers to a different vector type.
6990 Note that an object of a type with this attribute does not have any
6991 special semantics.
6993 Example of use:
6995 @smallexample
6996 typedef short __attribute__((__may_alias__)) short_a;
6999 main (void)
7001   int a = 0x12345678;
7002   short_a *b = (short_a *) &a;
7004   b[1] = 0;
7006   if (a == 0x12345678)
7007     abort();
7009   exit(0);
7011 @end smallexample
7013 @noindent
7014 If you replaced @code{short_a} with @code{short} in the variable
7015 declaration, the above program would abort when compiled with
7016 @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
7017 above.
7019 @item packed
7020 @cindex @code{packed} type attribute
7021 This attribute, attached to @code{struct} or @code{union} type
7022 definition, specifies that each member (other than zero-width bit-fields)
7023 of the structure or union is placed to minimize the memory required.  When
7024 attached to an @code{enum} definition, it indicates that the smallest
7025 integral type should be used.
7027 @opindex fshort-enums
7028 Specifying the @code{packed} attribute for @code{struct} and @code{union}
7029 types is equivalent to specifying the @code{packed} attribute on each
7030 of the structure or union members.  Specifying the @option{-fshort-enums}
7031 flag on the command line is equivalent to specifying the @code{packed}
7032 attribute on all @code{enum} definitions.
7034 In the following example @code{struct my_packed_struct}'s members are
7035 packed closely together, but the internal layout of its @code{s} member
7036 is not packed---to do that, @code{struct my_unpacked_struct} needs to
7037 be packed too.
7039 @smallexample
7040 struct my_unpacked_struct
7041  @{
7042     char c;
7043     int i;
7044  @};
7046 struct __attribute__ ((__packed__)) my_packed_struct
7047   @{
7048      char c;
7049      int  i;
7050      struct my_unpacked_struct s;
7051   @};
7052 @end smallexample
7054 You may only specify the @code{packed} attribute attribute on the definition
7055 of an @code{enum}, @code{struct} or @code{union}, not on a @code{typedef}
7056 that does not also define the enumerated type, structure or union.
7058 @item scalar_storage_order ("@var{endianness}")
7059 @cindex @code{scalar_storage_order} type attribute
7060 When attached to a @code{union} or a @code{struct}, this attribute sets
7061 the storage order, aka endianness, of the scalar fields of the type, as
7062 well as the array fields whose component is scalar.  The supported
7063 endiannesses are @code{big-endian} and @code{little-endian}.  The attribute
7064 has no effects on fields which are themselves a @code{union}, a @code{struct}
7065 or an array whose component is a @code{union} or a @code{struct}, and it is
7066 possible for these fields to have a different scalar storage order than the
7067 enclosing type.
7069 This attribute is supported only for targets that use a uniform default
7070 scalar storage order (fortunately, most of them), i.e. targets that store
7071 the scalars either all in big-endian or all in little-endian.
7073 Additional restrictions are enforced for types with the reverse scalar
7074 storage order with regard to the scalar storage order of the target:
7076 @itemize
7077 @item Taking the address of a scalar field of a @code{union} or a
7078 @code{struct} with reverse scalar storage order is not permitted and yields
7079 an error.
7080 @item Taking the address of an array field, whose component is scalar, of
7081 a @code{union} or a @code{struct} with reverse scalar storage order is
7082 permitted but yields a warning, unless @option{-Wno-scalar-storage-order}
7083 is specified.
7084 @item Taking the address of a @code{union} or a @code{struct} with reverse
7085 scalar storage order is permitted.
7086 @end itemize
7088 These restrictions exist because the storage order attribute is lost when
7089 the address of a scalar or the address of an array with scalar component is
7090 taken, so storing indirectly through this address generally does not work.
7091 The second case is nevertheless allowed to be able to perform a block copy
7092 from or to the array.
7094 Moreover, the use of type punning or aliasing to toggle the storage order
7095 is not supported; that is to say, a given scalar object cannot be accessed
7096 through distinct types that assign a different storage order to it.
7098 @item transparent_union
7099 @cindex @code{transparent_union} type attribute
7101 This attribute, attached to a @code{union} type definition, indicates
7102 that any function parameter having that union type causes calls to that
7103 function to be treated in a special way.
7105 First, the argument corresponding to a transparent union type can be of
7106 any type in the union; no cast is required.  Also, if the union contains
7107 a pointer type, the corresponding argument can be a null pointer
7108 constant or a void pointer expression; and if the union contains a void
7109 pointer type, the corresponding argument can be any pointer expression.
7110 If the union member type is a pointer, qualifiers like @code{const} on
7111 the referenced type must be respected, just as with normal pointer
7112 conversions.
7114 Second, the argument is passed to the function using the calling
7115 conventions of the first member of the transparent union, not the calling
7116 conventions of the union itself.  All members of the union must have the
7117 same machine representation; this is necessary for this argument passing
7118 to work properly.
7120 Transparent unions are designed for library functions that have multiple
7121 interfaces for compatibility reasons.  For example, suppose the
7122 @code{wait} function must accept either a value of type @code{int *} to
7123 comply with POSIX, or a value of type @code{union wait *} to comply with
7124 the 4.1BSD interface.  If @code{wait}'s parameter were @code{void *},
7125 @code{wait} would accept both kinds of arguments, but it would also
7126 accept any other pointer type and this would make argument type checking
7127 less useful.  Instead, @code{<sys/wait.h>} might define the interface
7128 as follows:
7130 @smallexample
7131 typedef union __attribute__ ((__transparent_union__))
7132   @{
7133     int *__ip;
7134     union wait *__up;
7135   @} wait_status_ptr_t;
7137 pid_t wait (wait_status_ptr_t);
7138 @end smallexample
7140 @noindent
7141 This interface allows either @code{int *} or @code{union wait *}
7142 arguments to be passed, using the @code{int *} calling convention.
7143 The program can call @code{wait} with arguments of either type:
7145 @smallexample
7146 int w1 () @{ int w; return wait (&w); @}
7147 int w2 () @{ union wait w; return wait (&w); @}
7148 @end smallexample
7150 @noindent
7151 With this interface, @code{wait}'s implementation might look like this:
7153 @smallexample
7154 pid_t wait (wait_status_ptr_t p)
7156   return waitpid (-1, p.__ip, 0);
7158 @end smallexample
7160 @item unused
7161 @cindex @code{unused} type attribute
7162 When attached to a type (including a @code{union} or a @code{struct}),
7163 this attribute means that variables of that type are meant to appear
7164 possibly unused.  GCC does not produce a warning for any variables of
7165 that type, even if the variable appears to do nothing.  This is often
7166 the case with lock or thread classes, which are usually defined and then
7167 not referenced, but contain constructors and destructors that have
7168 nontrivial bookkeeping functions.
7170 @item visibility
7171 @cindex @code{visibility} type attribute
7172 In C++, attribute visibility (@pxref{Function Attributes}) can also be
7173 applied to class, struct, union and enum types.  Unlike other type
7174 attributes, the attribute must appear between the initial keyword and
7175 the name of the type; it cannot appear after the body of the type.
7177 Note that the type visibility is applied to vague linkage entities
7178 associated with the class (vtable, typeinfo node, etc.).  In
7179 particular, if a class is thrown as an exception in one shared object
7180 and caught in another, the class must have default visibility.
7181 Otherwise the two shared objects are unable to use the same
7182 typeinfo node and exception handling will break.
7184 @end table
7186 To specify multiple attributes, separate them by commas within the
7187 double parentheses: for example, @samp{__attribute__ ((aligned (16),
7188 packed))}.
7190 @node ARM Type Attributes
7191 @subsection ARM Type Attributes
7193 @cindex @code{notshared} type attribute, ARM
7194 On those ARM targets that support @code{dllimport} (such as Symbian
7195 OS), you can use the @code{notshared} attribute to indicate that the
7196 virtual table and other similar data for a class should not be
7197 exported from a DLL@.  For example:
7199 @smallexample
7200 class __declspec(notshared) C @{
7201 public:
7202   __declspec(dllimport) C();
7203   virtual void f();
7206 __declspec(dllexport)
7207 C::C() @{@}
7208 @end smallexample
7210 @noindent
7211 In this code, @code{C::C} is exported from the current DLL, but the
7212 virtual table for @code{C} is not exported.  (You can use
7213 @code{__attribute__} instead of @code{__declspec} if you prefer, but
7214 most Symbian OS code uses @code{__declspec}.)
7216 @node MeP Type Attributes
7217 @subsection MeP Type Attributes
7219 @cindex @code{based} type attribute, MeP
7220 @cindex @code{tiny} type attribute, MeP
7221 @cindex @code{near} type attribute, MeP
7222 @cindex @code{far} type attribute, MeP
7223 Many of the MeP variable attributes may be applied to types as well.
7224 Specifically, the @code{based}, @code{tiny}, @code{near}, and
7225 @code{far} attributes may be applied to either.  The @code{io} and
7226 @code{cb} attributes may not be applied to types.
7228 @node PowerPC Type Attributes
7229 @subsection PowerPC Type Attributes
7231 Three attributes currently are defined for PowerPC configurations:
7232 @code{altivec}, @code{ms_struct} and @code{gcc_struct}.
7234 @cindex @code{ms_struct} type attribute, PowerPC
7235 @cindex @code{gcc_struct} type attribute, PowerPC
7236 For full documentation of the @code{ms_struct} and @code{gcc_struct}
7237 attributes please see the documentation in @ref{x86 Type Attributes}.
7239 @cindex @code{altivec} type attribute, PowerPC
7240 The @code{altivec} attribute allows one to declare AltiVec vector data
7241 types supported by the AltiVec Programming Interface Manual.  The
7242 attribute requires an argument to specify one of three vector types:
7243 @code{vector__}, @code{pixel__} (always followed by unsigned short),
7244 and @code{bool__} (always followed by unsigned).
7246 @smallexample
7247 __attribute__((altivec(vector__)))
7248 __attribute__((altivec(pixel__))) unsigned short
7249 __attribute__((altivec(bool__))) unsigned
7250 @end smallexample
7252 These attributes mainly are intended to support the @code{__vector},
7253 @code{__pixel}, and @code{__bool} AltiVec keywords.
7255 @node SPU Type Attributes
7256 @subsection SPU Type Attributes
7258 @cindex @code{spu_vector} type attribute, SPU
7259 The SPU supports the @code{spu_vector} attribute for types.  This attribute
7260 allows one to declare vector data types supported by the Sony/Toshiba/IBM SPU
7261 Language Extensions Specification.  It is intended to support the
7262 @code{__vector} keyword.
7264 @node x86 Type Attributes
7265 @subsection x86 Type Attributes
7267 Two attributes are currently defined for x86 configurations:
7268 @code{ms_struct} and @code{gcc_struct}.
7270 @table @code
7272 @item ms_struct
7273 @itemx gcc_struct
7274 @cindex @code{ms_struct} type attribute, x86
7275 @cindex @code{gcc_struct} type attribute, x86
7277 If @code{packed} is used on a structure, or if bit-fields are used
7278 it may be that the Microsoft ABI packs them differently
7279 than GCC normally packs them.  Particularly when moving packed
7280 data between functions compiled with GCC and the native Microsoft compiler
7281 (either via function call or as data in a file), it may be necessary to access
7282 either format.
7284 The @code{ms_struct} and @code{gcc_struct} attributes correspond
7285 to the @option{-mms-bitfields} and @option{-mno-ms-bitfields}
7286 command-line options, respectively;
7287 see @ref{x86 Options}, for details of how structure layout is affected.
7288 @xref{x86 Variable Attributes}, for information about the corresponding
7289 attributes on variables.
7291 @end table
7293 @node Label Attributes
7294 @section Label Attributes
7295 @cindex Label Attributes
7297 GCC allows attributes to be set on C labels.  @xref{Attribute Syntax}, for 
7298 details of the exact syntax for using attributes.  Other attributes are 
7299 available for functions (@pxref{Function Attributes}), variables 
7300 (@pxref{Variable Attributes}), enumerators (@pxref{Enumerator Attributes}),
7301 statements (@pxref{Statement Attributes}), and for types
7302 (@pxref{Type Attributes}).
7304 This example uses the @code{cold} label attribute to indicate the 
7305 @code{ErrorHandling} branch is unlikely to be taken and that the
7306 @code{ErrorHandling} label is unused:
7308 @smallexample
7310    asm goto ("some asm" : : : : NoError);
7312 /* This branch (the fall-through from the asm) is less commonly used */
7313 ErrorHandling: 
7314    __attribute__((cold, unused)); /* Semi-colon is required here */
7315    printf("error\n");
7316    return 0;
7318 NoError:
7319    printf("no error\n");
7320    return 1;
7321 @end smallexample
7323 @table @code
7324 @item unused
7325 @cindex @code{unused} label attribute
7326 This feature is intended for program-generated code that may contain 
7327 unused labels, but which is compiled with @option{-Wall}.  It is
7328 not normally appropriate to use in it human-written code, though it
7329 could be useful in cases where the code that jumps to the label is
7330 contained within an @code{#ifdef} conditional.
7332 @item hot
7333 @cindex @code{hot} label attribute
7334 The @code{hot} attribute on a label is used to inform the compiler that
7335 the path following the label is more likely than paths that are not so
7336 annotated.  This attribute is used in cases where @code{__builtin_expect}
7337 cannot be used, for instance with computed goto or @code{asm goto}.
7339 @item cold
7340 @cindex @code{cold} label attribute
7341 The @code{cold} attribute on labels is used to inform the compiler that
7342 the path following the label is unlikely to be executed.  This attribute
7343 is used in cases where @code{__builtin_expect} cannot be used, for instance
7344 with computed goto or @code{asm goto}.
7346 @end table
7348 @node Enumerator Attributes
7349 @section Enumerator Attributes
7350 @cindex Enumerator Attributes
7352 GCC allows attributes to be set on enumerators.  @xref{Attribute Syntax}, for
7353 details of the exact syntax for using attributes.  Other attributes are
7354 available for functions (@pxref{Function Attributes}), variables
7355 (@pxref{Variable Attributes}), labels (@pxref{Label Attributes}), statements
7356 (@pxref{Statement Attributes}), and for types (@pxref{Type Attributes}).
7358 This example uses the @code{deprecated} enumerator attribute to indicate the
7359 @code{oldval} enumerator is deprecated:
7361 @smallexample
7362 enum E @{
7363   oldval __attribute__((deprecated)),
7364   newval
7368 fn (void)
7370   return oldval;
7372 @end smallexample
7374 @table @code
7375 @item deprecated
7376 @cindex @code{deprecated} enumerator attribute
7377 The @code{deprecated} attribute results in a warning if the enumerator
7378 is used anywhere in the source file.  This is useful when identifying
7379 enumerators that are expected to be removed in a future version of a
7380 program.  The warning also includes the location of the declaration
7381 of the deprecated enumerator, to enable users to easily find further
7382 information about why the enumerator is deprecated, or what they should
7383 do instead.  Note that the warnings only occurs for uses.
7385 @end table
7387 @node Statement Attributes
7388 @section Statement Attributes
7389 @cindex Statement Attributes
7391 GCC allows attributes to be set on null statements.  @xref{Attribute Syntax},
7392 for details of the exact syntax for using attributes.  Other attributes are
7393 available for functions (@pxref{Function Attributes}), variables
7394 (@pxref{Variable Attributes}), labels (@pxref{Label Attributes}), enumerators
7395 (@pxref{Enumerator Attributes}), and for types (@pxref{Type Attributes}).
7397 This example uses the @code{fallthrough} statement attribute to indicate that
7398 the @option{-Wimplicit-fallthrough} warning should not be emitted:
7400 @smallexample
7401 switch (cond)
7402   @{
7403   case 1:
7404     bar (1);
7405     __attribute__((fallthrough));
7406   case 2:
7407     @dots{}
7408   @}
7409 @end smallexample
7411 @table @code
7412 @item fallthrough
7413 @cindex @code{fallthrough} statement attribute
7414 The @code{fallthrough} attribute with a null statement serves as a
7415 fallthrough statement.  It hints to the compiler that a statement
7416 that falls through to another case label, or user-defined label
7417 in a switch statement is intentional and thus the
7418 @option{-Wimplicit-fallthrough} warning must not trigger.  The
7419 fallthrough attribute may appear at most once in each attribute
7420 list, and may not be mixed with other attributes.  It can only
7421 be used in a switch statement (the compiler will issue an error
7422 otherwise), after a preceding statement and before a logically
7423 succeeding case label, or user-defined label.
7425 @end table
7427 @node Attribute Syntax
7428 @section Attribute Syntax
7429 @cindex attribute syntax
7431 This section describes the syntax with which @code{__attribute__} may be
7432 used, and the constructs to which attribute specifiers bind, for the C
7433 language.  Some details may vary for C++ and Objective-C@.  Because of
7434 infelicities in the grammar for attributes, some forms described here
7435 may not be successfully parsed in all cases.
7437 There are some problems with the semantics of attributes in C++.  For
7438 example, there are no manglings for attributes, although they may affect
7439 code generation, so problems may arise when attributed types are used in
7440 conjunction with templates or overloading.  Similarly, @code{typeid}
7441 does not distinguish between types with different attributes.  Support
7442 for attributes in C++ may be restricted in future to attributes on
7443 declarations only, but not on nested declarators.
7445 @xref{Function Attributes}, for details of the semantics of attributes
7446 applying to functions.  @xref{Variable Attributes}, for details of the
7447 semantics of attributes applying to variables.  @xref{Type Attributes},
7448 for details of the semantics of attributes applying to structure, union
7449 and enumerated types.
7450 @xref{Label Attributes}, for details of the semantics of attributes 
7451 applying to labels.
7452 @xref{Enumerator Attributes}, for details of the semantics of attributes
7453 applying to enumerators.
7454 @xref{Statement Attributes}, for details of the semantics of attributes
7455 applying to statements.
7457 An @dfn{attribute specifier} is of the form
7458 @code{__attribute__ ((@var{attribute-list}))}.  An @dfn{attribute list}
7459 is a possibly empty comma-separated sequence of @dfn{attributes}, where
7460 each attribute is one of the following:
7462 @itemize @bullet
7463 @item
7464 Empty.  Empty attributes are ignored.
7466 @item
7467 An attribute name
7468 (which may be an identifier such as @code{unused}, or a reserved
7469 word such as @code{const}).
7471 @item
7472 An attribute name followed by a parenthesized list of
7473 parameters for the attribute.
7474 These parameters take one of the following forms:
7476 @itemize @bullet
7477 @item
7478 An identifier.  For example, @code{mode} attributes use this form.
7480 @item
7481 An identifier followed by a comma and a non-empty comma-separated list
7482 of expressions.  For example, @code{format} attributes use this form.
7484 @item
7485 A possibly empty comma-separated list of expressions.  For example,
7486 @code{format_arg} attributes use this form with the list being a single
7487 integer constant expression, and @code{alias} attributes use this form
7488 with the list being a single string constant.
7489 @end itemize
7490 @end itemize
7492 An @dfn{attribute specifier list} is a sequence of one or more attribute
7493 specifiers, not separated by any other tokens.
7495 You may optionally specify attribute names with @samp{__}
7496 preceding and following the name.
7497 This allows you to use them in header files without
7498 being concerned about a possible macro of the same name.  For example,
7499 you may use the attribute name @code{__noreturn__} instead of @code{noreturn}.
7502 @subsubheading Label Attributes
7504 In GNU C, an attribute specifier list may appear after the colon following a
7505 label, other than a @code{case} or @code{default} label.  GNU C++ only permits
7506 attributes on labels if the attribute specifier is immediately
7507 followed by a semicolon (i.e., the label applies to an empty
7508 statement).  If the semicolon is missing, C++ label attributes are
7509 ambiguous, as it is permissible for a declaration, which could begin
7510 with an attribute list, to be labelled in C++.  Declarations cannot be
7511 labelled in C90 or C99, so the ambiguity does not arise there.
7513 @subsubheading Enumerator Attributes
7515 In GNU C, an attribute specifier list may appear as part of an enumerator.
7516 The attribute goes after the enumeration constant, before @code{=}, if
7517 present.  The optional attribute in the enumerator appertains to the
7518 enumeration constant.  It is not possible to place the attribute after
7519 the constant expression, if present.
7521 @subsubheading Statement Attributes
7522 In GNU C, an attribute specifier list may appear as part of a null
7523 statement.  The attribute goes before the semicolon.
7525 @subsubheading Type Attributes
7527 An attribute specifier list may appear as part of a @code{struct},
7528 @code{union} or @code{enum} specifier.  It may go either immediately
7529 after the @code{struct}, @code{union} or @code{enum} keyword, or after
7530 the closing brace.  The former syntax is preferred.
7531 Where attribute specifiers follow the closing brace, they are considered
7532 to relate to the structure, union or enumerated type defined, not to any
7533 enclosing declaration the type specifier appears in, and the type
7534 defined is not complete until after the attribute specifiers.
7535 @c Otherwise, there would be the following problems: a shift/reduce
7536 @c conflict between attributes binding the struct/union/enum and
7537 @c binding to the list of specifiers/qualifiers; and "aligned"
7538 @c attributes could use sizeof for the structure, but the size could be
7539 @c changed later by "packed" attributes.
7542 @subsubheading All other attributes
7544 Otherwise, an attribute specifier appears as part of a declaration,
7545 counting declarations of unnamed parameters and type names, and relates
7546 to that declaration (which may be nested in another declaration, for
7547 example in the case of a parameter declaration), or to a particular declarator
7548 within a declaration.  Where an
7549 attribute specifier is applied to a parameter declared as a function or
7550 an array, it should apply to the function or array rather than the
7551 pointer to which the parameter is implicitly converted, but this is not
7552 yet correctly implemented.
7554 Any list of specifiers and qualifiers at the start of a declaration may
7555 contain attribute specifiers, whether or not such a list may in that
7556 context contain storage class specifiers.  (Some attributes, however,
7557 are essentially in the nature of storage class specifiers, and only make
7558 sense where storage class specifiers may be used; for example,
7559 @code{section}.)  There is one necessary limitation to this syntax: the
7560 first old-style parameter declaration in a function definition cannot
7561 begin with an attribute specifier, because such an attribute applies to
7562 the function instead by syntax described below (which, however, is not
7563 yet implemented in this case).  In some other cases, attribute
7564 specifiers are permitted by this grammar but not yet supported by the
7565 compiler.  All attribute specifiers in this place relate to the
7566 declaration as a whole.  In the obsolescent usage where a type of
7567 @code{int} is implied by the absence of type specifiers, such a list of
7568 specifiers and qualifiers may be an attribute specifier list with no
7569 other specifiers or qualifiers.
7571 At present, the first parameter in a function prototype must have some
7572 type specifier that is not an attribute specifier; this resolves an
7573 ambiguity in the interpretation of @code{void f(int
7574 (__attribute__((foo)) x))}, but is subject to change.  At present, if
7575 the parentheses of a function declarator contain only attributes then
7576 those attributes are ignored, rather than yielding an error or warning
7577 or implying a single parameter of type int, but this is subject to
7578 change.
7580 An attribute specifier list may appear immediately before a declarator
7581 (other than the first) in a comma-separated list of declarators in a
7582 declaration of more than one identifier using a single list of
7583 specifiers and qualifiers.  Such attribute specifiers apply
7584 only to the identifier before whose declarator they appear.  For
7585 example, in
7587 @smallexample
7588 __attribute__((noreturn)) void d0 (void),
7589     __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
7590      d2 (void);
7591 @end smallexample
7593 @noindent
7594 the @code{noreturn} attribute applies to all the functions
7595 declared; the @code{format} attribute only applies to @code{d1}.
7597 An attribute specifier list may appear immediately before the comma,
7598 @code{=} or semicolon terminating the declaration of an identifier other
7599 than a function definition.  Such attribute specifiers apply
7600 to the declared object or function.  Where an
7601 assembler name for an object or function is specified (@pxref{Asm
7602 Labels}), the attribute must follow the @code{asm}
7603 specification.
7605 An attribute specifier list may, in future, be permitted to appear after
7606 the declarator in a function definition (before any old-style parameter
7607 declarations or the function body).
7609 Attribute specifiers may be mixed with type qualifiers appearing inside
7610 the @code{[]} of a parameter array declarator, in the C99 construct by
7611 which such qualifiers are applied to the pointer to which the array is
7612 implicitly converted.  Such attribute specifiers apply to the pointer,
7613 not to the array, but at present this is not implemented and they are
7614 ignored.
7616 An attribute specifier list may appear at the start of a nested
7617 declarator.  At present, there are some limitations in this usage: the
7618 attributes correctly apply to the declarator, but for most individual
7619 attributes the semantics this implies are not implemented.
7620 When attribute specifiers follow the @code{*} of a pointer
7621 declarator, they may be mixed with any type qualifiers present.
7622 The following describes the formal semantics of this syntax.  It makes the
7623 most sense if you are familiar with the formal specification of
7624 declarators in the ISO C standard.
7626 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration @code{T
7627 D1}, where @code{T} contains declaration specifiers that specify a type
7628 @var{Type} (such as @code{int}) and @code{D1} is a declarator that
7629 contains an identifier @var{ident}.  The type specified for @var{ident}
7630 for derived declarators whose type does not include an attribute
7631 specifier is as in the ISO C standard.
7633 If @code{D1} has the form @code{( @var{attribute-specifier-list} D )},
7634 and the declaration @code{T D} specifies the type
7635 ``@var{derived-declarator-type-list} @var{Type}'' for @var{ident}, then
7636 @code{T D1} specifies the type ``@var{derived-declarator-type-list}
7637 @var{attribute-specifier-list} @var{Type}'' for @var{ident}.
7639 If @code{D1} has the form @code{*
7640 @var{type-qualifier-and-attribute-specifier-list} D}, and the
7641 declaration @code{T D} specifies the type
7642 ``@var{derived-declarator-type-list} @var{Type}'' for @var{ident}, then
7643 @code{T D1} specifies the type ``@var{derived-declarator-type-list}
7644 @var{type-qualifier-and-attribute-specifier-list} pointer to @var{Type}'' for
7645 @var{ident}.
7647 For example,
7649 @smallexample
7650 void (__attribute__((noreturn)) ****f) (void);
7651 @end smallexample
7653 @noindent
7654 specifies the type ``pointer to pointer to pointer to pointer to
7655 non-returning function returning @code{void}''.  As another example,
7657 @smallexample
7658 char *__attribute__((aligned(8))) *f;
7659 @end smallexample
7661 @noindent
7662 specifies the type ``pointer to 8-byte-aligned pointer to @code{char}''.
7663 Note again that this does not work with most attributes; for example,
7664 the usage of @samp{aligned} and @samp{noreturn} attributes given above
7665 is not yet supported.
7667 For compatibility with existing code written for compiler versions that
7668 did not implement attributes on nested declarators, some laxity is
7669 allowed in the placing of attributes.  If an attribute that only applies
7670 to types is applied to a declaration, it is treated as applying to
7671 the type of that declaration.  If an attribute that only applies to
7672 declarations is applied to the type of a declaration, it is treated
7673 as applying to that declaration; and, for compatibility with code
7674 placing the attributes immediately before the identifier declared, such
7675 an attribute applied to a function return type is treated as
7676 applying to the function type, and such an attribute applied to an array
7677 element type is treated as applying to the array type.  If an
7678 attribute that only applies to function types is applied to a
7679 pointer-to-function type, it is treated as applying to the pointer
7680 target type; if such an attribute is applied to a function return type
7681 that is not a pointer-to-function type, it is treated as applying
7682 to the function type.
7684 @node Function Prototypes
7685 @section Prototypes and Old-Style Function Definitions
7686 @cindex function prototype declarations
7687 @cindex old-style function definitions
7688 @cindex promotion of formal parameters
7690 GNU C extends ISO C to allow a function prototype to override a later
7691 old-style non-prototype definition.  Consider the following example:
7693 @smallexample
7694 /* @r{Use prototypes unless the compiler is old-fashioned.}  */
7695 #ifdef __STDC__
7696 #define P(x) x
7697 #else
7698 #define P(x) ()
7699 #endif
7701 /* @r{Prototype function declaration.}  */
7702 int isroot P((uid_t));
7704 /* @r{Old-style function definition.}  */
7706 isroot (x)   /* @r{??? lossage here ???} */
7707      uid_t x;
7709   return x == 0;
7711 @end smallexample
7713 Suppose the type @code{uid_t} happens to be @code{short}.  ISO C does
7714 not allow this example, because subword arguments in old-style
7715 non-prototype definitions are promoted.  Therefore in this example the
7716 function definition's argument is really an @code{int}, which does not
7717 match the prototype argument type of @code{short}.
7719 This restriction of ISO C makes it hard to write code that is portable
7720 to traditional C compilers, because the programmer does not know
7721 whether the @code{uid_t} type is @code{short}, @code{int}, or
7722 @code{long}.  Therefore, in cases like these GNU C allows a prototype
7723 to override a later old-style definition.  More precisely, in GNU C, a
7724 function prototype argument type overrides the argument type specified
7725 by a later old-style definition if the former type is the same as the
7726 latter type before promotion.  Thus in GNU C the above example is
7727 equivalent to the following:
7729 @smallexample
7730 int isroot (uid_t);
7733 isroot (uid_t x)
7735   return x == 0;
7737 @end smallexample
7739 @noindent
7740 GNU C++ does not support old-style function definitions, so this
7741 extension is irrelevant.
7743 @node C++ Comments
7744 @section C++ Style Comments
7745 @cindex @code{//}
7746 @cindex C++ comments
7747 @cindex comments, C++ style
7749 In GNU C, you may use C++ style comments, which start with @samp{//} and
7750 continue until the end of the line.  Many other C implementations allow
7751 such comments, and they are included in the 1999 C standard.  However,
7752 C++ style comments are not recognized if you specify an @option{-std}
7753 option specifying a version of ISO C before C99, or @option{-ansi}
7754 (equivalent to @option{-std=c90}).
7756 @node Dollar Signs
7757 @section Dollar Signs in Identifier Names
7758 @cindex $
7759 @cindex dollar signs in identifier names
7760 @cindex identifier names, dollar signs in
7762 In GNU C, you may normally use dollar signs in identifier names.
7763 This is because many traditional C implementations allow such identifiers.
7764 However, dollar signs in identifiers are not supported on a few target
7765 machines, typically because the target assembler does not allow them.
7767 @node Character Escapes
7768 @section The Character @key{ESC} in Constants
7770 You can use the sequence @samp{\e} in a string or character constant to
7771 stand for the ASCII character @key{ESC}.
7773 @node Alignment
7774 @section Inquiring on Alignment of Types or Variables
7775 @cindex alignment
7776 @cindex type alignment
7777 @cindex variable alignment
7779 The keyword @code{__alignof__} allows you to inquire about how an object
7780 is aligned, or the minimum alignment usually required by a type.  Its
7781 syntax is just like @code{sizeof}.
7783 For example, if the target machine requires a @code{double} value to be
7784 aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
7785 This is true on many RISC machines.  On more traditional machine
7786 designs, @code{__alignof__ (double)} is 4 or even 2.
7788 Some machines never actually require alignment; they allow reference to any
7789 data type even at an odd address.  For these machines, @code{__alignof__}
7790 reports the smallest alignment that GCC gives the data type, usually as
7791 mandated by the target ABI.
7793 If the operand of @code{__alignof__} is an lvalue rather than a type,
7794 its value is the required alignment for its type, taking into account
7795 any minimum alignment specified with GCC's @code{__attribute__}
7796 extension (@pxref{Variable Attributes}).  For example, after this
7797 declaration:
7799 @smallexample
7800 struct foo @{ int x; char y; @} foo1;
7801 @end smallexample
7803 @noindent
7804 the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
7805 alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
7807 It is an error to ask for the alignment of an incomplete type.
7810 @node Inline
7811 @section An Inline Function is As Fast As a Macro
7812 @cindex inline functions
7813 @cindex integrating function code
7814 @cindex open coding
7815 @cindex macros, inline alternative
7817 By declaring a function inline, you can direct GCC to make
7818 calls to that function faster.  One way GCC can achieve this is to
7819 integrate that function's code into the code for its callers.  This
7820 makes execution faster by eliminating the function-call overhead; in
7821 addition, if any of the actual argument values are constant, their
7822 known values may permit simplifications at compile time so that not
7823 all of the inline function's code needs to be included.  The effect on
7824 code size is less predictable; object code may be larger or smaller
7825 with function inlining, depending on the particular case.  You can
7826 also direct GCC to try to integrate all ``simple enough'' functions
7827 into their callers with the option @option{-finline-functions}.
7829 GCC implements three different semantics of declaring a function
7830 inline.  One is available with @option{-std=gnu89} or
7831 @option{-fgnu89-inline} or when @code{gnu_inline} attribute is present
7832 on all inline declarations, another when
7833 @option{-std=c99},
7834 @option{-std=gnu99} or an option for a later C version is used
7835 (without @option{-fgnu89-inline}), and the third
7836 is used when compiling C++.
7838 To declare a function inline, use the @code{inline} keyword in its
7839 declaration, like this:
7841 @smallexample
7842 static inline int
7843 inc (int *a)
7845   return (*a)++;
7847 @end smallexample
7849 If you are writing a header file to be included in ISO C90 programs, write
7850 @code{__inline__} instead of @code{inline}.  @xref{Alternate Keywords}.
7852 The three types of inlining behave similarly in two important cases:
7853 when the @code{inline} keyword is used on a @code{static} function,
7854 like the example above, and when a function is first declared without
7855 using the @code{inline} keyword and then is defined with
7856 @code{inline}, like this:
7858 @smallexample
7859 extern int inc (int *a);
7860 inline int
7861 inc (int *a)
7863   return (*a)++;
7865 @end smallexample
7867 In both of these common cases, the program behaves the same as if you
7868 had not used the @code{inline} keyword, except for its speed.
7870 @cindex inline functions, omission of
7871 @opindex fkeep-inline-functions
7872 When a function is both inline and @code{static}, if all calls to the
7873 function are integrated into the caller, and the function's address is
7874 never used, then the function's own assembler code is never referenced.
7875 In this case, GCC does not actually output assembler code for the
7876 function, unless you specify the option @option{-fkeep-inline-functions}.
7877 If there is a nonintegrated call, then the function is compiled to
7878 assembler code as usual.  The function must also be compiled as usual if
7879 the program refers to its address, because that cannot be inlined.
7881 @opindex Winline
7882 Note that certain usages in a function definition can make it unsuitable
7883 for inline substitution.  Among these usages are: variadic functions,
7884 use of @code{alloca}, use of computed goto (@pxref{Labels as Values}),
7885 use of nonlocal goto, use of nested functions, use of @code{setjmp}, use
7886 of @code{__builtin_longjmp} and use of @code{__builtin_return} or
7887 @code{__builtin_apply_args}.  Using @option{-Winline} warns when a
7888 function marked @code{inline} could not be substituted, and gives the
7889 reason for the failure.
7891 @cindex automatic @code{inline} for C++ member fns
7892 @cindex @code{inline} automatic for C++ member fns
7893 @cindex member fns, automatically @code{inline}
7894 @cindex C++ member fns, automatically @code{inline}
7895 @opindex fno-default-inline
7896 As required by ISO C++, GCC considers member functions defined within
7897 the body of a class to be marked inline even if they are
7898 not explicitly declared with the @code{inline} keyword.  You can
7899 override this with @option{-fno-default-inline}; @pxref{C++ Dialect
7900 Options,,Options Controlling C++ Dialect}.
7902 GCC does not inline any functions when not optimizing unless you specify
7903 the @samp{always_inline} attribute for the function, like this:
7905 @smallexample
7906 /* @r{Prototype.}  */
7907 inline void foo (const char) __attribute__((always_inline));
7908 @end smallexample
7910 The remainder of this section is specific to GNU C90 inlining.
7912 @cindex non-static inline function
7913 When an inline function is not @code{static}, then the compiler must assume
7914 that there may be calls from other source files; since a global symbol can
7915 be defined only once in any program, the function must not be defined in
7916 the other source files, so the calls therein cannot be integrated.
7917 Therefore, a non-@code{static} inline function is always compiled on its
7918 own in the usual fashion.
7920 If you specify both @code{inline} and @code{extern} in the function
7921 definition, then the definition is used only for inlining.  In no case
7922 is the function compiled on its own, not even if you refer to its
7923 address explicitly.  Such an address becomes an external reference, as
7924 if you had only declared the function, and had not defined it.
7926 This combination of @code{inline} and @code{extern} has almost the
7927 effect of a macro.  The way to use it is to put a function definition in
7928 a header file with these keywords, and put another copy of the
7929 definition (lacking @code{inline} and @code{extern}) in a library file.
7930 The definition in the header file causes most calls to the function
7931 to be inlined.  If any uses of the function remain, they refer to
7932 the single copy in the library.
7934 @node Volatiles
7935 @section When is a Volatile Object Accessed?
7936 @cindex accessing volatiles
7937 @cindex volatile read
7938 @cindex volatile write
7939 @cindex volatile access
7941 C has the concept of volatile objects.  These are normally accessed by
7942 pointers and used for accessing hardware or inter-thread
7943 communication.  The standard encourages compilers to refrain from
7944 optimizations concerning accesses to volatile objects, but leaves it
7945 implementation defined as to what constitutes a volatile access.  The
7946 minimum requirement is that at a sequence point all previous accesses
7947 to volatile objects have stabilized and no subsequent accesses have
7948 occurred.  Thus an implementation is free to reorder and combine
7949 volatile accesses that occur between sequence points, but cannot do
7950 so for accesses across a sequence point.  The use of volatile does
7951 not allow you to violate the restriction on updating objects multiple
7952 times between two sequence points.
7954 Accesses to non-volatile objects are not ordered with respect to
7955 volatile accesses.  You cannot use a volatile object as a memory
7956 barrier to order a sequence of writes to non-volatile memory.  For
7957 instance:
7959 @smallexample
7960 int *ptr = @var{something};
7961 volatile int vobj;
7962 *ptr = @var{something};
7963 vobj = 1;
7964 @end smallexample
7966 @noindent
7967 Unless @var{*ptr} and @var{vobj} can be aliased, it is not guaranteed
7968 that the write to @var{*ptr} occurs by the time the update
7969 of @var{vobj} happens.  If you need this guarantee, you must use
7970 a stronger memory barrier such as:
7972 @smallexample
7973 int *ptr = @var{something};
7974 volatile int vobj;
7975 *ptr = @var{something};
7976 asm volatile ("" : : : "memory");
7977 vobj = 1;
7978 @end smallexample
7980 A scalar volatile object is read when it is accessed in a void context:
7982 @smallexample
7983 volatile int *src = @var{somevalue};
7984 *src;
7985 @end smallexample
7987 Such expressions are rvalues, and GCC implements this as a
7988 read of the volatile object being pointed to.
7990 Assignments are also expressions and have an rvalue.  However when
7991 assigning to a scalar volatile, the volatile object is not reread,
7992 regardless of whether the assignment expression's rvalue is used or
7993 not.  If the assignment's rvalue is used, the value is that assigned
7994 to the volatile object.  For instance, there is no read of @var{vobj}
7995 in all the following cases:
7997 @smallexample
7998 int obj;
7999 volatile int vobj;
8000 vobj = @var{something};
8001 obj = vobj = @var{something};
8002 obj ? vobj = @var{onething} : vobj = @var{anotherthing};
8003 obj = (@var{something}, vobj = @var{anotherthing});
8004 @end smallexample
8006 If you need to read the volatile object after an assignment has
8007 occurred, you must use a separate expression with an intervening
8008 sequence point.
8010 As bit-fields are not individually addressable, volatile bit-fields may
8011 be implicitly read when written to, or when adjacent bit-fields are
8012 accessed.  Bit-field operations may be optimized such that adjacent
8013 bit-fields are only partially accessed, if they straddle a storage unit
8014 boundary.  For these reasons it is unwise to use volatile bit-fields to
8015 access hardware.
8017 @node Using Assembly Language with C
8018 @section How to Use Inline Assembly Language in C Code
8019 @cindex @code{asm} keyword
8020 @cindex assembly language in C
8021 @cindex inline assembly language
8022 @cindex mixing assembly language and C
8024 The @code{asm} keyword allows you to embed assembler instructions
8025 within C code.  GCC provides two forms of inline @code{asm}
8026 statements.  A @dfn{basic @code{asm}} statement is one with no
8027 operands (@pxref{Basic Asm}), while an @dfn{extended @code{asm}}
8028 statement (@pxref{Extended Asm}) includes one or more operands.  
8029 The extended form is preferred for mixing C and assembly language
8030 within a function, but to include assembly language at
8031 top level you must use basic @code{asm}.
8033 You can also use the @code{asm} keyword to override the assembler name
8034 for a C symbol, or to place a C variable in a specific register.
8036 @menu
8037 * Basic Asm::          Inline assembler without operands.
8038 * Extended Asm::       Inline assembler with operands.
8039 * Constraints::        Constraints for @code{asm} operands
8040 * Asm Labels::         Specifying the assembler name to use for a C symbol.
8041 * Explicit Register Variables::  Defining variables residing in specified 
8042                        registers.
8043 * Size of an asm::     How GCC calculates the size of an @code{asm} block.
8044 @end menu
8046 @node Basic Asm
8047 @subsection Basic Asm --- Assembler Instructions Without Operands
8048 @cindex basic @code{asm}
8049 @cindex assembly language in C, basic
8051 A basic @code{asm} statement has the following syntax:
8053 @example
8054 asm @r{[} volatile @r{]} ( @var{AssemblerInstructions} )
8055 @end example
8057 The @code{asm} keyword is a GNU extension.
8058 When writing code that can be compiled with @option{-ansi} and the
8059 various @option{-std} options, use @code{__asm__} instead of 
8060 @code{asm} (@pxref{Alternate Keywords}).
8062 @subsubheading Qualifiers
8063 @table @code
8064 @item volatile
8065 The optional @code{volatile} qualifier has no effect. 
8066 All basic @code{asm} blocks are implicitly volatile.
8067 @end table
8069 @subsubheading Parameters
8070 @table @var
8072 @item AssemblerInstructions
8073 This is a literal string that specifies the assembler code. The string can 
8074 contain any instructions recognized by the assembler, including directives. 
8075 GCC does not parse the assembler instructions themselves and 
8076 does not know what they mean or even whether they are valid assembler input. 
8078 You may place multiple assembler instructions together in a single @code{asm} 
8079 string, separated by the characters normally used in assembly code for the 
8080 system. A combination that works in most places is a newline to break the 
8081 line, plus a tab character (written as @samp{\n\t}).
8082 Some assemblers allow semicolons as a line separator. However, 
8083 note that some assembler dialects use semicolons to start a comment. 
8084 @end table
8086 @subsubheading Remarks
8087 Using extended @code{asm} (@pxref{Extended Asm}) typically produces
8088 smaller, safer, and more efficient code, and in most cases it is a
8089 better solution than basic @code{asm}.  However, there are two
8090 situations where only basic @code{asm} can be used:
8092 @itemize @bullet
8093 @item
8094 Extended @code{asm} statements have to be inside a C
8095 function, so to write inline assembly language at file scope (``top-level''),
8096 outside of C functions, you must use basic @code{asm}.
8097 You can use this technique to emit assembler directives,
8098 define assembly language macros that can be invoked elsewhere in the file,
8099 or write entire functions in assembly language.
8101 @item
8102 Functions declared
8103 with the @code{naked} attribute also require basic @code{asm}
8104 (@pxref{Function Attributes}).
8105 @end itemize
8107 Safely accessing C data and calling functions from basic @code{asm} is more 
8108 complex than it may appear. To access C data, it is better to use extended 
8109 @code{asm}.
8111 Do not expect a sequence of @code{asm} statements to remain perfectly 
8112 consecutive after compilation. If certain instructions need to remain 
8113 consecutive in the output, put them in a single multi-instruction @code{asm}
8114 statement. Note that GCC's optimizers can move @code{asm} statements 
8115 relative to other code, including across jumps.
8117 @code{asm} statements may not perform jumps into other @code{asm} statements. 
8118 GCC does not know about these jumps, and therefore cannot take 
8119 account of them when deciding how to optimize. Jumps from @code{asm} to C 
8120 labels are only supported in extended @code{asm}.
8122 Under certain circumstances, GCC may duplicate (or remove duplicates of) your 
8123 assembly code when optimizing. This can lead to unexpected duplicate 
8124 symbol errors during compilation if your assembly code defines symbols or 
8125 labels.
8127 @strong{Warning:} The C standards do not specify semantics for @code{asm},
8128 making it a potential source of incompatibilities between compilers.  These
8129 incompatibilities may not produce compiler warnings/errors.
8131 GCC does not parse basic @code{asm}'s @var{AssemblerInstructions}, which
8132 means there is no way to communicate to the compiler what is happening
8133 inside them.  GCC has no visibility of symbols in the @code{asm} and may
8134 discard them as unreferenced.  It also does not know about side effects of
8135 the assembler code, such as modifications to memory or registers.  Unlike
8136 some compilers, GCC assumes that no changes to general purpose registers
8137 occur.  This assumption may change in a future release.
8139 To avoid complications from future changes to the semantics and the
8140 compatibility issues between compilers, consider replacing basic @code{asm}
8141 with extended @code{asm}.  See
8142 @uref{https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended, How to convert
8143 from basic asm to extended asm} for information about how to perform this
8144 conversion.
8146 The compiler copies the assembler instructions in a basic @code{asm} 
8147 verbatim to the assembly language output file, without 
8148 processing dialects or any of the @samp{%} operators that are available with
8149 extended @code{asm}. This results in minor differences between basic 
8150 @code{asm} strings and extended @code{asm} templates. For example, to refer to 
8151 registers you might use @samp{%eax} in basic @code{asm} and
8152 @samp{%%eax} in extended @code{asm}.
8154 On targets such as x86 that support multiple assembler dialects,
8155 all basic @code{asm} blocks use the assembler dialect specified by the 
8156 @option{-masm} command-line option (@pxref{x86 Options}).  
8157 Basic @code{asm} provides no
8158 mechanism to provide different assembler strings for different dialects.
8160 For basic @code{asm} with non-empty assembler string GCC assumes
8161 the assembler block does not change any general purpose registers,
8162 but it may read or write any globally accessible variable.
8164 Here is an example of basic @code{asm} for i386:
8166 @example
8167 /* Note that this code will not compile with -masm=intel */
8168 #define DebugBreak() asm("int $3")
8169 @end example
8171 @node Extended Asm
8172 @subsection Extended Asm - Assembler Instructions with C Expression Operands
8173 @cindex extended @code{asm}
8174 @cindex assembly language in C, extended
8176 With extended @code{asm} you can read and write C variables from 
8177 assembler and perform jumps from assembler code to C labels.  
8178 Extended @code{asm} syntax uses colons (@samp{:}) to delimit
8179 the operand parameters after the assembler template:
8181 @example
8182 asm @r{[}volatile@r{]} ( @var{AssemblerTemplate} 
8183                  : @var{OutputOperands} 
8184                  @r{[} : @var{InputOperands}
8185                  @r{[} : @var{Clobbers} @r{]} @r{]})
8187 asm @r{[}volatile@r{]} goto ( @var{AssemblerTemplate} 
8188                       : 
8189                       : @var{InputOperands}
8190                       : @var{Clobbers}
8191                       : @var{GotoLabels})
8192 @end example
8194 The @code{asm} keyword is a GNU extension.
8195 When writing code that can be compiled with @option{-ansi} and the
8196 various @option{-std} options, use @code{__asm__} instead of 
8197 @code{asm} (@pxref{Alternate Keywords}).
8199 @subsubheading Qualifiers
8200 @table @code
8202 @item volatile
8203 The typical use of extended @code{asm} statements is to manipulate input 
8204 values to produce output values. However, your @code{asm} statements may 
8205 also produce side effects. If so, you may need to use the @code{volatile} 
8206 qualifier to disable certain optimizations. @xref{Volatile}.
8208 @item goto
8209 This qualifier informs the compiler that the @code{asm} statement may 
8210 perform a jump to one of the labels listed in the @var{GotoLabels}.
8211 @xref{GotoLabels}.
8212 @end table
8214 @subsubheading Parameters
8215 @table @var
8216 @item AssemblerTemplate
8217 This is a literal string that is the template for the assembler code. It is a 
8218 combination of fixed text and tokens that refer to the input, output, 
8219 and goto parameters. @xref{AssemblerTemplate}.
8221 @item OutputOperands
8222 A comma-separated list of the C variables modified by the instructions in the 
8223 @var{AssemblerTemplate}.  An empty list is permitted.  @xref{OutputOperands}.
8225 @item InputOperands
8226 A comma-separated list of C expressions read by the instructions in the 
8227 @var{AssemblerTemplate}.  An empty list is permitted.  @xref{InputOperands}.
8229 @item Clobbers
8230 A comma-separated list of registers or other values changed by the 
8231 @var{AssemblerTemplate}, beyond those listed as outputs.
8232 An empty list is permitted.  @xref{Clobbers and Scratch Registers}.
8234 @item GotoLabels
8235 When you are using the @code{goto} form of @code{asm}, this section contains 
8236 the list of all C labels to which the code in the 
8237 @var{AssemblerTemplate} may jump. 
8238 @xref{GotoLabels}.
8240 @code{asm} statements may not perform jumps into other @code{asm} statements,
8241 only to the listed @var{GotoLabels}.
8242 GCC's optimizers do not know about other jumps; therefore they cannot take 
8243 account of them when deciding how to optimize.
8244 @end table
8246 The total number of input + output + goto operands is limited to 30.
8248 @subsubheading Remarks
8249 The @code{asm} statement allows you to include assembly instructions directly 
8250 within C code. This may help you to maximize performance in time-sensitive 
8251 code or to access assembly instructions that are not readily available to C 
8252 programs.
8254 Note that extended @code{asm} statements must be inside a function. Only 
8255 basic @code{asm} may be outside functions (@pxref{Basic Asm}).
8256 Functions declared with the @code{naked} attribute also require basic 
8257 @code{asm} (@pxref{Function Attributes}).
8259 While the uses of @code{asm} are many and varied, it may help to think of an 
8260 @code{asm} statement as a series of low-level instructions that convert input 
8261 parameters to output parameters. So a simple (if not particularly useful) 
8262 example for i386 using @code{asm} might look like this:
8264 @example
8265 int src = 1;
8266 int dst;   
8268 asm ("mov %1, %0\n\t"
8269     "add $1, %0"
8270     : "=r" (dst) 
8271     : "r" (src));
8273 printf("%d\n", dst);
8274 @end example
8276 This code copies @code{src} to @code{dst} and add 1 to @code{dst}.
8278 @anchor{Volatile}
8279 @subsubsection Volatile
8280 @cindex volatile @code{asm}
8281 @cindex @code{asm} volatile
8283 GCC's optimizers sometimes discard @code{asm} statements if they determine 
8284 there is no need for the output variables. Also, the optimizers may move 
8285 code out of loops if they believe that the code will always return the same 
8286 result (i.e. none of its input values change between calls). Using the 
8287 @code{volatile} qualifier disables these optimizations. @code{asm} statements 
8288 that have no output operands, including @code{asm goto} statements, 
8289 are implicitly volatile.
8291 This i386 code demonstrates a case that does not use (or require) the 
8292 @code{volatile} qualifier. If it is performing assertion checking, this code 
8293 uses @code{asm} to perform the validation. Otherwise, @code{dwRes} is 
8294 unreferenced by any code. As a result, the optimizers can discard the 
8295 @code{asm} statement, which in turn removes the need for the entire 
8296 @code{DoCheck} routine. By omitting the @code{volatile} qualifier when it 
8297 isn't needed you allow the optimizers to produce the most efficient code 
8298 possible.
8300 @example
8301 void DoCheck(uint32_t dwSomeValue)
8303    uint32_t dwRes;
8305    // Assumes dwSomeValue is not zero.
8306    asm ("bsfl %1,%0"
8307      : "=r" (dwRes)
8308      : "r" (dwSomeValue)
8309      : "cc");
8311    assert(dwRes > 3);
8313 @end example
8315 The next example shows a case where the optimizers can recognize that the input 
8316 (@code{dwSomeValue}) never changes during the execution of the function and can 
8317 therefore move the @code{asm} outside the loop to produce more efficient code. 
8318 Again, using @code{volatile} disables this type of optimization.
8320 @example
8321 void do_print(uint32_t dwSomeValue)
8323    uint32_t dwRes;
8325    for (uint32_t x=0; x < 5; x++)
8326    @{
8327       // Assumes dwSomeValue is not zero.
8328       asm ("bsfl %1,%0"
8329         : "=r" (dwRes)
8330         : "r" (dwSomeValue)
8331         : "cc");
8333       printf("%u: %u %u\n", x, dwSomeValue, dwRes);
8334    @}
8336 @end example
8338 The following example demonstrates a case where you need to use the 
8339 @code{volatile} qualifier. 
8340 It uses the x86 @code{rdtsc} instruction, which reads 
8341 the computer's time-stamp counter. Without the @code{volatile} qualifier, 
8342 the optimizers might assume that the @code{asm} block will always return the 
8343 same value and therefore optimize away the second call.
8345 @example
8346 uint64_t msr;
8348 asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
8349         "shl $32, %%rdx\n\t"  // Shift the upper bits left.
8350         "or %%rdx, %0"        // 'Or' in the lower bits.
8351         : "=a" (msr)
8352         : 
8353         : "rdx");
8355 printf("msr: %llx\n", msr);
8357 // Do other work...
8359 // Reprint the timestamp
8360 asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
8361         "shl $32, %%rdx\n\t"  // Shift the upper bits left.
8362         "or %%rdx, %0"        // 'Or' in the lower bits.
8363         : "=a" (msr)
8364         : 
8365         : "rdx");
8367 printf("msr: %llx\n", msr);
8368 @end example
8370 GCC's optimizers do not treat this code like the non-volatile code in the 
8371 earlier examples. They do not move it out of loops or omit it on the 
8372 assumption that the result from a previous call is still valid.
8374 Note that the compiler can move even volatile @code{asm} instructions relative 
8375 to other code, including across jump instructions. For example, on many 
8376 targets there is a system register that controls the rounding mode of 
8377 floating-point operations. Setting it with a volatile @code{asm}, as in the 
8378 following PowerPC example, does not work reliably.
8380 @example
8381 asm volatile("mtfsf 255, %0" : : "f" (fpenv));
8382 sum = x + y;
8383 @end example
8385 The compiler may move the addition back before the volatile @code{asm}. To 
8386 make it work as expected, add an artificial dependency to the @code{asm} by 
8387 referencing a variable in the subsequent code, for example: 
8389 @example
8390 asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
8391 sum = x + y;
8392 @end example
8394 Under certain circumstances, GCC may duplicate (or remove duplicates of) your 
8395 assembly code when optimizing. This can lead to unexpected duplicate symbol 
8396 errors during compilation if your asm code defines symbols or labels. 
8397 Using @samp{%=} 
8398 (@pxref{AssemblerTemplate}) may help resolve this problem.
8400 @anchor{AssemblerTemplate}
8401 @subsubsection Assembler Template
8402 @cindex @code{asm} assembler template
8404 An assembler template is a literal string containing assembler instructions.
8405 The compiler replaces tokens in the template that refer 
8406 to inputs, outputs, and goto labels,
8407 and then outputs the resulting string to the assembler. The 
8408 string can contain any instructions recognized by the assembler, including 
8409 directives. GCC does not parse the assembler instructions 
8410 themselves and does not know what they mean or even whether they are valid 
8411 assembler input. However, it does count the statements 
8412 (@pxref{Size of an asm}).
8414 You may place multiple assembler instructions together in a single @code{asm} 
8415 string, separated by the characters normally used in assembly code for the 
8416 system. A combination that works in most places is a newline to break the 
8417 line, plus a tab character to move to the instruction field (written as 
8418 @samp{\n\t}). 
8419 Some assemblers allow semicolons as a line separator. However, note 
8420 that some assembler dialects use semicolons to start a comment. 
8422 Do not expect a sequence of @code{asm} statements to remain perfectly 
8423 consecutive after compilation, even when you are using the @code{volatile} 
8424 qualifier. If certain instructions need to remain consecutive in the output, 
8425 put them in a single multi-instruction asm statement.
8427 Accessing data from C programs without using input/output operands (such as 
8428 by using global symbols directly from the assembler template) may not work as 
8429 expected. Similarly, calling functions directly from an assembler template 
8430 requires a detailed understanding of the target assembler and ABI.
8432 Since GCC does not parse the assembler template,
8433 it has no visibility of any 
8434 symbols it references. This may result in GCC discarding those symbols as 
8435 unreferenced unless they are also listed as input, output, or goto operands.
8437 @subsubheading Special format strings
8439 In addition to the tokens described by the input, output, and goto operands, 
8440 these tokens have special meanings in the assembler template:
8442 @table @samp
8443 @item %% 
8444 Outputs a single @samp{%} into the assembler code.
8446 @item %= 
8447 Outputs a number that is unique to each instance of the @code{asm} 
8448 statement in the entire compilation. This option is useful when creating local 
8449 labels and referring to them multiple times in a single template that 
8450 generates multiple assembler instructions. 
8452 @item %@{
8453 @itemx %|
8454 @itemx %@}
8455 Outputs @samp{@{}, @samp{|}, and @samp{@}} characters (respectively)
8456 into the assembler code.  When unescaped, these characters have special
8457 meaning to indicate multiple assembler dialects, as described below.
8458 @end table
8460 @subsubheading Multiple assembler dialects in @code{asm} templates
8462 On targets such as x86, GCC supports multiple assembler dialects.
8463 The @option{-masm} option controls which dialect GCC uses as its 
8464 default for inline assembler. The target-specific documentation for the 
8465 @option{-masm} option contains the list of supported dialects, as well as the 
8466 default dialect if the option is not specified. This information may be 
8467 important to understand, since assembler code that works correctly when 
8468 compiled using one dialect will likely fail if compiled using another.
8469 @xref{x86 Options}.
8471 If your code needs to support multiple assembler dialects (for example, if 
8472 you are writing public headers that need to support a variety of compilation 
8473 options), use constructs of this form:
8475 @example
8476 @{ dialect0 | dialect1 | dialect2... @}
8477 @end example
8479 This construct outputs @code{dialect0} 
8480 when using dialect #0 to compile the code, 
8481 @code{dialect1} for dialect #1, etc. If there are fewer alternatives within the 
8482 braces than the number of dialects the compiler supports, the construct 
8483 outputs nothing.
8485 For example, if an x86 compiler supports two dialects
8486 (@samp{att}, @samp{intel}), an 
8487 assembler template such as this:
8489 @example
8490 "bt@{l %[Offset],%[Base] | %[Base],%[Offset]@}; jc %l2"
8491 @end example
8493 @noindent
8494 is equivalent to one of
8496 @example
8497 "btl %[Offset],%[Base] ; jc %l2"   @r{/* att dialect */}
8498 "bt %[Base],%[Offset]; jc %l2"     @r{/* intel dialect */}
8499 @end example
8501 Using that same compiler, this code:
8503 @example
8504 "xchg@{l@}\t@{%%@}ebx, %1"
8505 @end example
8507 @noindent
8508 corresponds to either
8510 @example
8511 "xchgl\t%%ebx, %1"                 @r{/* att dialect */}
8512 "xchg\tebx, %1"                    @r{/* intel dialect */}
8513 @end example
8515 There is no support for nesting dialect alternatives.
8517 @anchor{OutputOperands}
8518 @subsubsection Output Operands
8519 @cindex @code{asm} output operands
8521 An @code{asm} statement has zero or more output operands indicating the names
8522 of C variables modified by the assembler code.
8524 In this i386 example, @code{old} (referred to in the template string as 
8525 @code{%0}) and @code{*Base} (as @code{%1}) are outputs and @code{Offset} 
8526 (@code{%2}) is an input:
8528 @example
8529 bool old;
8531 __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
8532          "sbb %0,%0"      // Use the CF to calculate old.
8533    : "=r" (old), "+rm" (*Base)
8534    : "Ir" (Offset)
8535    : "cc");
8537 return old;
8538 @end example
8540 Operands are separated by commas.  Each operand has this format:
8542 @example
8543 @r{[} [@var{asmSymbolicName}] @r{]} @var{constraint} (@var{cvariablename})
8544 @end example
8546 @table @var
8547 @item asmSymbolicName
8548 Specifies a symbolic name for the operand.
8549 Reference the name in the assembler template 
8550 by enclosing it in square brackets 
8551 (i.e. @samp{%[Value]}). The scope of the name is the @code{asm} statement 
8552 that contains the definition. Any valid C variable name is acceptable, 
8553 including names already defined in the surrounding code. No two operands 
8554 within the same @code{asm} statement can use the same symbolic name.
8556 When not using an @var{asmSymbolicName}, use the (zero-based) position
8557 of the operand 
8558 in the list of operands in the assembler template. For example if there are 
8559 three output operands, use @samp{%0} in the template to refer to the first, 
8560 @samp{%1} for the second, and @samp{%2} for the third. 
8562 @item constraint
8563 A string constant specifying constraints on the placement of the operand; 
8564 @xref{Constraints}, for details.
8566 Output constraints must begin with either @samp{=} (a variable overwriting an 
8567 existing value) or @samp{+} (when reading and writing). When using 
8568 @samp{=}, do not assume the location contains the existing value
8569 on entry to the @code{asm}, except 
8570 when the operand is tied to an input; @pxref{InputOperands,,Input Operands}.
8572 After the prefix, there must be one or more additional constraints 
8573 (@pxref{Constraints}) that describe where the value resides. Common 
8574 constraints include @samp{r} for register and @samp{m} for memory. 
8575 When you list more than one possible location (for example, @code{"=rm"}),
8576 the compiler chooses the most efficient one based on the current context. 
8577 If you list as many alternates as the @code{asm} statement allows, you permit 
8578 the optimizers to produce the best possible code. 
8579 If you must use a specific register, but your Machine Constraints do not
8580 provide sufficient control to select the specific register you want, 
8581 local register variables may provide a solution (@pxref{Local Register 
8582 Variables}).
8584 @item cvariablename
8585 Specifies a C lvalue expression to hold the output, typically a variable name.
8586 The enclosing parentheses are a required part of the syntax.
8588 @end table
8590 When the compiler selects the registers to use to 
8591 represent the output operands, it does not use any of the clobbered registers 
8592 (@pxref{Clobbers and Scratch Registers}).
8594 Output operand expressions must be lvalues. The compiler cannot check whether 
8595 the operands have data types that are reasonable for the instruction being 
8596 executed. For output expressions that are not directly addressable (for 
8597 example a bit-field), the constraint must allow a register. In that case, GCC 
8598 uses the register as the output of the @code{asm}, and then stores that 
8599 register into the output. 
8601 Operands using the @samp{+} constraint modifier count as two operands 
8602 (that is, both as input and output) towards the total maximum of 30 operands
8603 per @code{asm} statement.
8605 Use the @samp{&} constraint modifier (@pxref{Modifiers}) on all output
8606 operands that must not overlap an input.  Otherwise, 
8607 GCC may allocate the output operand in the same register as an unrelated 
8608 input operand, on the assumption that the assembler code consumes its 
8609 inputs before producing outputs. This assumption may be false if the assembler 
8610 code actually consists of more than one instruction.
8612 The same problem can occur if one output parameter (@var{a}) allows a register 
8613 constraint and another output parameter (@var{b}) allows a memory constraint.
8614 The code generated by GCC to access the memory address in @var{b} can contain
8615 registers which @emph{might} be shared by @var{a}, and GCC considers those 
8616 registers to be inputs to the asm. As above, GCC assumes that such input
8617 registers are consumed before any outputs are written. This assumption may 
8618 result in incorrect behavior if the asm writes to @var{a} before using 
8619 @var{b}. Combining the @samp{&} modifier with the register constraint on @var{a}
8620 ensures that modifying @var{a} does not affect the address referenced by 
8621 @var{b}. Otherwise, the location of @var{b} 
8622 is undefined if @var{a} is modified before using @var{b}.
8624 @code{asm} supports operand modifiers on operands (for example @samp{%k2} 
8625 instead of simply @samp{%2}). Typically these qualifiers are hardware 
8626 dependent. The list of supported modifiers for x86 is found at 
8627 @ref{x86Operandmodifiers,x86 Operand modifiers}.
8629 If the C code that follows the @code{asm} makes no use of any of the output 
8630 operands, use @code{volatile} for the @code{asm} statement to prevent the 
8631 optimizers from discarding the @code{asm} statement as unneeded 
8632 (see @ref{Volatile}).
8634 This code makes no use of the optional @var{asmSymbolicName}. Therefore it 
8635 references the first output operand as @code{%0} (were there a second, it 
8636 would be @code{%1}, etc). The number of the first input operand is one greater 
8637 than that of the last output operand. In this i386 example, that makes 
8638 @code{Mask} referenced as @code{%1}:
8640 @example
8641 uint32_t Mask = 1234;
8642 uint32_t Index;
8644   asm ("bsfl %1, %0"
8645      : "=r" (Index)
8646      : "r" (Mask)
8647      : "cc");
8648 @end example
8650 That code overwrites the variable @code{Index} (@samp{=}),
8651 placing the value in a register (@samp{r}).
8652 Using the generic @samp{r} constraint instead of a constraint for a specific 
8653 register allows the compiler to pick the register to use, which can result 
8654 in more efficient code. This may not be possible if an assembler instruction 
8655 requires a specific register.
8657 The following i386 example uses the @var{asmSymbolicName} syntax.
8658 It produces the 
8659 same result as the code above, but some may consider it more readable or more 
8660 maintainable since reordering index numbers is not necessary when adding or 
8661 removing operands. The names @code{aIndex} and @code{aMask}
8662 are only used in this example to emphasize which 
8663 names get used where.
8664 It is acceptable to reuse the names @code{Index} and @code{Mask}.
8666 @example
8667 uint32_t Mask = 1234;
8668 uint32_t Index;
8670   asm ("bsfl %[aMask], %[aIndex]"
8671      : [aIndex] "=r" (Index)
8672      : [aMask] "r" (Mask)
8673      : "cc");
8674 @end example
8676 Here are some more examples of output operands.
8678 @example
8679 uint32_t c = 1;
8680 uint32_t d;
8681 uint32_t *e = &c;
8683 asm ("mov %[e], %[d]"
8684    : [d] "=rm" (d)
8685    : [e] "rm" (*e));
8686 @end example
8688 Here, @code{d} may either be in a register or in memory. Since the compiler 
8689 might already have the current value of the @code{uint32_t} location
8690 pointed to by @code{e}
8691 in a register, you can enable it to choose the best location
8692 for @code{d} by specifying both constraints.
8694 @anchor{FlagOutputOperands}
8695 @subsubsection Flag Output Operands
8696 @cindex @code{asm} flag output operands
8698 Some targets have a special register that holds the ``flags'' for the
8699 result of an operation or comparison.  Normally, the contents of that
8700 register are either unmodifed by the asm, or the asm is considered to
8701 clobber the contents.
8703 On some targets, a special form of output operand exists by which
8704 conditions in the flags register may be outputs of the asm.  The set of
8705 conditions supported are target specific, but the general rule is that
8706 the output variable must be a scalar integer, and the value is boolean.
8707 When supported, the target defines the preprocessor symbol
8708 @code{__GCC_ASM_FLAG_OUTPUTS__}.
8710 Because of the special nature of the flag output operands, the constraint
8711 may not include alternatives.
8713 Most often, the target has only one flags register, and thus is an implied
8714 operand of many instructions.  In this case, the operand should not be
8715 referenced within the assembler template via @code{%0} etc, as there's
8716 no corresponding text in the assembly language.
8718 @table @asis
8719 @item x86 family
8720 The flag output constraints for the x86 family are of the form
8721 @samp{=@@cc@var{cond}} where @var{cond} is one of the standard
8722 conditions defined in the ISA manual for @code{j@var{cc}} or
8723 @code{set@var{cc}}.
8725 @table @code
8726 @item a
8727 ``above'' or unsigned greater than
8728 @item ae
8729 ``above or equal'' or unsigned greater than or equal
8730 @item b
8731 ``below'' or unsigned less than
8732 @item be
8733 ``below or equal'' or unsigned less than or equal
8734 @item c
8735 carry flag set
8736 @item e
8737 @itemx z
8738 ``equal'' or zero flag set
8739 @item g
8740 signed greater than
8741 @item ge
8742 signed greater than or equal
8743 @item l
8744 signed less than
8745 @item le
8746 signed less than or equal
8747 @item o
8748 overflow flag set
8749 @item p
8750 parity flag set
8751 @item s
8752 sign flag set
8753 @item na
8754 @itemx nae
8755 @itemx nb
8756 @itemx nbe
8757 @itemx nc
8758 @itemx ne
8759 @itemx ng
8760 @itemx nge
8761 @itemx nl
8762 @itemx nle
8763 @itemx no
8764 @itemx np
8765 @itemx ns
8766 @itemx nz
8767 ``not'' @var{flag}, or inverted versions of those above
8768 @end table
8770 @end table
8772 @anchor{InputOperands}
8773 @subsubsection Input Operands
8774 @cindex @code{asm} input operands
8775 @cindex @code{asm} expressions
8777 Input operands make values from C variables and expressions available to the 
8778 assembly code.
8780 Operands are separated by commas.  Each operand has this format:
8782 @example
8783 @r{[} [@var{asmSymbolicName}] @r{]} @var{constraint} (@var{cexpression})
8784 @end example
8786 @table @var
8787 @item asmSymbolicName
8788 Specifies a symbolic name for the operand.
8789 Reference the name in the assembler template 
8790 by enclosing it in square brackets 
8791 (i.e. @samp{%[Value]}). The scope of the name is the @code{asm} statement 
8792 that contains the definition. Any valid C variable name is acceptable, 
8793 including names already defined in the surrounding code. No two operands 
8794 within the same @code{asm} statement can use the same symbolic name.
8796 When not using an @var{asmSymbolicName}, use the (zero-based) position
8797 of the operand 
8798 in the list of operands in the assembler template. For example if there are
8799 two output operands and three inputs,
8800 use @samp{%2} in the template to refer to the first input operand,
8801 @samp{%3} for the second, and @samp{%4} for the third. 
8803 @item constraint
8804 A string constant specifying constraints on the placement of the operand; 
8805 @xref{Constraints}, for details.
8807 Input constraint strings may not begin with either @samp{=} or @samp{+}.
8808 When you list more than one possible location (for example, @samp{"irm"}), 
8809 the compiler chooses the most efficient one based on the current context.
8810 If you must use a specific register, but your Machine Constraints do not
8811 provide sufficient control to select the specific register you want, 
8812 local register variables may provide a solution (@pxref{Local Register 
8813 Variables}).
8815 Input constraints can also be digits (for example, @code{"0"}). This indicates 
8816 that the specified input must be in the same place as the output constraint 
8817 at the (zero-based) index in the output constraint list. 
8818 When using @var{asmSymbolicName} syntax for the output operands,
8819 you may use these names (enclosed in brackets @samp{[]}) instead of digits.
8821 @item cexpression
8822 This is the C variable or expression being passed to the @code{asm} statement 
8823 as input.  The enclosing parentheses are a required part of the syntax.
8825 @end table
8827 When the compiler selects the registers to use to represent the input 
8828 operands, it does not use any of the clobbered registers
8829 (@pxref{Clobbers and Scratch Registers}).
8831 If there are no output operands but there are input operands, place two 
8832 consecutive colons where the output operands would go:
8834 @example
8835 __asm__ ("some instructions"
8836    : /* No outputs. */
8837    : "r" (Offset / 8));
8838 @end example
8840 @strong{Warning:} Do @emph{not} modify the contents of input-only operands 
8841 (except for inputs tied to outputs). The compiler assumes that on exit from 
8842 the @code{asm} statement these operands contain the same values as they 
8843 had before executing the statement. 
8844 It is @emph{not} possible to use clobbers
8845 to inform the compiler that the values in these inputs are changing. One 
8846 common work-around is to tie the changing input variable to an output variable 
8847 that never gets used. Note, however, that if the code that follows the 
8848 @code{asm} statement makes no use of any of the output operands, the GCC 
8849 optimizers may discard the @code{asm} statement as unneeded 
8850 (see @ref{Volatile}).
8852 @code{asm} supports operand modifiers on operands (for example @samp{%k2} 
8853 instead of simply @samp{%2}). Typically these qualifiers are hardware 
8854 dependent. The list of supported modifiers for x86 is found at 
8855 @ref{x86Operandmodifiers,x86 Operand modifiers}.
8857 In this example using the fictitious @code{combine} instruction, the 
8858 constraint @code{"0"} for input operand 1 says that it must occupy the same 
8859 location as output operand 0. Only input operands may use numbers in 
8860 constraints, and they must each refer to an output operand. Only a number (or 
8861 the symbolic assembler name) in the constraint can guarantee that one operand 
8862 is in the same place as another. The mere fact that @code{foo} is the value of 
8863 both operands is not enough to guarantee that they are in the same place in 
8864 the generated assembler code.
8866 @example
8867 asm ("combine %2, %0" 
8868    : "=r" (foo) 
8869    : "0" (foo), "g" (bar));
8870 @end example
8872 Here is an example using symbolic names.
8874 @example
8875 asm ("cmoveq %1, %2, %[result]" 
8876    : [result] "=r"(result) 
8877    : "r" (test), "r" (new), "[result]" (old));
8878 @end example
8880 @anchor{Clobbers and Scratch Registers}
8881 @subsubsection Clobbers and Scratch Registers
8882 @cindex @code{asm} clobbers
8883 @cindex @code{asm} scratch registers
8885 While the compiler is aware of changes to entries listed in the output 
8886 operands, the inline @code{asm} code may modify more than just the outputs. For 
8887 example, calculations may require additional registers, or the processor may 
8888 overwrite a register as a side effect of a particular assembler instruction. 
8889 In order to inform the compiler of these changes, list them in the clobber 
8890 list. Clobber list items are either register names or the special clobbers 
8891 (listed below). Each clobber list item is a string constant 
8892 enclosed in double quotes and separated by commas.
8894 Clobber descriptions may not in any way overlap with an input or output 
8895 operand. For example, you may not have an operand describing a register class 
8896 with one member when listing that register in the clobber list. Variables 
8897 declared to live in specific registers (@pxref{Explicit Register 
8898 Variables}) and used 
8899 as @code{asm} input or output operands must have no part mentioned in the 
8900 clobber description. In particular, there is no way to specify that input 
8901 operands get modified without also specifying them as output operands.
8903 When the compiler selects which registers to use to represent input and output 
8904 operands, it does not use any of the clobbered registers. As a result, 
8905 clobbered registers are available for any use in the assembler code.
8907 Here is a realistic example for the VAX showing the use of clobbered 
8908 registers: 
8910 @example
8911 asm volatile ("movc3 %0, %1, %2"
8912                    : /* No outputs. */
8913                    : "g" (from), "g" (to), "g" (count)
8914                    : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
8915 @end example
8917 Also, there are two special clobber arguments:
8919 @table @code
8920 @item "cc"
8921 The @code{"cc"} clobber indicates that the assembler code modifies the flags 
8922 register. On some machines, GCC represents the condition codes as a specific 
8923 hardware register; @code{"cc"} serves to name this register.
8924 On other machines, condition code handling is different, 
8925 and specifying @code{"cc"} has no effect. But 
8926 it is valid no matter what the target.
8928 @item "memory"
8929 The @code{"memory"} clobber tells the compiler that the assembly code
8930 performs memory 
8931 reads or writes to items other than those listed in the input and output 
8932 operands (for example, accessing the memory pointed to by one of the input 
8933 parameters). To ensure memory contains correct values, GCC may need to flush 
8934 specific register values to memory before executing the @code{asm}. Further, 
8935 the compiler does not assume that any values read from memory before an 
8936 @code{asm} remain unchanged after that @code{asm}; it reloads them as 
8937 needed.  
8938 Using the @code{"memory"} clobber effectively forms a read/write
8939 memory barrier for the compiler.
8941 Note that this clobber does not prevent the @emph{processor} from doing 
8942 speculative reads past the @code{asm} statement. To prevent that, you need 
8943 processor-specific fence instructions.
8945 @end table
8947 Flushing registers to memory has performance implications and may be
8948 an issue for time-sensitive code.  You can provide better information
8949 to GCC to avoid this, as shown in the following examples.  At a
8950 minimum, aliasing rules allow GCC to know what memory @emph{doesn't}
8951 need to be flushed.
8953 Here is a fictitious sum of squares instruction, that takes two
8954 pointers to floating point values in memory and produces a floating
8955 point register output.
8956 Notice that @code{x}, and @code{y} both appear twice in the @code{asm}
8957 parameters, once to specify memory accessed, and once to specify a
8958 base register used by the @code{asm}.  You won't normally be wasting a
8959 register by doing this as GCC can use the same register for both
8960 purposes.  However, it would be foolish to use both @code{%1} and
8961 @code{%3} for @code{x} in this @code{asm} and expect them to be the
8962 same.  In fact, @code{%3} may well not be a register.  It might be a
8963 symbolic memory reference to the object pointed to by @code{x}.
8965 @smallexample
8966 asm ("sumsq %0, %1, %2"
8967      : "+f" (result)
8968      : "r" (x), "r" (y), "m" (*x), "m" (*y));
8969 @end smallexample
8971 Here is a fictitious @code{*z++ = *x++ * *y++} instruction.
8972 Notice that the @code{x}, @code{y} and @code{z} pointer registers
8973 must be specified as input/output because the @code{asm} modifies
8974 them.
8976 @smallexample
8977 asm ("vecmul %0, %1, %2"
8978      : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
8979      : "m" (*x), "m" (*y));
8980 @end smallexample
8982 An x86 example where the string memory argument is of unknown length.
8984 @smallexample
8985 asm("repne scasb"
8986     : "=c" (count), "+D" (p)
8987     : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
8988 @end smallexample
8990 If you know the above will only be reading a ten byte array then you
8991 could instead use a memory input like:
8992 @code{"m" (*(const char (*)[10]) p)}.
8994 Here is an example of a PowerPC vector scale implemented in assembly,
8995 complete with vector and condition code clobbers, and some initialized
8996 offset registers that are unchanged by the @code{asm}.
8998 @smallexample
8999 void
9000 dscal (size_t n, double *x, double alpha)
9002   asm ("/* lots of asm here */"
9003        : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
9004        : "d" (alpha), "b" (32), "b" (48), "b" (64),
9005          "b" (80), "b" (96), "b" (112)
9006        : "cr0",
9007          "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
9008          "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
9010 @end smallexample
9012 Rather than allocating fixed registers via clobbers to provide scratch
9013 registers for an @code{asm} statement, an alternative is to define a
9014 variable and make it an early-clobber output as with @code{a2} and
9015 @code{a3} in the example below.  This gives the compiler register
9016 allocator more freedom.  You can also define a variable and make it an
9017 output tied to an input as with @code{a0} and @code{a1}, tied
9018 respectively to @code{ap} and @code{lda}.  Of course, with tied
9019 outputs your @code{asm} can't use the input value after modifying the
9020 output register since they are one and the same register.  What's
9021 more, if you omit the early-clobber on the output, it is possible that
9022 GCC might allocate the same register to another of the inputs if GCC
9023 could prove they had the same value on entry to the @code{asm}.  This
9024 is why @code{a1} has an early-clobber.  Its tied input, @code{lda}
9025 might conceivably be known to have the value 16 and without an
9026 early-clobber share the same register as @code{%11}.  On the other
9027 hand, @code{ap} can't be the same as any of the other inputs, so an
9028 early-clobber on @code{a0} is not needed.  It is also not desirable in
9029 this case.  An early-clobber on @code{a0} would cause GCC to allocate
9030 a separate register for the @code{"m" (*(const double (*)[]) ap)}
9031 input.  Note that tying an input to an output is the way to set up an
9032 initialized temporary register modified by an @code{asm} statement.
9033 An input not tied to an output is assumed by GCC to be unchanged, for
9034 example @code{"b" (16)} below sets up @code{%11} to 16, and GCC might
9035 use that register in following code if the value 16 happened to be
9036 needed.  You can even use a normal @code{asm} output for a scratch if
9037 all inputs that might share the same register are consumed before the
9038 scratch is used.  The VSX registers clobbered by the @code{asm}
9039 statement could have used this technique except for GCC's limit on the
9040 number of @code{asm} parameters.
9042 @smallexample
9043 static void
9044 dgemv_kernel_4x4 (long n, const double *ap, long lda,
9045                   const double *x, double *y, double alpha)
9047   double *a0;
9048   double *a1;
9049   double *a2;
9050   double *a3;
9052   __asm__
9053     (
9054      /* lots of asm here */
9055      "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
9056      "#a0=%3 a1=%4 a2=%5 a3=%6"
9057      :
9058        "+m" (*(double (*)[n]) y),
9059        "+&r" (n),       // 1
9060        "+b" (y),        // 2
9061        "=b" (a0),       // 3
9062        "=&b" (a1),      // 4
9063        "=&b" (a2),      // 5
9064        "=&b" (a3)       // 6
9065      :
9066        "m" (*(const double (*)[n]) x),
9067        "m" (*(const double (*)[]) ap),
9068        "d" (alpha),     // 9
9069        "r" (x),         // 10
9070        "b" (16),        // 11
9071        "3" (ap),        // 12
9072        "4" (lda)        // 13
9073      :
9074        "cr0",
9075        "vs32","vs33","vs34","vs35","vs36","vs37",
9076        "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
9077      );
9079 @end smallexample
9081 @anchor{GotoLabels}
9082 @subsubsection Goto Labels
9083 @cindex @code{asm} goto labels
9085 @code{asm goto} allows assembly code to jump to one or more C labels.  The
9086 @var{GotoLabels} section in an @code{asm goto} statement contains 
9087 a comma-separated 
9088 list of all C labels to which the assembler code may jump. GCC assumes that 
9089 @code{asm} execution falls through to the next statement (if this is not the 
9090 case, consider using the @code{__builtin_unreachable} intrinsic after the 
9091 @code{asm} statement). Optimization of @code{asm goto} may be improved by 
9092 using the @code{hot} and @code{cold} label attributes (@pxref{Label 
9093 Attributes}).
9095 An @code{asm goto} statement cannot have outputs.
9096 This is due to an internal restriction of 
9097 the compiler: control transfer instructions cannot have outputs. 
9098 If the assembler code does modify anything, use the @code{"memory"} clobber 
9099 to force the 
9100 optimizers to flush all register values to memory and reload them if 
9101 necessary after the @code{asm} statement.
9103 Also note that an @code{asm goto} statement is always implicitly
9104 considered volatile.
9106 To reference a label in the assembler template,
9107 prefix it with @samp{%l} (lowercase @samp{L}) followed 
9108 by its (zero-based) position in @var{GotoLabels} plus the number of input 
9109 operands.  For example, if the @code{asm} has three inputs and references two 
9110 labels, refer to the first label as @samp{%l3} and the second as @samp{%l4}).
9112 Alternately, you can reference labels using the actual C label name enclosed
9113 in brackets.  For example, to reference a label named @code{carry}, you can
9114 use @samp{%l[carry]}.  The label must still be listed in the @var{GotoLabels}
9115 section when using this approach.
9117 Here is an example of @code{asm goto} for i386:
9119 @example
9120 asm goto (
9121     "btl %1, %0\n\t"
9122     "jc %l2"
9123     : /* No outputs. */
9124     : "r" (p1), "r" (p2) 
9125     : "cc" 
9126     : carry);
9128 return 0;
9130 carry:
9131 return 1;
9132 @end example
9134 The following example shows an @code{asm goto} that uses a memory clobber.
9136 @example
9137 int frob(int x)
9139   int y;
9140   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
9141             : /* No outputs. */
9142             : "r"(x), "r"(&y)
9143             : "r5", "memory" 
9144             : error);
9145   return y;
9146 error:
9147   return -1;
9149 @end example
9151 @anchor{x86Operandmodifiers}
9152 @subsubsection x86 Operand Modifiers
9154 References to input, output, and goto operands in the assembler template
9155 of extended @code{asm} statements can use 
9156 modifiers to affect the way the operands are formatted in 
9157 the code output to the assembler. For example, the 
9158 following code uses the @samp{h} and @samp{b} modifiers for x86:
9160 @example
9161 uint16_t  num;
9162 asm volatile ("xchg %h0, %b0" : "+a" (num) );
9163 @end example
9165 @noindent
9166 These modifiers generate this assembler code:
9168 @example
9169 xchg %ah, %al
9170 @end example
9172 The rest of this discussion uses the following code for illustrative purposes.
9174 @example
9175 int main()
9177    int iInt = 1;
9179 top:
9181    asm volatile goto ("some assembler instructions here"
9182    : /* No outputs. */
9183    : "q" (iInt), "X" (sizeof(unsigned char) + 1)
9184    : /* No clobbers. */
9185    : top);
9187 @end example
9189 With no modifiers, this is what the output from the operands would be for the 
9190 @samp{att} and @samp{intel} dialects of assembler:
9192 @multitable {Operand} {$.L2} {OFFSET FLAT:.L2}
9193 @headitem Operand @tab @samp{att} @tab @samp{intel}
9194 @item @code{%0}
9195 @tab @code{%eax}
9196 @tab @code{eax}
9197 @item @code{%1}
9198 @tab @code{$2}
9199 @tab @code{2}
9200 @item @code{%2}
9201 @tab @code{$.L2}
9202 @tab @code{OFFSET FLAT:.L2}
9203 @end multitable
9205 The table below shows the list of supported modifiers and their effects.
9207 @multitable {Modifier} {Print the opcode suffix for the size of th} {Operand} {@samp{att}} {@samp{intel}}
9208 @headitem Modifier @tab Description @tab Operand @tab @samp{att} @tab @samp{intel}
9209 @item @code{z}
9210 @tab Print the opcode suffix for the size of the current integer operand (one of @code{b}/@code{w}/@code{l}/@code{q}).
9211 @tab @code{%z0}
9212 @tab @code{l}
9213 @tab 
9214 @item @code{b}
9215 @tab Print the QImode name of the register.
9216 @tab @code{%b0}
9217 @tab @code{%al}
9218 @tab @code{al}
9219 @item @code{h}
9220 @tab Print the QImode name for a ``high'' register.
9221 @tab @code{%h0}
9222 @tab @code{%ah}
9223 @tab @code{ah}
9224 @item @code{w}
9225 @tab Print the HImode name of the register.
9226 @tab @code{%w0}
9227 @tab @code{%ax}
9228 @tab @code{ax}
9229 @item @code{k}
9230 @tab Print the SImode name of the register.
9231 @tab @code{%k0}
9232 @tab @code{%eax}
9233 @tab @code{eax}
9234 @item @code{q}
9235 @tab Print the DImode name of the register.
9236 @tab @code{%q0}
9237 @tab @code{%rax}
9238 @tab @code{rax}
9239 @item @code{l}
9240 @tab Print the label name with no punctuation.
9241 @tab @code{%l2}
9242 @tab @code{.L2}
9243 @tab @code{.L2}
9244 @item @code{c}
9245 @tab Require a constant operand and print the constant expression with no punctuation.
9246 @tab @code{%c1}
9247 @tab @code{2}
9248 @tab @code{2}
9249 @end multitable
9251 @anchor{x86floatingpointasmoperands}
9252 @subsubsection x86 Floating-Point @code{asm} Operands
9254 On x86 targets, there are several rules on the usage of stack-like registers
9255 in the operands of an @code{asm}.  These rules apply only to the operands
9256 that are stack-like registers:
9258 @enumerate
9259 @item
9260 Given a set of input registers that die in an @code{asm}, it is
9261 necessary to know which are implicitly popped by the @code{asm}, and
9262 which must be explicitly popped by GCC@.
9264 An input register that is implicitly popped by the @code{asm} must be
9265 explicitly clobbered, unless it is constrained to match an
9266 output operand.
9268 @item
9269 For any input register that is implicitly popped by an @code{asm}, it is
9270 necessary to know how to adjust the stack to compensate for the pop.
9271 If any non-popped input is closer to the top of the reg-stack than
9272 the implicitly popped register, it would not be possible to know what the
9273 stack looked like---it's not clear how the rest of the stack ``slides
9274 up''.
9276 All implicitly popped input registers must be closer to the top of
9277 the reg-stack than any input that is not implicitly popped.
9279 It is possible that if an input dies in an @code{asm}, the compiler might
9280 use the input register for an output reload.  Consider this example:
9282 @smallexample
9283 asm ("foo" : "=t" (a) : "f" (b));
9284 @end smallexample
9286 @noindent
9287 This code says that input @code{b} is not popped by the @code{asm}, and that
9288 the @code{asm} pushes a result onto the reg-stack, i.e., the stack is one
9289 deeper after the @code{asm} than it was before.  But, it is possible that
9290 reload may think that it can use the same register for both the input and
9291 the output.
9293 To prevent this from happening,
9294 if any input operand uses the @samp{f} constraint, all output register
9295 constraints must use the @samp{&} early-clobber modifier.
9297 The example above is correctly written as:
9299 @smallexample
9300 asm ("foo" : "=&t" (a) : "f" (b));
9301 @end smallexample
9303 @item
9304 Some operands need to be in particular places on the stack.  All
9305 output operands fall in this category---GCC has no other way to
9306 know which registers the outputs appear in unless you indicate
9307 this in the constraints.
9309 Output operands must specifically indicate which register an output
9310 appears in after an @code{asm}.  @samp{=f} is not allowed: the operand
9311 constraints must select a class with a single register.
9313 @item
9314 Output operands may not be ``inserted'' between existing stack registers.
9315 Since no 387 opcode uses a read/write operand, all output operands
9316 are dead before the @code{asm}, and are pushed by the @code{asm}.
9317 It makes no sense to push anywhere but the top of the reg-stack.
9319 Output operands must start at the top of the reg-stack: output
9320 operands may not ``skip'' a register.
9322 @item
9323 Some @code{asm} statements may need extra stack space for internal
9324 calculations.  This can be guaranteed by clobbering stack registers
9325 unrelated to the inputs and outputs.
9327 @end enumerate
9329 This @code{asm}
9330 takes one input, which is internally popped, and produces two outputs.
9332 @smallexample
9333 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
9334 @end smallexample
9336 @noindent
9337 This @code{asm} takes two inputs, which are popped by the @code{fyl2xp1} opcode,
9338 and replaces them with one output.  The @code{st(1)} clobber is necessary 
9339 for the compiler to know that @code{fyl2xp1} pops both inputs.
9341 @smallexample
9342 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
9343 @end smallexample
9345 @lowersections
9346 @include md.texi
9347 @raisesections
9349 @node Asm Labels
9350 @subsection Controlling Names Used in Assembler Code
9351 @cindex assembler names for identifiers
9352 @cindex names used in assembler code
9353 @cindex identifiers, names in assembler code
9355 You can specify the name to be used in the assembler code for a C
9356 function or variable by writing the @code{asm} (or @code{__asm__})
9357 keyword after the declarator.
9358 It is up to you to make sure that the assembler names you choose do not
9359 conflict with any other assembler symbols, or reference registers.
9361 @subsubheading Assembler names for data:
9363 This sample shows how to specify the assembler name for data:
9365 @smallexample
9366 int foo asm ("myfoo") = 2;
9367 @end smallexample
9369 @noindent
9370 This specifies that the name to be used for the variable @code{foo} in
9371 the assembler code should be @samp{myfoo} rather than the usual
9372 @samp{_foo}.
9374 On systems where an underscore is normally prepended to the name of a C
9375 variable, this feature allows you to define names for the
9376 linker that do not start with an underscore.
9378 GCC does not support using this feature with a non-static local variable 
9379 since such variables do not have assembler names.  If you are
9380 trying to put the variable in a particular register, see 
9381 @ref{Explicit Register Variables}.
9383 @subsubheading Assembler names for functions:
9385 To specify the assembler name for functions, write a declaration for the 
9386 function before its definition and put @code{asm} there, like this:
9388 @smallexample
9389 int func (int x, int y) asm ("MYFUNC");
9390      
9391 int func (int x, int y)
9393    /* @r{@dots{}} */
9394 @end smallexample
9396 @noindent
9397 This specifies that the name to be used for the function @code{func} in
9398 the assembler code should be @code{MYFUNC}.
9400 @node Explicit Register Variables
9401 @subsection Variables in Specified Registers
9402 @anchor{Explicit Reg Vars}
9403 @cindex explicit register variables
9404 @cindex variables in specified registers
9405 @cindex specified registers
9407 GNU C allows you to associate specific hardware registers with C 
9408 variables.  In almost all cases, allowing the compiler to assign
9409 registers produces the best code.  However under certain unusual
9410 circumstances, more precise control over the variable storage is 
9411 required.
9413 Both global and local variables can be associated with a register.  The
9414 consequences of performing this association are very different between
9415 the two, as explained in the sections below.
9417 @menu
9418 * Global Register Variables::   Variables declared at global scope.
9419 * Local Register Variables::    Variables declared within a function.
9420 @end menu
9422 @node Global Register Variables
9423 @subsubsection Defining Global Register Variables
9424 @anchor{Global Reg Vars}
9425 @cindex global register variables
9426 @cindex registers, global variables in
9427 @cindex registers, global allocation
9429 You can define a global register variable and associate it with a specified 
9430 register like this:
9432 @smallexample
9433 register int *foo asm ("r12");
9434 @end smallexample
9436 @noindent
9437 Here @code{r12} is the name of the register that should be used. Note that 
9438 this is the same syntax used for defining local register variables, but for 
9439 a global variable the declaration appears outside a function. The 
9440 @code{register} keyword is required, and cannot be combined with 
9441 @code{static}. The register name must be a valid register name for the
9442 target platform.
9444 Registers are a scarce resource on most systems and allowing the 
9445 compiler to manage their usage usually results in the best code. However, 
9446 under special circumstances it can make sense to reserve some globally.
9447 For example this may be useful in programs such as programming language 
9448 interpreters that have a couple of global variables that are accessed 
9449 very often.
9451 After defining a global register variable, for the current compilation
9452 unit:
9454 @itemize @bullet
9455 @item The register is reserved entirely for this use, and will not be 
9456 allocated for any other purpose.
9457 @item The register is not saved and restored by any functions.
9458 @item Stores into this register are never deleted even if they appear to be 
9459 dead, but references may be deleted, moved or simplified.
9460 @end itemize
9462 Note that these points @emph{only} apply to code that is compiled with the
9463 definition. The behavior of code that is merely linked in (for example 
9464 code from libraries) is not affected.
9466 If you want to recompile source files that do not actually use your global 
9467 register variable so they do not use the specified register for any other 
9468 purpose, you need not actually add the global register declaration to 
9469 their source code. It suffices to specify the compiler option 
9470 @option{-ffixed-@var{reg}} (@pxref{Code Gen Options}) to reserve the 
9471 register.
9473 @subsubheading Declaring the variable
9475 Global register variables can not have initial values, because an
9476 executable file has no means to supply initial contents for a register.
9478 When selecting a register, choose one that is normally saved and 
9479 restored by function calls on your machine. This ensures that code
9480 which is unaware of this reservation (such as library routines) will 
9481 restore it before returning.
9483 On machines with register windows, be sure to choose a global
9484 register that is not affected magically by the function call mechanism.
9486 @subsubheading Using the variable
9488 @cindex @code{qsort}, and global register variables
9489 When calling routines that are not aware of the reservation, be 
9490 cautious if those routines call back into code which uses them. As an 
9491 example, if you call the system library version of @code{qsort}, it may 
9492 clobber your registers during execution, but (if you have selected 
9493 appropriate registers) it will restore them before returning. However 
9494 it will @emph{not} restore them before calling @code{qsort}'s comparison 
9495 function. As a result, global values will not reliably be available to 
9496 the comparison function unless the @code{qsort} function itself is rebuilt.
9498 Similarly, it is not safe to access the global register variables from signal
9499 handlers or from more than one thread of control. Unless you recompile 
9500 them specially for the task at hand, the system library routines may 
9501 temporarily use the register for other things.
9503 @cindex register variable after @code{longjmp}
9504 @cindex global register after @code{longjmp}
9505 @cindex value after @code{longjmp}
9506 @findex longjmp
9507 @findex setjmp
9508 On most machines, @code{longjmp} restores to each global register
9509 variable the value it had at the time of the @code{setjmp}. On some
9510 machines, however, @code{longjmp} does not change the value of global
9511 register variables. To be portable, the function that called @code{setjmp}
9512 should make other arrangements to save the values of the global register
9513 variables, and to restore them in a @code{longjmp}. This way, the same
9514 thing happens regardless of what @code{longjmp} does.
9516 Eventually there may be a way of asking the compiler to choose a register 
9517 automatically, but first we need to figure out how it should choose and 
9518 how to enable you to guide the choice.  No solution is evident.
9520 @node Local Register Variables
9521 @subsubsection Specifying Registers for Local Variables
9522 @anchor{Local Reg Vars}
9523 @cindex local variables, specifying registers
9524 @cindex specifying registers for local variables
9525 @cindex registers for local variables
9527 You can define a local register variable and associate it with a specified 
9528 register like this:
9530 @smallexample
9531 register int *foo asm ("r12");
9532 @end smallexample
9534 @noindent
9535 Here @code{r12} is the name of the register that should be used.  Note
9536 that this is the same syntax used for defining global register variables, 
9537 but for a local variable the declaration appears within a function.  The 
9538 @code{register} keyword is required, and cannot be combined with 
9539 @code{static}.  The register name must be a valid register name for the
9540 target platform.
9542 As with global register variables, it is recommended that you choose 
9543 a register that is normally saved and restored by function calls on your 
9544 machine, so that calls to library routines will not clobber it.
9546 The only supported use for this feature is to specify registers
9547 for input and output operands when calling Extended @code{asm} 
9548 (@pxref{Extended Asm}).  This may be necessary if the constraints for a 
9549 particular machine don't provide sufficient control to select the desired 
9550 register.  To force an operand into a register, create a local variable 
9551 and specify the register name after the variable's declaration.  Then use 
9552 the local variable for the @code{asm} operand and specify any constraint 
9553 letter that matches the register:
9555 @smallexample
9556 register int *p1 asm ("r0") = @dots{};
9557 register int *p2 asm ("r1") = @dots{};
9558 register int *result asm ("r0");
9559 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
9560 @end smallexample
9562 @emph{Warning:} In the above example, be aware that a register (for example 
9563 @code{r0}) can be call-clobbered by subsequent code, including function 
9564 calls and library calls for arithmetic operators on other variables (for 
9565 example the initialization of @code{p2}).  In this case, use temporary 
9566 variables for expressions between the register assignments:
9568 @smallexample
9569 int t1 = @dots{};
9570 register int *p1 asm ("r0") = @dots{};
9571 register int *p2 asm ("r1") = t1;
9572 register int *result asm ("r0");
9573 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
9574 @end smallexample
9576 Defining a register variable does not reserve the register.  Other than
9577 when invoking the Extended @code{asm}, the contents of the specified 
9578 register are not guaranteed.  For this reason, the following uses 
9579 are explicitly @emph{not} supported.  If they appear to work, it is only 
9580 happenstance, and may stop working as intended due to (seemingly) 
9581 unrelated changes in surrounding code, or even minor changes in the 
9582 optimization of a future version of gcc:
9584 @itemize @bullet
9585 @item Passing parameters to or from Basic @code{asm}
9586 @item Passing parameters to or from Extended @code{asm} without using input 
9587 or output operands.
9588 @item Passing parameters to or from routines written in assembler (or
9589 other languages) using non-standard calling conventions.
9590 @end itemize
9592 Some developers use Local Register Variables in an attempt to improve 
9593 gcc's allocation of registers, especially in large functions.  In this 
9594 case the register name is essentially a hint to the register allocator.
9595 While in some instances this can generate better code, improvements are
9596 subject to the whims of the allocator/optimizers.  Since there are no
9597 guarantees that your improvements won't be lost, this usage of Local
9598 Register Variables is discouraged.
9600 On the MIPS platform, there is related use for local register variables 
9601 with slightly different characteristics (@pxref{MIPS Coprocessors,, 
9602 Defining coprocessor specifics for MIPS targets, gccint, 
9603 GNU Compiler Collection (GCC) Internals}).
9605 @node Size of an asm
9606 @subsection Size of an @code{asm}
9608 Some targets require that GCC track the size of each instruction used
9609 in order to generate correct code.  Because the final length of the
9610 code produced by an @code{asm} statement is only known by the
9611 assembler, GCC must make an estimate as to how big it will be.  It
9612 does this by counting the number of instructions in the pattern of the
9613 @code{asm} and multiplying that by the length of the longest
9614 instruction supported by that processor.  (When working out the number
9615 of instructions, it assumes that any occurrence of a newline or of
9616 whatever statement separator character is supported by the assembler --
9617 typically @samp{;} --- indicates the end of an instruction.)
9619 Normally, GCC's estimate is adequate to ensure that correct
9620 code is generated, but it is possible to confuse the compiler if you use
9621 pseudo instructions or assembler macros that expand into multiple real
9622 instructions, or if you use assembler directives that expand to more
9623 space in the object file than is needed for a single instruction.
9624 If this happens then the assembler may produce a diagnostic saying that
9625 a label is unreachable.
9627 @node Alternate Keywords
9628 @section Alternate Keywords
9629 @cindex alternate keywords
9630 @cindex keywords, alternate
9632 @option{-ansi} and the various @option{-std} options disable certain
9633 keywords.  This causes trouble when you want to use GNU C extensions, or
9634 a general-purpose header file that should be usable by all programs,
9635 including ISO C programs.  The keywords @code{asm}, @code{typeof} and
9636 @code{inline} are not available in programs compiled with
9637 @option{-ansi} or @option{-std} (although @code{inline} can be used in a
9638 program compiled with @option{-std=c99} or @option{-std=c11}).  The
9639 ISO C99 keyword
9640 @code{restrict} is only available when @option{-std=gnu99} (which will
9641 eventually be the default) or @option{-std=c99} (or the equivalent
9642 @option{-std=iso9899:1999}), or an option for a later standard
9643 version, is used.
9645 The way to solve these problems is to put @samp{__} at the beginning and
9646 end of each problematical keyword.  For example, use @code{__asm__}
9647 instead of @code{asm}, and @code{__inline__} instead of @code{inline}.
9649 Other C compilers won't accept these alternative keywords; if you want to
9650 compile with another compiler, you can define the alternate keywords as
9651 macros to replace them with the customary keywords.  It looks like this:
9653 @smallexample
9654 #ifndef __GNUC__
9655 #define __asm__ asm
9656 #endif
9657 @end smallexample
9659 @findex __extension__
9660 @opindex pedantic
9661 @option{-pedantic} and other options cause warnings for many GNU C extensions.
9662 You can
9663 prevent such warnings within one expression by writing
9664 @code{__extension__} before the expression.  @code{__extension__} has no
9665 effect aside from this.
9667 @node Incomplete Enums
9668 @section Incomplete @code{enum} Types
9670 You can define an @code{enum} tag without specifying its possible values.
9671 This results in an incomplete type, much like what you get if you write
9672 @code{struct foo} without describing the elements.  A later declaration
9673 that does specify the possible values completes the type.
9675 You cannot allocate variables or storage using the type while it is
9676 incomplete.  However, you can work with pointers to that type.
9678 This extension may not be very useful, but it makes the handling of
9679 @code{enum} more consistent with the way @code{struct} and @code{union}
9680 are handled.
9682 This extension is not supported by GNU C++.
9684 @node Function Names
9685 @section Function Names as Strings
9686 @cindex @code{__func__} identifier
9687 @cindex @code{__FUNCTION__} identifier
9688 @cindex @code{__PRETTY_FUNCTION__} identifier
9690 GCC provides three magic constants that hold the name of the current
9691 function as a string.  In C++11 and later modes, all three are treated
9692 as constant expressions and can be used in @code{constexpr} constexts.
9693 The first of these constants is @code{__func__}, which is part of
9694 the C99 standard:
9696 The identifier @code{__func__} is implicitly declared by the translator
9697 as if, immediately following the opening brace of each function
9698 definition, the declaration
9700 @smallexample
9701 static const char __func__[] = "function-name";
9702 @end smallexample
9704 @noindent
9705 appeared, where function-name is the name of the lexically-enclosing
9706 function.  This name is the unadorned name of the function.  As an
9707 extension, at file (or, in C++, namespace scope), @code{__func__}
9708 evaluates to the empty string.
9710 @code{__FUNCTION__} is another name for @code{__func__}, provided for
9711 backward compatibility with old versions of GCC.
9713 In C, @code{__PRETTY_FUNCTION__} is yet another name for
9714 @code{__func__}, except that at file (or, in C++, namespace scope),
9715 it evaluates to the string @code{"top level"}.  In addition, in C++,
9716 @code{__PRETTY_FUNCTION__} contains the signature of the function as
9717 well as its bare name.  For example, this program:
9719 @smallexample
9720 extern "C" int printf (const char *, ...);
9722 class a @{
9723  public:
9724   void sub (int i)
9725     @{
9726       printf ("__FUNCTION__ = %s\n", __FUNCTION__);
9727       printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
9728     @}
9732 main (void)
9734   a ax;
9735   ax.sub (0);
9736   return 0;
9738 @end smallexample
9740 @noindent
9741 gives this output:
9743 @smallexample
9744 __FUNCTION__ = sub
9745 __PRETTY_FUNCTION__ = void a::sub(int)
9746 @end smallexample
9748 These identifiers are variables, not preprocessor macros, and may not
9749 be used to initialize @code{char} arrays or be concatenated with string
9750 literals.
9752 @node Return Address
9753 @section Getting the Return or Frame Address of a Function
9755 These functions may be used to get information about the callers of a
9756 function.
9758 @deftypefn {Built-in Function} {void *} __builtin_return_address (unsigned int @var{level})
9759 This function returns the return address of the current function, or of
9760 one of its callers.  The @var{level} argument is number of frames to
9761 scan up the call stack.  A value of @code{0} yields the return address
9762 of the current function, a value of @code{1} yields the return address
9763 of the caller of the current function, and so forth.  When inlining
9764 the expected behavior is that the function returns the address of
9765 the function that is returned to.  To work around this behavior use
9766 the @code{noinline} function attribute.
9768 The @var{level} argument must be a constant integer.
9770 On some machines it may be impossible to determine the return address of
9771 any function other than the current one; in such cases, or when the top
9772 of the stack has been reached, this function returns @code{0} or a
9773 random value.  In addition, @code{__builtin_frame_address} may be used
9774 to determine if the top of the stack has been reached.
9776 Additional post-processing of the returned value may be needed, see
9777 @code{__builtin_extract_return_addr}.
9779 Calling this function with a nonzero argument can have unpredictable
9780 effects, including crashing the calling program.  As a result, calls
9781 that are considered unsafe are diagnosed when the @option{-Wframe-address}
9782 option is in effect.  Such calls should only be made in debugging
9783 situations.
9784 @end deftypefn
9786 @deftypefn {Built-in Function} {void *} __builtin_extract_return_addr (void *@var{addr})
9787 The address as returned by @code{__builtin_return_address} may have to be fed
9788 through this function to get the actual encoded address.  For example, on the
9789 31-bit S/390 platform the highest bit has to be masked out, or on SPARC
9790 platforms an offset has to be added for the true next instruction to be
9791 executed.
9793 If no fixup is needed, this function simply passes through @var{addr}.
9794 @end deftypefn
9796 @deftypefn {Built-in Function} {void *} __builtin_frob_return_address (void *@var{addr})
9797 This function does the reverse of @code{__builtin_extract_return_addr}.
9798 @end deftypefn
9800 @deftypefn {Built-in Function} {void *} __builtin_frame_address (unsigned int @var{level})
9801 This function is similar to @code{__builtin_return_address}, but it
9802 returns the address of the function frame rather than the return address
9803 of the function.  Calling @code{__builtin_frame_address} with a value of
9804 @code{0} yields the frame address of the current function, a value of
9805 @code{1} yields the frame address of the caller of the current function,
9806 and so forth.
9808 The frame is the area on the stack that holds local variables and saved
9809 registers.  The frame address is normally the address of the first word
9810 pushed on to the stack by the function.  However, the exact definition
9811 depends upon the processor and the calling convention.  If the processor
9812 has a dedicated frame pointer register, and the function has a frame,
9813 then @code{__builtin_frame_address} returns the value of the frame
9814 pointer register.
9816 On some machines it may be impossible to determine the frame address of
9817 any function other than the current one; in such cases, or when the top
9818 of the stack has been reached, this function returns @code{0} if
9819 the first frame pointer is properly initialized by the startup code.
9821 Calling this function with a nonzero argument can have unpredictable
9822 effects, including crashing the calling program.  As a result, calls
9823 that are considered unsafe are diagnosed when the @option{-Wframe-address}
9824 option is in effect.  Such calls should only be made in debugging
9825 situations.
9826 @end deftypefn
9828 @node Vector Extensions
9829 @section Using Vector Instructions through Built-in Functions
9831 On some targets, the instruction set contains SIMD vector instructions which
9832 operate on multiple values contained in one large register at the same time.
9833 For example, on the x86 the MMX, 3DNow!@: and SSE extensions can be used
9834 this way.
9836 The first step in using these extensions is to provide the necessary data
9837 types.  This should be done using an appropriate @code{typedef}:
9839 @smallexample
9840 typedef int v4si __attribute__ ((vector_size (16)));
9841 @end smallexample
9843 @noindent
9844 The @code{int} type specifies the base type, while the attribute specifies
9845 the vector size for the variable, measured in bytes.  For example, the
9846 declaration above causes the compiler to set the mode for the @code{v4si}
9847 type to be 16 bytes wide and divided into @code{int} sized units.  For
9848 a 32-bit @code{int} this means a vector of 4 units of 4 bytes, and the
9849 corresponding mode of @code{foo} is @acronym{V4SI}.
9851 The @code{vector_size} attribute is only applicable to integral and
9852 float scalars, although arrays, pointers, and function return values
9853 are allowed in conjunction with this construct. Only sizes that are
9854 a power of two are currently allowed.
9856 All the basic integer types can be used as base types, both as signed
9857 and as unsigned: @code{char}, @code{short}, @code{int}, @code{long},
9858 @code{long long}.  In addition, @code{float} and @code{double} can be
9859 used to build floating-point vector types.
9861 Specifying a combination that is not valid for the current architecture
9862 causes GCC to synthesize the instructions using a narrower mode.
9863 For example, if you specify a variable of type @code{V4SI} and your
9864 architecture does not allow for this specific SIMD type, GCC
9865 produces code that uses 4 @code{SIs}.
9867 The types defined in this manner can be used with a subset of normal C
9868 operations.  Currently, GCC allows using the following operators
9869 on these types: @code{+, -, *, /, unary minus, ^, |, &, ~, %}@.
9871 The operations behave like C++ @code{valarrays}.  Addition is defined as
9872 the addition of the corresponding elements of the operands.  For
9873 example, in the code below, each of the 4 elements in @var{a} is
9874 added to the corresponding 4 elements in @var{b} and the resulting
9875 vector is stored in @var{c}.
9877 @smallexample
9878 typedef int v4si __attribute__ ((vector_size (16)));
9880 v4si a, b, c;
9882 c = a + b;
9883 @end smallexample
9885 Subtraction, multiplication, division, and the logical operations
9886 operate in a similar manner.  Likewise, the result of using the unary
9887 minus or complement operators on a vector type is a vector whose
9888 elements are the negative or complemented values of the corresponding
9889 elements in the operand.
9891 It is possible to use shifting operators @code{<<}, @code{>>} on
9892 integer-type vectors. The operation is defined as following: @code{@{a0,
9893 a1, @dots{}, an@} >> @{b0, b1, @dots{}, bn@} == @{a0 >> b0, a1 >> b1,
9894 @dots{}, an >> bn@}}@. Vector operands must have the same number of
9895 elements. 
9897 For convenience, it is allowed to use a binary vector operation
9898 where one operand is a scalar. In that case the compiler transforms
9899 the scalar operand into a vector where each element is the scalar from
9900 the operation. The transformation happens only if the scalar could be
9901 safely converted to the vector-element type.
9902 Consider the following code.
9904 @smallexample
9905 typedef int v4si __attribute__ ((vector_size (16)));
9907 v4si a, b, c;
9908 long l;
9910 a = b + 1;    /* a = b + @{1,1,1,1@}; */
9911 a = 2 * b;    /* a = @{2,2,2,2@} * b; */
9913 a = l + a;    /* Error, cannot convert long to int. */
9914 @end smallexample
9916 Vectors can be subscripted as if the vector were an array with
9917 the same number of elements and base type.  Out of bound accesses
9918 invoke undefined behavior at run time.  Warnings for out of bound
9919 accesses for vector subscription can be enabled with
9920 @option{-Warray-bounds}.
9922 Vector comparison is supported with standard comparison
9923 operators: @code{==, !=, <, <=, >, >=}. Comparison operands can be
9924 vector expressions of integer-type or real-type. Comparison between
9925 integer-type vectors and real-type vectors are not supported.  The
9926 result of the comparison is a vector of the same width and number of
9927 elements as the comparison operands with a signed integral element
9928 type.
9930 Vectors are compared element-wise producing 0 when comparison is false
9931 and -1 (constant of the appropriate type where all bits are set)
9932 otherwise. Consider the following example.
9934 @smallexample
9935 typedef int v4si __attribute__ ((vector_size (16)));
9937 v4si a = @{1,2,3,4@};
9938 v4si b = @{3,2,1,4@};
9939 v4si c;
9941 c = a >  b;     /* The result would be @{0, 0,-1, 0@}  */
9942 c = a == b;     /* The result would be @{0,-1, 0,-1@}  */
9943 @end smallexample
9945 In C++, the ternary operator @code{?:} is available. @code{a?b:c}, where
9946 @code{b} and @code{c} are vectors of the same type and @code{a} is an
9947 integer vector with the same number of elements of the same size as @code{b}
9948 and @code{c}, computes all three arguments and creates a vector
9949 @code{@{a[0]?b[0]:c[0], a[1]?b[1]:c[1], @dots{}@}}.  Note that unlike in
9950 OpenCL, @code{a} is thus interpreted as @code{a != 0} and not @code{a < 0}.
9951 As in the case of binary operations, this syntax is also accepted when
9952 one of @code{b} or @code{c} is a scalar that is then transformed into a
9953 vector. If both @code{b} and @code{c} are scalars and the type of
9954 @code{true?b:c} has the same size as the element type of @code{a}, then
9955 @code{b} and @code{c} are converted to a vector type whose elements have
9956 this type and with the same number of elements as @code{a}.
9958 In C++, the logic operators @code{!, &&, ||} are available for vectors.
9959 @code{!v} is equivalent to @code{v == 0}, @code{a && b} is equivalent to
9960 @code{a!=0 & b!=0} and @code{a || b} is equivalent to @code{a!=0 | b!=0}.
9961 For mixed operations between a scalar @code{s} and a vector @code{v},
9962 @code{s && v} is equivalent to @code{s?v!=0:0} (the evaluation is
9963 short-circuit) and @code{v && s} is equivalent to @code{v!=0 & (s?-1:0)}.
9965 @findex __builtin_shuffle
9966 Vector shuffling is available using functions
9967 @code{__builtin_shuffle (vec, mask)} and
9968 @code{__builtin_shuffle (vec0, vec1, mask)}.
9969 Both functions construct a permutation of elements from one or two
9970 vectors and return a vector of the same type as the input vector(s).
9971 The @var{mask} is an integral vector with the same width (@var{W})
9972 and element count (@var{N}) as the output vector.
9974 The elements of the input vectors are numbered in memory ordering of
9975 @var{vec0} beginning at 0 and @var{vec1} beginning at @var{N}.  The
9976 elements of @var{mask} are considered modulo @var{N} in the single-operand
9977 case and modulo @math{2*@var{N}} in the two-operand case.
9979 Consider the following example,
9981 @smallexample
9982 typedef int v4si __attribute__ ((vector_size (16)));
9984 v4si a = @{1,2,3,4@};
9985 v4si b = @{5,6,7,8@};
9986 v4si mask1 = @{0,1,1,3@};
9987 v4si mask2 = @{0,4,2,5@};
9988 v4si res;
9990 res = __builtin_shuffle (a, mask1);       /* res is @{1,2,2,4@}  */
9991 res = __builtin_shuffle (a, b, mask2);    /* res is @{1,5,3,6@}  */
9992 @end smallexample
9994 Note that @code{__builtin_shuffle} is intentionally semantically
9995 compatible with the OpenCL @code{shuffle} and @code{shuffle2} functions.
9997 You can declare variables and use them in function calls and returns, as
9998 well as in assignments and some casts.  You can specify a vector type as
9999 a return type for a function.  Vector types can also be used as function
10000 arguments.  It is possible to cast from one vector type to another,
10001 provided they are of the same size (in fact, you can also cast vectors
10002 to and from other datatypes of the same size).
10004 You cannot operate between vectors of different lengths or different
10005 signedness without a cast.
10007 @node Offsetof
10008 @section Support for @code{offsetof}
10009 @findex __builtin_offsetof
10011 GCC implements for both C and C++ a syntactic extension to implement
10012 the @code{offsetof} macro.
10014 @smallexample
10015 primary:
10016         "__builtin_offsetof" "(" @code{typename} "," offsetof_member_designator ")"
10018 offsetof_member_designator:
10019           @code{identifier}
10020         | offsetof_member_designator "." @code{identifier}
10021         | offsetof_member_designator "[" @code{expr} "]"
10022 @end smallexample
10024 This extension is sufficient such that
10026 @smallexample
10027 #define offsetof(@var{type}, @var{member})  __builtin_offsetof (@var{type}, @var{member})
10028 @end smallexample
10030 @noindent
10031 is a suitable definition of the @code{offsetof} macro.  In C++, @var{type}
10032 may be dependent.  In either case, @var{member} may consist of a single
10033 identifier, or a sequence of member accesses and array references.
10035 @node __sync Builtins
10036 @section Legacy @code{__sync} Built-in Functions for Atomic Memory Access
10038 The following built-in functions
10039 are intended to be compatible with those described
10040 in the @cite{Intel Itanium Processor-specific Application Binary Interface},
10041 section 7.4.  As such, they depart from normal GCC practice by not using
10042 the @samp{__builtin_} prefix and also by being overloaded so that they
10043 work on multiple types.
10045 The definition given in the Intel documentation allows only for the use of
10046 the types @code{int}, @code{long}, @code{long long} or their unsigned
10047 counterparts.  GCC allows any scalar type that is 1, 2, 4 or 8 bytes in
10048 size other than the C type @code{_Bool} or the C++ type @code{bool}.
10049 Operations on pointer arguments are performed as if the operands were
10050 of the @code{uintptr_t} type.  That is, they are not scaled by the size
10051 of the type to which the pointer points.
10053 These functions are implemented in terms of the @samp{__atomic}
10054 builtins (@pxref{__atomic Builtins}).  They should not be used for new
10055 code which should use the @samp{__atomic} builtins instead.
10057 Not all operations are supported by all target processors.  If a particular
10058 operation cannot be implemented on the target processor, a warning is
10059 generated and a call to an external function is generated.  The external
10060 function carries the same name as the built-in version,
10061 with an additional suffix
10062 @samp{_@var{n}} where @var{n} is the size of the data type.
10064 @c ??? Should we have a mechanism to suppress this warning?  This is almost
10065 @c useful for implementing the operation under the control of an external
10066 @c mutex.
10068 In most cases, these built-in functions are considered a @dfn{full barrier}.
10069 That is,
10070 no memory operand is moved across the operation, either forward or
10071 backward.  Further, instructions are issued as necessary to prevent the
10072 processor from speculating loads across the operation and from queuing stores
10073 after the operation.
10075 All of the routines are described in the Intel documentation to take
10076 ``an optional list of variables protected by the memory barrier''.  It's
10077 not clear what is meant by that; it could mean that @emph{only} the
10078 listed variables are protected, or it could mean a list of additional
10079 variables to be protected.  The list is ignored by GCC which treats it as
10080 empty.  GCC interprets an empty list as meaning that all globally
10081 accessible variables should be protected.
10083 @table @code
10084 @item @var{type} __sync_fetch_and_add (@var{type} *ptr, @var{type} value, ...)
10085 @itemx @var{type} __sync_fetch_and_sub (@var{type} *ptr, @var{type} value, ...)
10086 @itemx @var{type} __sync_fetch_and_or (@var{type} *ptr, @var{type} value, ...)
10087 @itemx @var{type} __sync_fetch_and_and (@var{type} *ptr, @var{type} value, ...)
10088 @itemx @var{type} __sync_fetch_and_xor (@var{type} *ptr, @var{type} value, ...)
10089 @itemx @var{type} __sync_fetch_and_nand (@var{type} *ptr, @var{type} value, ...)
10090 @findex __sync_fetch_and_add
10091 @findex __sync_fetch_and_sub
10092 @findex __sync_fetch_and_or
10093 @findex __sync_fetch_and_and
10094 @findex __sync_fetch_and_xor
10095 @findex __sync_fetch_and_nand
10096 These built-in functions perform the operation suggested by the name, and
10097 returns the value that had previously been in memory.  That is, operations
10098 on integer operands have the following semantics.  Operations on pointer
10099 arguments are performed as if the operands were of the @code{uintptr_t}
10100 type.  That is, they are not scaled by the size of the type to which
10101 the pointer points.
10103 @smallexample
10104 @{ tmp = *ptr; *ptr @var{op}= value; return tmp; @}
10105 @{ tmp = *ptr; *ptr = ~(tmp & value); return tmp; @}   // nand
10106 @end smallexample
10108 The object pointed to by the first argument must be of integer or pointer
10109 type.  It must not be a boolean type.
10111 @emph{Note:} GCC 4.4 and later implement @code{__sync_fetch_and_nand}
10112 as @code{*ptr = ~(tmp & value)} instead of @code{*ptr = ~tmp & value}.
10114 @item @var{type} __sync_add_and_fetch (@var{type} *ptr, @var{type} value, ...)
10115 @itemx @var{type} __sync_sub_and_fetch (@var{type} *ptr, @var{type} value, ...)
10116 @itemx @var{type} __sync_or_and_fetch (@var{type} *ptr, @var{type} value, ...)
10117 @itemx @var{type} __sync_and_and_fetch (@var{type} *ptr, @var{type} value, ...)
10118 @itemx @var{type} __sync_xor_and_fetch (@var{type} *ptr, @var{type} value, ...)
10119 @itemx @var{type} __sync_nand_and_fetch (@var{type} *ptr, @var{type} value, ...)
10120 @findex __sync_add_and_fetch
10121 @findex __sync_sub_and_fetch
10122 @findex __sync_or_and_fetch
10123 @findex __sync_and_and_fetch
10124 @findex __sync_xor_and_fetch
10125 @findex __sync_nand_and_fetch
10126 These built-in functions perform the operation suggested by the name, and
10127 return the new value.  That is, operations on integer operands have
10128 the following semantics.  Operations on pointer operands are performed as
10129 if the operand's type were @code{uintptr_t}.
10131 @smallexample
10132 @{ *ptr @var{op}= value; return *ptr; @}
10133 @{ *ptr = ~(*ptr & value); return *ptr; @}   // nand
10134 @end smallexample
10136 The same constraints on arguments apply as for the corresponding
10137 @code{__sync_op_and_fetch} built-in functions.
10139 @emph{Note:} GCC 4.4 and later implement @code{__sync_nand_and_fetch}
10140 as @code{*ptr = ~(*ptr & value)} instead of
10141 @code{*ptr = ~*ptr & value}.
10143 @item bool __sync_bool_compare_and_swap (@var{type} *ptr, @var{type} oldval, @var{type} newval, ...)
10144 @itemx @var{type} __sync_val_compare_and_swap (@var{type} *ptr, @var{type} oldval, @var{type} newval, ...)
10145 @findex __sync_bool_compare_and_swap
10146 @findex __sync_val_compare_and_swap
10147 These built-in functions perform an atomic compare and swap.
10148 That is, if the current
10149 value of @code{*@var{ptr}} is @var{oldval}, then write @var{newval} into
10150 @code{*@var{ptr}}.
10152 The ``bool'' version returns true if the comparison is successful and
10153 @var{newval} is written.  The ``val'' version returns the contents
10154 of @code{*@var{ptr}} before the operation.
10156 @item __sync_synchronize (...)
10157 @findex __sync_synchronize
10158 This built-in function issues a full memory barrier.
10160 @item @var{type} __sync_lock_test_and_set (@var{type} *ptr, @var{type} value, ...)
10161 @findex __sync_lock_test_and_set
10162 This built-in function, as described by Intel, is not a traditional test-and-set
10163 operation, but rather an atomic exchange operation.  It writes @var{value}
10164 into @code{*@var{ptr}}, and returns the previous contents of
10165 @code{*@var{ptr}}.
10167 Many targets have only minimal support for such locks, and do not support
10168 a full exchange operation.  In this case, a target may support reduced
10169 functionality here by which the @emph{only} valid value to store is the
10170 immediate constant 1.  The exact value actually stored in @code{*@var{ptr}}
10171 is implementation defined.
10173 This built-in function is not a full barrier,
10174 but rather an @dfn{acquire barrier}.
10175 This means that references after the operation cannot move to (or be
10176 speculated to) before the operation, but previous memory stores may not
10177 be globally visible yet, and previous memory loads may not yet be
10178 satisfied.
10180 @item void __sync_lock_release (@var{type} *ptr, ...)
10181 @findex __sync_lock_release
10182 This built-in function releases the lock acquired by
10183 @code{__sync_lock_test_and_set}.
10184 Normally this means writing the constant 0 to @code{*@var{ptr}}.
10186 This built-in function is not a full barrier,
10187 but rather a @dfn{release barrier}.
10188 This means that all previous memory stores are globally visible, and all
10189 previous memory loads have been satisfied, but following memory reads
10190 are not prevented from being speculated to before the barrier.
10191 @end table
10193 @node __atomic Builtins
10194 @section Built-in Functions for Memory Model Aware Atomic Operations
10196 The following built-in functions approximately match the requirements
10197 for the C++11 memory model.  They are all
10198 identified by being prefixed with @samp{__atomic} and most are
10199 overloaded so that they work with multiple types.
10201 These functions are intended to replace the legacy @samp{__sync}
10202 builtins.  The main difference is that the memory order that is requested
10203 is a parameter to the functions.  New code should always use the
10204 @samp{__atomic} builtins rather than the @samp{__sync} builtins.
10206 Note that the @samp{__atomic} builtins assume that programs will
10207 conform to the C++11 memory model.  In particular, they assume
10208 that programs are free of data races.  See the C++11 standard for
10209 detailed requirements.
10211 The @samp{__atomic} builtins can be used with any integral scalar or
10212 pointer type that is 1, 2, 4, or 8 bytes in length.  16-byte integral
10213 types are also allowed if @samp{__int128} (@pxref{__int128}) is
10214 supported by the architecture.
10216 The four non-arithmetic functions (load, store, exchange, and 
10217 compare_exchange) all have a generic version as well.  This generic
10218 version works on any data type.  It uses the lock-free built-in function
10219 if the specific data type size makes that possible; otherwise, an
10220 external call is left to be resolved at run time.  This external call is
10221 the same format with the addition of a @samp{size_t} parameter inserted
10222 as the first parameter indicating the size of the object being pointed to.
10223 All objects must be the same size.
10225 There are 6 different memory orders that can be specified.  These map
10226 to the C++11 memory orders with the same names, see the C++11 standard
10227 or the @uref{http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync,GCC wiki
10228 on atomic synchronization} for detailed definitions.  Individual
10229 targets may also support additional memory orders for use on specific
10230 architectures.  Refer to the target documentation for details of
10231 these.
10233 An atomic operation can both constrain code motion and
10234 be mapped to hardware instructions for synchronization between threads
10235 (e.g., a fence).  To which extent this happens is controlled by the
10236 memory orders, which are listed here in approximately ascending order of
10237 strength.  The description of each memory order is only meant to roughly
10238 illustrate the effects and is not a specification; see the C++11
10239 memory model for precise semantics.
10241 @table  @code
10242 @item __ATOMIC_RELAXED
10243 Implies no inter-thread ordering constraints.
10244 @item __ATOMIC_CONSUME
10245 This is currently implemented using the stronger @code{__ATOMIC_ACQUIRE}
10246 memory order because of a deficiency in C++11's semantics for
10247 @code{memory_order_consume}.
10248 @item __ATOMIC_ACQUIRE
10249 Creates an inter-thread happens-before constraint from the release (or
10250 stronger) semantic store to this acquire load.  Can prevent hoisting
10251 of code to before the operation.
10252 @item __ATOMIC_RELEASE
10253 Creates an inter-thread happens-before constraint to acquire (or stronger)
10254 semantic loads that read from this release store.  Can prevent sinking
10255 of code to after the operation.
10256 @item __ATOMIC_ACQ_REL
10257 Combines the effects of both @code{__ATOMIC_ACQUIRE} and
10258 @code{__ATOMIC_RELEASE}.
10259 @item __ATOMIC_SEQ_CST
10260 Enforces total ordering with all other @code{__ATOMIC_SEQ_CST} operations.
10261 @end table
10263 Note that in the C++11 memory model, @emph{fences} (e.g.,
10264 @samp{__atomic_thread_fence}) take effect in combination with other
10265 atomic operations on specific memory locations (e.g., atomic loads);
10266 operations on specific memory locations do not necessarily affect other
10267 operations in the same way.
10269 Target architectures are encouraged to provide their own patterns for
10270 each of the atomic built-in functions.  If no target is provided, the original
10271 non-memory model set of @samp{__sync} atomic built-in functions are
10272 used, along with any required synchronization fences surrounding it in
10273 order to achieve the proper behavior.  Execution in this case is subject
10274 to the same restrictions as those built-in functions.
10276 If there is no pattern or mechanism to provide a lock-free instruction
10277 sequence, a call is made to an external routine with the same parameters
10278 to be resolved at run time.
10280 When implementing patterns for these built-in functions, the memory order
10281 parameter can be ignored as long as the pattern implements the most
10282 restrictive @code{__ATOMIC_SEQ_CST} memory order.  Any of the other memory
10283 orders execute correctly with this memory order but they may not execute as
10284 efficiently as they could with a more appropriate implementation of the
10285 relaxed requirements.
10287 Note that the C++11 standard allows for the memory order parameter to be
10288 determined at run time rather than at compile time.  These built-in
10289 functions map any run-time value to @code{__ATOMIC_SEQ_CST} rather
10290 than invoke a runtime library call or inline a switch statement.  This is
10291 standard compliant, safe, and the simplest approach for now.
10293 The memory order parameter is a signed int, but only the lower 16 bits are
10294 reserved for the memory order.  The remainder of the signed int is reserved
10295 for target use and should be 0.  Use of the predefined atomic values
10296 ensures proper usage.
10298 @deftypefn {Built-in Function} @var{type} __atomic_load_n (@var{type} *ptr, int memorder)
10299 This built-in function implements an atomic load operation.  It returns the
10300 contents of @code{*@var{ptr}}.
10302 The valid memory order variants are
10303 @code{__ATOMIC_RELAXED}, @code{__ATOMIC_SEQ_CST}, @code{__ATOMIC_ACQUIRE},
10304 and @code{__ATOMIC_CONSUME}.
10306 @end deftypefn
10308 @deftypefn {Built-in Function} void __atomic_load (@var{type} *ptr, @var{type} *ret, int memorder)
10309 This is the generic version of an atomic load.  It returns the
10310 contents of @code{*@var{ptr}} in @code{*@var{ret}}.
10312 @end deftypefn
10314 @deftypefn {Built-in Function} void __atomic_store_n (@var{type} *ptr, @var{type} val, int memorder)
10315 This built-in function implements an atomic store operation.  It writes 
10316 @code{@var{val}} into @code{*@var{ptr}}.  
10318 The valid memory order variants are
10319 @code{__ATOMIC_RELAXED}, @code{__ATOMIC_SEQ_CST}, and @code{__ATOMIC_RELEASE}.
10321 @end deftypefn
10323 @deftypefn {Built-in Function} void __atomic_store (@var{type} *ptr, @var{type} *val, int memorder)
10324 This is the generic version of an atomic store.  It stores the value
10325 of @code{*@var{val}} into @code{*@var{ptr}}.
10327 @end deftypefn
10329 @deftypefn {Built-in Function} @var{type} __atomic_exchange_n (@var{type} *ptr, @var{type} val, int memorder)
10330 This built-in function implements an atomic exchange operation.  It writes
10331 @var{val} into @code{*@var{ptr}}, and returns the previous contents of
10332 @code{*@var{ptr}}.
10334 The valid memory order variants are
10335 @code{__ATOMIC_RELAXED}, @code{__ATOMIC_SEQ_CST}, @code{__ATOMIC_ACQUIRE},
10336 @code{__ATOMIC_RELEASE}, and @code{__ATOMIC_ACQ_REL}.
10338 @end deftypefn
10340 @deftypefn {Built-in Function} void __atomic_exchange (@var{type} *ptr, @var{type} *val, @var{type} *ret, int memorder)
10341 This is the generic version of an atomic exchange.  It stores the
10342 contents of @code{*@var{val}} into @code{*@var{ptr}}. The original value
10343 of @code{*@var{ptr}} is copied into @code{*@var{ret}}.
10345 @end deftypefn
10347 @deftypefn {Built-in Function} bool __atomic_compare_exchange_n (@var{type} *ptr, @var{type} *expected, @var{type} desired, bool weak, int success_memorder, int failure_memorder)
10348 This built-in function implements an atomic compare and exchange operation.
10349 This compares the contents of @code{*@var{ptr}} with the contents of
10350 @code{*@var{expected}}. If equal, the operation is a @emph{read-modify-write}
10351 operation that writes @var{desired} into @code{*@var{ptr}}.  If they are not
10352 equal, the operation is a @emph{read} and the current contents of
10353 @code{*@var{ptr}} are written into @code{*@var{expected}}.  @var{weak} is true
10354 for weak compare_exchange, which may fail spuriously, and false for
10355 the strong variation, which never fails spuriously.  Many targets
10356 only offer the strong variation and ignore the parameter.  When in doubt, use
10357 the strong variation.
10359 If @var{desired} is written into @code{*@var{ptr}} then true is returned
10360 and memory is affected according to the
10361 memory order specified by @var{success_memorder}.  There are no
10362 restrictions on what memory order can be used here.
10364 Otherwise, false is returned and memory is affected according
10365 to @var{failure_memorder}. This memory order cannot be
10366 @code{__ATOMIC_RELEASE} nor @code{__ATOMIC_ACQ_REL}.  It also cannot be a
10367 stronger order than that specified by @var{success_memorder}.
10369 @end deftypefn
10371 @deftypefn {Built-in Function} bool __atomic_compare_exchange (@var{type} *ptr, @var{type} *expected, @var{type} *desired, bool weak, int success_memorder, int failure_memorder)
10372 This built-in function implements the generic version of
10373 @code{__atomic_compare_exchange}.  The function is virtually identical to
10374 @code{__atomic_compare_exchange_n}, except the desired value is also a
10375 pointer.
10377 @end deftypefn
10379 @deftypefn {Built-in Function} @var{type} __atomic_add_fetch (@var{type} *ptr, @var{type} val, int memorder)
10380 @deftypefnx {Built-in Function} @var{type} __atomic_sub_fetch (@var{type} *ptr, @var{type} val, int memorder)
10381 @deftypefnx {Built-in Function} @var{type} __atomic_and_fetch (@var{type} *ptr, @var{type} val, int memorder)
10382 @deftypefnx {Built-in Function} @var{type} __atomic_xor_fetch (@var{type} *ptr, @var{type} val, int memorder)
10383 @deftypefnx {Built-in Function} @var{type} __atomic_or_fetch (@var{type} *ptr, @var{type} val, int memorder)
10384 @deftypefnx {Built-in Function} @var{type} __atomic_nand_fetch (@var{type} *ptr, @var{type} val, int memorder)
10385 These built-in functions perform the operation suggested by the name, and
10386 return the result of the operation.  Operations on pointer arguments are
10387 performed as if the operands were of the @code{uintptr_t} type.  That is,
10388 they are not scaled by the size of the type to which the pointer points.
10390 @smallexample
10391 @{ *ptr @var{op}= val; return *ptr; @}
10392 @end smallexample
10394 The object pointed to by the first argument must be of integer or pointer
10395 type.  It must not be a boolean type.  All memory orders are valid.
10397 @end deftypefn
10399 @deftypefn {Built-in Function} @var{type} __atomic_fetch_add (@var{type} *ptr, @var{type} val, int memorder)
10400 @deftypefnx {Built-in Function} @var{type} __atomic_fetch_sub (@var{type} *ptr, @var{type} val, int memorder)
10401 @deftypefnx {Built-in Function} @var{type} __atomic_fetch_and (@var{type} *ptr, @var{type} val, int memorder)
10402 @deftypefnx {Built-in Function} @var{type} __atomic_fetch_xor (@var{type} *ptr, @var{type} val, int memorder)
10403 @deftypefnx {Built-in Function} @var{type} __atomic_fetch_or (@var{type} *ptr, @var{type} val, int memorder)
10404 @deftypefnx {Built-in Function} @var{type} __atomic_fetch_nand (@var{type} *ptr, @var{type} val, int memorder)
10405 These built-in functions perform the operation suggested by the name, and
10406 return the value that had previously been in @code{*@var{ptr}}.  Operations
10407 on pointer arguments are performed as if the operands were of
10408 the @code{uintptr_t} type.  That is, they are not scaled by the size of
10409 the type to which the pointer points.
10411 @smallexample
10412 @{ tmp = *ptr; *ptr @var{op}= val; return tmp; @}
10413 @end smallexample
10415 The same constraints on arguments apply as for the corresponding
10416 @code{__atomic_op_fetch} built-in functions.  All memory orders are valid.
10418 @end deftypefn
10420 @deftypefn {Built-in Function} bool __atomic_test_and_set (void *ptr, int memorder)
10422 This built-in function performs an atomic test-and-set operation on
10423 the byte at @code{*@var{ptr}}.  The byte is set to some implementation
10424 defined nonzero ``set'' value and the return value is @code{true} if and only
10425 if the previous contents were ``set''.
10426 It should be only used for operands of type @code{bool} or @code{char}. For 
10427 other types only part of the value may be set.
10429 All memory orders are valid.
10431 @end deftypefn
10433 @deftypefn {Built-in Function} void __atomic_clear (bool *ptr, int memorder)
10435 This built-in function performs an atomic clear operation on
10436 @code{*@var{ptr}}.  After the operation, @code{*@var{ptr}} contains 0.
10437 It should be only used for operands of type @code{bool} or @code{char} and 
10438 in conjunction with @code{__atomic_test_and_set}.
10439 For other types it may only clear partially. If the type is not @code{bool}
10440 prefer using @code{__atomic_store}.
10442 The valid memory order variants are
10443 @code{__ATOMIC_RELAXED}, @code{__ATOMIC_SEQ_CST}, and
10444 @code{__ATOMIC_RELEASE}.
10446 @end deftypefn
10448 @deftypefn {Built-in Function} void __atomic_thread_fence (int memorder)
10450 This built-in function acts as a synchronization fence between threads
10451 based on the specified memory order.
10453 All memory orders are valid.
10455 @end deftypefn
10457 @deftypefn {Built-in Function} void __atomic_signal_fence (int memorder)
10459 This built-in function acts as a synchronization fence between a thread
10460 and signal handlers based in the same thread.
10462 All memory orders are valid.
10464 @end deftypefn
10466 @deftypefn {Built-in Function} bool __atomic_always_lock_free (size_t size,  void *ptr)
10468 This built-in function returns true if objects of @var{size} bytes always
10469 generate lock-free atomic instructions for the target architecture.
10470 @var{size} must resolve to a compile-time constant and the result also
10471 resolves to a compile-time constant.
10473 @var{ptr} is an optional pointer to the object that may be used to determine
10474 alignment.  A value of 0 indicates typical alignment should be used.  The 
10475 compiler may also ignore this parameter.
10477 @smallexample
10478 if (__atomic_always_lock_free (sizeof (long long), 0))
10479 @end smallexample
10481 @end deftypefn
10483 @deftypefn {Built-in Function} bool __atomic_is_lock_free (size_t size, void *ptr)
10485 This built-in function returns true if objects of @var{size} bytes always
10486 generate lock-free atomic instructions for the target architecture.  If
10487 the built-in function is not known to be lock-free, a call is made to a
10488 runtime routine named @code{__atomic_is_lock_free}.
10490 @var{ptr} is an optional pointer to the object that may be used to determine
10491 alignment.  A value of 0 indicates typical alignment should be used.  The 
10492 compiler may also ignore this parameter.
10493 @end deftypefn
10495 @node Integer Overflow Builtins
10496 @section Built-in Functions to Perform Arithmetic with Overflow Checking
10498 The following built-in functions allow performing simple arithmetic operations
10499 together with checking whether the operations overflowed.
10501 @deftypefn {Built-in Function} bool __builtin_add_overflow (@var{type1} a, @var{type2} b, @var{type3} *res)
10502 @deftypefnx {Built-in Function} bool __builtin_sadd_overflow (int a, int b, int *res)
10503 @deftypefnx {Built-in Function} bool __builtin_saddl_overflow (long int a, long int b, long int *res)
10504 @deftypefnx {Built-in Function} bool __builtin_saddll_overflow (long long int a, long long int b, long long int *res)
10505 @deftypefnx {Built-in Function} bool __builtin_uadd_overflow (unsigned int a, unsigned int b, unsigned int *res)
10506 @deftypefnx {Built-in Function} bool __builtin_uaddl_overflow (unsigned long int a, unsigned long int b, unsigned long int *res)
10507 @deftypefnx {Built-in Function} bool __builtin_uaddll_overflow (unsigned long long int a, unsigned long long int b, unsigned long long int *res)
10509 These built-in functions promote the first two operands into infinite precision signed
10510 type and perform addition on those promoted operands.  The result is then
10511 cast to the type the third pointer argument points to and stored there.
10512 If the stored result is equal to the infinite precision result, the built-in
10513 functions return false, otherwise they return true.  As the addition is
10514 performed in infinite signed precision, these built-in functions have fully defined
10515 behavior for all argument values.
10517 The first built-in function allows arbitrary integral types for operands and
10518 the result type must be pointer to some integral type other than enumerated or
10519 boolean type, the rest of the built-in functions have explicit integer types.
10521 The compiler will attempt to use hardware instructions to implement
10522 these built-in functions where possible, like conditional jump on overflow
10523 after addition, conditional jump on carry etc.
10525 @end deftypefn
10527 @deftypefn {Built-in Function} bool __builtin_sub_overflow (@var{type1} a, @var{type2} b, @var{type3} *res)
10528 @deftypefnx {Built-in Function} bool __builtin_ssub_overflow (int a, int b, int *res)
10529 @deftypefnx {Built-in Function} bool __builtin_ssubl_overflow (long int a, long int b, long int *res)
10530 @deftypefnx {Built-in Function} bool __builtin_ssubll_overflow (long long int a, long long int b, long long int *res)
10531 @deftypefnx {Built-in Function} bool __builtin_usub_overflow (unsigned int a, unsigned int b, unsigned int *res)
10532 @deftypefnx {Built-in Function} bool __builtin_usubl_overflow (unsigned long int a, unsigned long int b, unsigned long int *res)
10533 @deftypefnx {Built-in Function} bool __builtin_usubll_overflow (unsigned long long int a, unsigned long long int b, unsigned long long int *res)
10535 These built-in functions are similar to the add overflow checking built-in
10536 functions above, except they perform subtraction, subtract the second argument
10537 from the first one, instead of addition.
10539 @end deftypefn
10541 @deftypefn {Built-in Function} bool __builtin_mul_overflow (@var{type1} a, @var{type2} b, @var{type3} *res)
10542 @deftypefnx {Built-in Function} bool __builtin_smul_overflow (int a, int b, int *res)
10543 @deftypefnx {Built-in Function} bool __builtin_smull_overflow (long int a, long int b, long int *res)
10544 @deftypefnx {Built-in Function} bool __builtin_smulll_overflow (long long int a, long long int b, long long int *res)
10545 @deftypefnx {Built-in Function} bool __builtin_umul_overflow (unsigned int a, unsigned int b, unsigned int *res)
10546 @deftypefnx {Built-in Function} bool __builtin_umull_overflow (unsigned long int a, unsigned long int b, unsigned long int *res)
10547 @deftypefnx {Built-in Function} bool __builtin_umulll_overflow (unsigned long long int a, unsigned long long int b, unsigned long long int *res)
10549 These built-in functions are similar to the add overflow checking built-in
10550 functions above, except they perform multiplication, instead of addition.
10552 @end deftypefn
10554 The following built-in functions allow checking if simple arithmetic operation
10555 would overflow.
10557 @deftypefn {Built-in Function} bool __builtin_add_overflow_p (@var{type1} a, @var{type2} b, @var{type3} c)
10558 @deftypefnx {Built-in Function} bool __builtin_sub_overflow_p (@var{type1} a, @var{type2} b, @var{type3} c)
10559 @deftypefnx {Built-in Function} bool __builtin_mul_overflow_p (@var{type1} a, @var{type2} b, @var{type3} c)
10561 These built-in functions are similar to @code{__builtin_add_overflow},
10562 @code{__builtin_sub_overflow}, or @code{__builtin_mul_overflow}, except that
10563 they don't store the result of the arithmetic operation anywhere and the
10564 last argument is not a pointer, but some expression with integral type other
10565 than enumerated or boolean type.
10567 The built-in functions promote the first two operands into infinite precision signed type
10568 and perform addition on those promoted operands. The result is then
10569 cast to the type of the third argument.  If the cast result is equal to the infinite
10570 precision result, the built-in functions return false, otherwise they return true.
10571 The value of the third argument is ignored, just the side-effects in the third argument
10572 are evaluated, and no integral argument promotions are performed on the last argument.
10573 If the third argument is a bit-field, the type used for the result cast has the
10574 precision and signedness of the given bit-field, rather than precision and signedness
10575 of the underlying type.
10577 For example, the following macro can be used to portably check, at
10578 compile-time, whether or not adding two constant integers will overflow,
10579 and perform the addition only when it is known to be safe and not to trigger
10580 a @option{-Woverflow} warning.
10582 @smallexample
10583 #define INT_ADD_OVERFLOW_P(a, b) \
10584    __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
10586 enum @{
10587     A = INT_MAX, B = 3,
10588     C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
10589     D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
10591 @end smallexample
10593 The compiler will attempt to use hardware instructions to implement
10594 these built-in functions where possible, like conditional jump on overflow
10595 after addition, conditional jump on carry etc.
10597 @end deftypefn
10599 @node x86 specific memory model extensions for transactional memory
10600 @section x86-Specific Memory Model Extensions for Transactional Memory
10602 The x86 architecture supports additional memory ordering flags
10603 to mark critical sections for hardware lock elision. 
10604 These must be specified in addition to an existing memory order to
10605 atomic intrinsics.
10607 @table @code
10608 @item __ATOMIC_HLE_ACQUIRE
10609 Start lock elision on a lock variable.
10610 Memory order must be @code{__ATOMIC_ACQUIRE} or stronger.
10611 @item __ATOMIC_HLE_RELEASE
10612 End lock elision on a lock variable.
10613 Memory order must be @code{__ATOMIC_RELEASE} or stronger.
10614 @end table
10616 When a lock acquire fails, it is required for good performance to abort
10617 the transaction quickly. This can be done with a @code{_mm_pause}.
10619 @smallexample
10620 #include <immintrin.h> // For _mm_pause
10622 int lockvar;
10624 /* Acquire lock with lock elision */
10625 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
10626     _mm_pause(); /* Abort failed transaction */
10628 /* Free lock with lock elision */
10629 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
10630 @end smallexample
10632 @node Object Size Checking
10633 @section Object Size Checking Built-in Functions
10634 @findex __builtin_object_size
10635 @findex __builtin___memcpy_chk
10636 @findex __builtin___mempcpy_chk
10637 @findex __builtin___memmove_chk
10638 @findex __builtin___memset_chk
10639 @findex __builtin___strcpy_chk
10640 @findex __builtin___stpcpy_chk
10641 @findex __builtin___strncpy_chk
10642 @findex __builtin___strcat_chk
10643 @findex __builtin___strncat_chk
10644 @findex __builtin___sprintf_chk
10645 @findex __builtin___snprintf_chk
10646 @findex __builtin___vsprintf_chk
10647 @findex __builtin___vsnprintf_chk
10648 @findex __builtin___printf_chk
10649 @findex __builtin___vprintf_chk
10650 @findex __builtin___fprintf_chk
10651 @findex __builtin___vfprintf_chk
10653 GCC implements a limited buffer overflow protection mechanism that can
10654 prevent some buffer overflow attacks by determining the sizes of objects
10655 into which data is about to be written and preventing the writes when
10656 the size isn't sufficient.  The built-in functions described below yield
10657 the best results when used together and when optimization is enabled.
10658 For example, to detect object sizes across function boundaries or to
10659 follow pointer assignments through non-trivial control flow they rely
10660 on various optimization passes enabled with @option{-O2}.  However, to
10661 a limited extent, they can be used without optimization as well.
10663 @deftypefn {Built-in Function} {size_t} __builtin_object_size (const void * @var{ptr}, int @var{type})
10664 is a built-in construct that returns a constant number of bytes from
10665 @var{ptr} to the end of the object @var{ptr} pointer points to
10666 (if known at compile time).  @code{__builtin_object_size} never evaluates
10667 its arguments for side-effects.  If there are any side-effects in them, it
10668 returns @code{(size_t) -1} for @var{type} 0 or 1 and @code{(size_t) 0}
10669 for @var{type} 2 or 3.  If there are multiple objects @var{ptr} can
10670 point to and all of them are known at compile time, the returned number
10671 is the maximum of remaining byte counts in those objects if @var{type} & 2 is
10672 0 and minimum if nonzero.  If it is not possible to determine which objects
10673 @var{ptr} points to at compile time, @code{__builtin_object_size} should
10674 return @code{(size_t) -1} for @var{type} 0 or 1 and @code{(size_t) 0}
10675 for @var{type} 2 or 3.
10677 @var{type} is an integer constant from 0 to 3.  If the least significant
10678 bit is clear, objects are whole variables, if it is set, a closest
10679 surrounding subobject is considered the object a pointer points to.
10680 The second bit determines if maximum or minimum of remaining bytes
10681 is computed.
10683 @smallexample
10684 struct V @{ char buf1[10]; int b; char buf2[10]; @} var;
10685 char *p = &var.buf1[1], *q = &var.b;
10687 /* Here the object p points to is var.  */
10688 assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
10689 /* The subobject p points to is var.buf1.  */
10690 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
10691 /* The object q points to is var.  */
10692 assert (__builtin_object_size (q, 0)
10693         == (char *) (&var + 1) - (char *) &var.b);
10694 /* The subobject q points to is var.b.  */
10695 assert (__builtin_object_size (q, 1) == sizeof (var.b));
10696 @end smallexample
10697 @end deftypefn
10699 There are built-in functions added for many common string operation
10700 functions, e.g., for @code{memcpy} @code{__builtin___memcpy_chk}
10701 built-in is provided.  This built-in has an additional last argument,
10702 which is the number of bytes remaining in the object the @var{dest}
10703 argument points to or @code{(size_t) -1} if the size is not known.
10705 The built-in functions are optimized into the normal string functions
10706 like @code{memcpy} if the last argument is @code{(size_t) -1} or if
10707 it is known at compile time that the destination object will not
10708 be overflowed.  If the compiler can determine at compile time that the
10709 object will always be overflowed, it issues a warning.
10711 The intended use can be e.g.@:
10713 @smallexample
10714 #undef memcpy
10715 #define bos0(dest) __builtin_object_size (dest, 0)
10716 #define memcpy(dest, src, n) \
10717   __builtin___memcpy_chk (dest, src, n, bos0 (dest))
10719 char *volatile p;
10720 char buf[10];
10721 /* It is unknown what object p points to, so this is optimized
10722    into plain memcpy - no checking is possible.  */
10723 memcpy (p, "abcde", n);
10724 /* Destination is known and length too.  It is known at compile
10725    time there will be no overflow.  */
10726 memcpy (&buf[5], "abcde", 5);
10727 /* Destination is known, but the length is not known at compile time.
10728    This will result in __memcpy_chk call that can check for overflow
10729    at run time.  */
10730 memcpy (&buf[5], "abcde", n);
10731 /* Destination is known and it is known at compile time there will
10732    be overflow.  There will be a warning and __memcpy_chk call that
10733    will abort the program at run time.  */
10734 memcpy (&buf[6], "abcde", 5);
10735 @end smallexample
10737 Such built-in functions are provided for @code{memcpy}, @code{mempcpy},
10738 @code{memmove}, @code{memset}, @code{strcpy}, @code{stpcpy}, @code{strncpy},
10739 @code{strcat} and @code{strncat}.
10741 There are also checking built-in functions for formatted output functions.
10742 @smallexample
10743 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
10744 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
10745                               const char *fmt, ...);
10746 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
10747                               va_list ap);
10748 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
10749                                const char *fmt, va_list ap);
10750 @end smallexample
10752 The added @var{flag} argument is passed unchanged to @code{__sprintf_chk}
10753 etc.@: functions and can contain implementation specific flags on what
10754 additional security measures the checking function might take, such as
10755 handling @code{%n} differently.
10757 The @var{os} argument is the object size @var{s} points to, like in the
10758 other built-in functions.  There is a small difference in the behavior
10759 though, if @var{os} is @code{(size_t) -1}, the built-in functions are
10760 optimized into the non-checking functions only if @var{flag} is 0, otherwise
10761 the checking function is called with @var{os} argument set to
10762 @code{(size_t) -1}.
10764 In addition to this, there are checking built-in functions
10765 @code{__builtin___printf_chk}, @code{__builtin___vprintf_chk},
10766 @code{__builtin___fprintf_chk} and @code{__builtin___vfprintf_chk}.
10767 These have just one additional argument, @var{flag}, right before
10768 format string @var{fmt}.  If the compiler is able to optimize them to
10769 @code{fputc} etc.@: functions, it does, otherwise the checking function
10770 is called and the @var{flag} argument passed to it.
10772 @node Pointer Bounds Checker builtins
10773 @section Pointer Bounds Checker Built-in Functions
10774 @cindex Pointer Bounds Checker builtins
10775 @findex __builtin___bnd_set_ptr_bounds
10776 @findex __builtin___bnd_narrow_ptr_bounds
10777 @findex __builtin___bnd_copy_ptr_bounds
10778 @findex __builtin___bnd_init_ptr_bounds
10779 @findex __builtin___bnd_null_ptr_bounds
10780 @findex __builtin___bnd_store_ptr_bounds
10781 @findex __builtin___bnd_chk_ptr_lbounds
10782 @findex __builtin___bnd_chk_ptr_ubounds
10783 @findex __builtin___bnd_chk_ptr_bounds
10784 @findex __builtin___bnd_get_ptr_lbound
10785 @findex __builtin___bnd_get_ptr_ubound
10787 GCC provides a set of built-in functions to control Pointer Bounds Checker
10788 instrumentation.  Note that all Pointer Bounds Checker builtins can be used
10789 even if you compile with Pointer Bounds Checker off
10790 (@option{-fno-check-pointer-bounds}).
10791 The behavior may differ in such case as documented below.
10793 @deftypefn {Built-in Function} {void *} __builtin___bnd_set_ptr_bounds (const void *@var{q}, size_t @var{size})
10795 This built-in function returns a new pointer with the value of @var{q}, and
10796 associate it with the bounds [@var{q}, @var{q}+@var{size}-1].  With Pointer
10797 Bounds Checker off, the built-in function just returns the first argument.
10799 @smallexample
10800 extern void *__wrap_malloc (size_t n)
10802   void *p = (void *)__real_malloc (n);
10803   if (!p) return __builtin___bnd_null_ptr_bounds (p);
10804   return __builtin___bnd_set_ptr_bounds (p, n);
10806 @end smallexample
10808 @end deftypefn
10810 @deftypefn {Built-in Function} {void *} __builtin___bnd_narrow_ptr_bounds (const void *@var{p}, const void *@var{q}, size_t  @var{size})
10812 This built-in function returns a new pointer with the value of @var{p}
10813 and associates it with the narrowed bounds formed by the intersection
10814 of bounds associated with @var{q} and the bounds
10815 [@var{p}, @var{p} + @var{size} - 1].
10816 With Pointer Bounds Checker off, the built-in function just returns the first
10817 argument.
10819 @smallexample
10820 void init_objects (object *objs, size_t size)
10822   size_t i;
10823   /* Initialize objects one-by-one passing pointers with bounds of 
10824      an object, not the full array of objects.  */
10825   for (i = 0; i < size; i++)
10826     init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
10827                                                     sizeof(object)));
10829 @end smallexample
10831 @end deftypefn
10833 @deftypefn {Built-in Function} {void *} __builtin___bnd_copy_ptr_bounds (const void *@var{q}, const void *@var{r})
10835 This built-in function returns a new pointer with the value of @var{q},
10836 and associates it with the bounds already associated with pointer @var{r}.
10837 With Pointer Bounds Checker off, the built-in function just returns the first
10838 argument.
10840 @smallexample
10841 /* Here is a way to get pointer to object's field but
10842    still with the full object's bounds.  */
10843 int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field, 
10844                                                   objptr);
10845 @end smallexample
10847 @end deftypefn
10849 @deftypefn {Built-in Function} {void *} __builtin___bnd_init_ptr_bounds (const void *@var{q})
10851 This built-in function returns a new pointer with the value of @var{q}, and
10852 associates it with INIT (allowing full memory access) bounds. With Pointer
10853 Bounds Checker off, the built-in function just returns the first argument.
10855 @end deftypefn
10857 @deftypefn {Built-in Function} {void *} __builtin___bnd_null_ptr_bounds (const void *@var{q})
10859 This built-in function returns a new pointer with the value of @var{q}, and
10860 associates it with NULL (allowing no memory access) bounds. With Pointer
10861 Bounds Checker off, the built-in function just returns the first argument.
10863 @end deftypefn
10865 @deftypefn {Built-in Function} void __builtin___bnd_store_ptr_bounds (const void **@var{ptr_addr}, const void *@var{ptr_val})
10867 This built-in function stores the bounds associated with pointer @var{ptr_val}
10868 and location @var{ptr_addr} into Bounds Table.  This can be useful to propagate
10869 bounds from legacy code without touching the associated pointer's memory when
10870 pointers are copied as integers.  With Pointer Bounds Checker off, the built-in
10871 function call is ignored.
10873 @end deftypefn
10875 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_lbounds (const void *@var{q})
10877 This built-in function checks if the pointer @var{q} is within the lower
10878 bound of its associated bounds.  With Pointer Bounds Checker off, the built-in
10879 function call is ignored.
10881 @smallexample
10882 extern void *__wrap_memset (void *dst, int c, size_t len)
10884   if (len > 0)
10885     @{
10886       __builtin___bnd_chk_ptr_lbounds (dst);
10887       __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
10888       __real_memset (dst, c, len);
10889     @}
10890   return dst;
10892 @end smallexample
10894 @end deftypefn
10896 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_ubounds (const void *@var{q})
10898 This built-in function checks if the pointer @var{q} is within the upper
10899 bound of its associated bounds.  With Pointer Bounds Checker off, the built-in
10900 function call is ignored.
10902 @end deftypefn
10904 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_bounds (const void *@var{q}, size_t @var{size})
10906 This built-in function checks if [@var{q}, @var{q} + @var{size} - 1] is within
10907 the lower and upper bounds associated with @var{q}.  With Pointer Bounds Checker
10908 off, the built-in function call is ignored.
10910 @smallexample
10911 extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
10913   if (n > 0)
10914     @{
10915       __bnd_chk_ptr_bounds (dst, n);
10916       __bnd_chk_ptr_bounds (src, n);
10917       __real_memcpy (dst, src, n);
10918     @}
10919   return dst;
10921 @end smallexample
10923 @end deftypefn
10925 @deftypefn {Built-in Function} {const void *} __builtin___bnd_get_ptr_lbound (const void *@var{q})
10927 This built-in function returns the lower bound associated
10928 with the pointer @var{q}, as a pointer value.  
10929 This is useful for debugging using @code{printf}.
10930 With Pointer Bounds Checker off, the built-in function returns 0.
10932 @smallexample
10933 void *lb = __builtin___bnd_get_ptr_lbound (q);
10934 void *ub = __builtin___bnd_get_ptr_ubound (q);
10935 printf ("q = %p  lb(q) = %p  ub(q) = %p", q, lb, ub);
10936 @end smallexample
10938 @end deftypefn
10940 @deftypefn {Built-in Function} {const void *} __builtin___bnd_get_ptr_ubound (const void *@var{q})
10942 This built-in function returns the upper bound (which is a pointer) associated
10943 with the pointer @var{q}.  With Pointer Bounds Checker off,
10944 the built-in function returns -1.
10946 @end deftypefn
10948 @node Other Builtins
10949 @section Other Built-in Functions Provided by GCC
10950 @cindex built-in functions
10951 @findex __builtin_alloca
10952 @findex __builtin_alloca_with_align
10953 @findex __builtin_alloca_with_align_and_max
10954 @findex __builtin_call_with_static_chain
10955 @findex __builtin_fpclassify
10956 @findex __builtin_isfinite
10957 @findex __builtin_isnormal
10958 @findex __builtin_isgreater
10959 @findex __builtin_isgreaterequal
10960 @findex __builtin_isinf_sign
10961 @findex __builtin_isless
10962 @findex __builtin_islessequal
10963 @findex __builtin_islessgreater
10964 @findex __builtin_isunordered
10965 @findex __builtin_powi
10966 @findex __builtin_powif
10967 @findex __builtin_powil
10968 @findex _Exit
10969 @findex _exit
10970 @findex abort
10971 @findex abs
10972 @findex acos
10973 @findex acosf
10974 @findex acosh
10975 @findex acoshf
10976 @findex acoshl
10977 @findex acosl
10978 @findex alloca
10979 @findex asin
10980 @findex asinf
10981 @findex asinh
10982 @findex asinhf
10983 @findex asinhl
10984 @findex asinl
10985 @findex atan
10986 @findex atan2
10987 @findex atan2f
10988 @findex atan2l
10989 @findex atanf
10990 @findex atanh
10991 @findex atanhf
10992 @findex atanhl
10993 @findex atanl
10994 @findex bcmp
10995 @findex bzero
10996 @findex cabs
10997 @findex cabsf
10998 @findex cabsl
10999 @findex cacos
11000 @findex cacosf
11001 @findex cacosh
11002 @findex cacoshf
11003 @findex cacoshl
11004 @findex cacosl
11005 @findex calloc
11006 @findex carg
11007 @findex cargf
11008 @findex cargl
11009 @findex casin
11010 @findex casinf
11011 @findex casinh
11012 @findex casinhf
11013 @findex casinhl
11014 @findex casinl
11015 @findex catan
11016 @findex catanf
11017 @findex catanh
11018 @findex catanhf
11019 @findex catanhl
11020 @findex catanl
11021 @findex cbrt
11022 @findex cbrtf
11023 @findex cbrtl
11024 @findex ccos
11025 @findex ccosf
11026 @findex ccosh
11027 @findex ccoshf
11028 @findex ccoshl
11029 @findex ccosl
11030 @findex ceil
11031 @findex ceilf
11032 @findex ceill
11033 @findex cexp
11034 @findex cexpf
11035 @findex cexpl
11036 @findex cimag
11037 @findex cimagf
11038 @findex cimagl
11039 @findex clog
11040 @findex clogf
11041 @findex clogl
11042 @findex clog10
11043 @findex clog10f
11044 @findex clog10l
11045 @findex conj
11046 @findex conjf
11047 @findex conjl
11048 @findex copysign
11049 @findex copysignf
11050 @findex copysignl
11051 @findex cos
11052 @findex cosf
11053 @findex cosh
11054 @findex coshf
11055 @findex coshl
11056 @findex cosl
11057 @findex cpow
11058 @findex cpowf
11059 @findex cpowl
11060 @findex cproj
11061 @findex cprojf
11062 @findex cprojl
11063 @findex creal
11064 @findex crealf
11065 @findex creall
11066 @findex csin
11067 @findex csinf
11068 @findex csinh
11069 @findex csinhf
11070 @findex csinhl
11071 @findex csinl
11072 @findex csqrt
11073 @findex csqrtf
11074 @findex csqrtl
11075 @findex ctan
11076 @findex ctanf
11077 @findex ctanh
11078 @findex ctanhf
11079 @findex ctanhl
11080 @findex ctanl
11081 @findex dcgettext
11082 @findex dgettext
11083 @findex drem
11084 @findex dremf
11085 @findex dreml
11086 @findex erf
11087 @findex erfc
11088 @findex erfcf
11089 @findex erfcl
11090 @findex erff
11091 @findex erfl
11092 @findex exit
11093 @findex exp
11094 @findex exp10
11095 @findex exp10f
11096 @findex exp10l
11097 @findex exp2
11098 @findex exp2f
11099 @findex exp2l
11100 @findex expf
11101 @findex expl
11102 @findex expm1
11103 @findex expm1f
11104 @findex expm1l
11105 @findex fabs
11106 @findex fabsf
11107 @findex fabsl
11108 @findex fdim
11109 @findex fdimf
11110 @findex fdiml
11111 @findex ffs
11112 @findex floor
11113 @findex floorf
11114 @findex floorl
11115 @findex fma
11116 @findex fmaf
11117 @findex fmal
11118 @findex fmax
11119 @findex fmaxf
11120 @findex fmaxl
11121 @findex fmin
11122 @findex fminf
11123 @findex fminl
11124 @findex fmod
11125 @findex fmodf
11126 @findex fmodl
11127 @findex fprintf
11128 @findex fprintf_unlocked
11129 @findex fputs
11130 @findex fputs_unlocked
11131 @findex frexp
11132 @findex frexpf
11133 @findex frexpl
11134 @findex fscanf
11135 @findex gamma
11136 @findex gammaf
11137 @findex gammal
11138 @findex gamma_r
11139 @findex gammaf_r
11140 @findex gammal_r
11141 @findex gettext
11142 @findex hypot
11143 @findex hypotf
11144 @findex hypotl
11145 @findex ilogb
11146 @findex ilogbf
11147 @findex ilogbl
11148 @findex imaxabs
11149 @findex index
11150 @findex isalnum
11151 @findex isalpha
11152 @findex isascii
11153 @findex isblank
11154 @findex iscntrl
11155 @findex isdigit
11156 @findex isgraph
11157 @findex islower
11158 @findex isprint
11159 @findex ispunct
11160 @findex isspace
11161 @findex isupper
11162 @findex iswalnum
11163 @findex iswalpha
11164 @findex iswblank
11165 @findex iswcntrl
11166 @findex iswdigit
11167 @findex iswgraph
11168 @findex iswlower
11169 @findex iswprint
11170 @findex iswpunct
11171 @findex iswspace
11172 @findex iswupper
11173 @findex iswxdigit
11174 @findex isxdigit
11175 @findex j0
11176 @findex j0f
11177 @findex j0l
11178 @findex j1
11179 @findex j1f
11180 @findex j1l
11181 @findex jn
11182 @findex jnf
11183 @findex jnl
11184 @findex labs
11185 @findex ldexp
11186 @findex ldexpf
11187 @findex ldexpl
11188 @findex lgamma
11189 @findex lgammaf
11190 @findex lgammal
11191 @findex lgamma_r
11192 @findex lgammaf_r
11193 @findex lgammal_r
11194 @findex llabs
11195 @findex llrint
11196 @findex llrintf
11197 @findex llrintl
11198 @findex llround
11199 @findex llroundf
11200 @findex llroundl
11201 @findex log
11202 @findex log10
11203 @findex log10f
11204 @findex log10l
11205 @findex log1p
11206 @findex log1pf
11207 @findex log1pl
11208 @findex log2
11209 @findex log2f
11210 @findex log2l
11211 @findex logb
11212 @findex logbf
11213 @findex logbl
11214 @findex logf
11215 @findex logl
11216 @findex lrint
11217 @findex lrintf
11218 @findex lrintl
11219 @findex lround
11220 @findex lroundf
11221 @findex lroundl
11222 @findex malloc
11223 @findex memchr
11224 @findex memcmp
11225 @findex memcpy
11226 @findex mempcpy
11227 @findex memset
11228 @findex modf
11229 @findex modff
11230 @findex modfl
11231 @findex nearbyint
11232 @findex nearbyintf
11233 @findex nearbyintl
11234 @findex nextafter
11235 @findex nextafterf
11236 @findex nextafterl
11237 @findex nexttoward
11238 @findex nexttowardf
11239 @findex nexttowardl
11240 @findex pow
11241 @findex pow10
11242 @findex pow10f
11243 @findex pow10l
11244 @findex powf
11245 @findex powl
11246 @findex printf
11247 @findex printf_unlocked
11248 @findex putchar
11249 @findex puts
11250 @findex remainder
11251 @findex remainderf
11252 @findex remainderl
11253 @findex remquo
11254 @findex remquof
11255 @findex remquol
11256 @findex rindex
11257 @findex rint
11258 @findex rintf
11259 @findex rintl
11260 @findex round
11261 @findex roundf
11262 @findex roundl
11263 @findex scalb
11264 @findex scalbf
11265 @findex scalbl
11266 @findex scalbln
11267 @findex scalblnf
11268 @findex scalblnf
11269 @findex scalbn
11270 @findex scalbnf
11271 @findex scanfnl
11272 @findex signbit
11273 @findex signbitf
11274 @findex signbitl
11275 @findex signbitd32
11276 @findex signbitd64
11277 @findex signbitd128
11278 @findex significand
11279 @findex significandf
11280 @findex significandl
11281 @findex sin
11282 @findex sincos
11283 @findex sincosf
11284 @findex sincosl
11285 @findex sinf
11286 @findex sinh
11287 @findex sinhf
11288 @findex sinhl
11289 @findex sinl
11290 @findex snprintf
11291 @findex sprintf
11292 @findex sqrt
11293 @findex sqrtf
11294 @findex sqrtl
11295 @findex sscanf
11296 @findex stpcpy
11297 @findex stpncpy
11298 @findex strcasecmp
11299 @findex strcat
11300 @findex strchr
11301 @findex strcmp
11302 @findex strcpy
11303 @findex strcspn
11304 @findex strdup
11305 @findex strfmon
11306 @findex strftime
11307 @findex strlen
11308 @findex strncasecmp
11309 @findex strncat
11310 @findex strncmp
11311 @findex strncpy
11312 @findex strndup
11313 @findex strpbrk
11314 @findex strrchr
11315 @findex strspn
11316 @findex strstr
11317 @findex tan
11318 @findex tanf
11319 @findex tanh
11320 @findex tanhf
11321 @findex tanhl
11322 @findex tanl
11323 @findex tgamma
11324 @findex tgammaf
11325 @findex tgammal
11326 @findex toascii
11327 @findex tolower
11328 @findex toupper
11329 @findex towlower
11330 @findex towupper
11331 @findex trunc
11332 @findex truncf
11333 @findex truncl
11334 @findex vfprintf
11335 @findex vfscanf
11336 @findex vprintf
11337 @findex vscanf
11338 @findex vsnprintf
11339 @findex vsprintf
11340 @findex vsscanf
11341 @findex y0
11342 @findex y0f
11343 @findex y0l
11344 @findex y1
11345 @findex y1f
11346 @findex y1l
11347 @findex yn
11348 @findex ynf
11349 @findex ynl
11351 GCC provides a large number of built-in functions other than the ones
11352 mentioned above.  Some of these are for internal use in the processing
11353 of exceptions or variable-length argument lists and are not
11354 documented here because they may change from time to time; we do not
11355 recommend general use of these functions.
11357 The remaining functions are provided for optimization purposes.
11359 With the exception of built-ins that have library equivalents such as
11360 the standard C library functions discussed below, or that expand to
11361 library calls, GCC built-in functions are always expanded inline and
11362 thus do not have corresponding entry points and their address cannot
11363 be obtained.  Attempting to use them in an expression other than
11364 a function call results in a compile-time error.
11366 @opindex fno-builtin
11367 GCC includes built-in versions of many of the functions in the standard
11368 C library.  These functions come in two forms: one whose names start with
11369 the @code{__builtin_} prefix, and the other without.  Both forms have the
11370 same type (including prototype), the same address (when their address is
11371 taken), and the same meaning as the C library functions even if you specify
11372 the @option{-fno-builtin} option @pxref{C Dialect Options}).  Many of these
11373 functions are only optimized in certain cases; if they are not optimized in
11374 a particular case, a call to the library function is emitted.
11376 @opindex ansi
11377 @opindex std
11378 Outside strict ISO C mode (@option{-ansi}, @option{-std=c90},
11379 @option{-std=c99} or @option{-std=c11}), the functions
11380 @code{_exit}, @code{alloca}, @code{bcmp}, @code{bzero},
11381 @code{dcgettext}, @code{dgettext}, @code{dremf}, @code{dreml},
11382 @code{drem}, @code{exp10f}, @code{exp10l}, @code{exp10}, @code{ffsll},
11383 @code{ffsl}, @code{ffs}, @code{fprintf_unlocked},
11384 @code{fputs_unlocked}, @code{gammaf}, @code{gammal}, @code{gamma},
11385 @code{gammaf_r}, @code{gammal_r}, @code{gamma_r}, @code{gettext},
11386 @code{index}, @code{isascii}, @code{j0f}, @code{j0l}, @code{j0},
11387 @code{j1f}, @code{j1l}, @code{j1}, @code{jnf}, @code{jnl}, @code{jn},
11388 @code{lgammaf_r}, @code{lgammal_r}, @code{lgamma_r}, @code{mempcpy},
11389 @code{pow10f}, @code{pow10l}, @code{pow10}, @code{printf_unlocked},
11390 @code{rindex}, @code{scalbf}, @code{scalbl}, @code{scalb},
11391 @code{signbit}, @code{signbitf}, @code{signbitl}, @code{signbitd32},
11392 @code{signbitd64}, @code{signbitd128}, @code{significandf},
11393 @code{significandl}, @code{significand}, @code{sincosf},
11394 @code{sincosl}, @code{sincos}, @code{stpcpy}, @code{stpncpy},
11395 @code{strcasecmp}, @code{strdup}, @code{strfmon}, @code{strncasecmp},
11396 @code{strndup}, @code{toascii}, @code{y0f}, @code{y0l}, @code{y0},
11397 @code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and
11398 @code{yn}
11399 may be handled as built-in functions.
11400 All these functions have corresponding versions
11401 prefixed with @code{__builtin_}, which may be used even in strict C90
11402 mode.
11404 The ISO C99 functions
11405 @code{_Exit}, @code{acoshf}, @code{acoshl}, @code{acosh}, @code{asinhf},
11406 @code{asinhl}, @code{asinh}, @code{atanhf}, @code{atanhl}, @code{atanh},
11407 @code{cabsf}, @code{cabsl}, @code{cabs}, @code{cacosf}, @code{cacoshf},
11408 @code{cacoshl}, @code{cacosh}, @code{cacosl}, @code{cacos},
11409 @code{cargf}, @code{cargl}, @code{carg}, @code{casinf}, @code{casinhf},
11410 @code{casinhl}, @code{casinh}, @code{casinl}, @code{casin},
11411 @code{catanf}, @code{catanhf}, @code{catanhl}, @code{catanh},
11412 @code{catanl}, @code{catan}, @code{cbrtf}, @code{cbrtl}, @code{cbrt},
11413 @code{ccosf}, @code{ccoshf}, @code{ccoshl}, @code{ccosh}, @code{ccosl},
11414 @code{ccos}, @code{cexpf}, @code{cexpl}, @code{cexp}, @code{cimagf},
11415 @code{cimagl}, @code{cimag}, @code{clogf}, @code{clogl}, @code{clog},
11416 @code{conjf}, @code{conjl}, @code{conj}, @code{copysignf}, @code{copysignl},
11417 @code{copysign}, @code{cpowf}, @code{cpowl}, @code{cpow}, @code{cprojf},
11418 @code{cprojl}, @code{cproj}, @code{crealf}, @code{creall}, @code{creal},
11419 @code{csinf}, @code{csinhf}, @code{csinhl}, @code{csinh}, @code{csinl},
11420 @code{csin}, @code{csqrtf}, @code{csqrtl}, @code{csqrt}, @code{ctanf},
11421 @code{ctanhf}, @code{ctanhl}, @code{ctanh}, @code{ctanl}, @code{ctan},
11422 @code{erfcf}, @code{erfcl}, @code{erfc}, @code{erff}, @code{erfl},
11423 @code{erf}, @code{exp2f}, @code{exp2l}, @code{exp2}, @code{expm1f},
11424 @code{expm1l}, @code{expm1}, @code{fdimf}, @code{fdiml}, @code{fdim},
11425 @code{fmaf}, @code{fmal}, @code{fmaxf}, @code{fmaxl}, @code{fmax},
11426 @code{fma}, @code{fminf}, @code{fminl}, @code{fmin}, @code{hypotf},
11427 @code{hypotl}, @code{hypot}, @code{ilogbf}, @code{ilogbl}, @code{ilogb},
11428 @code{imaxabs}, @code{isblank}, @code{iswblank}, @code{lgammaf},
11429 @code{lgammal}, @code{lgamma}, @code{llabs}, @code{llrintf}, @code{llrintl},
11430 @code{llrint}, @code{llroundf}, @code{llroundl}, @code{llround},
11431 @code{log1pf}, @code{log1pl}, @code{log1p}, @code{log2f}, @code{log2l},
11432 @code{log2}, @code{logbf}, @code{logbl}, @code{logb}, @code{lrintf},
11433 @code{lrintl}, @code{lrint}, @code{lroundf}, @code{lroundl},
11434 @code{lround}, @code{nearbyintf}, @code{nearbyintl}, @code{nearbyint},
11435 @code{nextafterf}, @code{nextafterl}, @code{nextafter},
11436 @code{nexttowardf}, @code{nexttowardl}, @code{nexttoward},
11437 @code{remainderf}, @code{remainderl}, @code{remainder}, @code{remquof},
11438 @code{remquol}, @code{remquo}, @code{rintf}, @code{rintl}, @code{rint},
11439 @code{roundf}, @code{roundl}, @code{round}, @code{scalblnf},
11440 @code{scalblnl}, @code{scalbln}, @code{scalbnf}, @code{scalbnl},
11441 @code{scalbn}, @code{snprintf}, @code{tgammaf}, @code{tgammal},
11442 @code{tgamma}, @code{truncf}, @code{truncl}, @code{trunc},
11443 @code{vfscanf}, @code{vscanf}, @code{vsnprintf} and @code{vsscanf}
11444 are handled as built-in functions
11445 except in strict ISO C90 mode (@option{-ansi} or @option{-std=c90}).
11447 There are also built-in versions of the ISO C99 functions
11448 @code{acosf}, @code{acosl}, @code{asinf}, @code{asinl}, @code{atan2f},
11449 @code{atan2l}, @code{atanf}, @code{atanl}, @code{ceilf}, @code{ceill},
11450 @code{cosf}, @code{coshf}, @code{coshl}, @code{cosl}, @code{expf},
11451 @code{expl}, @code{fabsf}, @code{fabsl}, @code{floorf}, @code{floorl},
11452 @code{fmodf}, @code{fmodl}, @code{frexpf}, @code{frexpl}, @code{ldexpf},
11453 @code{ldexpl}, @code{log10f}, @code{log10l}, @code{logf}, @code{logl},
11454 @code{modfl}, @code{modf}, @code{powf}, @code{powl}, @code{sinf},
11455 @code{sinhf}, @code{sinhl}, @code{sinl}, @code{sqrtf}, @code{sqrtl},
11456 @code{tanf}, @code{tanhf}, @code{tanhl} and @code{tanl}
11457 that are recognized in any mode since ISO C90 reserves these names for
11458 the purpose to which ISO C99 puts them.  All these functions have
11459 corresponding versions prefixed with @code{__builtin_}.
11461 There are also built-in functions @code{__builtin_fabsf@var{n}},
11462 @code{__builtin_fabsf@var{n}x}, @code{__builtin_copysignf@var{n}} and
11463 @code{__builtin_copysignf@var{n}x}, corresponding to the TS 18661-3
11464 functions @code{fabsf@var{n}}, @code{fabsf@var{n}x},
11465 @code{copysignf@var{n}} and @code{copysignf@var{n}x}, for supported
11466 types @code{_Float@var{n}} and @code{_Float@var{n}x}.
11468 There are also GNU extension functions @code{clog10}, @code{clog10f} and
11469 @code{clog10l} which names are reserved by ISO C99 for future use.
11470 All these functions have versions prefixed with @code{__builtin_}.
11472 The ISO C94 functions
11473 @code{iswalnum}, @code{iswalpha}, @code{iswcntrl}, @code{iswdigit},
11474 @code{iswgraph}, @code{iswlower}, @code{iswprint}, @code{iswpunct},
11475 @code{iswspace}, @code{iswupper}, @code{iswxdigit}, @code{towlower} and
11476 @code{towupper}
11477 are handled as built-in functions
11478 except in strict ISO C90 mode (@option{-ansi} or @option{-std=c90}).
11480 The ISO C90 functions
11481 @code{abort}, @code{abs}, @code{acos}, @code{asin}, @code{atan2},
11482 @code{atan}, @code{calloc}, @code{ceil}, @code{cosh}, @code{cos},
11483 @code{exit}, @code{exp}, @code{fabs}, @code{floor}, @code{fmod},
11484 @code{fprintf}, @code{fputs}, @code{frexp}, @code{fscanf},
11485 @code{isalnum}, @code{isalpha}, @code{iscntrl}, @code{isdigit},
11486 @code{isgraph}, @code{islower}, @code{isprint}, @code{ispunct},
11487 @code{isspace}, @code{isupper}, @code{isxdigit}, @code{tolower},
11488 @code{toupper}, @code{labs}, @code{ldexp}, @code{log10}, @code{log},
11489 @code{malloc}, @code{memchr}, @code{memcmp}, @code{memcpy},
11490 @code{memset}, @code{modf}, @code{pow}, @code{printf}, @code{putchar},
11491 @code{puts}, @code{scanf}, @code{sinh}, @code{sin}, @code{snprintf},
11492 @code{sprintf}, @code{sqrt}, @code{sscanf}, @code{strcat},
11493 @code{strchr}, @code{strcmp}, @code{strcpy}, @code{strcspn},
11494 @code{strlen}, @code{strncat}, @code{strncmp}, @code{strncpy},
11495 @code{strpbrk}, @code{strrchr}, @code{strspn}, @code{strstr},
11496 @code{tanh}, @code{tan}, @code{vfprintf}, @code{vprintf} and @code{vsprintf}
11497 are all recognized as built-in functions unless
11498 @option{-fno-builtin} is specified (or @option{-fno-builtin-@var{function}}
11499 is specified for an individual function).  All of these functions have
11500 corresponding versions prefixed with @code{__builtin_}.
11502 GCC provides built-in versions of the ISO C99 floating-point comparison
11503 macros that avoid raising exceptions for unordered operands.  They have
11504 the same names as the standard macros ( @code{isgreater},
11505 @code{isgreaterequal}, @code{isless}, @code{islessequal},
11506 @code{islessgreater}, and @code{isunordered}) , with @code{__builtin_}
11507 prefixed.  We intend for a library implementor to be able to simply
11508 @code{#define} each standard macro to its built-in equivalent.
11509 In the same fashion, GCC provides @code{fpclassify}, @code{isfinite},
11510 @code{isinf_sign}, @code{isnormal} and @code{signbit} built-ins used with
11511 @code{__builtin_} prefixed.  The @code{isinf} and @code{isnan}
11512 built-in functions appear both with and without the @code{__builtin_} prefix.
11514 @deftypefn {Built-in Function} void *__builtin_alloca (size_t size)
11515 The @code{__builtin_alloca} function must be called at block scope.
11516 The function allocates an object @var{size} bytes large on the stack
11517 of the calling function.  The object is aligned on the default stack
11518 alignment boundary for the target determined by the
11519 @code{__BIGGEST_ALIGNMENT__} macro.  The @code{__builtin_alloca}
11520 function returns a pointer to the first byte of the allocated object.
11521 The lifetime of the allocated object ends just before the calling
11522 function returns to its caller.   This is so even when
11523 @code{__builtin_alloca} is called within a nested block.
11525 For example, the following function allocates eight objects of @code{n}
11526 bytes each on the stack, storing a pointer to each in consecutive elements
11527 of the array @code{a}.  It then passes the array to function @code{g}
11528 which can safely use the storage pointed to by each of the array elements.
11530 @smallexample
11531 void f (unsigned n)
11533   void *a [8];
11534   for (int i = 0; i != 8; ++i)
11535     a [i] = __builtin_alloca (n);
11537   g (a, n);   // @r{safe}
11539 @end smallexample
11541 Since the @code{__builtin_alloca} function doesn't validate its argument
11542 it is the responsibility of its caller to make sure the argument doesn't
11543 cause it to exceed the stack size limit.
11544 The @code{__builtin_alloca} function is provided to make it possible to
11545 allocate on the stack arrays of bytes with an upper bound that may be
11546 computed at run time.  Since C99 Variable Length Arrays offer
11547 similar functionality under a portable, more convenient, and safer
11548 interface they are recommended instead, in both C99 and C++ programs
11549 where GCC provides them as an extension.
11550 @xref{Variable Length}, for details.
11552 @end deftypefn
11554 @deftypefn {Built-in Function} void *__builtin_alloca_with_align (size_t size, size_t alignment)
11555 The @code{__builtin_alloca_with_align} function must be called at block
11556 scope.  The function allocates an object @var{size} bytes large on
11557 the stack of the calling function.  The allocated object is aligned on
11558 the boundary specified by the argument @var{alignment} whose unit is given
11559 in bits (not bytes).  The @var{size} argument must be positive and not
11560 exceed the stack size limit.  The @var{alignment} argument must be a constant
11561 integer expression that evaluates to a power of 2 greater than or equal to
11562 @code{CHAR_BIT} and less than some unspecified maximum.  Invocations
11563 with other values are rejected with an error indicating the valid bounds.
11564 The function returns a pointer to the first byte of the allocated object.
11565 The lifetime of the allocated object ends at the end of the block in which
11566 the function was called.  The allocated storage is released no later than
11567 just before the calling function returns to its caller, but may be released
11568 at the end of the block in which the function was called.
11570 For example, in the following function the call to @code{g} is unsafe
11571 because when @code{overalign} is non-zero, the space allocated by
11572 @code{__builtin_alloca_with_align} may have been released at the end
11573 of the @code{if} statement in which it was called.
11575 @smallexample
11576 void f (unsigned n, bool overalign)
11578   void *p;
11579   if (overalign)
11580     p = __builtin_alloca_with_align (n, 64 /* bits */);
11581   else
11582     p = __builtin_alloc (n);
11584   g (p, n);   // @r{unsafe}
11586 @end smallexample
11588 Since the @code{__builtin_alloca_with_align} function doesn't validate its
11589 @var{size} argument it is the responsibility of its caller to make sure
11590 the argument doesn't cause it to exceed the stack size limit.
11591 The @code{__builtin_alloca_with_align} function is provided to make
11592 it possible to allocate on the stack overaligned arrays of bytes with
11593 an upper bound that may be computed at run time.  Since C99
11594 Variable Length Arrays offer the same functionality under
11595 a portable, more convenient, and safer interface they are recommended
11596 instead, in both C99 and C++ programs where GCC provides them as
11597 an extension.  @xref{Variable Length}, for details.
11599 @end deftypefn
11601 @deftypefn {Built-in Function} void *__builtin_alloca_with_align_and_max (size_t size, size_t alignment, size_t max_size)
11602 Similar to @code{__builtin_alloca_with_align} but takes an extra argument
11603 specifying an upper bound for @var{size} in case its value cannot be computed
11604 at compile time, for use by @option{-fstack-usage}, @option{-Wstack-usage}
11605 and @option{-Walloca-larger-than}.  @var{max_size} must be a constant integer
11606 expression, it has no effect on code generation and no attempt is made to
11607 check its compatibility with @var{size}.
11609 @end deftypefn
11611 @deftypefn {Built-in Function} int __builtin_types_compatible_p (@var{type1}, @var{type2})
11613 You can use the built-in function @code{__builtin_types_compatible_p} to
11614 determine whether two types are the same.
11616 This built-in function returns 1 if the unqualified versions of the
11617 types @var{type1} and @var{type2} (which are types, not expressions) are
11618 compatible, 0 otherwise.  The result of this built-in function can be
11619 used in integer constant expressions.
11621 This built-in function ignores top level qualifiers (e.g., @code{const},
11622 @code{volatile}).  For example, @code{int} is equivalent to @code{const
11623 int}.
11625 The type @code{int[]} and @code{int[5]} are compatible.  On the other
11626 hand, @code{int} and @code{char *} are not compatible, even if the size
11627 of their types, on the particular architecture are the same.  Also, the
11628 amount of pointer indirection is taken into account when determining
11629 similarity.  Consequently, @code{short *} is not similar to
11630 @code{short **}.  Furthermore, two types that are typedefed are
11631 considered compatible if their underlying types are compatible.
11633 An @code{enum} type is not considered to be compatible with another
11634 @code{enum} type even if both are compatible with the same integer
11635 type; this is what the C standard specifies.
11636 For example, @code{enum @{foo, bar@}} is not similar to
11637 @code{enum @{hot, dog@}}.
11639 You typically use this function in code whose execution varies
11640 depending on the arguments' types.  For example:
11642 @smallexample
11643 #define foo(x)                                                  \
11644   (@{                                                           \
11645     typeof (x) tmp = (x);                                       \
11646     if (__builtin_types_compatible_p (typeof (x), long double)) \
11647       tmp = foo_long_double (tmp);                              \
11648     else if (__builtin_types_compatible_p (typeof (x), double)) \
11649       tmp = foo_double (tmp);                                   \
11650     else if (__builtin_types_compatible_p (typeof (x), float))  \
11651       tmp = foo_float (tmp);                                    \
11652     else                                                        \
11653       abort ();                                                 \
11654     tmp;                                                        \
11655   @})
11656 @end smallexample
11658 @emph{Note:} This construct is only available for C@.
11660 @end deftypefn
11662 @deftypefn {Built-in Function} @var{type} __builtin_call_with_static_chain (@var{call_exp}, @var{pointer_exp})
11664 The @var{call_exp} expression must be a function call, and the
11665 @var{pointer_exp} expression must be a pointer.  The @var{pointer_exp}
11666 is passed to the function call in the target's static chain location.
11667 The result of builtin is the result of the function call.
11669 @emph{Note:} This builtin is only available for C@.
11670 This builtin can be used to call Go closures from C.
11672 @end deftypefn
11674 @deftypefn {Built-in Function} @var{type} __builtin_choose_expr (@var{const_exp}, @var{exp1}, @var{exp2})
11676 You can use the built-in function @code{__builtin_choose_expr} to
11677 evaluate code depending on the value of a constant expression.  This
11678 built-in function returns @var{exp1} if @var{const_exp}, which is an
11679 integer constant expression, is nonzero.  Otherwise it returns @var{exp2}.
11681 This built-in function is analogous to the @samp{? :} operator in C,
11682 except that the expression returned has its type unaltered by promotion
11683 rules.  Also, the built-in function does not evaluate the expression
11684 that is not chosen.  For example, if @var{const_exp} evaluates to true,
11685 @var{exp2} is not evaluated even if it has side-effects.
11687 This built-in function can return an lvalue if the chosen argument is an
11688 lvalue.
11690 If @var{exp1} is returned, the return type is the same as @var{exp1}'s
11691 type.  Similarly, if @var{exp2} is returned, its return type is the same
11692 as @var{exp2}.
11694 Example:
11696 @smallexample
11697 #define foo(x)                                                    \
11698   __builtin_choose_expr (                                         \
11699     __builtin_types_compatible_p (typeof (x), double),            \
11700     foo_double (x),                                               \
11701     __builtin_choose_expr (                                       \
11702       __builtin_types_compatible_p (typeof (x), float),           \
11703       foo_float (x),                                              \
11704       /* @r{The void expression results in a compile-time error}  \
11705          @r{when assigning the result to something.}  */          \
11706       (void)0))
11707 @end smallexample
11709 @emph{Note:} This construct is only available for C@.  Furthermore, the
11710 unused expression (@var{exp1} or @var{exp2} depending on the value of
11711 @var{const_exp}) may still generate syntax errors.  This may change in
11712 future revisions.
11714 @end deftypefn
11716 @deftypefn {Built-in Function} @var{type} __builtin_tgmath (@var{functions}, @var{arguments})
11718 The built-in function @code{__builtin_tgmath}, available only for C
11719 and Objective-C, calls a function determined according to the rules of
11720 @code{<tgmath.h>} macros.  It is intended to be used in
11721 implementations of that header, so that expansions of macros from that
11722 header only expand each of their arguments once, to avoid problems
11723 when calls to such macros are nested inside the arguments of other
11724 calls to such macros; in addition, it results in better diagnostics
11725 for invalid calls to @code{<tgmath.h>} macros than implementations
11726 using other GNU C language features.  For example, the @code{pow}
11727 type-generic macro might be defined as:
11729 @smallexample
11730 #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
11731                                     cpowf, cpow, cpowl, a, b)
11732 @end smallexample
11734 The arguments to @code{__builtin_tgmath} are at least two pointers to
11735 functions, followed by the arguments to the type-generic macro (which
11736 will be passed as arguments to the selected function).  All the
11737 pointers to functions must be pointers to prototyped functions, none
11738 of which may have variable arguments, and all of which must have the
11739 same number of parameters; the number of parameters of the first
11740 function determines how many arguments to @code{__builtin_tgmath} are
11741 interpreted as function pointers, and how many as the arguments to the
11742 called function.
11744 The types of the specified functions must all be different, but
11745 related to each other in the same way as a set of functions that may
11746 be selected between by a macro in @code{<tgmath.h>}.  This means that
11747 the functions are parameterized by a floating-point type @var{t},
11748 different for each such function.  The function return types may all
11749 be the same type, or they may be @var{t} for each function, or they
11750 may be the real type corresponding to @var{t} for each function (if
11751 some of the types @var{t} are complex).  Likewise, for each parameter
11752 position, the type of the parameter in that position may always be the
11753 same type, or may be @var{t} for each function (this case must apply
11754 for at least one parameter position), or may be the real type
11755 corresponding to @var{t} for each function.
11757 The standard rules for @code{<tgmath.h>} macros are used to find a
11758 common type @var{u} from the types of the arguments for parameters
11759 whose types vary between the functions; complex integer types (a GNU
11760 extension) are treated like @code{_Complex double} for this purpose.
11761 If the function return types vary, or are all the same integer type,
11762 the function called is the one for which @var{t} is @var{u}, and it is
11763 an error if there is no such function.  If the function return types
11764 are all the same floating-point type, the type-generic macro is taken
11765 to be one of those from TS 18661 that rounds the result to a narrower
11766 type; if there is a function for which @var{t} is @var{u}, it is
11767 called, and otherwise the first function, if any, for which @var{t}
11768 has at least the range and precision of @var{u} is called, and it is
11769 an error if there is no such function.
11771 @end deftypefn
11773 @deftypefn {Built-in Function} @var{type} __builtin_complex (@var{real}, @var{imag})
11775 The built-in function @code{__builtin_complex} is provided for use in
11776 implementing the ISO C11 macros @code{CMPLXF}, @code{CMPLX} and
11777 @code{CMPLXL}.  @var{real} and @var{imag} must have the same type, a
11778 real binary floating-point type, and the result has the corresponding
11779 complex type with real and imaginary parts @var{real} and @var{imag}.
11780 Unlike @samp{@var{real} + I * @var{imag}}, this works even when
11781 infinities, NaNs and negative zeros are involved.
11783 @end deftypefn
11785 @deftypefn {Built-in Function} int __builtin_constant_p (@var{exp})
11786 You can use the built-in function @code{__builtin_constant_p} to
11787 determine if a value is known to be constant at compile time and hence
11788 that GCC can perform constant-folding on expressions involving that
11789 value.  The argument of the function is the value to test.  The function
11790 returns the integer 1 if the argument is known to be a compile-time
11791 constant and 0 if it is not known to be a compile-time constant.  A
11792 return of 0 does not indicate that the value is @emph{not} a constant,
11793 but merely that GCC cannot prove it is a constant with the specified
11794 value of the @option{-O} option.
11796 You typically use this function in an embedded application where
11797 memory is a critical resource.  If you have some complex calculation,
11798 you may want it to be folded if it involves constants, but need to call
11799 a function if it does not.  For example:
11801 @smallexample
11802 #define Scale_Value(X)      \
11803   (__builtin_constant_p (X) \
11804   ? ((X) * SCALE + OFFSET) : Scale (X))
11805 @end smallexample
11807 You may use this built-in function in either a macro or an inline
11808 function.  However, if you use it in an inlined function and pass an
11809 argument of the function as the argument to the built-in, GCC 
11810 never returns 1 when you call the inline function with a string constant
11811 or compound literal (@pxref{Compound Literals}) and does not return 1
11812 when you pass a constant numeric value to the inline function unless you
11813 specify the @option{-O} option.
11815 You may also use @code{__builtin_constant_p} in initializers for static
11816 data.  For instance, you can write
11818 @smallexample
11819 static const int table[] = @{
11820    __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
11821    /* @r{@dots{}} */
11823 @end smallexample
11825 @noindent
11826 This is an acceptable initializer even if @var{EXPRESSION} is not a
11827 constant expression, including the case where
11828 @code{__builtin_constant_p} returns 1 because @var{EXPRESSION} can be
11829 folded to a constant but @var{EXPRESSION} contains operands that are
11830 not otherwise permitted in a static initializer (for example,
11831 @code{0 && foo ()}).  GCC must be more conservative about evaluating the
11832 built-in in this case, because it has no opportunity to perform
11833 optimization.
11834 @end deftypefn
11836 @deftypefn {Built-in Function} long __builtin_expect (long @var{exp}, long @var{c})
11837 @opindex fprofile-arcs
11838 You may use @code{__builtin_expect} to provide the compiler with
11839 branch prediction information.  In general, you should prefer to
11840 use actual profile feedback for this (@option{-fprofile-arcs}), as
11841 programmers are notoriously bad at predicting how their programs
11842 actually perform.  However, there are applications in which this
11843 data is hard to collect.
11845 The return value is the value of @var{exp}, which should be an integral
11846 expression.  The semantics of the built-in are that it is expected that
11847 @var{exp} == @var{c}.  For example:
11849 @smallexample
11850 if (__builtin_expect (x, 0))
11851   foo ();
11852 @end smallexample
11854 @noindent
11855 indicates that we do not expect to call @code{foo}, since
11856 we expect @code{x} to be zero.  Since you are limited to integral
11857 expressions for @var{exp}, you should use constructions such as
11859 @smallexample
11860 if (__builtin_expect (ptr != NULL, 1))
11861   foo (*ptr);
11862 @end smallexample
11864 @noindent
11865 when testing pointer or floating-point values.
11866 @end deftypefn
11868 @deftypefn {Built-in Function} void __builtin_trap (void)
11869 This function causes the program to exit abnormally.  GCC implements
11870 this function by using a target-dependent mechanism (such as
11871 intentionally executing an illegal instruction) or by calling
11872 @code{abort}.  The mechanism used may vary from release to release so
11873 you should not rely on any particular implementation.
11874 @end deftypefn
11876 @deftypefn {Built-in Function} void __builtin_unreachable (void)
11877 If control flow reaches the point of the @code{__builtin_unreachable},
11878 the program is undefined.  It is useful in situations where the
11879 compiler cannot deduce the unreachability of the code.
11881 One such case is immediately following an @code{asm} statement that
11882 either never terminates, or one that transfers control elsewhere
11883 and never returns.  In this example, without the
11884 @code{__builtin_unreachable}, GCC issues a warning that control
11885 reaches the end of a non-void function.  It also generates code
11886 to return after the @code{asm}.
11888 @smallexample
11889 int f (int c, int v)
11891   if (c)
11892     @{
11893       return v;
11894     @}
11895   else
11896     @{
11897       asm("jmp error_handler");
11898       __builtin_unreachable ();
11899     @}
11901 @end smallexample
11903 @noindent
11904 Because the @code{asm} statement unconditionally transfers control out
11905 of the function, control never reaches the end of the function
11906 body.  The @code{__builtin_unreachable} is in fact unreachable and
11907 communicates this fact to the compiler.
11909 Another use for @code{__builtin_unreachable} is following a call a
11910 function that never returns but that is not declared
11911 @code{__attribute__((noreturn))}, as in this example:
11913 @smallexample
11914 void function_that_never_returns (void);
11916 int g (int c)
11918   if (c)
11919     @{
11920       return 1;
11921     @}
11922   else
11923     @{
11924       function_that_never_returns ();
11925       __builtin_unreachable ();
11926     @}
11928 @end smallexample
11930 @end deftypefn
11932 @deftypefn {Built-in Function} {void *} __builtin_assume_aligned (const void *@var{exp}, size_t @var{align}, ...)
11933 This function returns its first argument, and allows the compiler
11934 to assume that the returned pointer is at least @var{align} bytes
11935 aligned.  This built-in can have either two or three arguments,
11936 if it has three, the third argument should have integer type, and
11937 if it is nonzero means misalignment offset.  For example:
11939 @smallexample
11940 void *x = __builtin_assume_aligned (arg, 16);
11941 @end smallexample
11943 @noindent
11944 means that the compiler can assume @code{x}, set to @code{arg}, is at least
11945 16-byte aligned, while:
11947 @smallexample
11948 void *x = __builtin_assume_aligned (arg, 32, 8);
11949 @end smallexample
11951 @noindent
11952 means that the compiler can assume for @code{x}, set to @code{arg}, that
11953 @code{(char *) x - 8} is 32-byte aligned.
11954 @end deftypefn
11956 @deftypefn {Built-in Function} int __builtin_LINE ()
11957 This function is the equivalent of the preprocessor @code{__LINE__}
11958 macro and returns a constant integer expression that evaluates to
11959 the line number of the invocation of the built-in.  When used as a C++
11960 default argument for a function @var{F}, it returns the line number
11961 of the call to @var{F}.
11962 @end deftypefn
11964 @deftypefn {Built-in Function} {const char *} __builtin_FUNCTION ()
11965 This function is the equivalent of the @code{__FUNCTION__} symbol
11966 and returns an address constant pointing to the name of the function
11967 from which the built-in was invoked, or the empty string if
11968 the invocation is not at function scope.  When used as a C++ default
11969 argument for a function @var{F}, it returns the name of @var{F}'s
11970 caller or the empty string if the call was not made at function
11971 scope.
11972 @end deftypefn
11974 @deftypefn {Built-in Function} {const char *} __builtin_FILE ()
11975 This function is the equivalent of the preprocessor @code{__FILE__}
11976 macro and returns an address constant pointing to the file name
11977 containing the invocation of the built-in, or the empty string if
11978 the invocation is not at function scope.  When used as a C++ default
11979 argument for a function @var{F}, it returns the file name of the call
11980 to @var{F} or the empty string if the call was not made at function
11981 scope.
11983 For example, in the following, each call to function @code{foo} will
11984 print a line similar to @code{"file.c:123: foo: message"} with the name
11985 of the file and the line number of the @code{printf} call, the name of
11986 the function @code{foo}, followed by the word @code{message}.
11988 @smallexample
11989 const char*
11990 function (const char *func = __builtin_FUNCTION ())
11992   return func;
11995 void foo (void)
11997   printf ("%s:%i: %s: message\n", file (), line (), function ());
11999 @end smallexample
12001 @end deftypefn
12003 @deftypefn {Built-in Function} void __builtin___clear_cache (char *@var{begin}, char *@var{end})
12004 This function is used to flush the processor's instruction cache for
12005 the region of memory between @var{begin} inclusive and @var{end}
12006 exclusive.  Some targets require that the instruction cache be
12007 flushed, after modifying memory containing code, in order to obtain
12008 deterministic behavior.
12010 If the target does not require instruction cache flushes,
12011 @code{__builtin___clear_cache} has no effect.  Otherwise either
12012 instructions are emitted in-line to clear the instruction cache or a
12013 call to the @code{__clear_cache} function in libgcc is made.
12014 @end deftypefn
12016 @deftypefn {Built-in Function} void __builtin_prefetch (const void *@var{addr}, ...)
12017 This function is used to minimize cache-miss latency by moving data into
12018 a cache before it is accessed.
12019 You can insert calls to @code{__builtin_prefetch} into code for which
12020 you know addresses of data in memory that is likely to be accessed soon.
12021 If the target supports them, data prefetch instructions are generated.
12022 If the prefetch is done early enough before the access then the data will
12023 be in the cache by the time it is accessed.
12025 The value of @var{addr} is the address of the memory to prefetch.
12026 There are two optional arguments, @var{rw} and @var{locality}.
12027 The value of @var{rw} is a compile-time constant one or zero; one
12028 means that the prefetch is preparing for a write to the memory address
12029 and zero, the default, means that the prefetch is preparing for a read.
12030 The value @var{locality} must be a compile-time constant integer between
12031 zero and three.  A value of zero means that the data has no temporal
12032 locality, so it need not be left in the cache after the access.  A value
12033 of three means that the data has a high degree of temporal locality and
12034 should be left in all levels of cache possible.  Values of one and two
12035 mean, respectively, a low or moderate degree of temporal locality.  The
12036 default is three.
12038 @smallexample
12039 for (i = 0; i < n; i++)
12040   @{
12041     a[i] = a[i] + b[i];
12042     __builtin_prefetch (&a[i+j], 1, 1);
12043     __builtin_prefetch (&b[i+j], 0, 1);
12044     /* @r{@dots{}} */
12045   @}
12046 @end smallexample
12048 Data prefetch does not generate faults if @var{addr} is invalid, but
12049 the address expression itself must be valid.  For example, a prefetch
12050 of @code{p->next} does not fault if @code{p->next} is not a valid
12051 address, but evaluation faults if @code{p} is not a valid address.
12053 If the target does not support data prefetch, the address expression
12054 is evaluated if it includes side effects but no other code is generated
12055 and GCC does not issue a warning.
12056 @end deftypefn
12058 @deftypefn {Built-in Function} double __builtin_huge_val (void)
12059 Returns a positive infinity, if supported by the floating-point format,
12060 else @code{DBL_MAX}.  This function is suitable for implementing the
12061 ISO C macro @code{HUGE_VAL}.
12062 @end deftypefn
12064 @deftypefn {Built-in Function} float __builtin_huge_valf (void)
12065 Similar to @code{__builtin_huge_val}, except the return type is @code{float}.
12066 @end deftypefn
12068 @deftypefn {Built-in Function} {long double} __builtin_huge_vall (void)
12069 Similar to @code{__builtin_huge_val}, except the return
12070 type is @code{long double}.
12071 @end deftypefn
12073 @deftypefn {Built-in Function} _Float@var{n} __builtin_huge_valf@var{n} (void)
12074 Similar to @code{__builtin_huge_val}, except the return type is
12075 @code{_Float@var{n}}.
12076 @end deftypefn
12078 @deftypefn {Built-in Function} _Float@var{n}x __builtin_huge_valf@var{n}x (void)
12079 Similar to @code{__builtin_huge_val}, except the return type is
12080 @code{_Float@var{n}x}.
12081 @end deftypefn
12083 @deftypefn {Built-in Function} int __builtin_fpclassify (int, int, int, int, int, ...)
12084 This built-in implements the C99 fpclassify functionality.  The first
12085 five int arguments should be the target library's notion of the
12086 possible FP classes and are used for return values.  They must be
12087 constant values and they must appear in this order: @code{FP_NAN},
12088 @code{FP_INFINITE}, @code{FP_NORMAL}, @code{FP_SUBNORMAL} and
12089 @code{FP_ZERO}.  The ellipsis is for exactly one floating-point value
12090 to classify.  GCC treats the last argument as type-generic, which
12091 means it does not do default promotion from float to double.
12092 @end deftypefn
12094 @deftypefn {Built-in Function} double __builtin_inf (void)
12095 Similar to @code{__builtin_huge_val}, except a warning is generated
12096 if the target floating-point format does not support infinities.
12097 @end deftypefn
12099 @deftypefn {Built-in Function} _Decimal32 __builtin_infd32 (void)
12100 Similar to @code{__builtin_inf}, except the return type is @code{_Decimal32}.
12101 @end deftypefn
12103 @deftypefn {Built-in Function} _Decimal64 __builtin_infd64 (void)
12104 Similar to @code{__builtin_inf}, except the return type is @code{_Decimal64}.
12105 @end deftypefn
12107 @deftypefn {Built-in Function} _Decimal128 __builtin_infd128 (void)
12108 Similar to @code{__builtin_inf}, except the return type is @code{_Decimal128}.
12109 @end deftypefn
12111 @deftypefn {Built-in Function} float __builtin_inff (void)
12112 Similar to @code{__builtin_inf}, except the return type is @code{float}.
12113 This function is suitable for implementing the ISO C99 macro @code{INFINITY}.
12114 @end deftypefn
12116 @deftypefn {Built-in Function} {long double} __builtin_infl (void)
12117 Similar to @code{__builtin_inf}, except the return
12118 type is @code{long double}.
12119 @end deftypefn
12121 @deftypefn {Built-in Function} _Float@var{n} __builtin_inff@var{n} (void)
12122 Similar to @code{__builtin_inf}, except the return
12123 type is @code{_Float@var{n}}.
12124 @end deftypefn
12126 @deftypefn {Built-in Function} _Float@var{n} __builtin_inff@var{n}x (void)
12127 Similar to @code{__builtin_inf}, except the return
12128 type is @code{_Float@var{n}x}.
12129 @end deftypefn
12131 @deftypefn {Built-in Function} int __builtin_isinf_sign (...)
12132 Similar to @code{isinf}, except the return value is -1 for
12133 an argument of @code{-Inf} and 1 for an argument of @code{+Inf}.
12134 Note while the parameter list is an
12135 ellipsis, this function only accepts exactly one floating-point
12136 argument.  GCC treats this parameter as type-generic, which means it
12137 does not do default promotion from float to double.
12138 @end deftypefn
12140 @deftypefn {Built-in Function} double __builtin_nan (const char *str)
12141 This is an implementation of the ISO C99 function @code{nan}.
12143 Since ISO C99 defines this function in terms of @code{strtod}, which we
12144 do not implement, a description of the parsing is in order.  The string
12145 is parsed as by @code{strtol}; that is, the base is recognized by
12146 leading @samp{0} or @samp{0x} prefixes.  The number parsed is placed
12147 in the significand such that the least significant bit of the number
12148 is at the least significant bit of the significand.  The number is
12149 truncated to fit the significand field provided.  The significand is
12150 forced to be a quiet NaN@.
12152 This function, if given a string literal all of which would have been
12153 consumed by @code{strtol}, is evaluated early enough that it is considered a
12154 compile-time constant.
12155 @end deftypefn
12157 @deftypefn {Built-in Function} _Decimal32 __builtin_nand32 (const char *str)
12158 Similar to @code{__builtin_nan}, except the return type is @code{_Decimal32}.
12159 @end deftypefn
12161 @deftypefn {Built-in Function} _Decimal64 __builtin_nand64 (const char *str)
12162 Similar to @code{__builtin_nan}, except the return type is @code{_Decimal64}.
12163 @end deftypefn
12165 @deftypefn {Built-in Function} _Decimal128 __builtin_nand128 (const char *str)
12166 Similar to @code{__builtin_nan}, except the return type is @code{_Decimal128}.
12167 @end deftypefn
12169 @deftypefn {Built-in Function} float __builtin_nanf (const char *str)
12170 Similar to @code{__builtin_nan}, except the return type is @code{float}.
12171 @end deftypefn
12173 @deftypefn {Built-in Function} {long double} __builtin_nanl (const char *str)
12174 Similar to @code{__builtin_nan}, except the return type is @code{long double}.
12175 @end deftypefn
12177 @deftypefn {Built-in Function} _Float@var{n} __builtin_nanf@var{n} (const char *str)
12178 Similar to @code{__builtin_nan}, except the return type is
12179 @code{_Float@var{n}}.
12180 @end deftypefn
12182 @deftypefn {Built-in Function} _Float@var{n}x __builtin_nanf@var{n}x (const char *str)
12183 Similar to @code{__builtin_nan}, except the return type is
12184 @code{_Float@var{n}x}.
12185 @end deftypefn
12187 @deftypefn {Built-in Function} double __builtin_nans (const char *str)
12188 Similar to @code{__builtin_nan}, except the significand is forced
12189 to be a signaling NaN@.  The @code{nans} function is proposed by
12190 @uref{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n965.htm,,WG14 N965}.
12191 @end deftypefn
12193 @deftypefn {Built-in Function} float __builtin_nansf (const char *str)
12194 Similar to @code{__builtin_nans}, except the return type is @code{float}.
12195 @end deftypefn
12197 @deftypefn {Built-in Function} {long double} __builtin_nansl (const char *str)
12198 Similar to @code{__builtin_nans}, except the return type is @code{long double}.
12199 @end deftypefn
12201 @deftypefn {Built-in Function} _Float@var{n} __builtin_nansf@var{n} (const char *str)
12202 Similar to @code{__builtin_nans}, except the return type is
12203 @code{_Float@var{n}}.
12204 @end deftypefn
12206 @deftypefn {Built-in Function} _Float@var{n}x __builtin_nansf@var{n}x (const char *str)
12207 Similar to @code{__builtin_nans}, except the return type is
12208 @code{_Float@var{n}x}.
12209 @end deftypefn
12211 @deftypefn {Built-in Function} int __builtin_ffs (int x)
12212 Returns one plus the index of the least significant 1-bit of @var{x}, or
12213 if @var{x} is zero, returns zero.
12214 @end deftypefn
12216 @deftypefn {Built-in Function} int __builtin_clz (unsigned int x)
12217 Returns the number of leading 0-bits in @var{x}, starting at the most
12218 significant bit position.  If @var{x} is 0, the result is undefined.
12219 @end deftypefn
12221 @deftypefn {Built-in Function} int __builtin_ctz (unsigned int x)
12222 Returns the number of trailing 0-bits in @var{x}, starting at the least
12223 significant bit position.  If @var{x} is 0, the result is undefined.
12224 @end deftypefn
12226 @deftypefn {Built-in Function} int __builtin_clrsb (int x)
12227 Returns the number of leading redundant sign bits in @var{x}, i.e.@: the
12228 number of bits following the most significant bit that are identical
12229 to it.  There are no special cases for 0 or other values. 
12230 @end deftypefn
12232 @deftypefn {Built-in Function} int __builtin_popcount (unsigned int x)
12233 Returns the number of 1-bits in @var{x}.
12234 @end deftypefn
12236 @deftypefn {Built-in Function} int __builtin_parity (unsigned int x)
12237 Returns the parity of @var{x}, i.e.@: the number of 1-bits in @var{x}
12238 modulo 2.
12239 @end deftypefn
12241 @deftypefn {Built-in Function} int __builtin_ffsl (long)
12242 Similar to @code{__builtin_ffs}, except the argument type is
12243 @code{long}.
12244 @end deftypefn
12246 @deftypefn {Built-in Function} int __builtin_clzl (unsigned long)
12247 Similar to @code{__builtin_clz}, except the argument type is
12248 @code{unsigned long}.
12249 @end deftypefn
12251 @deftypefn {Built-in Function} int __builtin_ctzl (unsigned long)
12252 Similar to @code{__builtin_ctz}, except the argument type is
12253 @code{unsigned long}.
12254 @end deftypefn
12256 @deftypefn {Built-in Function} int __builtin_clrsbl (long)
12257 Similar to @code{__builtin_clrsb}, except the argument type is
12258 @code{long}.
12259 @end deftypefn
12261 @deftypefn {Built-in Function} int __builtin_popcountl (unsigned long)
12262 Similar to @code{__builtin_popcount}, except the argument type is
12263 @code{unsigned long}.
12264 @end deftypefn
12266 @deftypefn {Built-in Function} int __builtin_parityl (unsigned long)
12267 Similar to @code{__builtin_parity}, except the argument type is
12268 @code{unsigned long}.
12269 @end deftypefn
12271 @deftypefn {Built-in Function} int __builtin_ffsll (long long)
12272 Similar to @code{__builtin_ffs}, except the argument type is
12273 @code{long long}.
12274 @end deftypefn
12276 @deftypefn {Built-in Function} int __builtin_clzll (unsigned long long)
12277 Similar to @code{__builtin_clz}, except the argument type is
12278 @code{unsigned long long}.
12279 @end deftypefn
12281 @deftypefn {Built-in Function} int __builtin_ctzll (unsigned long long)
12282 Similar to @code{__builtin_ctz}, except the argument type is
12283 @code{unsigned long long}.
12284 @end deftypefn
12286 @deftypefn {Built-in Function} int __builtin_clrsbll (long long)
12287 Similar to @code{__builtin_clrsb}, except the argument type is
12288 @code{long long}.
12289 @end deftypefn
12291 @deftypefn {Built-in Function} int __builtin_popcountll (unsigned long long)
12292 Similar to @code{__builtin_popcount}, except the argument type is
12293 @code{unsigned long long}.
12294 @end deftypefn
12296 @deftypefn {Built-in Function} int __builtin_parityll (unsigned long long)
12297 Similar to @code{__builtin_parity}, except the argument type is
12298 @code{unsigned long long}.
12299 @end deftypefn
12301 @deftypefn {Built-in Function} double __builtin_powi (double, int)
12302 Returns the first argument raised to the power of the second.  Unlike the
12303 @code{pow} function no guarantees about precision and rounding are made.
12304 @end deftypefn
12306 @deftypefn {Built-in Function} float __builtin_powif (float, int)
12307 Similar to @code{__builtin_powi}, except the argument and return types
12308 are @code{float}.
12309 @end deftypefn
12311 @deftypefn {Built-in Function} {long double} __builtin_powil (long double, int)
12312 Similar to @code{__builtin_powi}, except the argument and return types
12313 are @code{long double}.
12314 @end deftypefn
12316 @deftypefn {Built-in Function} uint16_t __builtin_bswap16 (uint16_t x)
12317 Returns @var{x} with the order of the bytes reversed; for example,
12318 @code{0xaabb} becomes @code{0xbbaa}.  Byte here always means
12319 exactly 8 bits.
12320 @end deftypefn
12322 @deftypefn {Built-in Function} uint32_t __builtin_bswap32 (uint32_t x)
12323 Similar to @code{__builtin_bswap16}, except the argument and return types
12324 are 32 bit.
12325 @end deftypefn
12327 @deftypefn {Built-in Function} uint64_t __builtin_bswap64 (uint64_t x)
12328 Similar to @code{__builtin_bswap32}, except the argument and return types
12329 are 64 bit.
12330 @end deftypefn
12332 @node Target Builtins
12333 @section Built-in Functions Specific to Particular Target Machines
12335 On some target machines, GCC supports many built-in functions specific
12336 to those machines.  Generally these generate calls to specific machine
12337 instructions, but allow the compiler to schedule those calls.
12339 @menu
12340 * AArch64 Built-in Functions::
12341 * Alpha Built-in Functions::
12342 * Altera Nios II Built-in Functions::
12343 * ARC Built-in Functions::
12344 * ARC SIMD Built-in Functions::
12345 * ARM iWMMXt Built-in Functions::
12346 * ARM C Language Extensions (ACLE)::
12347 * ARM Floating Point Status and Control Intrinsics::
12348 * ARM ARMv8-M Security Extensions::
12349 * AVR Built-in Functions::
12350 * Blackfin Built-in Functions::
12351 * FR-V Built-in Functions::
12352 * MIPS DSP Built-in Functions::
12353 * MIPS Paired-Single Support::
12354 * MIPS Loongson Built-in Functions::
12355 * MIPS SIMD Architecture (MSA) Support::
12356 * Other MIPS Built-in Functions::
12357 * MSP430 Built-in Functions::
12358 * NDS32 Built-in Functions::
12359 * picoChip Built-in Functions::
12360 * PowerPC Built-in Functions::
12361 * PowerPC AltiVec/VSX Built-in Functions::
12362 * PowerPC Hardware Transactional Memory Built-in Functions::
12363 * PowerPC Atomic Memory Operation Functions::
12364 * RX Built-in Functions::
12365 * S/390 System z Built-in Functions::
12366 * SH Built-in Functions::
12367 * SPARC VIS Built-in Functions::
12368 * SPU Built-in Functions::
12369 * TI C6X Built-in Functions::
12370 * TILE-Gx Built-in Functions::
12371 * TILEPro Built-in Functions::
12372 * x86 Built-in Functions::
12373 * x86 transactional memory intrinsics::
12374 @end menu
12376 @node AArch64 Built-in Functions
12377 @subsection AArch64 Built-in Functions
12379 These built-in functions are available for the AArch64 family of
12380 processors.
12381 @smallexample
12382 unsigned int __builtin_aarch64_get_fpcr ()
12383 void __builtin_aarch64_set_fpcr (unsigned int)
12384 unsigned int __builtin_aarch64_get_fpsr ()
12385 void __builtin_aarch64_set_fpsr (unsigned int)
12386 @end smallexample
12388 @node Alpha Built-in Functions
12389 @subsection Alpha Built-in Functions
12391 These built-in functions are available for the Alpha family of
12392 processors, depending on the command-line switches used.
12394 The following built-in functions are always available.  They
12395 all generate the machine instruction that is part of the name.
12397 @smallexample
12398 long __builtin_alpha_implver (void)
12399 long __builtin_alpha_rpcc (void)
12400 long __builtin_alpha_amask (long)
12401 long __builtin_alpha_cmpbge (long, long)
12402 long __builtin_alpha_extbl (long, long)
12403 long __builtin_alpha_extwl (long, long)
12404 long __builtin_alpha_extll (long, long)
12405 long __builtin_alpha_extql (long, long)
12406 long __builtin_alpha_extwh (long, long)
12407 long __builtin_alpha_extlh (long, long)
12408 long __builtin_alpha_extqh (long, long)
12409 long __builtin_alpha_insbl (long, long)
12410 long __builtin_alpha_inswl (long, long)
12411 long __builtin_alpha_insll (long, long)
12412 long __builtin_alpha_insql (long, long)
12413 long __builtin_alpha_inswh (long, long)
12414 long __builtin_alpha_inslh (long, long)
12415 long __builtin_alpha_insqh (long, long)
12416 long __builtin_alpha_mskbl (long, long)
12417 long __builtin_alpha_mskwl (long, long)
12418 long __builtin_alpha_mskll (long, long)
12419 long __builtin_alpha_mskql (long, long)
12420 long __builtin_alpha_mskwh (long, long)
12421 long __builtin_alpha_msklh (long, long)
12422 long __builtin_alpha_mskqh (long, long)
12423 long __builtin_alpha_umulh (long, long)
12424 long __builtin_alpha_zap (long, long)
12425 long __builtin_alpha_zapnot (long, long)
12426 @end smallexample
12428 The following built-in functions are always with @option{-mmax}
12429 or @option{-mcpu=@var{cpu}} where @var{cpu} is @code{pca56} or
12430 later.  They all generate the machine instruction that is part
12431 of the name.
12433 @smallexample
12434 long __builtin_alpha_pklb (long)
12435 long __builtin_alpha_pkwb (long)
12436 long __builtin_alpha_unpkbl (long)
12437 long __builtin_alpha_unpkbw (long)
12438 long __builtin_alpha_minub8 (long, long)
12439 long __builtin_alpha_minsb8 (long, long)
12440 long __builtin_alpha_minuw4 (long, long)
12441 long __builtin_alpha_minsw4 (long, long)
12442 long __builtin_alpha_maxub8 (long, long)
12443 long __builtin_alpha_maxsb8 (long, long)
12444 long __builtin_alpha_maxuw4 (long, long)
12445 long __builtin_alpha_maxsw4 (long, long)
12446 long __builtin_alpha_perr (long, long)
12447 @end smallexample
12449 The following built-in functions are always with @option{-mcix}
12450 or @option{-mcpu=@var{cpu}} where @var{cpu} is @code{ev67} or
12451 later.  They all generate the machine instruction that is part
12452 of the name.
12454 @smallexample
12455 long __builtin_alpha_cttz (long)
12456 long __builtin_alpha_ctlz (long)
12457 long __builtin_alpha_ctpop (long)
12458 @end smallexample
12460 The following built-in functions are available on systems that use the OSF/1
12461 PALcode.  Normally they invoke the @code{rduniq} and @code{wruniq}
12462 PAL calls, but when invoked with @option{-mtls-kernel}, they invoke
12463 @code{rdval} and @code{wrval}.
12465 @smallexample
12466 void *__builtin_thread_pointer (void)
12467 void __builtin_set_thread_pointer (void *)
12468 @end smallexample
12470 @node Altera Nios II Built-in Functions
12471 @subsection Altera Nios II Built-in Functions
12473 These built-in functions are available for the Altera Nios II
12474 family of processors.
12476 The following built-in functions are always available.  They
12477 all generate the machine instruction that is part of the name.
12479 @example
12480 int __builtin_ldbio (volatile const void *)
12481 int __builtin_ldbuio (volatile const void *)
12482 int __builtin_ldhio (volatile const void *)
12483 int __builtin_ldhuio (volatile const void *)
12484 int __builtin_ldwio (volatile const void *)
12485 void __builtin_stbio (volatile void *, int)
12486 void __builtin_sthio (volatile void *, int)
12487 void __builtin_stwio (volatile void *, int)
12488 void __builtin_sync (void)
12489 int __builtin_rdctl (int) 
12490 int __builtin_rdprs (int, int)
12491 void __builtin_wrctl (int, int)
12492 void __builtin_flushd (volatile void *)
12493 void __builtin_flushda (volatile void *)
12494 int __builtin_wrpie (int);
12495 void __builtin_eni (int);
12496 int __builtin_ldex (volatile const void *)
12497 int __builtin_stex (volatile void *, int)
12498 int __builtin_ldsex (volatile const void *)
12499 int __builtin_stsex (volatile void *, int)
12500 @end example
12502 The following built-in functions are always available.  They
12503 all generate a Nios II Custom Instruction. The name of the
12504 function represents the types that the function takes and
12505 returns. The letter before the @code{n} is the return type
12506 or void if absent. The @code{n} represents the first parameter
12507 to all the custom instructions, the custom instruction number.
12508 The two letters after the @code{n} represent the up to two
12509 parameters to the function.
12511 The letters represent the following data types:
12512 @table @code
12513 @item <no letter>
12514 @code{void} for return type and no parameter for parameter types.
12516 @item i
12517 @code{int} for return type and parameter type
12519 @item f
12520 @code{float} for return type and parameter type
12522 @item p
12523 @code{void *} for return type and parameter type
12525 @end table
12527 And the function names are:
12528 @example
12529 void __builtin_custom_n (void)
12530 void __builtin_custom_ni (int)
12531 void __builtin_custom_nf (float)
12532 void __builtin_custom_np (void *)
12533 void __builtin_custom_nii (int, int)
12534 void __builtin_custom_nif (int, float)
12535 void __builtin_custom_nip (int, void *)
12536 void __builtin_custom_nfi (float, int)
12537 void __builtin_custom_nff (float, float)
12538 void __builtin_custom_nfp (float, void *)
12539 void __builtin_custom_npi (void *, int)
12540 void __builtin_custom_npf (void *, float)
12541 void __builtin_custom_npp (void *, void *)
12542 int __builtin_custom_in (void)
12543 int __builtin_custom_ini (int)
12544 int __builtin_custom_inf (float)
12545 int __builtin_custom_inp (void *)
12546 int __builtin_custom_inii (int, int)
12547 int __builtin_custom_inif (int, float)
12548 int __builtin_custom_inip (int, void *)
12549 int __builtin_custom_infi (float, int)
12550 int __builtin_custom_inff (float, float)
12551 int __builtin_custom_infp (float, void *)
12552 int __builtin_custom_inpi (void *, int)
12553 int __builtin_custom_inpf (void *, float)
12554 int __builtin_custom_inpp (void *, void *)
12555 float __builtin_custom_fn (void)
12556 float __builtin_custom_fni (int)
12557 float __builtin_custom_fnf (float)
12558 float __builtin_custom_fnp (void *)
12559 float __builtin_custom_fnii (int, int)
12560 float __builtin_custom_fnif (int, float)
12561 float __builtin_custom_fnip (int, void *)
12562 float __builtin_custom_fnfi (float, int)
12563 float __builtin_custom_fnff (float, float)
12564 float __builtin_custom_fnfp (float, void *)
12565 float __builtin_custom_fnpi (void *, int)
12566 float __builtin_custom_fnpf (void *, float)
12567 float __builtin_custom_fnpp (void *, void *)
12568 void * __builtin_custom_pn (void)
12569 void * __builtin_custom_pni (int)
12570 void * __builtin_custom_pnf (float)
12571 void * __builtin_custom_pnp (void *)
12572 void * __builtin_custom_pnii (int, int)
12573 void * __builtin_custom_pnif (int, float)
12574 void * __builtin_custom_pnip (int, void *)
12575 void * __builtin_custom_pnfi (float, int)
12576 void * __builtin_custom_pnff (float, float)
12577 void * __builtin_custom_pnfp (float, void *)
12578 void * __builtin_custom_pnpi (void *, int)
12579 void * __builtin_custom_pnpf (void *, float)
12580 void * __builtin_custom_pnpp (void *, void *)
12581 @end example
12583 @node ARC Built-in Functions
12584 @subsection ARC Built-in Functions
12586 The following built-in functions are provided for ARC targets.  The
12587 built-ins generate the corresponding assembly instructions.  In the
12588 examples given below, the generated code often requires an operand or
12589 result to be in a register.  Where necessary further code will be
12590 generated to ensure this is true, but for brevity this is not
12591 described in each case.
12593 @emph{Note:} Using a built-in to generate an instruction not supported
12594 by a target may cause problems. At present the compiler is not
12595 guaranteed to detect such misuse, and as a result an internal compiler
12596 error may be generated.
12598 @deftypefn {Built-in Function} int __builtin_arc_aligned (void *@var{val}, int @var{alignval})
12599 Return 1 if @var{val} is known to have the byte alignment given
12600 by @var{alignval}, otherwise return 0.
12601 Note that this is different from
12602 @smallexample
12603 __alignof__(*(char *)@var{val}) >= alignval
12604 @end smallexample
12605 because __alignof__ sees only the type of the dereference, whereas
12606 __builtin_arc_align uses alignment information from the pointer
12607 as well as from the pointed-to type.
12608 The information available will depend on optimization level.
12609 @end deftypefn
12611 @deftypefn {Built-in Function} void __builtin_arc_brk (void)
12612 Generates
12613 @example
12615 @end example
12616 @end deftypefn
12618 @deftypefn {Built-in Function} {unsigned int} __builtin_arc_core_read (unsigned int @var{regno})
12619 The operand is the number of a register to be read.  Generates:
12620 @example
12621 mov  @var{dest}, r@var{regno}
12622 @end example
12623 where the value in @var{dest} will be the result returned from the
12624 built-in.
12625 @end deftypefn
12627 @deftypefn {Built-in Function} void __builtin_arc_core_write (unsigned int @var{regno}, unsigned int @var{val})
12628 The first operand is the number of a register to be written, the
12629 second operand is a compile time constant to write into that
12630 register.  Generates:
12631 @example
12632 mov  r@var{regno}, @var{val}
12633 @end example
12634 @end deftypefn
12636 @deftypefn {Built-in Function} int __builtin_arc_divaw (int @var{a}, int @var{b})
12637 Only available if either @option{-mcpu=ARC700} or @option{-meA} is set.
12638 Generates:
12639 @example
12640 divaw  @var{dest}, @var{a}, @var{b}
12641 @end example
12642 where the value in @var{dest} will be the result returned from the
12643 built-in.
12644 @end deftypefn
12646 @deftypefn {Built-in Function} void __builtin_arc_flag (unsigned int @var{a})
12647 Generates
12648 @example
12649 flag  @var{a}
12650 @end example
12651 @end deftypefn
12653 @deftypefn {Built-in Function} {unsigned int} __builtin_arc_lr (unsigned int @var{auxr})
12654 The operand, @var{auxv}, is the address of an auxiliary register and
12655 must be a compile time constant.  Generates:
12656 @example
12657 lr  @var{dest}, [@var{auxr}]
12658 @end example
12659 Where the value in @var{dest} will be the result returned from the
12660 built-in.
12661 @end deftypefn
12663 @deftypefn {Built-in Function} void __builtin_arc_mul64 (int @var{a}, int @var{b})
12664 Only available with @option{-mmul64}.  Generates:
12665 @example
12666 mul64  @var{a}, @var{b}
12667 @end example
12668 @end deftypefn
12670 @deftypefn {Built-in Function} void __builtin_arc_mulu64 (unsigned int @var{a}, unsigned int @var{b})
12671 Only available with @option{-mmul64}.  Generates:
12672 @example
12673 mulu64  @var{a}, @var{b}
12674 @end example
12675 @end deftypefn
12677 @deftypefn {Built-in Function} void __builtin_arc_nop (void)
12678 Generates:
12679 @example
12681 @end example
12682 @end deftypefn
12684 @deftypefn {Built-in Function} int __builtin_arc_norm (int @var{src})
12685 Only valid if the @samp{norm} instruction is available through the
12686 @option{-mnorm} option or by default with @option{-mcpu=ARC700}.
12687 Generates:
12688 @example
12689 norm  @var{dest}, @var{src}
12690 @end example
12691 Where the value in @var{dest} will be the result returned from the
12692 built-in.
12693 @end deftypefn
12695 @deftypefn {Built-in Function}  {short int} __builtin_arc_normw (short int @var{src})
12696 Only valid if the @samp{normw} instruction is available through the
12697 @option{-mnorm} option or by default with @option{-mcpu=ARC700}.
12698 Generates:
12699 @example
12700 normw  @var{dest}, @var{src}
12701 @end example
12702 Where the value in @var{dest} will be the result returned from the
12703 built-in.
12704 @end deftypefn
12706 @deftypefn {Built-in Function}  void __builtin_arc_rtie (void)
12707 Generates:
12708 @example
12709 rtie
12710 @end example
12711 @end deftypefn
12713 @deftypefn {Built-in Function}  void __builtin_arc_sleep (int @var{a}
12714 Generates:
12715 @example
12716 sleep  @var{a}
12717 @end example
12718 @end deftypefn
12720 @deftypefn {Built-in Function}  void __builtin_arc_sr (unsigned int @var{auxr}, unsigned int @var{val})
12721 The first argument, @var{auxv}, is the address of an auxiliary
12722 register, the second argument, @var{val}, is a compile time constant
12723 to be written to the register.  Generates:
12724 @example
12725 sr  @var{auxr}, [@var{val}]
12726 @end example
12727 @end deftypefn
12729 @deftypefn {Built-in Function}  int __builtin_arc_swap (int @var{src})
12730 Only valid with @option{-mswap}.  Generates:
12731 @example
12732 swap  @var{dest}, @var{src}
12733 @end example
12734 Where the value in @var{dest} will be the result returned from the
12735 built-in.
12736 @end deftypefn
12738 @deftypefn {Built-in Function}  void __builtin_arc_swi (void)
12739 Generates:
12740 @example
12742 @end example
12743 @end deftypefn
12745 @deftypefn {Built-in Function}  void __builtin_arc_sync (void)
12746 Only available with @option{-mcpu=ARC700}.  Generates:
12747 @example
12748 sync
12749 @end example
12750 @end deftypefn
12752 @deftypefn {Built-in Function}  void __builtin_arc_trap_s (unsigned int @var{c})
12753 Only available with @option{-mcpu=ARC700}.  Generates:
12754 @example
12755 trap_s  @var{c}
12756 @end example
12757 @end deftypefn
12759 @deftypefn {Built-in Function}  void __builtin_arc_unimp_s (void)
12760 Only available with @option{-mcpu=ARC700}.  Generates:
12761 @example
12762 unimp_s
12763 @end example
12764 @end deftypefn
12766 The instructions generated by the following builtins are not
12767 considered as candidates for scheduling.  They are not moved around by
12768 the compiler during scheduling, and thus can be expected to appear
12769 where they are put in the C code:
12770 @example
12771 __builtin_arc_brk()
12772 __builtin_arc_core_read()
12773 __builtin_arc_core_write()
12774 __builtin_arc_flag()
12775 __builtin_arc_lr()
12776 __builtin_arc_sleep()
12777 __builtin_arc_sr()
12778 __builtin_arc_swi()
12779 @end example
12781 @node ARC SIMD Built-in Functions
12782 @subsection ARC SIMD Built-in Functions
12784 SIMD builtins provided by the compiler can be used to generate the
12785 vector instructions.  This section describes the available builtins
12786 and their usage in programs.  With the @option{-msimd} option, the
12787 compiler provides 128-bit vector types, which can be specified using
12788 the @code{vector_size} attribute.  The header file @file{arc-simd.h}
12789 can be included to use the following predefined types:
12790 @example
12791 typedef int __v4si   __attribute__((vector_size(16)));
12792 typedef short __v8hi __attribute__((vector_size(16)));
12793 @end example
12795 These types can be used to define 128-bit variables.  The built-in
12796 functions listed in the following section can be used on these
12797 variables to generate the vector operations.
12799 For all builtins, @code{__builtin_arc_@var{someinsn}}, the header file
12800 @file{arc-simd.h} also provides equivalent macros called
12801 @code{_@var{someinsn}} that can be used for programming ease and
12802 improved readability.  The following macros for DMA control are also
12803 provided:
12804 @example
12805 #define _setup_dma_in_channel_reg _vdiwr
12806 #define _setup_dma_out_channel_reg _vdowr
12807 @end example
12809 The following is a complete list of all the SIMD built-ins provided
12810 for ARC, grouped by calling signature.
12812 The following take two @code{__v8hi} arguments and return a
12813 @code{__v8hi} result:
12814 @example
12815 __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
12816 __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
12817 __v8hi __builtin_arc_vand (__v8hi, __v8hi)
12818 __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
12819 __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
12820 __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
12821 __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
12822 __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
12823 __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
12824 __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
12825 __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
12826 __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
12827 __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
12828 __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
12829 __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
12830 __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
12831 __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
12832 __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
12833 __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
12834 __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
12835 __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
12836 __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
12837 __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
12838 __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
12839 __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
12840 __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
12841 __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
12842 __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
12843 __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
12844 __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
12845 __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
12846 __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
12847 __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
12848 __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
12849 __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
12850 __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
12851 __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
12852 __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
12853 __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
12854 __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
12855 __v8hi __builtin_arc_vor (__v8hi, __v8hi)
12856 __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
12857 __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
12858 __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
12859 __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
12860 __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
12861 __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
12862 __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
12863 @end example
12865 The following take one @code{__v8hi} and one @code{int} argument and return a
12866 @code{__v8hi} result:
12868 @example
12869 __v8hi __builtin_arc_vbaddw (__v8hi, int)
12870 __v8hi __builtin_arc_vbmaxw (__v8hi, int)
12871 __v8hi __builtin_arc_vbminw (__v8hi, int)
12872 __v8hi __builtin_arc_vbmulaw (__v8hi, int)
12873 __v8hi __builtin_arc_vbmulfw (__v8hi, int)
12874 __v8hi __builtin_arc_vbmulw (__v8hi, int)
12875 __v8hi __builtin_arc_vbrsubw (__v8hi, int)
12876 __v8hi __builtin_arc_vbsubw (__v8hi, int)
12877 @end example
12879 The following take one @code{__v8hi} argument and one @code{int} argument which
12880 must be a 3-bit compile time constant indicating a register number
12881 I0-I7.  They return a @code{__v8hi} result.
12882 @example
12883 __v8hi __builtin_arc_vasrw (__v8hi, const int)
12884 __v8hi __builtin_arc_vsr8 (__v8hi, const int)
12885 __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
12886 @end example
12888 The following take one @code{__v8hi} argument and one @code{int}
12889 argument which must be a 6-bit compile time constant.  They return a
12890 @code{__v8hi} result.
12891 @example
12892 __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
12893 __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
12894 __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
12895 __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
12896 __v8hi __builtin_arc_vasrwi (__v8hi, const int)
12897 __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
12898 __v8hi __builtin_arc_vsr8i (__v8hi, const int)
12899 @end example
12901 The following take one @code{__v8hi} argument and one @code{int} argument which
12902 must be a 8-bit compile time constant.  They return a @code{__v8hi}
12903 result.
12904 @example
12905 __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
12906 __v8hi __builtin_arc_vmvaw (__v8hi, const int)
12907 __v8hi __builtin_arc_vmvw (__v8hi, const int)
12908 __v8hi __builtin_arc_vmvzw (__v8hi, const int)
12909 @end example
12911 The following take two @code{int} arguments, the second of which which
12912 must be a 8-bit compile time constant.  They return a @code{__v8hi}
12913 result:
12914 @example
12915 __v8hi __builtin_arc_vmovaw (int, const int)
12916 __v8hi __builtin_arc_vmovw (int, const int)
12917 __v8hi __builtin_arc_vmovzw (int, const int)
12918 @end example
12920 The following take a single @code{__v8hi} argument and return a
12921 @code{__v8hi} result:
12922 @example
12923 __v8hi __builtin_arc_vabsaw (__v8hi)
12924 __v8hi __builtin_arc_vabsw (__v8hi)
12925 __v8hi __builtin_arc_vaddsuw (__v8hi)
12926 __v8hi __builtin_arc_vexch1 (__v8hi)
12927 __v8hi __builtin_arc_vexch2 (__v8hi)
12928 __v8hi __builtin_arc_vexch4 (__v8hi)
12929 __v8hi __builtin_arc_vsignw (__v8hi)
12930 __v8hi __builtin_arc_vupbaw (__v8hi)
12931 __v8hi __builtin_arc_vupbw (__v8hi)
12932 __v8hi __builtin_arc_vupsbaw (__v8hi)
12933 __v8hi __builtin_arc_vupsbw (__v8hi)
12934 @end example
12936 The following take two @code{int} arguments and return no result:
12937 @example
12938 void __builtin_arc_vdirun (int, int)
12939 void __builtin_arc_vdorun (int, int)
12940 @end example
12942 The following take two @code{int} arguments and return no result.  The
12943 first argument must a 3-bit compile time constant indicating one of
12944 the DR0-DR7 DMA setup channels:
12945 @example
12946 void __builtin_arc_vdiwr (const int, int)
12947 void __builtin_arc_vdowr (const int, int)
12948 @end example
12950 The following take an @code{int} argument and return no result:
12951 @example
12952 void __builtin_arc_vendrec (int)
12953 void __builtin_arc_vrec (int)
12954 void __builtin_arc_vrecrun (int)
12955 void __builtin_arc_vrun (int)
12956 @end example
12958 The following take a @code{__v8hi} argument and two @code{int}
12959 arguments and return a @code{__v8hi} result.  The second argument must
12960 be a 3-bit compile time constants, indicating one the registers I0-I7,
12961 and the third argument must be an 8-bit compile time constant.
12963 @emph{Note:} Although the equivalent hardware instructions do not take
12964 an SIMD register as an operand, these builtins overwrite the relevant
12965 bits of the @code{__v8hi} register provided as the first argument with
12966 the value loaded from the @code{[Ib, u8]} location in the SDM.
12968 @example
12969 __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
12970 __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
12971 __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
12972 __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
12973 @end example
12975 The following take two @code{int} arguments and return a @code{__v8hi}
12976 result.  The first argument must be a 3-bit compile time constants,
12977 indicating one the registers I0-I7, and the second argument must be an
12978 8-bit compile time constant.
12980 @example
12981 __v8hi __builtin_arc_vld128 (const int, const int)
12982 __v8hi __builtin_arc_vld64w (const int, const int)
12983 @end example
12985 The following take a @code{__v8hi} argument and two @code{int}
12986 arguments and return no result.  The second argument must be a 3-bit
12987 compile time constants, indicating one the registers I0-I7, and the
12988 third argument must be an 8-bit compile time constant.
12990 @example
12991 void __builtin_arc_vst128 (__v8hi, const int, const int)
12992 void __builtin_arc_vst64 (__v8hi, const int, const int)
12993 @end example
12995 The following take a @code{__v8hi} argument and three @code{int}
12996 arguments and return no result.  The second argument must be a 3-bit
12997 compile-time constant, identifying the 16-bit sub-register to be
12998 stored, the third argument must be a 3-bit compile time constants,
12999 indicating one the registers I0-I7, and the fourth argument must be an
13000 8-bit compile time constant.
13002 @example
13003 void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
13004 void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
13005 @end example
13007 @node ARM iWMMXt Built-in Functions
13008 @subsection ARM iWMMXt Built-in Functions
13010 These built-in functions are available for the ARM family of
13011 processors when the @option{-mcpu=iwmmxt} switch is used:
13013 @smallexample
13014 typedef int v2si __attribute__ ((vector_size (8)));
13015 typedef short v4hi __attribute__ ((vector_size (8)));
13016 typedef char v8qi __attribute__ ((vector_size (8)));
13018 int __builtin_arm_getwcgr0 (void)
13019 void __builtin_arm_setwcgr0 (int)
13020 int __builtin_arm_getwcgr1 (void)
13021 void __builtin_arm_setwcgr1 (int)
13022 int __builtin_arm_getwcgr2 (void)
13023 void __builtin_arm_setwcgr2 (int)
13024 int __builtin_arm_getwcgr3 (void)
13025 void __builtin_arm_setwcgr3 (int)
13026 int __builtin_arm_textrmsb (v8qi, int)
13027 int __builtin_arm_textrmsh (v4hi, int)
13028 int __builtin_arm_textrmsw (v2si, int)
13029 int __builtin_arm_textrmub (v8qi, int)
13030 int __builtin_arm_textrmuh (v4hi, int)
13031 int __builtin_arm_textrmuw (v2si, int)
13032 v8qi __builtin_arm_tinsrb (v8qi, int, int)
13033 v4hi __builtin_arm_tinsrh (v4hi, int, int)
13034 v2si __builtin_arm_tinsrw (v2si, int, int)
13035 long long __builtin_arm_tmia (long long, int, int)
13036 long long __builtin_arm_tmiabb (long long, int, int)
13037 long long __builtin_arm_tmiabt (long long, int, int)
13038 long long __builtin_arm_tmiaph (long long, int, int)
13039 long long __builtin_arm_tmiatb (long long, int, int)
13040 long long __builtin_arm_tmiatt (long long, int, int)
13041 int __builtin_arm_tmovmskb (v8qi)
13042 int __builtin_arm_tmovmskh (v4hi)
13043 int __builtin_arm_tmovmskw (v2si)
13044 long long __builtin_arm_waccb (v8qi)
13045 long long __builtin_arm_wacch (v4hi)
13046 long long __builtin_arm_waccw (v2si)
13047 v8qi __builtin_arm_waddb (v8qi, v8qi)
13048 v8qi __builtin_arm_waddbss (v8qi, v8qi)
13049 v8qi __builtin_arm_waddbus (v8qi, v8qi)
13050 v4hi __builtin_arm_waddh (v4hi, v4hi)
13051 v4hi __builtin_arm_waddhss (v4hi, v4hi)
13052 v4hi __builtin_arm_waddhus (v4hi, v4hi)
13053 v2si __builtin_arm_waddw (v2si, v2si)
13054 v2si __builtin_arm_waddwss (v2si, v2si)
13055 v2si __builtin_arm_waddwus (v2si, v2si)
13056 v8qi __builtin_arm_walign (v8qi, v8qi, int)
13057 long long __builtin_arm_wand(long long, long long)
13058 long long __builtin_arm_wandn (long long, long long)
13059 v8qi __builtin_arm_wavg2b (v8qi, v8qi)
13060 v8qi __builtin_arm_wavg2br (v8qi, v8qi)
13061 v4hi __builtin_arm_wavg2h (v4hi, v4hi)
13062 v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
13063 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
13064 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
13065 v2si __builtin_arm_wcmpeqw (v2si, v2si)
13066 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
13067 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
13068 v2si __builtin_arm_wcmpgtsw (v2si, v2si)
13069 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
13070 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
13071 v2si __builtin_arm_wcmpgtuw (v2si, v2si)
13072 long long __builtin_arm_wmacs (long long, v4hi, v4hi)
13073 long long __builtin_arm_wmacsz (v4hi, v4hi)
13074 long long __builtin_arm_wmacu (long long, v4hi, v4hi)
13075 long long __builtin_arm_wmacuz (v4hi, v4hi)
13076 v4hi __builtin_arm_wmadds (v4hi, v4hi)
13077 v4hi __builtin_arm_wmaddu (v4hi, v4hi)
13078 v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
13079 v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
13080 v2si __builtin_arm_wmaxsw (v2si, v2si)
13081 v8qi __builtin_arm_wmaxub (v8qi, v8qi)
13082 v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
13083 v2si __builtin_arm_wmaxuw (v2si, v2si)
13084 v8qi __builtin_arm_wminsb (v8qi, v8qi)
13085 v4hi __builtin_arm_wminsh (v4hi, v4hi)
13086 v2si __builtin_arm_wminsw (v2si, v2si)
13087 v8qi __builtin_arm_wminub (v8qi, v8qi)
13088 v4hi __builtin_arm_wminuh (v4hi, v4hi)
13089 v2si __builtin_arm_wminuw (v2si, v2si)
13090 v4hi __builtin_arm_wmulsm (v4hi, v4hi)
13091 v4hi __builtin_arm_wmulul (v4hi, v4hi)
13092 v4hi __builtin_arm_wmulum (v4hi, v4hi)
13093 long long __builtin_arm_wor (long long, long long)
13094 v2si __builtin_arm_wpackdss (long long, long long)
13095 v2si __builtin_arm_wpackdus (long long, long long)
13096 v8qi __builtin_arm_wpackhss (v4hi, v4hi)
13097 v8qi __builtin_arm_wpackhus (v4hi, v4hi)
13098 v4hi __builtin_arm_wpackwss (v2si, v2si)
13099 v4hi __builtin_arm_wpackwus (v2si, v2si)
13100 long long __builtin_arm_wrord (long long, long long)
13101 long long __builtin_arm_wrordi (long long, int)
13102 v4hi __builtin_arm_wrorh (v4hi, long long)
13103 v4hi __builtin_arm_wrorhi (v4hi, int)
13104 v2si __builtin_arm_wrorw (v2si, long long)
13105 v2si __builtin_arm_wrorwi (v2si, int)
13106 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
13107 v2si __builtin_arm_wsadbz (v8qi, v8qi)
13108 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
13109 v2si __builtin_arm_wsadhz (v4hi, v4hi)
13110 v4hi __builtin_arm_wshufh (v4hi, int)
13111 long long __builtin_arm_wslld (long long, long long)
13112 long long __builtin_arm_wslldi (long long, int)
13113 v4hi __builtin_arm_wsllh (v4hi, long long)
13114 v4hi __builtin_arm_wsllhi (v4hi, int)
13115 v2si __builtin_arm_wsllw (v2si, long long)
13116 v2si __builtin_arm_wsllwi (v2si, int)
13117 long long __builtin_arm_wsrad (long long, long long)
13118 long long __builtin_arm_wsradi (long long, int)
13119 v4hi __builtin_arm_wsrah (v4hi, long long)
13120 v4hi __builtin_arm_wsrahi (v4hi, int)
13121 v2si __builtin_arm_wsraw (v2si, long long)
13122 v2si __builtin_arm_wsrawi (v2si, int)
13123 long long __builtin_arm_wsrld (long long, long long)
13124 long long __builtin_arm_wsrldi (long long, int)
13125 v4hi __builtin_arm_wsrlh (v4hi, long long)
13126 v4hi __builtin_arm_wsrlhi (v4hi, int)
13127 v2si __builtin_arm_wsrlw (v2si, long long)
13128 v2si __builtin_arm_wsrlwi (v2si, int)
13129 v8qi __builtin_arm_wsubb (v8qi, v8qi)
13130 v8qi __builtin_arm_wsubbss (v8qi, v8qi)
13131 v8qi __builtin_arm_wsubbus (v8qi, v8qi)
13132 v4hi __builtin_arm_wsubh (v4hi, v4hi)
13133 v4hi __builtin_arm_wsubhss (v4hi, v4hi)
13134 v4hi __builtin_arm_wsubhus (v4hi, v4hi)
13135 v2si __builtin_arm_wsubw (v2si, v2si)
13136 v2si __builtin_arm_wsubwss (v2si, v2si)
13137 v2si __builtin_arm_wsubwus (v2si, v2si)
13138 v4hi __builtin_arm_wunpckehsb (v8qi)
13139 v2si __builtin_arm_wunpckehsh (v4hi)
13140 long long __builtin_arm_wunpckehsw (v2si)
13141 v4hi __builtin_arm_wunpckehub (v8qi)
13142 v2si __builtin_arm_wunpckehuh (v4hi)
13143 long long __builtin_arm_wunpckehuw (v2si)
13144 v4hi __builtin_arm_wunpckelsb (v8qi)
13145 v2si __builtin_arm_wunpckelsh (v4hi)
13146 long long __builtin_arm_wunpckelsw (v2si)
13147 v4hi __builtin_arm_wunpckelub (v8qi)
13148 v2si __builtin_arm_wunpckeluh (v4hi)
13149 long long __builtin_arm_wunpckeluw (v2si)
13150 v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
13151 v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
13152 v2si __builtin_arm_wunpckihw (v2si, v2si)
13153 v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
13154 v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
13155 v2si __builtin_arm_wunpckilw (v2si, v2si)
13156 long long __builtin_arm_wxor (long long, long long)
13157 long long __builtin_arm_wzero ()
13158 @end smallexample
13161 @node ARM C Language Extensions (ACLE)
13162 @subsection ARM C Language Extensions (ACLE)
13164 GCC implements extensions for C as described in the ARM C Language
13165 Extensions (ACLE) specification, which can be found at
13166 @uref{http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf}.
13168 As a part of ACLE, GCC implements extensions for Advanced SIMD as described in
13169 the ARM C Language Extensions Specification.  The complete list of Advanced SIMD
13170 intrinsics can be found at
13171 @uref{http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf}.
13172 The built-in intrinsics for the Advanced SIMD extension are available when
13173 NEON is enabled.
13175 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.  Both
13176 back ends support CRC32 intrinsics and the ARM back end supports the
13177 Coprocessor intrinsics, all from @file{arm_acle.h}.  The ARM back end's 16-bit
13178 floating-point Advanced SIMD intrinsics currently comply to ACLE v1.1.
13179 AArch64's back end does not have support for 16-bit floating point Advanced SIMD
13180 intrinsics yet.
13182 See @ref{ARM Options} and @ref{AArch64 Options} for more information on the
13183 availability of extensions.
13185 @node ARM Floating Point Status and Control Intrinsics
13186 @subsection ARM Floating Point Status and Control Intrinsics
13188 These built-in functions are available for the ARM family of
13189 processors with floating-point unit.
13191 @smallexample
13192 unsigned int __builtin_arm_get_fpscr ()
13193 void __builtin_arm_set_fpscr (unsigned int)
13194 @end smallexample
13196 @node ARM ARMv8-M Security Extensions
13197 @subsection ARM ARMv8-M Security Extensions
13199 GCC implements the ARMv8-M Security Extensions as described in the ARMv8-M
13200 Security Extensions: Requirements on Development Tools Engineering
13201 Specification, which can be found at
13202 @uref{http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf}.
13204 As part of the Security Extensions GCC implements two new function attributes:
13205 @code{cmse_nonsecure_entry} and @code{cmse_nonsecure_call}.
13207 As part of the Security Extensions GCC implements the intrinsics below.  FPTR
13208 is used here to mean any function pointer type.
13210 @smallexample
13211 cmse_address_info_t cmse_TT (void *)
13212 cmse_address_info_t cmse_TT_fptr (FPTR)
13213 cmse_address_info_t cmse_TTT (void *)
13214 cmse_address_info_t cmse_TTT_fptr (FPTR)
13215 cmse_address_info_t cmse_TTA (void *)
13216 cmse_address_info_t cmse_TTA_fptr (FPTR)
13217 cmse_address_info_t cmse_TTAT (void *)
13218 cmse_address_info_t cmse_TTAT_fptr (FPTR)
13219 void * cmse_check_address_range (void *, size_t, int)
13220 typeof(p) cmse_nsfptr_create (FPTR p)
13221 intptr_t cmse_is_nsfptr (FPTR)
13222 int cmse_nonsecure_caller (void)
13223 @end smallexample
13225 @node AVR Built-in Functions
13226 @subsection AVR Built-in Functions
13228 For each built-in function for AVR, there is an equally named,
13229 uppercase built-in macro defined. That way users can easily query if
13230 or if not a specific built-in is implemented or not. For example, if
13231 @code{__builtin_avr_nop} is available the macro
13232 @code{__BUILTIN_AVR_NOP} is defined to @code{1} and undefined otherwise.
13234 @table @code
13236 @item void __builtin_avr_nop (void)
13237 @itemx void __builtin_avr_sei (void)
13238 @itemx void __builtin_avr_cli (void)
13239 @itemx void __builtin_avr_sleep (void)
13240 @itemx void __builtin_avr_wdr (void)
13241 @itemx unsigned char __builtin_avr_swap (unsigned char)
13242 @itemx unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
13243 @itemx int __builtin_avr_fmuls (char, char)
13244 @itemx int __builtin_avr_fmulsu (char, unsigned char)
13245 These built-in functions map to the respective machine
13246 instruction, i.e.@: @code{nop}, @code{sei}, @code{cli}, @code{sleep},
13247 @code{wdr}, @code{swap}, @code{fmul}, @code{fmuls}
13248 resp. @code{fmulsu}. The three @code{fmul*} built-ins are implemented
13249 as library call if no hardware multiplier is available.
13251 @item void __builtin_avr_delay_cycles (unsigned long ticks)
13252 Delay execution for @var{ticks} cycles. Note that this
13253 built-in does not take into account the effect of interrupts that
13254 might increase delay time. @var{ticks} must be a compile-time
13255 integer constant; delays with a variable number of cycles are not supported.
13257 @item char __builtin_avr_flash_segment (const __memx void*)
13258 This built-in takes a byte address to the 24-bit
13259 @ref{AVR Named Address Spaces,address space} @code{__memx} and returns
13260 the number of the flash segment (the 64 KiB chunk) where the address
13261 points to.  Counting starts at @code{0}.
13262 If the address does not point to flash memory, return @code{-1}.
13264 @item uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)
13265 Insert bits from @var{bits} into @var{val} and return the resulting
13266 value. The nibbles of @var{map} determine how the insertion is
13267 performed: Let @var{X} be the @var{n}-th nibble of @var{map}
13268 @enumerate
13269 @item If @var{X} is @code{0xf},
13270 then the @var{n}-th bit of @var{val} is returned unaltered.
13272 @item If X is in the range 0@dots{}7,
13273 then the @var{n}-th result bit is set to the @var{X}-th bit of @var{bits}
13275 @item If X is in the range 8@dots{}@code{0xe},
13276 then the @var{n}-th result bit is undefined.
13277 @end enumerate
13279 @noindent
13280 One typical use case for this built-in is adjusting input and
13281 output values to non-contiguous port layouts. Some examples:
13283 @smallexample
13284 // same as val, bits is unused
13285 __builtin_avr_insert_bits (0xffffffff, bits, val)
13286 @end smallexample
13288 @smallexample
13289 // same as bits, val is unused
13290 __builtin_avr_insert_bits (0x76543210, bits, val)
13291 @end smallexample
13293 @smallexample
13294 // same as rotating bits by 4
13295 __builtin_avr_insert_bits (0x32107654, bits, 0)
13296 @end smallexample
13298 @smallexample
13299 // high nibble of result is the high nibble of val
13300 // low nibble of result is the low nibble of bits
13301 __builtin_avr_insert_bits (0xffff3210, bits, val)
13302 @end smallexample
13304 @smallexample
13305 // reverse the bit order of bits
13306 __builtin_avr_insert_bits (0x01234567, bits, 0)
13307 @end smallexample
13309 @item void __builtin_avr_nops (unsigned count)
13310 Insert @var{count} @code{NOP} instructions.
13311 The number of instructions must be a compile-time integer constant.
13313 @end table
13315 @noindent
13316 There are many more AVR-specific built-in functions that are used to
13317 implement the ISO/IEC TR 18037 ``Embedded C'' fixed-point functions of
13318 section 7.18a.6.  You don't need to use these built-ins directly.
13319 Instead, use the declarations as supplied by the @code{stdfix.h} header
13320 with GNU-C99:
13322 @smallexample
13323 #include <stdfix.h>
13325 // Re-interpret the bit representation of unsigned 16-bit
13326 // integer @var{uval} as Q-format 0.16 value.
13327 unsigned fract get_bits (uint_ur_t uval)
13329     return urbits (uval);
13331 @end smallexample
13333 @node Blackfin Built-in Functions
13334 @subsection Blackfin Built-in Functions
13336 Currently, there are two Blackfin-specific built-in functions.  These are
13337 used for generating @code{CSYNC} and @code{SSYNC} machine insns without
13338 using inline assembly; by using these built-in functions the compiler can
13339 automatically add workarounds for hardware errata involving these
13340 instructions.  These functions are named as follows:
13342 @smallexample
13343 void __builtin_bfin_csync (void)
13344 void __builtin_bfin_ssync (void)
13345 @end smallexample
13347 @node FR-V Built-in Functions
13348 @subsection FR-V Built-in Functions
13350 GCC provides many FR-V-specific built-in functions.  In general,
13351 these functions are intended to be compatible with those described
13352 by @cite{FR-V Family, Softune C/C++ Compiler Manual (V6), Fujitsu
13353 Semiconductor}.  The two exceptions are @code{__MDUNPACKH} and
13354 @code{__MBTOHE}, the GCC forms of which pass 128-bit values by
13355 pointer rather than by value.
13357 Most of the functions are named after specific FR-V instructions.
13358 Such functions are said to be ``directly mapped'' and are summarized
13359 here in tabular form.
13361 @menu
13362 * Argument Types::
13363 * Directly-mapped Integer Functions::
13364 * Directly-mapped Media Functions::
13365 * Raw read/write Functions::
13366 * Other Built-in Functions::
13367 @end menu
13369 @node Argument Types
13370 @subsubsection Argument Types
13372 The arguments to the built-in functions can be divided into three groups:
13373 register numbers, compile-time constants and run-time values.  In order
13374 to make this classification clear at a glance, the arguments and return
13375 values are given the following pseudo types:
13377 @multitable @columnfractions .20 .30 .15 .35
13378 @item Pseudo type @tab Real C type @tab Constant? @tab Description
13379 @item @code{uh} @tab @code{unsigned short} @tab No @tab an unsigned halfword
13380 @item @code{uw1} @tab @code{unsigned int} @tab No @tab an unsigned word
13381 @item @code{sw1} @tab @code{int} @tab No @tab a signed word
13382 @item @code{uw2} @tab @code{unsigned long long} @tab No
13383 @tab an unsigned doubleword
13384 @item @code{sw2} @tab @code{long long} @tab No @tab a signed doubleword
13385 @item @code{const} @tab @code{int} @tab Yes @tab an integer constant
13386 @item @code{acc} @tab @code{int} @tab Yes @tab an ACC register number
13387 @item @code{iacc} @tab @code{int} @tab Yes @tab an IACC register number
13388 @end multitable
13390 These pseudo types are not defined by GCC, they are simply a notational
13391 convenience used in this manual.
13393 Arguments of type @code{uh}, @code{uw1}, @code{sw1}, @code{uw2}
13394 and @code{sw2} are evaluated at run time.  They correspond to
13395 register operands in the underlying FR-V instructions.
13397 @code{const} arguments represent immediate operands in the underlying
13398 FR-V instructions.  They must be compile-time constants.
13400 @code{acc} arguments are evaluated at compile time and specify the number
13401 of an accumulator register.  For example, an @code{acc} argument of 2
13402 selects the ACC2 register.
13404 @code{iacc} arguments are similar to @code{acc} arguments but specify the
13405 number of an IACC register.  See @pxref{Other Built-in Functions}
13406 for more details.
13408 @node Directly-mapped Integer Functions
13409 @subsubsection Directly-Mapped Integer Functions
13411 The functions listed below map directly to FR-V I-type instructions.
13413 @multitable @columnfractions .45 .32 .23
13414 @item Function prototype @tab Example usage @tab Assembly output
13415 @item @code{sw1 __ADDSS (sw1, sw1)}
13416 @tab @code{@var{c} = __ADDSS (@var{a}, @var{b})}
13417 @tab @code{ADDSS @var{a},@var{b},@var{c}}
13418 @item @code{sw1 __SCAN (sw1, sw1)}
13419 @tab @code{@var{c} = __SCAN (@var{a}, @var{b})}
13420 @tab @code{SCAN @var{a},@var{b},@var{c}}
13421 @item @code{sw1 __SCUTSS (sw1)}
13422 @tab @code{@var{b} = __SCUTSS (@var{a})}
13423 @tab @code{SCUTSS @var{a},@var{b}}
13424 @item @code{sw1 __SLASS (sw1, sw1)}
13425 @tab @code{@var{c} = __SLASS (@var{a}, @var{b})}
13426 @tab @code{SLASS @var{a},@var{b},@var{c}}
13427 @item @code{void __SMASS (sw1, sw1)}
13428 @tab @code{__SMASS (@var{a}, @var{b})}
13429 @tab @code{SMASS @var{a},@var{b}}
13430 @item @code{void __SMSSS (sw1, sw1)}
13431 @tab @code{__SMSSS (@var{a}, @var{b})}
13432 @tab @code{SMSSS @var{a},@var{b}}
13433 @item @code{void __SMU (sw1, sw1)}
13434 @tab @code{__SMU (@var{a}, @var{b})}
13435 @tab @code{SMU @var{a},@var{b}}
13436 @item @code{sw2 __SMUL (sw1, sw1)}
13437 @tab @code{@var{c} = __SMUL (@var{a}, @var{b})}
13438 @tab @code{SMUL @var{a},@var{b},@var{c}}
13439 @item @code{sw1 __SUBSS (sw1, sw1)}
13440 @tab @code{@var{c} = __SUBSS (@var{a}, @var{b})}
13441 @tab @code{SUBSS @var{a},@var{b},@var{c}}
13442 @item @code{uw2 __UMUL (uw1, uw1)}
13443 @tab @code{@var{c} = __UMUL (@var{a}, @var{b})}
13444 @tab @code{UMUL @var{a},@var{b},@var{c}}
13445 @end multitable
13447 @node Directly-mapped Media Functions
13448 @subsubsection Directly-Mapped Media Functions
13450 The functions listed below map directly to FR-V M-type instructions.
13452 @multitable @columnfractions .45 .32 .23
13453 @item Function prototype @tab Example usage @tab Assembly output
13454 @item @code{uw1 __MABSHS (sw1)}
13455 @tab @code{@var{b} = __MABSHS (@var{a})}
13456 @tab @code{MABSHS @var{a},@var{b}}
13457 @item @code{void __MADDACCS (acc, acc)}
13458 @tab @code{__MADDACCS (@var{b}, @var{a})}
13459 @tab @code{MADDACCS @var{a},@var{b}}
13460 @item @code{sw1 __MADDHSS (sw1, sw1)}
13461 @tab @code{@var{c} = __MADDHSS (@var{a}, @var{b})}
13462 @tab @code{MADDHSS @var{a},@var{b},@var{c}}
13463 @item @code{uw1 __MADDHUS (uw1, uw1)}
13464 @tab @code{@var{c} = __MADDHUS (@var{a}, @var{b})}
13465 @tab @code{MADDHUS @var{a},@var{b},@var{c}}
13466 @item @code{uw1 __MAND (uw1, uw1)}
13467 @tab @code{@var{c} = __MAND (@var{a}, @var{b})}
13468 @tab @code{MAND @var{a},@var{b},@var{c}}
13469 @item @code{void __MASACCS (acc, acc)}
13470 @tab @code{__MASACCS (@var{b}, @var{a})}
13471 @tab @code{MASACCS @var{a},@var{b}}
13472 @item @code{uw1 __MAVEH (uw1, uw1)}
13473 @tab @code{@var{c} = __MAVEH (@var{a}, @var{b})}
13474 @tab @code{MAVEH @var{a},@var{b},@var{c}}
13475 @item @code{uw2 __MBTOH (uw1)}
13476 @tab @code{@var{b} = __MBTOH (@var{a})}
13477 @tab @code{MBTOH @var{a},@var{b}}
13478 @item @code{void __MBTOHE (uw1 *, uw1)}
13479 @tab @code{__MBTOHE (&@var{b}, @var{a})}
13480 @tab @code{MBTOHE @var{a},@var{b}}
13481 @item @code{void __MCLRACC (acc)}
13482 @tab @code{__MCLRACC (@var{a})}
13483 @tab @code{MCLRACC @var{a}}
13484 @item @code{void __MCLRACCA (void)}
13485 @tab @code{__MCLRACCA ()}
13486 @tab @code{MCLRACCA}
13487 @item @code{uw1 __Mcop1 (uw1, uw1)}
13488 @tab @code{@var{c} = __Mcop1 (@var{a}, @var{b})}
13489 @tab @code{Mcop1 @var{a},@var{b},@var{c}}
13490 @item @code{uw1 __Mcop2 (uw1, uw1)}
13491 @tab @code{@var{c} = __Mcop2 (@var{a}, @var{b})}
13492 @tab @code{Mcop2 @var{a},@var{b},@var{c}}
13493 @item @code{uw1 __MCPLHI (uw2, const)}
13494 @tab @code{@var{c} = __MCPLHI (@var{a}, @var{b})}
13495 @tab @code{MCPLHI @var{a},#@var{b},@var{c}}
13496 @item @code{uw1 __MCPLI (uw2, const)}
13497 @tab @code{@var{c} = __MCPLI (@var{a}, @var{b})}
13498 @tab @code{MCPLI @var{a},#@var{b},@var{c}}
13499 @item @code{void __MCPXIS (acc, sw1, sw1)}
13500 @tab @code{__MCPXIS (@var{c}, @var{a}, @var{b})}
13501 @tab @code{MCPXIS @var{a},@var{b},@var{c}}
13502 @item @code{void __MCPXIU (acc, uw1, uw1)}
13503 @tab @code{__MCPXIU (@var{c}, @var{a}, @var{b})}
13504 @tab @code{MCPXIU @var{a},@var{b},@var{c}}
13505 @item @code{void __MCPXRS (acc, sw1, sw1)}
13506 @tab @code{__MCPXRS (@var{c}, @var{a}, @var{b})}
13507 @tab @code{MCPXRS @var{a},@var{b},@var{c}}
13508 @item @code{void __MCPXRU (acc, uw1, uw1)}
13509 @tab @code{__MCPXRU (@var{c}, @var{a}, @var{b})}
13510 @tab @code{MCPXRU @var{a},@var{b},@var{c}}
13511 @item @code{uw1 __MCUT (acc, uw1)}
13512 @tab @code{@var{c} = __MCUT (@var{a}, @var{b})}
13513 @tab @code{MCUT @var{a},@var{b},@var{c}}
13514 @item @code{uw1 __MCUTSS (acc, sw1)}
13515 @tab @code{@var{c} = __MCUTSS (@var{a}, @var{b})}
13516 @tab @code{MCUTSS @var{a},@var{b},@var{c}}
13517 @item @code{void __MDADDACCS (acc, acc)}
13518 @tab @code{__MDADDACCS (@var{b}, @var{a})}
13519 @tab @code{MDADDACCS @var{a},@var{b}}
13520 @item @code{void __MDASACCS (acc, acc)}
13521 @tab @code{__MDASACCS (@var{b}, @var{a})}
13522 @tab @code{MDASACCS @var{a},@var{b}}
13523 @item @code{uw2 __MDCUTSSI (acc, const)}
13524 @tab @code{@var{c} = __MDCUTSSI (@var{a}, @var{b})}
13525 @tab @code{MDCUTSSI @var{a},#@var{b},@var{c}}
13526 @item @code{uw2 __MDPACKH (uw2, uw2)}
13527 @tab @code{@var{c} = __MDPACKH (@var{a}, @var{b})}
13528 @tab @code{MDPACKH @var{a},@var{b},@var{c}}
13529 @item @code{uw2 __MDROTLI (uw2, const)}
13530 @tab @code{@var{c} = __MDROTLI (@var{a}, @var{b})}
13531 @tab @code{MDROTLI @var{a},#@var{b},@var{c}}
13532 @item @code{void __MDSUBACCS (acc, acc)}
13533 @tab @code{__MDSUBACCS (@var{b}, @var{a})}
13534 @tab @code{MDSUBACCS @var{a},@var{b}}
13535 @item @code{void __MDUNPACKH (uw1 *, uw2)}
13536 @tab @code{__MDUNPACKH (&@var{b}, @var{a})}
13537 @tab @code{MDUNPACKH @var{a},@var{b}}
13538 @item @code{uw2 __MEXPDHD (uw1, const)}
13539 @tab @code{@var{c} = __MEXPDHD (@var{a}, @var{b})}
13540 @tab @code{MEXPDHD @var{a},#@var{b},@var{c}}
13541 @item @code{uw1 __MEXPDHW (uw1, const)}
13542 @tab @code{@var{c} = __MEXPDHW (@var{a}, @var{b})}
13543 @tab @code{MEXPDHW @var{a},#@var{b},@var{c}}
13544 @item @code{uw1 __MHDSETH (uw1, const)}
13545 @tab @code{@var{c} = __MHDSETH (@var{a}, @var{b})}
13546 @tab @code{MHDSETH @var{a},#@var{b},@var{c}}
13547 @item @code{sw1 __MHDSETS (const)}
13548 @tab @code{@var{b} = __MHDSETS (@var{a})}
13549 @tab @code{MHDSETS #@var{a},@var{b}}
13550 @item @code{uw1 __MHSETHIH (uw1, const)}
13551 @tab @code{@var{b} = __MHSETHIH (@var{b}, @var{a})}
13552 @tab @code{MHSETHIH #@var{a},@var{b}}
13553 @item @code{sw1 __MHSETHIS (sw1, const)}
13554 @tab @code{@var{b} = __MHSETHIS (@var{b}, @var{a})}
13555 @tab @code{MHSETHIS #@var{a},@var{b}}
13556 @item @code{uw1 __MHSETLOH (uw1, const)}
13557 @tab @code{@var{b} = __MHSETLOH (@var{b}, @var{a})}
13558 @tab @code{MHSETLOH #@var{a},@var{b}}
13559 @item @code{sw1 __MHSETLOS (sw1, const)}
13560 @tab @code{@var{b} = __MHSETLOS (@var{b}, @var{a})}
13561 @tab @code{MHSETLOS #@var{a},@var{b}}
13562 @item @code{uw1 __MHTOB (uw2)}
13563 @tab @code{@var{b} = __MHTOB (@var{a})}
13564 @tab @code{MHTOB @var{a},@var{b}}
13565 @item @code{void __MMACHS (acc, sw1, sw1)}
13566 @tab @code{__MMACHS (@var{c}, @var{a}, @var{b})}
13567 @tab @code{MMACHS @var{a},@var{b},@var{c}}
13568 @item @code{void __MMACHU (acc, uw1, uw1)}
13569 @tab @code{__MMACHU (@var{c}, @var{a}, @var{b})}
13570 @tab @code{MMACHU @var{a},@var{b},@var{c}}
13571 @item @code{void __MMRDHS (acc, sw1, sw1)}
13572 @tab @code{__MMRDHS (@var{c}, @var{a}, @var{b})}
13573 @tab @code{MMRDHS @var{a},@var{b},@var{c}}
13574 @item @code{void __MMRDHU (acc, uw1, uw1)}
13575 @tab @code{__MMRDHU (@var{c}, @var{a}, @var{b})}
13576 @tab @code{MMRDHU @var{a},@var{b},@var{c}}
13577 @item @code{void __MMULHS (acc, sw1, sw1)}
13578 @tab @code{__MMULHS (@var{c}, @var{a}, @var{b})}
13579 @tab @code{MMULHS @var{a},@var{b},@var{c}}
13580 @item @code{void __MMULHU (acc, uw1, uw1)}
13581 @tab @code{__MMULHU (@var{c}, @var{a}, @var{b})}
13582 @tab @code{MMULHU @var{a},@var{b},@var{c}}
13583 @item @code{void __MMULXHS (acc, sw1, sw1)}
13584 @tab @code{__MMULXHS (@var{c}, @var{a}, @var{b})}
13585 @tab @code{MMULXHS @var{a},@var{b},@var{c}}
13586 @item @code{void __MMULXHU (acc, uw1, uw1)}
13587 @tab @code{__MMULXHU (@var{c}, @var{a}, @var{b})}
13588 @tab @code{MMULXHU @var{a},@var{b},@var{c}}
13589 @item @code{uw1 __MNOT (uw1)}
13590 @tab @code{@var{b} = __MNOT (@var{a})}
13591 @tab @code{MNOT @var{a},@var{b}}
13592 @item @code{uw1 __MOR (uw1, uw1)}
13593 @tab @code{@var{c} = __MOR (@var{a}, @var{b})}
13594 @tab @code{MOR @var{a},@var{b},@var{c}}
13595 @item @code{uw1 __MPACKH (uh, uh)}
13596 @tab @code{@var{c} = __MPACKH (@var{a}, @var{b})}
13597 @tab @code{MPACKH @var{a},@var{b},@var{c}}
13598 @item @code{sw2 __MQADDHSS (sw2, sw2)}
13599 @tab @code{@var{c} = __MQADDHSS (@var{a}, @var{b})}
13600 @tab @code{MQADDHSS @var{a},@var{b},@var{c}}
13601 @item @code{uw2 __MQADDHUS (uw2, uw2)}
13602 @tab @code{@var{c} = __MQADDHUS (@var{a}, @var{b})}
13603 @tab @code{MQADDHUS @var{a},@var{b},@var{c}}
13604 @item @code{void __MQCPXIS (acc, sw2, sw2)}
13605 @tab @code{__MQCPXIS (@var{c}, @var{a}, @var{b})}
13606 @tab @code{MQCPXIS @var{a},@var{b},@var{c}}
13607 @item @code{void __MQCPXIU (acc, uw2, uw2)}
13608 @tab @code{__MQCPXIU (@var{c}, @var{a}, @var{b})}
13609 @tab @code{MQCPXIU @var{a},@var{b},@var{c}}
13610 @item @code{void __MQCPXRS (acc, sw2, sw2)}
13611 @tab @code{__MQCPXRS (@var{c}, @var{a}, @var{b})}
13612 @tab @code{MQCPXRS @var{a},@var{b},@var{c}}
13613 @item @code{void __MQCPXRU (acc, uw2, uw2)}
13614 @tab @code{__MQCPXRU (@var{c}, @var{a}, @var{b})}
13615 @tab @code{MQCPXRU @var{a},@var{b},@var{c}}
13616 @item @code{sw2 __MQLCLRHS (sw2, sw2)}
13617 @tab @code{@var{c} = __MQLCLRHS (@var{a}, @var{b})}
13618 @tab @code{MQLCLRHS @var{a},@var{b},@var{c}}
13619 @item @code{sw2 __MQLMTHS (sw2, sw2)}
13620 @tab @code{@var{c} = __MQLMTHS (@var{a}, @var{b})}
13621 @tab @code{MQLMTHS @var{a},@var{b},@var{c}}
13622 @item @code{void __MQMACHS (acc, sw2, sw2)}
13623 @tab @code{__MQMACHS (@var{c}, @var{a}, @var{b})}
13624 @tab @code{MQMACHS @var{a},@var{b},@var{c}}
13625 @item @code{void __MQMACHU (acc, uw2, uw2)}
13626 @tab @code{__MQMACHU (@var{c}, @var{a}, @var{b})}
13627 @tab @code{MQMACHU @var{a},@var{b},@var{c}}
13628 @item @code{void __MQMACXHS (acc, sw2, sw2)}
13629 @tab @code{__MQMACXHS (@var{c}, @var{a}, @var{b})}
13630 @tab @code{MQMACXHS @var{a},@var{b},@var{c}}
13631 @item @code{void __MQMULHS (acc, sw2, sw2)}
13632 @tab @code{__MQMULHS (@var{c}, @var{a}, @var{b})}
13633 @tab @code{MQMULHS @var{a},@var{b},@var{c}}
13634 @item @code{void __MQMULHU (acc, uw2, uw2)}
13635 @tab @code{__MQMULHU (@var{c}, @var{a}, @var{b})}
13636 @tab @code{MQMULHU @var{a},@var{b},@var{c}}
13637 @item @code{void __MQMULXHS (acc, sw2, sw2)}
13638 @tab @code{__MQMULXHS (@var{c}, @var{a}, @var{b})}
13639 @tab @code{MQMULXHS @var{a},@var{b},@var{c}}
13640 @item @code{void __MQMULXHU (acc, uw2, uw2)}
13641 @tab @code{__MQMULXHU (@var{c}, @var{a}, @var{b})}
13642 @tab @code{MQMULXHU @var{a},@var{b},@var{c}}
13643 @item @code{sw2 __MQSATHS (sw2, sw2)}
13644 @tab @code{@var{c} = __MQSATHS (@var{a}, @var{b})}
13645 @tab @code{MQSATHS @var{a},@var{b},@var{c}}
13646 @item @code{uw2 __MQSLLHI (uw2, int)}
13647 @tab @code{@var{c} = __MQSLLHI (@var{a}, @var{b})}
13648 @tab @code{MQSLLHI @var{a},@var{b},@var{c}}
13649 @item @code{sw2 __MQSRAHI (sw2, int)}
13650 @tab @code{@var{c} = __MQSRAHI (@var{a}, @var{b})}
13651 @tab @code{MQSRAHI @var{a},@var{b},@var{c}}
13652 @item @code{sw2 __MQSUBHSS (sw2, sw2)}
13653 @tab @code{@var{c} = __MQSUBHSS (@var{a}, @var{b})}
13654 @tab @code{MQSUBHSS @var{a},@var{b},@var{c}}
13655 @item @code{uw2 __MQSUBHUS (uw2, uw2)}
13656 @tab @code{@var{c} = __MQSUBHUS (@var{a}, @var{b})}
13657 @tab @code{MQSUBHUS @var{a},@var{b},@var{c}}
13658 @item @code{void __MQXMACHS (acc, sw2, sw2)}
13659 @tab @code{__MQXMACHS (@var{c}, @var{a}, @var{b})}
13660 @tab @code{MQXMACHS @var{a},@var{b},@var{c}}
13661 @item @code{void __MQXMACXHS (acc, sw2, sw2)}
13662 @tab @code{__MQXMACXHS (@var{c}, @var{a}, @var{b})}
13663 @tab @code{MQXMACXHS @var{a},@var{b},@var{c}}
13664 @item @code{uw1 __MRDACC (acc)}
13665 @tab @code{@var{b} = __MRDACC (@var{a})}
13666 @tab @code{MRDACC @var{a},@var{b}}
13667 @item @code{uw1 __MRDACCG (acc)}
13668 @tab @code{@var{b} = __MRDACCG (@var{a})}
13669 @tab @code{MRDACCG @var{a},@var{b}}
13670 @item @code{uw1 __MROTLI (uw1, const)}
13671 @tab @code{@var{c} = __MROTLI (@var{a}, @var{b})}
13672 @tab @code{MROTLI @var{a},#@var{b},@var{c}}
13673 @item @code{uw1 __MROTRI (uw1, const)}
13674 @tab @code{@var{c} = __MROTRI (@var{a}, @var{b})}
13675 @tab @code{MROTRI @var{a},#@var{b},@var{c}}
13676 @item @code{sw1 __MSATHS (sw1, sw1)}
13677 @tab @code{@var{c} = __MSATHS (@var{a}, @var{b})}
13678 @tab @code{MSATHS @var{a},@var{b},@var{c}}
13679 @item @code{uw1 __MSATHU (uw1, uw1)}
13680 @tab @code{@var{c} = __MSATHU (@var{a}, @var{b})}
13681 @tab @code{MSATHU @var{a},@var{b},@var{c}}
13682 @item @code{uw1 __MSLLHI (uw1, const)}
13683 @tab @code{@var{c} = __MSLLHI (@var{a}, @var{b})}
13684 @tab @code{MSLLHI @var{a},#@var{b},@var{c}}
13685 @item @code{sw1 __MSRAHI (sw1, const)}
13686 @tab @code{@var{c} = __MSRAHI (@var{a}, @var{b})}
13687 @tab @code{MSRAHI @var{a},#@var{b},@var{c}}
13688 @item @code{uw1 __MSRLHI (uw1, const)}
13689 @tab @code{@var{c} = __MSRLHI (@var{a}, @var{b})}
13690 @tab @code{MSRLHI @var{a},#@var{b},@var{c}}
13691 @item @code{void __MSUBACCS (acc, acc)}
13692 @tab @code{__MSUBACCS (@var{b}, @var{a})}
13693 @tab @code{MSUBACCS @var{a},@var{b}}
13694 @item @code{sw1 __MSUBHSS (sw1, sw1)}
13695 @tab @code{@var{c} = __MSUBHSS (@var{a}, @var{b})}
13696 @tab @code{MSUBHSS @var{a},@var{b},@var{c}}
13697 @item @code{uw1 __MSUBHUS (uw1, uw1)}
13698 @tab @code{@var{c} = __MSUBHUS (@var{a}, @var{b})}
13699 @tab @code{MSUBHUS @var{a},@var{b},@var{c}}
13700 @item @code{void __MTRAP (void)}
13701 @tab @code{__MTRAP ()}
13702 @tab @code{MTRAP}
13703 @item @code{uw2 __MUNPACKH (uw1)}
13704 @tab @code{@var{b} = __MUNPACKH (@var{a})}
13705 @tab @code{MUNPACKH @var{a},@var{b}}
13706 @item @code{uw1 __MWCUT (uw2, uw1)}
13707 @tab @code{@var{c} = __MWCUT (@var{a}, @var{b})}
13708 @tab @code{MWCUT @var{a},@var{b},@var{c}}
13709 @item @code{void __MWTACC (acc, uw1)}
13710 @tab @code{__MWTACC (@var{b}, @var{a})}
13711 @tab @code{MWTACC @var{a},@var{b}}
13712 @item @code{void __MWTACCG (acc, uw1)}
13713 @tab @code{__MWTACCG (@var{b}, @var{a})}
13714 @tab @code{MWTACCG @var{a},@var{b}}
13715 @item @code{uw1 __MXOR (uw1, uw1)}
13716 @tab @code{@var{c} = __MXOR (@var{a}, @var{b})}
13717 @tab @code{MXOR @var{a},@var{b},@var{c}}
13718 @end multitable
13720 @node Raw read/write Functions
13721 @subsubsection Raw Read/Write Functions
13723 This sections describes built-in functions related to read and write
13724 instructions to access memory.  These functions generate
13725 @code{membar} instructions to flush the I/O load and stores where
13726 appropriate, as described in Fujitsu's manual described above.
13728 @table @code
13730 @item unsigned char __builtin_read8 (void *@var{data})
13731 @item unsigned short __builtin_read16 (void *@var{data})
13732 @item unsigned long __builtin_read32 (void *@var{data})
13733 @item unsigned long long __builtin_read64 (void *@var{data})
13735 @item void __builtin_write8 (void *@var{data}, unsigned char @var{datum})
13736 @item void __builtin_write16 (void *@var{data}, unsigned short @var{datum})
13737 @item void __builtin_write32 (void *@var{data}, unsigned long @var{datum})
13738 @item void __builtin_write64 (void *@var{data}, unsigned long long @var{datum})
13739 @end table
13741 @node Other Built-in Functions
13742 @subsubsection Other Built-in Functions
13744 This section describes built-in functions that are not named after
13745 a specific FR-V instruction.
13747 @table @code
13748 @item sw2 __IACCreadll (iacc @var{reg})
13749 Return the full 64-bit value of IACC0@.  The @var{reg} argument is reserved
13750 for future expansion and must be 0.
13752 @item sw1 __IACCreadl (iacc @var{reg})
13753 Return the value of IACC0H if @var{reg} is 0 and IACC0L if @var{reg} is 1.
13754 Other values of @var{reg} are rejected as invalid.
13756 @item void __IACCsetll (iacc @var{reg}, sw2 @var{x})
13757 Set the full 64-bit value of IACC0 to @var{x}.  The @var{reg} argument
13758 is reserved for future expansion and must be 0.
13760 @item void __IACCsetl (iacc @var{reg}, sw1 @var{x})
13761 Set IACC0H to @var{x} if @var{reg} is 0 and IACC0L to @var{x} if @var{reg}
13762 is 1.  Other values of @var{reg} are rejected as invalid.
13764 @item void __data_prefetch0 (const void *@var{x})
13765 Use the @code{dcpl} instruction to load the contents of address @var{x}
13766 into the data cache.
13768 @item void __data_prefetch (const void *@var{x})
13769 Use the @code{nldub} instruction to load the contents of address @var{x}
13770 into the data cache.  The instruction is issued in slot I1@.
13771 @end table
13773 @node MIPS DSP Built-in Functions
13774 @subsection MIPS DSP Built-in Functions
13776 The MIPS DSP Application-Specific Extension (ASE) includes new
13777 instructions that are designed to improve the performance of DSP and
13778 media applications.  It provides instructions that operate on packed
13779 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
13781 GCC supports MIPS DSP operations using both the generic
13782 vector extensions (@pxref{Vector Extensions}) and a collection of
13783 MIPS-specific built-in functions.  Both kinds of support are
13784 enabled by the @option{-mdsp} command-line option.
13786 Revision 2 of the ASE was introduced in the second half of 2006.
13787 This revision adds extra instructions to the original ASE, but is
13788 otherwise backwards-compatible with it.  You can select revision 2
13789 using the command-line option @option{-mdspr2}; this option implies
13790 @option{-mdsp}.
13792 The SCOUNT and POS bits of the DSP control register are global.  The
13793 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
13794 POS bits.  During optimization, the compiler does not delete these
13795 instructions and it does not delete calls to functions containing
13796 these instructions.
13798 At present, GCC only provides support for operations on 32-bit
13799 vectors.  The vector type associated with 8-bit integer data is
13800 usually called @code{v4i8}, the vector type associated with Q7
13801 is usually called @code{v4q7}, the vector type associated with 16-bit
13802 integer data is usually called @code{v2i16}, and the vector type
13803 associated with Q15 is usually called @code{v2q15}.  They can be
13804 defined in C as follows:
13806 @smallexample
13807 typedef signed char v4i8 __attribute__ ((vector_size(4)));
13808 typedef signed char v4q7 __attribute__ ((vector_size(4)));
13809 typedef short v2i16 __attribute__ ((vector_size(4)));
13810 typedef short v2q15 __attribute__ ((vector_size(4)));
13811 @end smallexample
13813 @code{v4i8}, @code{v4q7}, @code{v2i16} and @code{v2q15} values are
13814 initialized in the same way as aggregates.  For example:
13816 @smallexample
13817 v4i8 a = @{1, 2, 3, 4@};
13818 v4i8 b;
13819 b = (v4i8) @{5, 6, 7, 8@};
13821 v2q15 c = @{0x0fcb, 0x3a75@};
13822 v2q15 d;
13823 d = (v2q15) @{0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15@};
13824 @end smallexample
13826 @emph{Note:} The CPU's endianness determines the order in which values
13827 are packed.  On little-endian targets, the first value is the least
13828 significant and the last value is the most significant.  The opposite
13829 order applies to big-endian targets.  For example, the code above
13830 sets the lowest byte of @code{a} to @code{1} on little-endian targets
13831 and @code{4} on big-endian targets.
13833 @emph{Note:} Q7, Q15 and Q31 values must be initialized with their integer
13834 representation.  As shown in this example, the integer representation
13835 of a Q7 value can be obtained by multiplying the fractional value by
13836 @code{0x1.0p7}.  The equivalent for Q15 values is to multiply by
13837 @code{0x1.0p15}.  The equivalent for Q31 values is to multiply by
13838 @code{0x1.0p31}.
13840 The table below lists the @code{v4i8} and @code{v2q15} operations for which
13841 hardware support exists.  @code{a} and @code{b} are @code{v4i8} values,
13842 and @code{c} and @code{d} are @code{v2q15} values.
13844 @multitable @columnfractions .50 .50
13845 @item C code @tab MIPS instruction
13846 @item @code{a + b} @tab @code{addu.qb}
13847 @item @code{c + d} @tab @code{addq.ph}
13848 @item @code{a - b} @tab @code{subu.qb}
13849 @item @code{c - d} @tab @code{subq.ph}
13850 @end multitable
13852 The table below lists the @code{v2i16} operation for which
13853 hardware support exists for the DSP ASE REV 2.  @code{e} and @code{f} are
13854 @code{v2i16} values.
13856 @multitable @columnfractions .50 .50
13857 @item C code @tab MIPS instruction
13858 @item @code{e * f} @tab @code{mul.ph}
13859 @end multitable
13861 It is easier to describe the DSP built-in functions if we first define
13862 the following types:
13864 @smallexample
13865 typedef int q31;
13866 typedef int i32;
13867 typedef unsigned int ui32;
13868 typedef long long a64;
13869 @end smallexample
13871 @code{q31} and @code{i32} are actually the same as @code{int}, but we
13872 use @code{q31} to indicate a Q31 fractional value and @code{i32} to
13873 indicate a 32-bit integer value.  Similarly, @code{a64} is the same as
13874 @code{long long}, but we use @code{a64} to indicate values that are
13875 placed in one of the four DSP accumulators (@code{$ac0},
13876 @code{$ac1}, @code{$ac2} or @code{$ac3}).
13878 Also, some built-in functions prefer or require immediate numbers as
13879 parameters, because the corresponding DSP instructions accept both immediate
13880 numbers and register operands, or accept immediate numbers only.  The
13881 immediate parameters are listed as follows.
13883 @smallexample
13884 imm0_3: 0 to 3.
13885 imm0_7: 0 to 7.
13886 imm0_15: 0 to 15.
13887 imm0_31: 0 to 31.
13888 imm0_63: 0 to 63.
13889 imm0_255: 0 to 255.
13890 imm_n32_31: -32 to 31.
13891 imm_n512_511: -512 to 511.
13892 @end smallexample
13894 The following built-in functions map directly to a particular MIPS DSP
13895 instruction.  Please refer to the architecture specification
13896 for details on what each instruction does.
13898 @smallexample
13899 v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
13900 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
13901 q31 __builtin_mips_addq_s_w (q31, q31)
13902 v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
13903 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
13904 v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
13905 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
13906 q31 __builtin_mips_subq_s_w (q31, q31)
13907 v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
13908 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
13909 i32 __builtin_mips_addsc (i32, i32)
13910 i32 __builtin_mips_addwc (i32, i32)
13911 i32 __builtin_mips_modsub (i32, i32)
13912 i32 __builtin_mips_raddu_w_qb (v4i8)
13913 v2q15 __builtin_mips_absq_s_ph (v2q15)
13914 q31 __builtin_mips_absq_s_w (q31)
13915 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
13916 v2q15 __builtin_mips_precrq_ph_w (q31, q31)
13917 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
13918 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
13919 q31 __builtin_mips_preceq_w_phl (v2q15)
13920 q31 __builtin_mips_preceq_w_phr (v2q15)
13921 v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
13922 v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
13923 v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
13924 v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
13925 v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
13926 v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
13927 v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
13928 v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
13929 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
13930 v4i8 __builtin_mips_shll_qb (v4i8, i32)
13931 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
13932 v2q15 __builtin_mips_shll_ph (v2q15, i32)
13933 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
13934 v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
13935 q31 __builtin_mips_shll_s_w (q31, imm0_31)
13936 q31 __builtin_mips_shll_s_w (q31, i32)
13937 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
13938 v4i8 __builtin_mips_shrl_qb (v4i8, i32)
13939 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
13940 v2q15 __builtin_mips_shra_ph (v2q15, i32)
13941 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
13942 v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
13943 q31 __builtin_mips_shra_r_w (q31, imm0_31)
13944 q31 __builtin_mips_shra_r_w (q31, i32)
13945 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
13946 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
13947 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
13948 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
13949 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
13950 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
13951 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
13952 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
13953 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
13954 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
13955 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
13956 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
13957 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
13958 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
13959 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
13960 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
13961 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
13962 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
13963 i32 __builtin_mips_bitrev (i32)
13964 i32 __builtin_mips_insv (i32, i32)
13965 v4i8 __builtin_mips_repl_qb (imm0_255)
13966 v4i8 __builtin_mips_repl_qb (i32)
13967 v2q15 __builtin_mips_repl_ph (imm_n512_511)
13968 v2q15 __builtin_mips_repl_ph (i32)
13969 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
13970 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
13971 void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
13972 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
13973 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
13974 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
13975 void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
13976 void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
13977 void __builtin_mips_cmp_le_ph (v2q15, v2q15)
13978 v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
13979 v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
13980 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
13981 i32 __builtin_mips_extr_w (a64, imm0_31)
13982 i32 __builtin_mips_extr_w (a64, i32)
13983 i32 __builtin_mips_extr_r_w (a64, imm0_31)
13984 i32 __builtin_mips_extr_s_h (a64, i32)
13985 i32 __builtin_mips_extr_rs_w (a64, imm0_31)
13986 i32 __builtin_mips_extr_rs_w (a64, i32)
13987 i32 __builtin_mips_extr_s_h (a64, imm0_31)
13988 i32 __builtin_mips_extr_r_w (a64, i32)
13989 i32 __builtin_mips_extp (a64, imm0_31)
13990 i32 __builtin_mips_extp (a64, i32)
13991 i32 __builtin_mips_extpdp (a64, imm0_31)
13992 i32 __builtin_mips_extpdp (a64, i32)
13993 a64 __builtin_mips_shilo (a64, imm_n32_31)
13994 a64 __builtin_mips_shilo (a64, i32)
13995 a64 __builtin_mips_mthlip (a64, i32)
13996 void __builtin_mips_wrdsp (i32, imm0_63)
13997 i32 __builtin_mips_rddsp (imm0_63)
13998 i32 __builtin_mips_lbux (void *, i32)
13999 i32 __builtin_mips_lhx (void *, i32)
14000 i32 __builtin_mips_lwx (void *, i32)
14001 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
14002 i32 __builtin_mips_bposge32 (void)
14003 a64 __builtin_mips_madd (a64, i32, i32);
14004 a64 __builtin_mips_maddu (a64, ui32, ui32);
14005 a64 __builtin_mips_msub (a64, i32, i32);
14006 a64 __builtin_mips_msubu (a64, ui32, ui32);
14007 a64 __builtin_mips_mult (i32, i32);
14008 a64 __builtin_mips_multu (ui32, ui32);
14009 @end smallexample
14011 The following built-in functions map directly to a particular MIPS DSP REV 2
14012 instruction.  Please refer to the architecture specification
14013 for details on what each instruction does.
14015 @smallexample
14016 v4q7 __builtin_mips_absq_s_qb (v4q7);
14017 v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
14018 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
14019 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
14020 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
14021 i32 __builtin_mips_append (i32, i32, imm0_31);
14022 i32 __builtin_mips_balign (i32, i32, imm0_3);
14023 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
14024 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
14025 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
14026 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
14027 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
14028 v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
14029 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
14030 q31 __builtin_mips_mulq_rs_w (q31, q31);
14031 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
14032 q31 __builtin_mips_mulq_s_w (q31, q31);
14033 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
14034 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
14035 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
14036 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
14037 i32 __builtin_mips_prepend (i32, i32, imm0_31);
14038 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
14039 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
14040 v4i8 __builtin_mips_shra_qb (v4i8, i32);
14041 v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
14042 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
14043 v2i16 __builtin_mips_shrl_ph (v2i16, i32);
14044 v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
14045 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
14046 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
14047 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
14048 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
14049 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
14050 q31 __builtin_mips_addqh_w (q31, q31);
14051 q31 __builtin_mips_addqh_r_w (q31, q31);
14052 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
14053 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
14054 q31 __builtin_mips_subqh_w (q31, q31);
14055 q31 __builtin_mips_subqh_r_w (q31, q31);
14056 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
14057 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
14058 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
14059 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
14060 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
14061 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
14062 @end smallexample
14065 @node MIPS Paired-Single Support
14066 @subsection MIPS Paired-Single Support
14068 The MIPS64 architecture includes a number of instructions that
14069 operate on pairs of single-precision floating-point values.
14070 Each pair is packed into a 64-bit floating-point register,
14071 with one element being designated the ``upper half'' and
14072 the other being designated the ``lower half''.
14074 GCC supports paired-single operations using both the generic
14075 vector extensions (@pxref{Vector Extensions}) and a collection of
14076 MIPS-specific built-in functions.  Both kinds of support are
14077 enabled by the @option{-mpaired-single} command-line option.
14079 The vector type associated with paired-single values is usually
14080 called @code{v2sf}.  It can be defined in C as follows:
14082 @smallexample
14083 typedef float v2sf __attribute__ ((vector_size (8)));
14084 @end smallexample
14086 @code{v2sf} values are initialized in the same way as aggregates.
14087 For example:
14089 @smallexample
14090 v2sf a = @{1.5, 9.1@};
14091 v2sf b;
14092 float e, f;
14093 b = (v2sf) @{e, f@};
14094 @end smallexample
14096 @emph{Note:} The CPU's endianness determines which value is stored in
14097 the upper half of a register and which value is stored in the lower half.
14098 On little-endian targets, the first value is the lower one and the second
14099 value is the upper one.  The opposite order applies to big-endian targets.
14100 For example, the code above sets the lower half of @code{a} to
14101 @code{1.5} on little-endian targets and @code{9.1} on big-endian targets.
14103 @node MIPS Loongson Built-in Functions
14104 @subsection MIPS Loongson Built-in Functions
14106 GCC provides intrinsics to access the SIMD instructions provided by the
14107 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
14108 available after inclusion of the @code{loongson.h} header file,
14109 operate on the following 64-bit vector types:
14111 @itemize
14112 @item @code{uint8x8_t}, a vector of eight unsigned 8-bit integers;
14113 @item @code{uint16x4_t}, a vector of four unsigned 16-bit integers;
14114 @item @code{uint32x2_t}, a vector of two unsigned 32-bit integers;
14115 @item @code{int8x8_t}, a vector of eight signed 8-bit integers;
14116 @item @code{int16x4_t}, a vector of four signed 16-bit integers;
14117 @item @code{int32x2_t}, a vector of two signed 32-bit integers.
14118 @end itemize
14120 The intrinsics provided are listed below; each is named after the
14121 machine instruction to which it corresponds, with suffixes added as
14122 appropriate to distinguish intrinsics that expand to the same machine
14123 instruction yet have different argument types.  Refer to the architecture
14124 documentation for a description of the functionality of each
14125 instruction.
14127 @smallexample
14128 int16x4_t packsswh (int32x2_t s, int32x2_t t);
14129 int8x8_t packsshb (int16x4_t s, int16x4_t t);
14130 uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
14131 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
14132 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
14133 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
14134 int32x2_t paddw_s (int32x2_t s, int32x2_t t);
14135 int16x4_t paddh_s (int16x4_t s, int16x4_t t);
14136 int8x8_t paddb_s (int8x8_t s, int8x8_t t);
14137 uint64_t paddd_u (uint64_t s, uint64_t t);
14138 int64_t paddd_s (int64_t s, int64_t t);
14139 int16x4_t paddsh (int16x4_t s, int16x4_t t);
14140 int8x8_t paddsb (int8x8_t s, int8x8_t t);
14141 uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
14142 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
14143 uint64_t pandn_ud (uint64_t s, uint64_t t);
14144 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
14145 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
14146 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
14147 int64_t pandn_sd (int64_t s, int64_t t);
14148 int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
14149 int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
14150 int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
14151 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
14152 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
14153 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
14154 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
14155 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
14156 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
14157 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
14158 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
14159 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
14160 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
14161 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
14162 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
14163 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
14164 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
14165 uint16x4_t pextrh_u (uint16x4_t s, int field);
14166 int16x4_t pextrh_s (int16x4_t s, int field);
14167 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
14168 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
14169 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
14170 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
14171 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
14172 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
14173 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
14174 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
14175 int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
14176 int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
14177 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
14178 int16x4_t pminsh (int16x4_t s, int16x4_t t);
14179 uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
14180 uint8x8_t pmovmskb_u (uint8x8_t s);
14181 int8x8_t pmovmskb_s (int8x8_t s);
14182 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
14183 int16x4_t pmulhh (int16x4_t s, int16x4_t t);
14184 int16x4_t pmullh (int16x4_t s, int16x4_t t);
14185 int64_t pmuluw (uint32x2_t s, uint32x2_t t);
14186 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
14187 uint16x4_t biadd (uint8x8_t s);
14188 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
14189 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
14190 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
14191 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
14192 int16x4_t psllh_s (int16x4_t s, uint8_t amount);
14193 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
14194 int32x2_t psllw_s (int32x2_t s, uint8_t amount);
14195 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
14196 int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
14197 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
14198 int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
14199 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
14200 int16x4_t psrah_s (int16x4_t s, uint8_t amount);
14201 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
14202 int32x2_t psraw_s (int32x2_t s, uint8_t amount);
14203 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
14204 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
14205 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
14206 int32x2_t psubw_s (int32x2_t s, int32x2_t t);
14207 int16x4_t psubh_s (int16x4_t s, int16x4_t t);
14208 int8x8_t psubb_s (int8x8_t s, int8x8_t t);
14209 uint64_t psubd_u (uint64_t s, uint64_t t);
14210 int64_t psubd_s (int64_t s, int64_t t);
14211 int16x4_t psubsh (int16x4_t s, int16x4_t t);
14212 int8x8_t psubsb (int8x8_t s, int8x8_t t);
14213 uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
14214 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
14215 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
14216 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
14217 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
14218 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
14219 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
14220 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
14221 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
14222 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
14223 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
14224 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
14225 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
14226 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
14227 @end smallexample
14229 @menu
14230 * Paired-Single Arithmetic::
14231 * Paired-Single Built-in Functions::
14232 * MIPS-3D Built-in Functions::
14233 @end menu
14235 @node Paired-Single Arithmetic
14236 @subsubsection Paired-Single Arithmetic
14238 The table below lists the @code{v2sf} operations for which hardware
14239 support exists.  @code{a}, @code{b} and @code{c} are @code{v2sf}
14240 values and @code{x} is an integral value.
14242 @multitable @columnfractions .50 .50
14243 @item C code @tab MIPS instruction
14244 @item @code{a + b} @tab @code{add.ps}
14245 @item @code{a - b} @tab @code{sub.ps}
14246 @item @code{-a} @tab @code{neg.ps}
14247 @item @code{a * b} @tab @code{mul.ps}
14248 @item @code{a * b + c} @tab @code{madd.ps}
14249 @item @code{a * b - c} @tab @code{msub.ps}
14250 @item @code{-(a * b + c)} @tab @code{nmadd.ps}
14251 @item @code{-(a * b - c)} @tab @code{nmsub.ps}
14252 @item @code{x ? a : b} @tab @code{movn.ps}/@code{movz.ps}
14253 @end multitable
14255 Note that the multiply-accumulate instructions can be disabled
14256 using the command-line option @code{-mno-fused-madd}.
14258 @node Paired-Single Built-in Functions
14259 @subsubsection Paired-Single Built-in Functions
14261 The following paired-single functions map directly to a particular
14262 MIPS instruction.  Please refer to the architecture specification
14263 for details on what each instruction does.
14265 @table @code
14266 @item v2sf __builtin_mips_pll_ps (v2sf, v2sf)
14267 Pair lower lower (@code{pll.ps}).
14269 @item v2sf __builtin_mips_pul_ps (v2sf, v2sf)
14270 Pair upper lower (@code{pul.ps}).
14272 @item v2sf __builtin_mips_plu_ps (v2sf, v2sf)
14273 Pair lower upper (@code{plu.ps}).
14275 @item v2sf __builtin_mips_puu_ps (v2sf, v2sf)
14276 Pair upper upper (@code{puu.ps}).
14278 @item v2sf __builtin_mips_cvt_ps_s (float, float)
14279 Convert pair to paired single (@code{cvt.ps.s}).
14281 @item float __builtin_mips_cvt_s_pl (v2sf)
14282 Convert pair lower to single (@code{cvt.s.pl}).
14284 @item float __builtin_mips_cvt_s_pu (v2sf)
14285 Convert pair upper to single (@code{cvt.s.pu}).
14287 @item v2sf __builtin_mips_abs_ps (v2sf)
14288 Absolute value (@code{abs.ps}).
14290 @item v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)
14291 Align variable (@code{alnv.ps}).
14293 @emph{Note:} The value of the third parameter must be 0 or 4
14294 modulo 8, otherwise the result is unpredictable.  Please read the
14295 instruction description for details.
14296 @end table
14298 The following multi-instruction functions are also available.
14299 In each case, @var{cond} can be any of the 16 floating-point conditions:
14300 @code{f}, @code{un}, @code{eq}, @code{ueq}, @code{olt}, @code{ult},
14301 @code{ole}, @code{ule}, @code{sf}, @code{ngle}, @code{seq}, @code{ngl},
14302 @code{lt}, @code{nge}, @code{le} or @code{ngt}.
14304 @table @code
14305 @item v2sf __builtin_mips_movt_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14306 @itemx v2sf __builtin_mips_movf_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14307 Conditional move based on floating-point comparison (@code{c.@var{cond}.ps},
14308 @code{movt.ps}/@code{movf.ps}).
14310 The @code{movt} functions return the value @var{x} computed by:
14312 @smallexample
14313 c.@var{cond}.ps @var{cc},@var{a},@var{b}
14314 mov.ps @var{x},@var{c}
14315 movt.ps @var{x},@var{d},@var{cc}
14316 @end smallexample
14318 The @code{movf} functions are similar but use @code{movf.ps} instead
14319 of @code{movt.ps}.
14321 @item int __builtin_mips_upper_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14322 @itemx int __builtin_mips_lower_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14323 Comparison of two paired-single values (@code{c.@var{cond}.ps},
14324 @code{bc1t}/@code{bc1f}).
14326 These functions compare @var{a} and @var{b} using @code{c.@var{cond}.ps}
14327 and return either the upper or lower half of the result.  For example:
14329 @smallexample
14330 v2sf a, b;
14331 if (__builtin_mips_upper_c_eq_ps (a, b))
14332   upper_halves_are_equal ();
14333 else
14334   upper_halves_are_unequal ();
14336 if (__builtin_mips_lower_c_eq_ps (a, b))
14337   lower_halves_are_equal ();
14338 else
14339   lower_halves_are_unequal ();
14340 @end smallexample
14341 @end table
14343 @node MIPS-3D Built-in Functions
14344 @subsubsection MIPS-3D Built-in Functions
14346 The MIPS-3D Application-Specific Extension (ASE) includes additional
14347 paired-single instructions that are designed to improve the performance
14348 of 3D graphics operations.  Support for these instructions is controlled
14349 by the @option{-mips3d} command-line option.
14351 The functions listed below map directly to a particular MIPS-3D
14352 instruction.  Please refer to the architecture specification for
14353 more details on what each instruction does.
14355 @table @code
14356 @item v2sf __builtin_mips_addr_ps (v2sf, v2sf)
14357 Reduction add (@code{addr.ps}).
14359 @item v2sf __builtin_mips_mulr_ps (v2sf, v2sf)
14360 Reduction multiply (@code{mulr.ps}).
14362 @item v2sf __builtin_mips_cvt_pw_ps (v2sf)
14363 Convert paired single to paired word (@code{cvt.pw.ps}).
14365 @item v2sf __builtin_mips_cvt_ps_pw (v2sf)
14366 Convert paired word to paired single (@code{cvt.ps.pw}).
14368 @item float __builtin_mips_recip1_s (float)
14369 @itemx double __builtin_mips_recip1_d (double)
14370 @itemx v2sf __builtin_mips_recip1_ps (v2sf)
14371 Reduced-precision reciprocal (sequence step 1) (@code{recip1.@var{fmt}}).
14373 @item float __builtin_mips_recip2_s (float, float)
14374 @itemx double __builtin_mips_recip2_d (double, double)
14375 @itemx v2sf __builtin_mips_recip2_ps (v2sf, v2sf)
14376 Reduced-precision reciprocal (sequence step 2) (@code{recip2.@var{fmt}}).
14378 @item float __builtin_mips_rsqrt1_s (float)
14379 @itemx double __builtin_mips_rsqrt1_d (double)
14380 @itemx v2sf __builtin_mips_rsqrt1_ps (v2sf)
14381 Reduced-precision reciprocal square root (sequence step 1)
14382 (@code{rsqrt1.@var{fmt}}).
14384 @item float __builtin_mips_rsqrt2_s (float, float)
14385 @itemx double __builtin_mips_rsqrt2_d (double, double)
14386 @itemx v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)
14387 Reduced-precision reciprocal square root (sequence step 2)
14388 (@code{rsqrt2.@var{fmt}}).
14389 @end table
14391 The following multi-instruction functions are also available.
14392 In each case, @var{cond} can be any of the 16 floating-point conditions:
14393 @code{f}, @code{un}, @code{eq}, @code{ueq}, @code{olt}, @code{ult},
14394 @code{ole}, @code{ule}, @code{sf}, @code{ngle}, @code{seq},
14395 @code{ngl}, @code{lt}, @code{nge}, @code{le} or @code{ngt}.
14397 @table @code
14398 @item int __builtin_mips_cabs_@var{cond}_s (float @var{a}, float @var{b})
14399 @itemx int __builtin_mips_cabs_@var{cond}_d (double @var{a}, double @var{b})
14400 Absolute comparison of two scalar values (@code{cabs.@var{cond}.@var{fmt}},
14401 @code{bc1t}/@code{bc1f}).
14403 These functions compare @var{a} and @var{b} using @code{cabs.@var{cond}.s}
14404 or @code{cabs.@var{cond}.d} and return the result as a boolean value.
14405 For example:
14407 @smallexample
14408 float a, b;
14409 if (__builtin_mips_cabs_eq_s (a, b))
14410   true ();
14411 else
14412   false ();
14413 @end smallexample
14415 @item int __builtin_mips_upper_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14416 @itemx int __builtin_mips_lower_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14417 Absolute comparison of two paired-single values (@code{cabs.@var{cond}.ps},
14418 @code{bc1t}/@code{bc1f}).
14420 These functions compare @var{a} and @var{b} using @code{cabs.@var{cond}.ps}
14421 and return either the upper or lower half of the result.  For example:
14423 @smallexample
14424 v2sf a, b;
14425 if (__builtin_mips_upper_cabs_eq_ps (a, b))
14426   upper_halves_are_equal ();
14427 else
14428   upper_halves_are_unequal ();
14430 if (__builtin_mips_lower_cabs_eq_ps (a, b))
14431   lower_halves_are_equal ();
14432 else
14433   lower_halves_are_unequal ();
14434 @end smallexample
14436 @item v2sf __builtin_mips_movt_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14437 @itemx v2sf __builtin_mips_movf_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14438 Conditional move based on absolute comparison (@code{cabs.@var{cond}.ps},
14439 @code{movt.ps}/@code{movf.ps}).
14441 The @code{movt} functions return the value @var{x} computed by:
14443 @smallexample
14444 cabs.@var{cond}.ps @var{cc},@var{a},@var{b}
14445 mov.ps @var{x},@var{c}
14446 movt.ps @var{x},@var{d},@var{cc}
14447 @end smallexample
14449 The @code{movf} functions are similar but use @code{movf.ps} instead
14450 of @code{movt.ps}.
14452 @item int __builtin_mips_any_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14453 @itemx int __builtin_mips_all_c_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14454 @itemx int __builtin_mips_any_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14455 @itemx int __builtin_mips_all_cabs_@var{cond}_ps (v2sf @var{a}, v2sf @var{b})
14456 Comparison of two paired-single values
14457 (@code{c.@var{cond}.ps}/@code{cabs.@var{cond}.ps},
14458 @code{bc1any2t}/@code{bc1any2f}).
14460 These functions compare @var{a} and @var{b} using @code{c.@var{cond}.ps}
14461 or @code{cabs.@var{cond}.ps}.  The @code{any} forms return true if either
14462 result is true and the @code{all} forms return true if both results are true.
14463 For example:
14465 @smallexample
14466 v2sf a, b;
14467 if (__builtin_mips_any_c_eq_ps (a, b))
14468   one_is_true ();
14469 else
14470   both_are_false ();
14472 if (__builtin_mips_all_c_eq_ps (a, b))
14473   both_are_true ();
14474 else
14475   one_is_false ();
14476 @end smallexample
14478 @item int __builtin_mips_any_c_@var{cond}_4s (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14479 @itemx int __builtin_mips_all_c_@var{cond}_4s (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14480 @itemx int __builtin_mips_any_cabs_@var{cond}_4s (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14481 @itemx int __builtin_mips_all_cabs_@var{cond}_4s (v2sf @var{a}, v2sf @var{b}, v2sf @var{c}, v2sf @var{d})
14482 Comparison of four paired-single values
14483 (@code{c.@var{cond}.ps}/@code{cabs.@var{cond}.ps},
14484 @code{bc1any4t}/@code{bc1any4f}).
14486 These functions use @code{c.@var{cond}.ps} or @code{cabs.@var{cond}.ps}
14487 to compare @var{a} with @var{b} and to compare @var{c} with @var{d}.
14488 The @code{any} forms return true if any of the four results are true
14489 and the @code{all} forms return true if all four results are true.
14490 For example:
14492 @smallexample
14493 v2sf a, b, c, d;
14494 if (__builtin_mips_any_c_eq_4s (a, b, c, d))
14495   some_are_true ();
14496 else
14497   all_are_false ();
14499 if (__builtin_mips_all_c_eq_4s (a, b, c, d))
14500   all_are_true ();
14501 else
14502   some_are_false ();
14503 @end smallexample
14504 @end table
14506 @node MIPS SIMD Architecture (MSA) Support
14507 @subsection MIPS SIMD Architecture (MSA) Support
14509 @menu
14510 * MIPS SIMD Architecture Built-in Functions::
14511 @end menu
14513 GCC provides intrinsics to access the SIMD instructions provided by the
14514 MSA MIPS SIMD Architecture.  The interface is made available by including
14515 @code{<msa.h>} and using @option{-mmsa -mhard-float -mfp64 -mnan=2008}.
14516 For each @code{__builtin_msa_*}, there is a shortened name of the intrinsic,
14517 @code{__msa_*}.
14519 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32- and
14520 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit floating point
14521 data elements.  The following vectors typedefs are included in @code{msa.h}:
14522 @itemize
14523 @item @code{v16i8}, a vector of sixteen signed 8-bit integers;
14524 @item @code{v16u8}, a vector of sixteen unsigned 8-bit integers;
14525 @item @code{v8i16}, a vector of eight signed 16-bit integers;
14526 @item @code{v8u16}, a vector of eight unsigned 16-bit integers;
14527 @item @code{v4i32}, a vector of four signed 32-bit integers;
14528 @item @code{v4u32}, a vector of four unsigned 32-bit integers;
14529 @item @code{v2i64}, a vector of two signed 64-bit integers;
14530 @item @code{v2u64}, a vector of two unsigned 64-bit integers;
14531 @item @code{v4f32}, a vector of four 32-bit floats;
14532 @item @code{v2f64}, a vector of two 64-bit doubles.
14533 @end itemize
14535 Instructions and corresponding built-ins may have additional restrictions and/or
14536 input/output values manipulated:
14537 @itemize
14538 @item @code{imm0_1}, an integer literal in range 0 to 1;
14539 @item @code{imm0_3}, an integer literal in range 0 to 3;
14540 @item @code{imm0_7}, an integer literal in range 0 to 7;
14541 @item @code{imm0_15}, an integer literal in range 0 to 15;
14542 @item @code{imm0_31}, an integer literal in range 0 to 31;
14543 @item @code{imm0_63}, an integer literal in range 0 to 63;
14544 @item @code{imm0_255}, an integer literal in range 0 to 255;
14545 @item @code{imm_n16_15}, an integer literal in range -16 to 15;
14546 @item @code{imm_n512_511}, an integer literal in range -512 to 511;
14547 @item @code{imm_n1024_1022}, an integer literal in range -512 to 511 left
14548 shifted by 1 bit, i.e., -1024, -1022, @dots{}, 1020, 1022;
14549 @item @code{imm_n2048_2044}, an integer literal in range -512 to 511 left
14550 shifted by 2 bits, i.e., -2048, -2044, @dots{}, 2040, 2044;
14551 @item @code{imm_n4096_4088}, an integer literal in range -512 to 511 left
14552 shifted by 3 bits, i.e., -4096, -4088, @dots{}, 4080, 4088;
14553 @item @code{imm1_4}, an integer literal in range 1 to 4;
14554 @item @code{i32, i64, u32, u64, f32, f64}, defined as follows:
14555 @end itemize
14557 @smallexample
14559 typedef int i32;
14560 #if __LONG_MAX__ == __LONG_LONG_MAX__
14561 typedef long i64;
14562 #else
14563 typedef long long i64;
14564 #endif
14566 typedef unsigned int u32;
14567 #if __LONG_MAX__ == __LONG_LONG_MAX__
14568 typedef unsigned long u64;
14569 #else
14570 typedef unsigned long long u64;
14571 #endif
14573 typedef double f64;
14574 typedef float f32;
14576 @end smallexample
14578 @node MIPS SIMD Architecture Built-in Functions
14579 @subsubsection MIPS SIMD Architecture Built-in Functions
14581 The intrinsics provided are listed below; each is named after the
14582 machine instruction.
14584 @smallexample
14585 v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
14586 v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
14587 v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
14588 v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
14590 v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
14591 v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
14592 v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
14593 v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
14595 v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
14596 v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
14597 v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
14598 v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
14600 v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
14601 v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
14602 v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
14603 v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
14605 v16i8 __builtin_msa_addv_b (v16i8, v16i8);
14606 v8i16 __builtin_msa_addv_h (v8i16, v8i16);
14607 v4i32 __builtin_msa_addv_w (v4i32, v4i32);
14608 v2i64 __builtin_msa_addv_d (v2i64, v2i64);
14610 v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
14611 v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
14612 v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
14613 v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
14615 v16u8 __builtin_msa_and_v (v16u8, v16u8);
14617 v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
14619 v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
14620 v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
14621 v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
14622 v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
14624 v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
14625 v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
14626 v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
14627 v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
14629 v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
14630 v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
14631 v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
14632 v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
14634 v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
14635 v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
14636 v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
14637 v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
14639 v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
14640 v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
14641 v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
14642 v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
14644 v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
14645 v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
14646 v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
14647 v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
14649 v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
14650 v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
14651 v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
14652 v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
14654 v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
14655 v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
14656 v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
14657 v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
14659 v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
14660 v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
14661 v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
14662 v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
14664 v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
14665 v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
14666 v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
14667 v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
14669 v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
14670 v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
14671 v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
14672 v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
14674 v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
14675 v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
14676 v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
14677 v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
14679 v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
14681 v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
14683 v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
14685 v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
14687 v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
14688 v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
14689 v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
14690 v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
14692 v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
14693 v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
14694 v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
14695 v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
14697 i32 __builtin_msa_bnz_b (v16u8);
14698 i32 __builtin_msa_bnz_h (v8u16);
14699 i32 __builtin_msa_bnz_w (v4u32);
14700 i32 __builtin_msa_bnz_d (v2u64);
14702 i32 __builtin_msa_bnz_v (v16u8);
14704 v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
14706 v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
14708 v16u8 __builtin_msa_bset_b (v16u8, v16u8);
14709 v8u16 __builtin_msa_bset_h (v8u16, v8u16);
14710 v4u32 __builtin_msa_bset_w (v4u32, v4u32);
14711 v2u64 __builtin_msa_bset_d (v2u64, v2u64);
14713 v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
14714 v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
14715 v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
14716 v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
14718 i32 __builtin_msa_bz_b (v16u8);
14719 i32 __builtin_msa_bz_h (v8u16);
14720 i32 __builtin_msa_bz_w (v4u32);
14721 i32 __builtin_msa_bz_d (v2u64);
14723 i32 __builtin_msa_bz_v (v16u8);
14725 v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
14726 v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
14727 v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
14728 v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
14730 v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
14731 v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
14732 v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
14733 v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
14735 i32 __builtin_msa_cfcmsa (imm0_31);
14737 v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
14738 v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
14739 v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
14740 v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
14742 v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
14743 v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
14744 v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
14745 v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
14747 v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
14748 v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
14749 v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
14750 v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
14752 v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
14753 v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
14754 v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
14755 v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
14757 v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
14758 v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
14759 v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
14760 v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
14762 v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
14763 v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
14764 v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
14765 v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
14767 v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
14768 v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
14769 v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
14770 v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
14772 v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
14773 v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
14774 v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
14775 v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
14777 i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
14778 i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
14779 i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
14780 i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
14782 u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
14783 u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
14784 u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
14785 u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
14787 void __builtin_msa_ctcmsa (imm0_31, i32);
14789 v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
14790 v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
14791 v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
14792 v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
14794 v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
14795 v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
14796 v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
14797 v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
14799 v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
14800 v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
14801 v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
14803 v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
14804 v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
14805 v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
14807 v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
14808 v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
14809 v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
14811 v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
14812 v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
14813 v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
14815 v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
14816 v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
14817 v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
14819 v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
14820 v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
14821 v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
14823 v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
14824 v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
14826 v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
14827 v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
14829 v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
14830 v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
14832 v4i32 __builtin_msa_fclass_w (v4f32);
14833 v2i64 __builtin_msa_fclass_d (v2f64);
14835 v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
14836 v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
14838 v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
14839 v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
14841 v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
14842 v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
14844 v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
14845 v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
14847 v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
14848 v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
14850 v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
14851 v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
14853 v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
14854 v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
14856 v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
14857 v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
14859 v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
14860 v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
14862 v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
14863 v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
14865 v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
14866 v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
14868 v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
14869 v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
14871 v4f32 __builtin_msa_fexupl_w (v8i16);
14872 v2f64 __builtin_msa_fexupl_d (v4f32);
14874 v4f32 __builtin_msa_fexupr_w (v8i16);
14875 v2f64 __builtin_msa_fexupr_d (v4f32);
14877 v4f32 __builtin_msa_ffint_s_w (v4i32);
14878 v2f64 __builtin_msa_ffint_s_d (v2i64);
14880 v4f32 __builtin_msa_ffint_u_w (v4u32);
14881 v2f64 __builtin_msa_ffint_u_d (v2u64);
14883 v4f32 __builtin_msa_ffql_w (v8i16);
14884 v2f64 __builtin_msa_ffql_d (v4i32);
14886 v4f32 __builtin_msa_ffqr_w (v8i16);
14887 v2f64 __builtin_msa_ffqr_d (v4i32);
14889 v16i8 __builtin_msa_fill_b (i32);
14890 v8i16 __builtin_msa_fill_h (i32);
14891 v4i32 __builtin_msa_fill_w (i32);
14892 v2i64 __builtin_msa_fill_d (i64);
14894 v4f32 __builtin_msa_flog2_w (v4f32);
14895 v2f64 __builtin_msa_flog2_d (v2f64);
14897 v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
14898 v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
14900 v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
14901 v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
14903 v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
14904 v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
14906 v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
14907 v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
14909 v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
14910 v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
14912 v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
14913 v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
14915 v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
14916 v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
14918 v4f32 __builtin_msa_frint_w (v4f32);
14919 v2f64 __builtin_msa_frint_d (v2f64);
14921 v4f32 __builtin_msa_frcp_w (v4f32);
14922 v2f64 __builtin_msa_frcp_d (v2f64);
14924 v4f32 __builtin_msa_frsqrt_w (v4f32);
14925 v2f64 __builtin_msa_frsqrt_d (v2f64);
14927 v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
14928 v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
14930 v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
14931 v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
14933 v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
14934 v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
14936 v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
14937 v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
14939 v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
14940 v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
14942 v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
14943 v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
14945 v4f32 __builtin_msa_fsqrt_w (v4f32);
14946 v2f64 __builtin_msa_fsqrt_d (v2f64);
14948 v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
14949 v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
14951 v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
14952 v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
14954 v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
14955 v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
14957 v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
14958 v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
14960 v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
14961 v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
14963 v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
14964 v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
14966 v4i32 __builtin_msa_ftint_s_w (v4f32);
14967 v2i64 __builtin_msa_ftint_s_d (v2f64);
14969 v4u32 __builtin_msa_ftint_u_w (v4f32);
14970 v2u64 __builtin_msa_ftint_u_d (v2f64);
14972 v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
14973 v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
14975 v4i32 __builtin_msa_ftrunc_s_w (v4f32);
14976 v2i64 __builtin_msa_ftrunc_s_d (v2f64);
14978 v4u32 __builtin_msa_ftrunc_u_w (v4f32);
14979 v2u64 __builtin_msa_ftrunc_u_d (v2f64);
14981 v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
14982 v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
14983 v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
14985 v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
14986 v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
14987 v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
14989 v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
14990 v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
14991 v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
14993 v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
14994 v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
14995 v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
14997 v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
14998 v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
14999 v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
15000 v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
15002 v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
15003 v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
15004 v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
15005 v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
15007 v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
15008 v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
15009 v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
15010 v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
15012 v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
15013 v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
15014 v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
15015 v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
15017 v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
15018 v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
15019 v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
15020 v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
15022 v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
15023 v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
15024 v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
15025 v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
15027 v16i8 __builtin_msa_ld_b (void *, imm_n512_511);
15028 v8i16 __builtin_msa_ld_h (void *, imm_n1024_1022);
15029 v4i32 __builtin_msa_ld_w (void *, imm_n2048_2044);
15030 v2i64 __builtin_msa_ld_d (void *, imm_n4096_4088);
15032 v16i8 __builtin_msa_ldi_b (imm_n512_511);
15033 v8i16 __builtin_msa_ldi_h (imm_n512_511);
15034 v4i32 __builtin_msa_ldi_w (imm_n512_511);
15035 v2i64 __builtin_msa_ldi_d (imm_n512_511);
15037 v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
15038 v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
15040 v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
15041 v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
15043 v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
15044 v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
15045 v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
15046 v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
15048 v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
15049 v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
15050 v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
15051 v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
15053 v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
15054 v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
15055 v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
15056 v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
15058 v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
15059 v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
15060 v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
15061 v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
15063 v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
15064 v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
15065 v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
15066 v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
15068 v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
15069 v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
15070 v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
15071 v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
15073 v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
15074 v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
15075 v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
15076 v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
15078 v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
15079 v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
15080 v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
15081 v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
15083 v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
15084 v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
15085 v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
15086 v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
15088 v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
15089 v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
15090 v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
15091 v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
15093 v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
15094 v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
15095 v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
15096 v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
15098 v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
15099 v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
15100 v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
15101 v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
15103 v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
15104 v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
15105 v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
15106 v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
15108 v16i8 __builtin_msa_move_v (v16i8);
15110 v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
15111 v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
15113 v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
15114 v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
15116 v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
15117 v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
15118 v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
15119 v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
15121 v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
15122 v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
15124 v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
15125 v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
15127 v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
15128 v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
15129 v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
15130 v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
15132 v16i8 __builtin_msa_nloc_b (v16i8);
15133 v8i16 __builtin_msa_nloc_h (v8i16);
15134 v4i32 __builtin_msa_nloc_w (v4i32);
15135 v2i64 __builtin_msa_nloc_d (v2i64);
15137 v16i8 __builtin_msa_nlzc_b (v16i8);
15138 v8i16 __builtin_msa_nlzc_h (v8i16);
15139 v4i32 __builtin_msa_nlzc_w (v4i32);
15140 v2i64 __builtin_msa_nlzc_d (v2i64);
15142 v16u8 __builtin_msa_nor_v (v16u8, v16u8);
15144 v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
15146 v16u8 __builtin_msa_or_v (v16u8, v16u8);
15148 v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
15150 v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
15151 v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
15152 v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
15153 v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
15155 v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
15156 v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
15157 v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
15158 v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
15160 v16i8 __builtin_msa_pcnt_b (v16i8);
15161 v8i16 __builtin_msa_pcnt_h (v8i16);
15162 v4i32 __builtin_msa_pcnt_w (v4i32);
15163 v2i64 __builtin_msa_pcnt_d (v2i64);
15165 v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
15166 v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
15167 v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
15168 v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
15170 v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
15171 v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
15172 v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
15173 v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
15175 v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
15176 v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
15177 v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
15179 v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
15180 v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
15181 v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
15182 v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
15184 v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
15185 v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
15186 v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
15187 v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
15189 v16i8 __builtin_msa_sll_b (v16i8, v16i8);
15190 v8i16 __builtin_msa_sll_h (v8i16, v8i16);
15191 v4i32 __builtin_msa_sll_w (v4i32, v4i32);
15192 v2i64 __builtin_msa_sll_d (v2i64, v2i64);
15194 v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
15195 v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
15196 v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
15197 v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
15199 v16i8 __builtin_msa_splat_b (v16i8, i32);
15200 v8i16 __builtin_msa_splat_h (v8i16, i32);
15201 v4i32 __builtin_msa_splat_w (v4i32, i32);
15202 v2i64 __builtin_msa_splat_d (v2i64, i32);
15204 v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
15205 v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
15206 v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
15207 v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
15209 v16i8 __builtin_msa_sra_b (v16i8, v16i8);
15210 v8i16 __builtin_msa_sra_h (v8i16, v8i16);
15211 v4i32 __builtin_msa_sra_w (v4i32, v4i32);
15212 v2i64 __builtin_msa_sra_d (v2i64, v2i64);
15214 v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
15215 v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
15216 v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
15217 v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
15219 v16i8 __builtin_msa_srar_b (v16i8, v16i8);
15220 v8i16 __builtin_msa_srar_h (v8i16, v8i16);
15221 v4i32 __builtin_msa_srar_w (v4i32, v4i32);
15222 v2i64 __builtin_msa_srar_d (v2i64, v2i64);
15224 v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
15225 v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
15226 v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
15227 v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
15229 v16i8 __builtin_msa_srl_b (v16i8, v16i8);
15230 v8i16 __builtin_msa_srl_h (v8i16, v8i16);
15231 v4i32 __builtin_msa_srl_w (v4i32, v4i32);
15232 v2i64 __builtin_msa_srl_d (v2i64, v2i64);
15234 v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
15235 v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
15236 v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
15237 v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
15239 v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
15240 v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
15241 v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
15242 v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
15244 v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
15245 v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
15246 v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
15247 v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
15249 void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
15250 void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
15251 void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
15252 void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
15254 v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
15255 v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
15256 v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
15257 v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
15259 v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
15260 v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
15261 v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
15262 v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
15264 v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
15265 v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
15266 v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
15267 v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
15269 v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
15270 v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
15271 v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
15272 v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
15274 v16i8 __builtin_msa_subv_b (v16i8, v16i8);
15275 v8i16 __builtin_msa_subv_h (v8i16, v8i16);
15276 v4i32 __builtin_msa_subv_w (v4i32, v4i32);
15277 v2i64 __builtin_msa_subv_d (v2i64, v2i64);
15279 v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
15280 v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
15281 v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
15282 v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
15284 v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
15285 v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
15286 v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
15287 v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
15289 v16u8 __builtin_msa_xor_v (v16u8, v16u8);
15291 v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
15292 @end smallexample
15294 @node Other MIPS Built-in Functions
15295 @subsection Other MIPS Built-in Functions
15297 GCC provides other MIPS-specific built-in functions:
15299 @table @code
15300 @item void __builtin_mips_cache (int @var{op}, const volatile void *@var{addr})
15301 Insert a @samp{cache} instruction with operands @var{op} and @var{addr}.
15302 GCC defines the preprocessor macro @code{___GCC_HAVE_BUILTIN_MIPS_CACHE}
15303 when this function is available.
15305 @item unsigned int __builtin_mips_get_fcsr (void)
15306 @itemx void __builtin_mips_set_fcsr (unsigned int @var{value})
15307 Get and set the contents of the floating-point control and status register
15308 (FPU control register 31).  These functions are only available in hard-float
15309 code but can be called in both MIPS16 and non-MIPS16 contexts.
15311 @code{__builtin_mips_set_fcsr} can be used to change any bit of the
15312 register except the condition codes, which GCC assumes are preserved.
15313 @end table
15315 @node MSP430 Built-in Functions
15316 @subsection MSP430 Built-in Functions
15318 GCC provides a couple of special builtin functions to aid in the
15319 writing of interrupt handlers in C.
15321 @table @code
15322 @item __bic_SR_register_on_exit (int @var{mask})
15323 This clears the indicated bits in the saved copy of the status register
15324 currently residing on the stack.  This only works inside interrupt
15325 handlers and the changes to the status register will only take affect
15326 once the handler returns.
15328 @item __bis_SR_register_on_exit (int @var{mask})
15329 This sets the indicated bits in the saved copy of the status register
15330 currently residing on the stack.  This only works inside interrupt
15331 handlers and the changes to the status register will only take affect
15332 once the handler returns.
15334 @item __delay_cycles (long long @var{cycles})
15335 This inserts an instruction sequence that takes exactly @var{cycles}
15336 cycles (between 0 and about 17E9) to complete.  The inserted sequence
15337 may use jumps, loops, or no-ops, and does not interfere with any other
15338 instructions.  Note that @var{cycles} must be a compile-time constant
15339 integer - that is, you must pass a number, not a variable that may be
15340 optimized to a constant later.  The number of cycles delayed by this
15341 builtin is exact.
15342 @end table
15344 @node NDS32 Built-in Functions
15345 @subsection NDS32 Built-in Functions
15347 These built-in functions are available for the NDS32 target:
15349 @deftypefn {Built-in Function} void __builtin_nds32_isync (int *@var{addr})
15350 Insert an ISYNC instruction into the instruction stream where
15351 @var{addr} is an instruction address for serialization.
15352 @end deftypefn
15354 @deftypefn {Built-in Function} void __builtin_nds32_isb (void)
15355 Insert an ISB instruction into the instruction stream.
15356 @end deftypefn
15358 @deftypefn {Built-in Function} int __builtin_nds32_mfsr (int @var{sr})
15359 Return the content of a system register which is mapped by @var{sr}.
15360 @end deftypefn
15362 @deftypefn {Built-in Function} int __builtin_nds32_mfusr (int @var{usr})
15363 Return the content of a user space register which is mapped by @var{usr}.
15364 @end deftypefn
15366 @deftypefn {Built-in Function} void __builtin_nds32_mtsr (int @var{value}, int @var{sr})
15367 Move the @var{value} to a system register which is mapped by @var{sr}.
15368 @end deftypefn
15370 @deftypefn {Built-in Function} void __builtin_nds32_mtusr (int @var{value}, int @var{usr})
15371 Move the @var{value} to a user space register which is mapped by @var{usr}.
15372 @end deftypefn
15374 @deftypefn {Built-in Function} void __builtin_nds32_setgie_en (void)
15375 Enable global interrupt.
15376 @end deftypefn
15378 @deftypefn {Built-in Function} void __builtin_nds32_setgie_dis (void)
15379 Disable global interrupt.
15380 @end deftypefn
15382 @node picoChip Built-in Functions
15383 @subsection picoChip Built-in Functions
15385 GCC provides an interface to selected machine instructions from the
15386 picoChip instruction set.
15388 @table @code
15389 @item int __builtin_sbc (int @var{value})
15390 Sign bit count.  Return the number of consecutive bits in @var{value}
15391 that have the same value as the sign bit.  The result is the number of
15392 leading sign bits minus one, giving the number of redundant sign bits in
15393 @var{value}.
15395 @item int __builtin_byteswap (int @var{value})
15396 Byte swap.  Return the result of swapping the upper and lower bytes of
15397 @var{value}.
15399 @item int __builtin_brev (int @var{value})
15400 Bit reversal.  Return the result of reversing the bits in
15401 @var{value}.  Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1,
15402 and so on.
15404 @item int __builtin_adds (int @var{x}, int @var{y})
15405 Saturating addition.  Return the result of adding @var{x} and @var{y},
15406 storing the value 32767 if the result overflows.
15408 @item int __builtin_subs (int @var{x}, int @var{y})
15409 Saturating subtraction.  Return the result of subtracting @var{y} from
15410 @var{x}, storing the value @minus{}32768 if the result overflows.
15412 @item void __builtin_halt (void)
15413 Halt.  The processor stops execution.  This built-in is useful for
15414 implementing assertions.
15416 @end table
15418 @node PowerPC Built-in Functions
15419 @subsection PowerPC Built-in Functions
15421 The following built-in functions are always available and can be used to
15422 check the PowerPC target platform type:
15424 @deftypefn {Built-in Function} void __builtin_cpu_init (void)
15425 This function is a @code{nop} on the PowerPC platform and is included solely
15426 to maintain API compatibility with the x86 builtins.
15427 @end deftypefn
15429 @deftypefn {Built-in Function} int __builtin_cpu_is (const char *@var{cpuname})
15430 This function returns a value of @code{1} if the run-time CPU is of type
15431 @var{cpuname} and returns @code{0} otherwise
15433 The @code{__builtin_cpu_is} function requires GLIBC 2.23 or newer
15434 which exports the hardware capability bits.  GCC defines the macro
15435 @code{__BUILTIN_CPU_SUPPORTS__} if the @code{__builtin_cpu_supports}
15436 built-in function is fully supported.
15438 If GCC was configured to use a GLIBC before 2.23, the built-in
15439 function @code{__builtin_cpu_is} always returns a 0 and the compiler
15440 issues a warning.
15442 The following CPU names can be detected:
15444 @table @samp
15445 @item power9
15446 IBM POWER9 Server CPU.
15447 @item power8
15448 IBM POWER8 Server CPU.
15449 @item power7
15450 IBM POWER7 Server CPU.
15451 @item power6x
15452 IBM POWER6 Server CPU (RAW mode).
15453 @item power6
15454 IBM POWER6 Server CPU (Architected mode).
15455 @item power5+
15456 IBM POWER5+ Server CPU.
15457 @item power5
15458 IBM POWER5 Server CPU.
15459 @item ppc970
15460 IBM 970 Server CPU (ie, Apple G5).
15461 @item power4
15462 IBM POWER4 Server CPU.
15463 @item ppca2
15464 IBM A2 64-bit Embedded CPU
15465 @item ppc476
15466 IBM PowerPC 476FP 32-bit Embedded CPU.
15467 @item ppc464
15468 IBM PowerPC 464 32-bit Embedded CPU.
15469 @item ppc440
15470 PowerPC 440 32-bit Embedded CPU.
15471 @item ppc405
15472 PowerPC 405 32-bit Embedded CPU.
15473 @item ppc-cell-be
15474 IBM PowerPC Cell Broadband Engine Architecture CPU.
15475 @end table
15477 Here is an example:
15478 @smallexample
15479 #ifdef __BUILTIN_CPU_SUPPORTS__
15480   if (__builtin_cpu_is ("power8"))
15481     @{
15482        do_power8 (); // POWER8 specific implementation.
15483     @}
15484   else
15485 #endif
15486     @{
15487        do_generic (); // Generic implementation.
15488     @}
15489 @end smallexample
15490 @end deftypefn
15492 @deftypefn {Built-in Function} int __builtin_cpu_supports (const char *@var{feature})
15493 This function returns a value of @code{1} if the run-time CPU supports the HWCAP
15494 feature @var{feature} and returns @code{0} otherwise.
15496 The @code{__builtin_cpu_supports} function requires GLIBC 2.23 or
15497 newer which exports the hardware capability bits.  GCC defines the
15498 macro @code{__BUILTIN_CPU_SUPPORTS__} if the
15499 @code{__builtin_cpu_supports} built-in function is fully supported.
15501 If GCC was configured to use a GLIBC before 2.23, the built-in
15502 function @code{__builtin_cpu_suports} always returns a 0 and the
15503 compiler issues a warning.
15505 The following features can be
15506 detected:
15508 @table @samp
15509 @item 4xxmac
15510 4xx CPU has a Multiply Accumulator.
15511 @item altivec
15512 CPU has a SIMD/Vector Unit.
15513 @item arch_2_05
15514 CPU supports ISA 2.05 (eg, POWER6)
15515 @item arch_2_06
15516 CPU supports ISA 2.06 (eg, POWER7)
15517 @item arch_2_07
15518 CPU supports ISA 2.07 (eg, POWER8)
15519 @item arch_3_00
15520 CPU supports ISA 3.0 (eg, POWER9)
15521 @item archpmu
15522 CPU supports the set of compatible performance monitoring events.
15523 @item booke
15524 CPU supports the Embedded ISA category.
15525 @item cellbe
15526 CPU has a CELL broadband engine.
15527 @item dfp
15528 CPU has a decimal floating point unit.
15529 @item dscr
15530 CPU supports the data stream control register.
15531 @item ebb
15532 CPU supports event base branching.
15533 @item efpdouble
15534 CPU has a SPE double precision floating point unit.
15535 @item efpsingle
15536 CPU has a SPE single precision floating point unit.
15537 @item fpu
15538 CPU has a floating point unit.
15539 @item htm
15540 CPU has hardware transaction memory instructions.
15541 @item htm-nosc
15542 Kernel aborts hardware transactions when a syscall is made.
15543 @item ic_snoop
15544 CPU supports icache snooping capabilities.
15545 @item ieee128
15546 CPU supports 128-bit IEEE binary floating point instructions.
15547 @item isel
15548 CPU supports the integer select instruction.
15549 @item mmu
15550 CPU has a memory management unit.
15551 @item notb
15552 CPU does not have a timebase (eg, 601 and 403gx).
15553 @item pa6t
15554 CPU supports the PA Semi 6T CORE ISA.
15555 @item power4
15556 CPU supports ISA 2.00 (eg, POWER4)
15557 @item power5
15558 CPU supports ISA 2.02 (eg, POWER5)
15559 @item power5+
15560 CPU supports ISA 2.03 (eg, POWER5+)
15561 @item power6x
15562 CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and mftgpr.
15563 @item ppc32
15564 CPU supports 32-bit mode execution.
15565 @item ppc601
15566 CPU supports the old POWER ISA (eg, 601)
15567 @item ppc64
15568 CPU supports 64-bit mode execution.
15569 @item ppcle
15570 CPU supports a little-endian mode that uses address swizzling.
15571 @item smt
15572 CPU support simultaneous multi-threading.
15573 @item spe
15574 CPU has a signal processing extension unit.
15575 @item tar
15576 CPU supports the target address register.
15577 @item true_le
15578 CPU supports true little-endian mode.
15579 @item ucache
15580 CPU has unified I/D cache.
15581 @item vcrypto
15582 CPU supports the vector cryptography instructions.
15583 @item vsx
15584 CPU supports the vector-scalar extension.
15585 @end table
15587 Here is an example:
15588 @smallexample
15589 #ifdef __BUILTIN_CPU_SUPPORTS__
15590   if (__builtin_cpu_supports ("fpu"))
15591     @{
15592        asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
15593     @}
15594   else
15595 #endif
15596     @{
15597        dst = __fadd (src1, src2); // Software FP addition function.
15598     @}
15599 @end smallexample
15600 @end deftypefn
15602 These built-in functions are available for the PowerPC family of
15603 processors:
15604 @smallexample
15605 float __builtin_recipdivf (float, float);
15606 float __builtin_rsqrtf (float);
15607 double __builtin_recipdiv (double, double);
15608 double __builtin_rsqrt (double);
15609 uint64_t __builtin_ppc_get_timebase ();
15610 unsigned long __builtin_ppc_mftb ();
15611 double __builtin_unpack_longdouble (long double, int);
15612 long double __builtin_pack_longdouble (double, double);
15613 @end smallexample
15615 The @code{vec_rsqrt}, @code{__builtin_rsqrt}, and
15616 @code{__builtin_rsqrtf} functions generate multiple instructions to
15617 implement the reciprocal sqrt functionality using reciprocal sqrt
15618 estimate instructions.
15620 The @code{__builtin_recipdiv}, and @code{__builtin_recipdivf}
15621 functions generate multiple instructions to implement division using
15622 the reciprocal estimate instructions.
15624 The @code{__builtin_ppc_get_timebase} and @code{__builtin_ppc_mftb}
15625 functions generate instructions to read the Time Base Register.  The
15626 @code{__builtin_ppc_get_timebase} function may generate multiple
15627 instructions and always returns the 64 bits of the Time Base Register.
15628 The @code{__builtin_ppc_mftb} function always generates one instruction and
15629 returns the Time Base Register value as an unsigned long, throwing away
15630 the most significant word on 32-bit environments.
15632 Additional built-in functions are available for the 64-bit PowerPC
15633 family of processors, for efficient use of 128-bit floating point
15634 (@code{__float128}) values.
15636 Previous versions of GCC supported some 'q' builtins for IEEE 128-bit
15637 floating point.  These functions are now mapped into the equivalent
15638 'f128' builtin functions.
15640 @smallexample
15641 __builtin_fabsq is mapped into __builtin_fabsf128
15642 __builtin_copysignq is mapped into __builtin_copysignf128
15643 __builtin_infq is mapped into __builtin_inff128
15644 __builtin_huge_valq is mapped into __builtin_huge_valf128
15645 __builtin_nanq is mapped into __builtin_nanf128
15646 __builtin_nansq is mapped into __builtin_nansf128
15647 @end smallexample
15649 The following built-in functions are available on Linux 64-bit systems
15650 that use the ISA 3.0 instruction set.
15652 @table @code
15653 @item __float128 __builtin_sqrtf128 (__float128)
15654 Perform a 128-bit IEEE floating point square root operation.
15655 @findex __builtin_sqrtf128
15657 @item __float128 __builtin_fmaf128 (__float128, __float128, __float128)
15658 Perform a 128-bit IEEE floating point fused multiply and add operation.
15659 @findex __builtin_fmaf128
15661 @item __float128 __builtin_addf128_round_to_odd (__float128, __float128)
15662 Perform a 128-bit IEEE floating point add using round to odd as the
15663 rounding mode.
15664 @findex __builtin_addf128_round_to_odd
15666 @item __float128 __builtin_subf128_round_to_odd (__float128, __float128)
15667 Perform a 128-bit IEEE floating point subtract using round to odd as
15668 the rounding mode.
15669 @findex __builtin_subf128_round_to_odd
15671 @item __float128 __builtin_mulf128_round_to_odd (__float128, __float128)
15672 Perform a 128-bit IEEE floating point multiply using round to odd as
15673 the rounding mode.
15674 @findex __builtin_mulf128_round_to_odd
15676 @item __float128 __builtin_divf128_round_to_odd (__float128, __float128)
15677 Perform a 128-bit IEEE floating point divide using round to odd as
15678 the rounding mode.
15679 @findex __builtin_divf128_round_to_odd
15681 @item __float128 __builtin_sqrtf128_round_to_odd (__float128)
15682 Perform a 128-bit IEEE floating point square root using round to odd
15683 as the rounding mode.
15684 @findex __builtin_sqrtf128_round_to_odd
15686 @item __float128 __builtin_fmaf128 (__float128, __float128, __float128)
15687 Perform a 128-bit IEEE floating point fused multiply and add operation
15688 using round to odd as the rounding mode.
15689 @findex __builtin_fmaf128_round_to_odd
15691 @item double __builtin_truncf128_round_to_odd (__float128)
15692 Convert a 128-bit IEEE floating point value to @code{double} using
15693 round to odd as the rounding mode.
15694 @findex __builtin_truncf128_round_to_odd
15695 @end table
15697 The following built-in functions are available for the PowerPC family
15698 of processors, starting with ISA 2.05 or later (@option{-mcpu=power6}
15699 or @option{-mcmpb}):
15700 @smallexample
15701 unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
15702 unsigned int __builtin_cmpb (unsigned int, unsigned int);
15703 @end smallexample
15705 The @code{__builtin_cmpb} function
15706 performs a byte-wise compare on the contents of its two arguments,
15707 returning the result of the byte-wise comparison as the returned
15708 value.  For each byte comparison, the corresponding byte of the return
15709 value holds 0xff if the input bytes are equal and 0 if the input bytes
15710 are not equal.  If either of the arguments to this built-in function
15711 is wider than 32 bits, the function call expands into the form that
15712 expects @code{unsigned long long int} arguments
15713 which is only available on 64-bit targets.
15715 The following built-in functions are available for the PowerPC family
15716 of processors, starting with ISA 2.06 or later (@option{-mcpu=power7}
15717 or @option{-mpopcntd}):
15718 @smallexample
15719 long __builtin_bpermd (long, long);
15720 int __builtin_divwe (int, int);
15721 int __builtin_divweo (int, int);
15722 unsigned int __builtin_divweu (unsigned int, unsigned int);
15723 unsigned int __builtin_divweuo (unsigned int, unsigned int);
15724 long __builtin_divde (long, long);
15725 long __builtin_divdeo (long, long);
15726 unsigned long __builtin_divdeu (unsigned long, unsigned long);
15727 unsigned long __builtin_divdeuo (unsigned long, unsigned long);
15728 unsigned int cdtbcd (unsigned int);
15729 unsigned int cbcdtd (unsigned int);
15730 unsigned int addg6s (unsigned int, unsigned int);
15731 @end smallexample
15733 The @code{__builtin_divde}, @code{__builtin_divdeo},
15734 @code{__builtin_divdeu}, @code{__builtin_divdeou} functions require a
15735 64-bit environment support ISA 2.06 or later.
15737 The following built-in functions are available for the PowerPC family
15738 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
15739 @smallexample
15740 long long __builtin_darn (void);
15741 long long __builtin_darn_raw (void);
15742 int __builtin_darn_32 (void);
15744 unsigned int scalar_extract_exp (double source);
15745 unsigned long long int scalar_extract_exp (__ieee128 source);
15747 unsigned long long int scalar_extract_sig (double source);
15748 unsigned __int128 scalar_extract_sig (__ieee128 source);
15750 double
15751 scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent);
15752 double
15753 scalar_insert_exp (double significand, unsigned long long int exponent);
15755 ieee_128
15756 scalar_insert_exp (unsigned __int128 significand, unsigned long long int exponent);
15757 ieee_128
15758 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
15760 int scalar_cmp_exp_gt (double arg1, double arg2);
15761 int scalar_cmp_exp_lt (double arg1, double arg2);
15762 int scalar_cmp_exp_eq (double arg1, double arg2);
15763 int scalar_cmp_exp_unordered (double arg1, double arg2);
15765 bool scalar_test_data_class (float source, const int condition);
15766 bool scalar_test_data_class (double source, const int condition);
15767 bool scalar_test_data_class (__ieee128 source, const int condition);
15769 bool scalar_test_neg (float source);
15770 bool scalar_test_neg (double source);
15771 bool scalar_test_neg (__ieee128 source);
15773 int __builtin_byte_in_set (unsigned char u, unsigned long long set);
15774 int __builtin_byte_in_range (unsigned char u, unsigned int range);
15775 int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
15777 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
15778 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
15779 int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
15780 int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
15782 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
15783 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
15784 int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
15785 int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
15787 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
15788 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
15789 int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
15790 int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
15792 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
15793 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
15794 int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
15795 int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
15796 @end smallexample
15798 The @code{__builtin_darn} and @code{__builtin_darn_raw}
15799 functions require a
15800 64-bit environment supporting ISA 3.0 or later.
15801 The @code{__builtin_darn} function provides a 64-bit conditioned
15802 random number.  The @code{__builtin_darn_raw} function provides a
15803 64-bit raw random number.  The @code{__builtin_darn_32} function
15804 provides a 32-bit random number.
15806 The @code{scalar_extract_exp} and @code{scalar_extract_sig}
15807 functions require a 64-bit environment supporting ISA 3.0 or later.
15808 The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in
15809 functions return the significand and the biased exponent value
15810 respectively of their @code{source} arguments.
15811 When supplied with a 64-bit @code{source} argument, the
15812 result returned by @code{scalar_extract_sig} has
15813 the @code{0x0010000000000000} bit set if the
15814 function's @code{source} argument is in normalized form.
15815 Otherwise, this bit is set to 0.
15816 When supplied with a 128-bit @code{source} argument, the
15817 @code{0x00010000000000000000000000000000} bit of the result is
15818 treated similarly.
15819 Note that the sign of the significand is not represented in the result
15820 returned from the @code{scalar_extract_sig} function.  Use the
15821 @code{scalar_test_neg} function to test the sign of its @code{double}
15822 argument.
15824 The @code{scalar_insert_exp}
15825 functions require a 64-bit environment supporting ISA 3.0 or later.
15826 When supplied with a 64-bit first argument, the
15827 @code{scalar_insert_exp} built-in function returns a double-precision
15828 floating point value that is constructed by assembling the values of its
15829 @code{significand} and @code{exponent} arguments.  The sign of the
15830 result is copied from the most significant bit of the
15831 @code{significand} argument.  The significand and exponent components
15832 of the result are composed of the least significant 11 bits of the
15833 @code{exponent} argument and the least significant 52 bits of the
15834 @code{significand} argument respectively.
15836 When supplied with a 128-bit first argument, the
15837 @code{scalar_insert_exp} built-in function returns a quad-precision
15838 ieee floating point value.  The sign bit of the result is copied from
15839 the most significant bit of the @code{significand} argument.
15840 The significand and exponent components of the result are composed of
15841 the least significant 15 bits of the @code{exponent} argument and the
15842 least significant 112 bits of the @code{significand} argument respectively.
15844 The @code{scalar_cmp_exp_gt}, @code{scalar_cmp_exp_lt},
15845 @code{scalar_cmp_exp_eq}, and @code{scalar_cmp_exp_unordered} built-in
15846 functions return a non-zero value if @code{arg1} is greater than, less
15847 than, equal to, or not comparable to @code{arg2} respectively.  The
15848 arguments are not comparable if one or the other equals NaN (not a
15849 number). 
15851 The @code{scalar_test_data_class} built-in function returns 1
15852 if any of the condition tests enabled by the value of the
15853 @code{condition} variable are true, and 0 otherwise.  The
15854 @code{condition} argument must be a compile-time constant integer with
15855 value not exceeding 127.  The
15856 @code{condition} argument is encoded as a bitmask with each bit
15857 enabling the testing of a different condition, as characterized by the
15858 following:
15859 @smallexample
15860 0x40    Test for NaN
15861 0x20    Test for +Infinity
15862 0x10    Test for -Infinity
15863 0x08    Test for +Zero
15864 0x04    Test for -Zero
15865 0x02    Test for +Denormal
15866 0x01    Test for -Denormal
15867 @end smallexample
15869 The @code{scalar_test_neg} built-in function returns 1 if its
15870 @code{source} argument holds a negative value, 0 otherwise.
15872 The @code{__builtin_byte_in_set} function requires a
15873 64-bit environment supporting ISA 3.0 or later.  This function returns
15874 a non-zero value if and only if its @code{u} argument exactly equals one of
15875 the eight bytes contained within its 64-bit @code{set} argument.
15877 The @code{__builtin_byte_in_range} and
15878 @code{__builtin_byte_in_either_range} require an environment
15879 supporting ISA 3.0 or later.  For these two functions, the
15880 @code{range} argument is encoded as 4 bytes, organized as
15881 @code{hi_1:lo_1:hi_2:lo_2}.
15882 The @code{__builtin_byte_in_range} function returns a
15883 non-zero value if and only if its @code{u} argument is within the
15884 range bounded between @code{lo_2} and @code{hi_2} inclusive.
15885 The @code{__builtin_byte_in_either_range} function returns non-zero if
15886 and only if its @code{u} argument is within either the range bounded
15887 between @code{lo_1} and @code{hi_1} inclusive or the range bounded
15888 between @code{lo_2} and @code{hi_2} inclusive.
15890 The @code{__builtin_dfp_dtstsfi_lt} function returns a non-zero value
15891 if and only if the number of signficant digits of its @code{value} argument
15892 is less than its @code{comparison} argument.  The
15893 @code{__builtin_dfp_dtstsfi_lt_dd} and
15894 @code{__builtin_dfp_dtstsfi_lt_td} functions behave similarly, but
15895 require that the type of the @code{value} argument be
15896 @code{__Decimal64} and @code{__Decimal128} respectively.
15898 The @code{__builtin_dfp_dtstsfi_gt} function returns a non-zero value
15899 if and only if the number of signficant digits of its @code{value} argument
15900 is greater than its @code{comparison} argument.  The
15901 @code{__builtin_dfp_dtstsfi_gt_dd} and
15902 @code{__builtin_dfp_dtstsfi_gt_td} functions behave similarly, but
15903 require that the type of the @code{value} argument be
15904 @code{__Decimal64} and @code{__Decimal128} respectively.
15906 The @code{__builtin_dfp_dtstsfi_eq} function returns a non-zero value
15907 if and only if the number of signficant digits of its @code{value} argument
15908 equals its @code{comparison} argument.  The
15909 @code{__builtin_dfp_dtstsfi_eq_dd} and
15910 @code{__builtin_dfp_dtstsfi_eq_td} functions behave similarly, but
15911 require that the type of the @code{value} argument be
15912 @code{__Decimal64} and @code{__Decimal128} respectively.
15914 The @code{__builtin_dfp_dtstsfi_ov} function returns a non-zero value
15915 if and only if its @code{value} argument has an undefined number of
15916 significant digits, such as when @code{value} is an encoding of @code{NaN}.
15917 The @code{__builtin_dfp_dtstsfi_ov_dd} and
15918 @code{__builtin_dfp_dtstsfi_ov_td} functions behave similarly, but
15919 require that the type of the @code{value} argument be
15920 @code{__Decimal64} and @code{__Decimal128} respectively.
15922 The following built-in functions are also available for the PowerPC family
15923 of processors, starting with ISA 3.0 or later
15924 (@option{-mcpu=power9}).  These string functions are described
15925 separately in order to group the descriptions closer to the function
15926 prototypes:
15927 @smallexample
15928 int vec_all_nez (vector signed char, vector signed char);
15929 int vec_all_nez (vector unsigned char, vector unsigned char);
15930 int vec_all_nez (vector signed short, vector signed short);
15931 int vec_all_nez (vector unsigned short, vector unsigned short);
15932 int vec_all_nez (vector signed int, vector signed int);
15933 int vec_all_nez (vector unsigned int, vector unsigned int);
15935 int vec_any_eqz (vector signed char, vector signed char);
15936 int vec_any_eqz (vector unsigned char, vector unsigned char);
15937 int vec_any_eqz (vector signed short, vector signed short);
15938 int vec_any_eqz (vector unsigned short, vector unsigned short);
15939 int vec_any_eqz (vector signed int, vector signed int);
15940 int vec_any_eqz (vector unsigned int, vector unsigned int);
15942 vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
15943 vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
15944 vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
15945 vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
15946 vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
15947 vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
15949 vector signed char vec_cnttz (vector signed char);
15950 vector unsigned char vec_cnttz (vector unsigned char);
15951 vector signed short vec_cnttz (vector signed short);
15952 vector unsigned short vec_cnttz (vector unsigned short);
15953 vector signed int vec_cnttz (vector signed int);
15954 vector unsigned int vec_cnttz (vector unsigned int);
15955 vector signed long long vec_cnttz (vector signed long long);
15956 vector unsigned long long vec_cnttz (vector unsigned long long);
15958 signed int vec_cntlz_lsbb (vector signed char);
15959 signed int vec_cntlz_lsbb (vector unsigned char);
15961 signed int vec_cnttz_lsbb (vector signed char);
15962 signed int vec_cnttz_lsbb (vector unsigned char);
15964 unsigned int vec_first_match_index (vector signed char, vector signed char);
15965 unsigned int vec_first_match_index (vector unsigned char,
15966                                     vector unsigned char);
15967 unsigned int vec_first_match_index (vector signed int, vector signed int);
15968 unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
15969 unsigned int vec_first_match_index (vector signed short, vector signed short);
15970 unsigned int vec_first_match_index (vector unsigned short,
15971                                     vector unsigned short);
15972 unsigned int vec_first_match_or_eos_index (vector signed char,
15973                                            vector signed char);
15974 unsigned int vec_first_match_or_eos_index (vector unsigned char,
15975                                            vector unsigned char);
15976 unsigned int vec_first_match_or_eos_index (vector signed int,
15977                                            vector signed int);
15978 unsigned int vec_first_match_or_eos_index (vector unsigned int,
15979                                            vector unsigned int);
15980 unsigned int vec_first_match_or_eos_index (vector signed short,
15981                                            vector signed short);
15982 unsigned int vec_first_match_or_eos_index (vector unsigned short,
15983                                            vector unsigned short);
15984 unsigned int vec_first_mismatch_index (vector signed char,
15985                                        vector signed char);
15986 unsigned int vec_first_mismatch_index (vector unsigned char,
15987                                        vector unsigned char);
15988 unsigned int vec_first_mismatch_index (vector signed int,
15989                                        vector signed int);
15990 unsigned int vec_first_mismatch_index (vector unsigned int,
15991                                        vector unsigned int);
15992 unsigned int vec_first_mismatch_index (vector signed short,
15993                                        vector signed short);
15994 unsigned int vec_first_mismatch_index (vector unsigned short,
15995                                        vector unsigned short);
15996 unsigned int vec_first_mismatch_or_eos_index (vector signed char,
15997                                               vector signed char);
15998 unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
15999                                               vector unsigned char);
16000 unsigned int vec_first_mismatch_or_eos_index (vector signed int,
16001                                               vector signed int);
16002 unsigned int vec_first_mismatch_or_eos_index (vector unsigned int,
16003                                               vector unsigned int);
16004 unsigned int vec_first_mismatch_or_eos_index (vector signed short,
16005                                               vector signed short);
16006 unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
16007                                               vector unsigned short);
16009 vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
16011 vector signed char vec_xl_be (signed long long, signed char *);
16012 vector unsigned char vec_xl_be (signed long long, unsigned char *);
16013 vector signed int vec_xl_be (signed long long, signed int *);
16014 vector unsigned int vec_xl_be (signed long long, unsigned int *);
16015 vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
16016 vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
16017 vector signed long long vec_xl_be (signed long long, signed long long *);
16018 vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
16019 vector signed short vec_xl_be (signed long long, signed short *);
16020 vector unsigned short vec_xl_be (signed long long, unsigned short *);
16021 vector double vec_xl_be (signed long long, double *);
16022 vector float vec_xl_be (signed long long, float *);
16024 vector signed char vec_xl_len (signed char *addr, size_t len);
16025 vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
16026 vector signed int vec_xl_len (signed int *addr, size_t len);
16027 vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
16028 vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
16029 vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
16030 vector signed long long vec_xl_len (signed long long *addr, size_t len);
16031 vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
16032 vector signed short vec_xl_len (signed short *addr, size_t len);
16033 vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
16034 vector double vec_xl_len (double *addr, size_t len);
16035 vector float vec_xl_len (float *addr, size_t len);
16037 vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
16039 void vec_xst_len (vector signed char data, signed char *addr, size_t len);
16040 void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
16041 void vec_xst_len (vector signed int data, signed int *addr, size_t len);
16042 void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
16043 void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
16044 void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
16045 void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
16046 void vec_xst_len (vector signed short data, signed short *addr, size_t len);
16047 void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
16048 void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
16049 void vec_xst_len (vector double data, double *addr, size_t len);
16050 void vec_xst_len (vector float data, float *addr, size_t len);
16052 void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
16054 signed char vec_xlx (unsigned int index, vector signed char data);
16055 unsigned char vec_xlx (unsigned int index, vector unsigned char data);
16056 signed short vec_xlx (unsigned int index, vector signed short data);
16057 unsigned short vec_xlx (unsigned int index, vector unsigned short data);
16058 signed int vec_xlx (unsigned int index, vector signed int data);
16059 unsigned int vec_xlx (unsigned int index, vector unsigned int data);
16060 float vec_xlx (unsigned int index, vector float data);
16062 signed char vec_xrx (unsigned int index, vector signed char data);
16063 unsigned char vec_xrx (unsigned int index, vector unsigned char data);
16064 signed short vec_xrx (unsigned int index, vector signed short data);
16065 unsigned short vec_xrx (unsigned int index, vector unsigned short data);
16066 signed int vec_xrx (unsigned int index, vector signed int data);
16067 unsigned int vec_xrx (unsigned int index, vector unsigned int data);
16068 float vec_xrx (unsigned int index, vector float data);
16069 @end smallexample
16071 The @code{vec_all_nez}, @code{vec_any_eqz}, and @code{vec_cmpnez}
16072 perform pairwise comparisons between the elements at the same
16073 positions within their two vector arguments.
16074 The @code{vec_all_nez} function returns a
16075 non-zero value if and only if all pairwise comparisons are not
16076 equal and no element of either vector argument contains a zero.
16077 The @code{vec_any_eqz} function returns a
16078 non-zero value if and only if at least one pairwise comparison is equal
16079 or if at least one element of either vector argument contains a zero.
16080 The @code{vec_cmpnez} function returns a vector of the same type as
16081 its two arguments, within which each element consists of all ones to
16082 denote that either the corresponding elements of the incoming arguments are
16083 not equal or that at least one of the corresponding elements contains
16084 zero.  Otherwise, the element of the returned vector contains all zeros.
16086 The @code{vec_cntlz_lsbb} function returns the count of the number of
16087 consecutive leading byte elements (starting from position 0 within the
16088 supplied vector argument) for which the least-significant bit
16089 equals zero.  The @code{vec_cnttz_lsbb} function returns the count of
16090 the number of consecutive trailing byte elements (starting from
16091 position 15 and counting backwards within the supplied vector
16092 argument) for which the least-significant bit equals zero.
16094 The @code{vec_xl_len} and @code{vec_xst_len} functions require a
16095 64-bit environment supporting ISA 3.0 or later.  The @code{vec_xl_len}
16096 function loads a variable length vector from memory.  The
16097 @code{vec_xst_len} function stores a variable length vector to memory.
16098 With both the @code{vec_xl_len} and @code{vec_xst_len} functions, the
16099 @code{addr} argument represents the memory address to or from which
16100 data will be transferred, and the
16101 @code{len} argument represents the number of bytes to be
16102 transferred, as computed by the C expression @code{min((len & 0xff), 16)}.
16103 If this expression's value is not a multiple of the vector element's
16104 size, the behavior of this function is undefined.
16105 In the case that the underlying computer is configured to run in
16106 big-endian mode, the data transfer moves bytes 0 to @code{(len - 1)} of
16107 the corresponding vector.  In little-endian mode, the data transfer
16108 moves bytes @code{(16 - len)} to @code{15} of the corresponding
16109 vector.  For the load function, any bytes of the result vector that
16110 are not loaded from memory are set to zero.
16111 The value of the @code{addr} argument need not be aligned on a
16112 multiple of the vector's element size.
16114 The @code{vec_xlx} and @code{vec_xrx} functions extract the single
16115 element selected by the @code{index} argument from the vector
16116 represented by the @code{data} argument.  The @code{index} argument
16117 always specifies a byte offset, regardless of the size of the vector
16118 element.  With @code{vec_xlx}, @code{index} is the offset of the first
16119 byte of the element to be extracted.  With @code{vec_xrx}, @code{index}
16120 represents the last byte of the element to be extracted, measured
16121 from the right end of the vector.  In other words, the last byte of
16122 the element to be extracted is found at position @code{(15 - index)}.
16123 There is no requirement that @code{index} be a multiple of the vector
16124 element size.  However, if the size of the vector element added to
16125 @code{index} is greater than 15, the content of the returned value is
16126 undefined.
16128 The following built-in functions are available for the PowerPC family
16129 of processors when hardware decimal floating point
16130 (@option{-mhard-dfp}) is available:
16131 @smallexample
16132 long long __builtin_dxex (_Decimal64);
16133 long long __builtin_dxexq (_Decimal128);
16134 _Decimal64 __builtin_ddedpd (int, _Decimal64);
16135 _Decimal128 __builtin_ddedpdq (int, _Decimal128);
16136 _Decimal64 __builtin_denbcd (int, _Decimal64);
16137 _Decimal128 __builtin_denbcdq (int, _Decimal128);
16138 _Decimal64 __builtin_diex (long long, _Decimal64);
16139 _Decimal128 _builtin_diexq (long long, _Decimal128);
16140 _Decimal64 __builtin_dscli (_Decimal64, int);
16141 _Decimal128 __builtin_dscliq (_Decimal128, int);
16142 _Decimal64 __builtin_dscri (_Decimal64, int);
16143 _Decimal128 __builtin_dscriq (_Decimal128, int);
16144 unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
16145 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
16146 @end smallexample
16148 The following built-in functions are available for the PowerPC family
16149 of processors when the Vector Scalar (vsx) instruction set is
16150 available:
16151 @smallexample
16152 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
16153 vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
16154                                                 unsigned long long);
16155 @end smallexample
16157 @node PowerPC AltiVec/VSX Built-in Functions
16158 @subsection PowerPC AltiVec Built-in Functions
16160 GCC provides an interface for the PowerPC family of processors to access
16161 the AltiVec operations described in Motorola's AltiVec Programming
16162 Interface Manual.  The interface is made available by including
16163 @code{<altivec.h>} and using @option{-maltivec} and
16164 @option{-mabi=altivec}.  The interface supports the following vector
16165 types.
16167 @smallexample
16168 vector unsigned char
16169 vector signed char
16170 vector bool char
16172 vector unsigned short
16173 vector signed short
16174 vector bool short
16175 vector pixel
16177 vector unsigned int
16178 vector signed int
16179 vector bool int
16180 vector float
16181 @end smallexample
16183 If @option{-mvsx} is used the following additional vector types are
16184 implemented.
16186 @smallexample
16187 vector unsigned long
16188 vector signed long
16189 vector double
16190 @end smallexample
16192 The long types are only implemented for 64-bit code generation, and
16193 the long type is only used in the floating point/integer conversion
16194 instructions.
16196 GCC's implementation of the high-level language interface available from
16197 C and C++ code differs from Motorola's documentation in several ways.
16199 @itemize @bullet
16201 @item
16202 A vector constant is a list of constant expressions within curly braces.
16204 @item
16205 A vector initializer requires no cast if the vector constant is of the
16206 same type as the variable it is initializing.
16208 @item
16209 If @code{signed} or @code{unsigned} is omitted, the signedness of the
16210 vector type is the default signedness of the base type.  The default
16211 varies depending on the operating system, so a portable program should
16212 always specify the signedness.
16214 @item
16215 Compiling with @option{-maltivec} adds keywords @code{__vector},
16216 @code{vector}, @code{__pixel}, @code{pixel}, @code{__bool} and
16217 @code{bool}.  When compiling ISO C, the context-sensitive substitution
16218 of the keywords @code{vector}, @code{pixel} and @code{bool} is
16219 disabled.  To use them, you must include @code{<altivec.h>} instead.
16221 @item
16222 GCC allows using a @code{typedef} name as the type specifier for a
16223 vector type.
16225 @item
16226 For C, overloaded functions are implemented with macros so the following
16227 does not work:
16229 @smallexample
16230   vec_add ((vector signed int)@{1, 2, 3, 4@}, foo);
16231 @end smallexample
16233 @noindent
16234 Since @code{vec_add} is a macro, the vector constant in the example
16235 is treated as four separate arguments.  Wrap the entire argument in
16236 parentheses for this to work.
16237 @end itemize
16239 @emph{Note:} Only the @code{<altivec.h>} interface is supported.
16240 Internally, GCC uses built-in functions to achieve the functionality in
16241 the aforementioned header file, but they are not supported and are
16242 subject to change without notice.
16244 GCC complies with the OpenPOWER 64-Bit ELF V2 ABI Specification,
16245 which may be found at
16246 @uref{http://openpowerfoundation.org/wp-content/uploads/resources/leabi-prd/content/index.html}.
16247 Appendix A of this document lists the vector API interfaces that must be
16248 provided by compliant compilers.  Programmers should preferentially use
16249 the interfaces described therein.  However, historically GCC has provided
16250 additional interfaces for access to vector instructions.  These are
16251 briefly described below.
16253 The following interfaces are supported for the generic and specific
16254 AltiVec operations and the AltiVec predicates.  In cases where there
16255 is a direct mapping between generic and specific operations, only the
16256 generic names are shown here, although the specific operations can also
16257 be used.
16259 Arguments that are documented as @code{const int} require literal
16260 integral values within the range required for that operation.
16262 @smallexample
16263 vector signed char vec_abs (vector signed char);
16264 vector signed short vec_abs (vector signed short);
16265 vector signed int vec_abs (vector signed int);
16266 vector float vec_abs (vector float);
16268 vector signed char vec_abss (vector signed char);
16269 vector signed short vec_abss (vector signed short);
16270 vector signed int vec_abss (vector signed int);
16272 vector signed char vec_add (vector bool char, vector signed char);
16273 vector signed char vec_add (vector signed char, vector bool char);
16274 vector signed char vec_add (vector signed char, vector signed char);
16275 vector unsigned char vec_add (vector bool char, vector unsigned char);
16276 vector unsigned char vec_add (vector unsigned char, vector bool char);
16277 vector unsigned char vec_add (vector unsigned char,
16278                               vector unsigned char);
16279 vector signed short vec_add (vector bool short, vector signed short);
16280 vector signed short vec_add (vector signed short, vector bool short);
16281 vector signed short vec_add (vector signed short, vector signed short);
16282 vector unsigned short vec_add (vector bool short,
16283                                vector unsigned short);
16284 vector unsigned short vec_add (vector unsigned short,
16285                                vector bool short);
16286 vector unsigned short vec_add (vector unsigned short,
16287                                vector unsigned short);
16288 vector signed int vec_add (vector bool int, vector signed int);
16289 vector signed int vec_add (vector signed int, vector bool int);
16290 vector signed int vec_add (vector signed int, vector signed int);
16291 vector unsigned int vec_add (vector bool int, vector unsigned int);
16292 vector unsigned int vec_add (vector unsigned int, vector bool int);
16293 vector unsigned int vec_add (vector unsigned int, vector unsigned int);
16294 vector float vec_add (vector float, vector float);
16296 vector float vec_vaddfp (vector float, vector float);
16298 vector signed int vec_vadduwm (vector bool int, vector signed int);
16299 vector signed int vec_vadduwm (vector signed int, vector bool int);
16300 vector signed int vec_vadduwm (vector signed int, vector signed int);
16301 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
16302 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
16303 vector unsigned int vec_vadduwm (vector unsigned int,
16304                                  vector unsigned int);
16306 vector signed short vec_vadduhm (vector bool short,
16307                                  vector signed short);
16308 vector signed short vec_vadduhm (vector signed short,
16309                                  vector bool short);
16310 vector signed short vec_vadduhm (vector signed short,
16311                                  vector signed short);
16312 vector unsigned short vec_vadduhm (vector bool short,
16313                                    vector unsigned short);
16314 vector unsigned short vec_vadduhm (vector unsigned short,
16315                                    vector bool short);
16316 vector unsigned short vec_vadduhm (vector unsigned short,
16317                                    vector unsigned short);
16319 vector signed char vec_vaddubm (vector bool char, vector signed char);
16320 vector signed char vec_vaddubm (vector signed char, vector bool char);
16321 vector signed char vec_vaddubm (vector signed char, vector signed char);
16322 vector unsigned char vec_vaddubm (vector bool char,
16323                                   vector unsigned char);
16324 vector unsigned char vec_vaddubm (vector unsigned char,
16325                                   vector bool char);
16326 vector unsigned char vec_vaddubm (vector unsigned char,
16327                                   vector unsigned char);
16329 vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
16331 vector unsigned char vec_adds (vector bool char, vector unsigned char);
16332 vector unsigned char vec_adds (vector unsigned char, vector bool char);
16333 vector unsigned char vec_adds (vector unsigned char,
16334                                vector unsigned char);
16335 vector signed char vec_adds (vector bool char, vector signed char);
16336 vector signed char vec_adds (vector signed char, vector bool char);
16337 vector signed char vec_adds (vector signed char, vector signed char);
16338 vector unsigned short vec_adds (vector bool short,
16339                                 vector unsigned short);
16340 vector unsigned short vec_adds (vector unsigned short,
16341                                 vector bool short);
16342 vector unsigned short vec_adds (vector unsigned short,
16343                                 vector unsigned short);
16344 vector signed short vec_adds (vector bool short, vector signed short);
16345 vector signed short vec_adds (vector signed short, vector bool short);
16346 vector signed short vec_adds (vector signed short, vector signed short);
16347 vector unsigned int vec_adds (vector bool int, vector unsigned int);
16348 vector unsigned int vec_adds (vector unsigned int, vector bool int);
16349 vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
16350 vector signed int vec_adds (vector bool int, vector signed int);
16351 vector signed int vec_adds (vector signed int, vector bool int);
16352 vector signed int vec_adds (vector signed int, vector signed int);
16354 vector signed int vec_vaddsws (vector bool int, vector signed int);
16355 vector signed int vec_vaddsws (vector signed int, vector bool int);
16356 vector signed int vec_vaddsws (vector signed int, vector signed int);
16358 vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
16359 vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
16360 vector unsigned int vec_vadduws (vector unsigned int,
16361                                  vector unsigned int);
16363 vector signed short vec_vaddshs (vector bool short,
16364                                  vector signed short);
16365 vector signed short vec_vaddshs (vector signed short,
16366                                  vector bool short);
16367 vector signed short vec_vaddshs (vector signed short,
16368                                  vector signed short);
16370 vector unsigned short vec_vadduhs (vector bool short,
16371                                    vector unsigned short);
16372 vector unsigned short vec_vadduhs (vector unsigned short,
16373                                    vector bool short);
16374 vector unsigned short vec_vadduhs (vector unsigned short,
16375                                    vector unsigned short);
16377 vector signed char vec_vaddsbs (vector bool char, vector signed char);
16378 vector signed char vec_vaddsbs (vector signed char, vector bool char);
16379 vector signed char vec_vaddsbs (vector signed char, vector signed char);
16381 vector unsigned char vec_vaddubs (vector bool char,
16382                                   vector unsigned char);
16383 vector unsigned char vec_vaddubs (vector unsigned char,
16384                                   vector bool char);
16385 vector unsigned char vec_vaddubs (vector unsigned char,
16386                                   vector unsigned char);
16388 vector float vec_and (vector float, vector float);
16389 vector float vec_and (vector float, vector bool int);
16390 vector float vec_and (vector bool int, vector float);
16391 vector bool long long vec_and (vector bool long long int,
16392                                vector bool long long);
16393 vector bool int vec_and (vector bool int, vector bool int);
16394 vector signed int vec_and (vector bool int, vector signed int);
16395 vector signed int vec_and (vector signed int, vector bool int);
16396 vector signed int vec_and (vector signed int, vector signed int);
16397 vector unsigned int vec_and (vector bool int, vector unsigned int);
16398 vector unsigned int vec_and (vector unsigned int, vector bool int);
16399 vector unsigned int vec_and (vector unsigned int, vector unsigned int);
16400 vector bool short vec_and (vector bool short, vector bool short);
16401 vector signed short vec_and (vector bool short, vector signed short);
16402 vector signed short vec_and (vector signed short, vector bool short);
16403 vector signed short vec_and (vector signed short, vector signed short);
16404 vector unsigned short vec_and (vector bool short,
16405                                vector unsigned short);
16406 vector unsigned short vec_and (vector unsigned short,
16407                                vector bool short);
16408 vector unsigned short vec_and (vector unsigned short,
16409                                vector unsigned short);
16410 vector signed char vec_and (vector bool char, vector signed char);
16411 vector bool char vec_and (vector bool char, vector bool char);
16412 vector signed char vec_and (vector signed char, vector bool char);
16413 vector signed char vec_and (vector signed char, vector signed char);
16414 vector unsigned char vec_and (vector bool char, vector unsigned char);
16415 vector unsigned char vec_and (vector unsigned char, vector bool char);
16416 vector unsigned char vec_and (vector unsigned char,
16417                               vector unsigned char);
16419 vector float vec_andc (vector float, vector float);
16420 vector float vec_andc (vector float, vector bool int);
16421 vector float vec_andc (vector bool int, vector float);
16422 vector bool int vec_andc (vector bool int, vector bool int);
16423 vector signed int vec_andc (vector bool int, vector signed int);
16424 vector signed int vec_andc (vector signed int, vector bool int);
16425 vector signed int vec_andc (vector signed int, vector signed int);
16426 vector unsigned int vec_andc (vector bool int, vector unsigned int);
16427 vector unsigned int vec_andc (vector unsigned int, vector bool int);
16428 vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
16429 vector bool short vec_andc (vector bool short, vector bool short);
16430 vector signed short vec_andc (vector bool short, vector signed short);
16431 vector signed short vec_andc (vector signed short, vector bool short);
16432 vector signed short vec_andc (vector signed short, vector signed short);
16433 vector unsigned short vec_andc (vector bool short,
16434                                 vector unsigned short);
16435 vector unsigned short vec_andc (vector unsigned short,
16436                                 vector bool short);
16437 vector unsigned short vec_andc (vector unsigned short,
16438                                 vector unsigned short);
16439 vector signed char vec_andc (vector bool char, vector signed char);
16440 vector bool char vec_andc (vector bool char, vector bool char);
16441 vector signed char vec_andc (vector signed char, vector bool char);
16442 vector signed char vec_andc (vector signed char, vector signed char);
16443 vector unsigned char vec_andc (vector bool char, vector unsigned char);
16444 vector unsigned char vec_andc (vector unsigned char, vector bool char);
16445 vector unsigned char vec_andc (vector unsigned char,
16446                                vector unsigned char);
16448 vector unsigned char vec_avg (vector unsigned char,
16449                               vector unsigned char);
16450 vector signed char vec_avg (vector signed char, vector signed char);
16451 vector unsigned short vec_avg (vector unsigned short,
16452                                vector unsigned short);
16453 vector signed short vec_avg (vector signed short, vector signed short);
16454 vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
16455 vector signed int vec_avg (vector signed int, vector signed int);
16457 vector signed int vec_vavgsw (vector signed int, vector signed int);
16459 vector unsigned int vec_vavguw (vector unsigned int,
16460                                 vector unsigned int);
16462 vector signed short vec_vavgsh (vector signed short,
16463                                 vector signed short);
16465 vector unsigned short vec_vavguh (vector unsigned short,
16466                                   vector unsigned short);
16468 vector signed char vec_vavgsb (vector signed char, vector signed char);
16470 vector unsigned char vec_vavgub (vector unsigned char,
16471                                  vector unsigned char);
16473 vector float vec_copysign (vector float);
16475 vector float vec_ceil (vector float);
16477 vector signed int vec_cmpb (vector float, vector float);
16479 vector bool char vec_cmpeq (vector bool char, vector bool char);
16480 vector bool short vec_cmpeq (vector bool short, vector bool short);
16481 vector bool int vec_cmpeq (vector bool int, vector bool int);
16482 vector bool char vec_cmpeq (vector signed char, vector signed char);
16483 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
16484 vector bool short vec_cmpeq (vector signed short, vector signed short);
16485 vector bool short vec_cmpeq (vector unsigned short,
16486                              vector unsigned short);
16487 vector bool int vec_cmpeq (vector signed int, vector signed int);
16488 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
16489 vector bool int vec_cmpeq (vector float, vector float);
16491 vector bool int vec_vcmpeqfp (vector float, vector float);
16493 vector bool int vec_vcmpequw (vector signed int, vector signed int);
16494 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
16496 vector bool short vec_vcmpequh (vector signed short,
16497                                 vector signed short);
16498 vector bool short vec_vcmpequh (vector unsigned short,
16499                                 vector unsigned short);
16501 vector bool char vec_vcmpequb (vector signed char, vector signed char);
16502 vector bool char vec_vcmpequb (vector unsigned char,
16503                                vector unsigned char);
16505 vector bool int vec_cmpge (vector float, vector float);
16507 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
16508 vector bool char vec_cmpgt (vector signed char, vector signed char);
16509 vector bool short vec_cmpgt (vector unsigned short,
16510                              vector unsigned short);
16511 vector bool short vec_cmpgt (vector signed short, vector signed short);
16512 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
16513 vector bool int vec_cmpgt (vector signed int, vector signed int);
16514 vector bool int vec_cmpgt (vector float, vector float);
16516 vector bool int vec_vcmpgtfp (vector float, vector float);
16518 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
16520 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
16522 vector bool short vec_vcmpgtsh (vector signed short,
16523                                 vector signed short);
16525 vector bool short vec_vcmpgtuh (vector unsigned short,
16526                                 vector unsigned short);
16528 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
16530 vector bool char vec_vcmpgtub (vector unsigned char,
16531                                vector unsigned char);
16533 vector bool int vec_cmple (vector float, vector float);
16535 vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
16536 vector bool char vec_cmplt (vector signed char, vector signed char);
16537 vector bool short vec_cmplt (vector unsigned short,
16538                              vector unsigned short);
16539 vector bool short vec_cmplt (vector signed short, vector signed short);
16540 vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
16541 vector bool int vec_cmplt (vector signed int, vector signed int);
16542 vector bool int vec_cmplt (vector float, vector float);
16544 vector float vec_cpsgn (vector float, vector float);
16546 vector float vec_ctf (vector unsigned int, const int);
16547 vector float vec_ctf (vector signed int, const int);
16548 vector double vec_ctf (vector unsigned long, const int);
16549 vector double vec_ctf (vector signed long, const int);
16551 vector float vec_vcfsx (vector signed int, const int);
16553 vector float vec_vcfux (vector unsigned int, const int);
16555 vector signed int vec_cts (vector float, const int);
16556 vector signed long vec_cts (vector double, const int);
16558 vector unsigned int vec_ctu (vector float, const int);
16559 vector unsigned long vec_ctu (vector double, const int);
16561 vector double vec_doublee (vector float);
16562 vector double vec_doublee (vector signed int);
16563 vector double vec_doublee (vector unsigned int);
16565 vector double vec_doubleo (vector float);
16566 vector double vec_doubleo (vector signed int);
16567 vector double vec_doubleo (vector unsigned int);
16569 vector double vec_doubleh (vector float);
16570 vector double vec_doubleh (vector signed int);
16571 vector double vec_doubleh (vector unsigned int);
16573 vector double vec_doublel (vector float);
16574 vector double vec_doublel (vector signed int);
16575 vector double vec_doublel (vector unsigned int);
16577 void vec_dss (const int);
16579 void vec_dssall (void);
16581 void vec_dst (const vector unsigned char *, int, const int);
16582 void vec_dst (const vector signed char *, int, const int);
16583 void vec_dst (const vector bool char *, int, const int);
16584 void vec_dst (const vector unsigned short *, int, const int);
16585 void vec_dst (const vector signed short *, int, const int);
16586 void vec_dst (const vector bool short *, int, const int);
16587 void vec_dst (const vector pixel *, int, const int);
16588 void vec_dst (const vector unsigned int *, int, const int);
16589 void vec_dst (const vector signed int *, int, const int);
16590 void vec_dst (const vector bool int *, int, const int);
16591 void vec_dst (const vector float *, int, const int);
16592 void vec_dst (const unsigned char *, int, const int);
16593 void vec_dst (const signed char *, int, const int);
16594 void vec_dst (const unsigned short *, int, const int);
16595 void vec_dst (const short *, int, const int);
16596 void vec_dst (const unsigned int *, int, const int);
16597 void vec_dst (const int *, int, const int);
16598 void vec_dst (const unsigned long *, int, const int);
16599 void vec_dst (const long *, int, const int);
16600 void vec_dst (const float *, int, const int);
16602 void vec_dstst (const vector unsigned char *, int, const int);
16603 void vec_dstst (const vector signed char *, int, const int);
16604 void vec_dstst (const vector bool char *, int, const int);
16605 void vec_dstst (const vector unsigned short *, int, const int);
16606 void vec_dstst (const vector signed short *, int, const int);
16607 void vec_dstst (const vector bool short *, int, const int);
16608 void vec_dstst (const vector pixel *, int, const int);
16609 void vec_dstst (const vector unsigned int *, int, const int);
16610 void vec_dstst (const vector signed int *, int, const int);
16611 void vec_dstst (const vector bool int *, int, const int);
16612 void vec_dstst (const vector float *, int, const int);
16613 void vec_dstst (const unsigned char *, int, const int);
16614 void vec_dstst (const signed char *, int, const int);
16615 void vec_dstst (const unsigned short *, int, const int);
16616 void vec_dstst (const short *, int, const int);
16617 void vec_dstst (const unsigned int *, int, const int);
16618 void vec_dstst (const int *, int, const int);
16619 void vec_dstst (const unsigned long *, int, const int);
16620 void vec_dstst (const long *, int, const int);
16621 void vec_dstst (const float *, int, const int);
16623 void vec_dststt (const vector unsigned char *, int, const int);
16624 void vec_dststt (const vector signed char *, int, const int);
16625 void vec_dststt (const vector bool char *, int, const int);
16626 void vec_dststt (const vector unsigned short *, int, const int);
16627 void vec_dststt (const vector signed short *, int, const int);
16628 void vec_dststt (const vector bool short *, int, const int);
16629 void vec_dststt (const vector pixel *, int, const int);
16630 void vec_dststt (const vector unsigned int *, int, const int);
16631 void vec_dststt (const vector signed int *, int, const int);
16632 void vec_dststt (const vector bool int *, int, const int);
16633 void vec_dststt (const vector float *, int, const int);
16634 void vec_dststt (const unsigned char *, int, const int);
16635 void vec_dststt (const signed char *, int, const int);
16636 void vec_dststt (const unsigned short *, int, const int);
16637 void vec_dststt (const short *, int, const int);
16638 void vec_dststt (const unsigned int *, int, const int);
16639 void vec_dststt (const int *, int, const int);
16640 void vec_dststt (const unsigned long *, int, const int);
16641 void vec_dststt (const long *, int, const int);
16642 void vec_dststt (const float *, int, const int);
16644 void vec_dstt (const vector unsigned char *, int, const int);
16645 void vec_dstt (const vector signed char *, int, const int);
16646 void vec_dstt (const vector bool char *, int, const int);
16647 void vec_dstt (const vector unsigned short *, int, const int);
16648 void vec_dstt (const vector signed short *, int, const int);
16649 void vec_dstt (const vector bool short *, int, const int);
16650 void vec_dstt (const vector pixel *, int, const int);
16651 void vec_dstt (const vector unsigned int *, int, const int);
16652 void vec_dstt (const vector signed int *, int, const int);
16653 void vec_dstt (const vector bool int *, int, const int);
16654 void vec_dstt (const vector float *, int, const int);
16655 void vec_dstt (const unsigned char *, int, const int);
16656 void vec_dstt (const signed char *, int, const int);
16657 void vec_dstt (const unsigned short *, int, const int);
16658 void vec_dstt (const short *, int, const int);
16659 void vec_dstt (const unsigned int *, int, const int);
16660 void vec_dstt (const int *, int, const int);
16661 void vec_dstt (const unsigned long *, int, const int);
16662 void vec_dstt (const long *, int, const int);
16663 void vec_dstt (const float *, int, const int);
16665 vector float vec_expte (vector float);
16667 vector float vec_floor (vector float);
16669 vector float vec_float (vector signed int);
16670 vector float vec_float (vector unsigned int);
16672 vector float vec_float2 (vector signed long long, vector signed long long);
16673 vector float vec_float2 (vector unsigned long long, vector signed long long);
16675 vector float vec_floate (vector double);
16676 vector float vec_floate (vector signed long long);
16677 vector float vec_floate (vector unsigned long long);
16679 vector float vec_floato (vector double);
16680 vector float vec_floato (vector signed long long);
16681 vector float vec_floato (vector unsigned long long);
16683 vector float vec_ld (int, const vector float *);
16684 vector float vec_ld (int, const float *);
16685 vector bool int vec_ld (int, const vector bool int *);
16686 vector signed int vec_ld (int, const vector signed int *);
16687 vector signed int vec_ld (int, const int *);
16688 vector signed int vec_ld (int, const long *);
16689 vector unsigned int vec_ld (int, const vector unsigned int *);
16690 vector unsigned int vec_ld (int, const unsigned int *);
16691 vector unsigned int vec_ld (int, const unsigned long *);
16692 vector bool short vec_ld (int, const vector bool short *);
16693 vector pixel vec_ld (int, const vector pixel *);
16694 vector signed short vec_ld (int, const vector signed short *);
16695 vector signed short vec_ld (int, const short *);
16696 vector unsigned short vec_ld (int, const vector unsigned short *);
16697 vector unsigned short vec_ld (int, const unsigned short *);
16698 vector bool char vec_ld (int, const vector bool char *);
16699 vector signed char vec_ld (int, const vector signed char *);
16700 vector signed char vec_ld (int, const signed char *);
16701 vector unsigned char vec_ld (int, const vector unsigned char *);
16702 vector unsigned char vec_ld (int, const unsigned char *);
16704 vector signed char vec_lde (int, const signed char *);
16705 vector unsigned char vec_lde (int, const unsigned char *);
16706 vector signed short vec_lde (int, const short *);
16707 vector unsigned short vec_lde (int, const unsigned short *);
16708 vector float vec_lde (int, const float *);
16709 vector signed int vec_lde (int, const int *);
16710 vector unsigned int vec_lde (int, const unsigned int *);
16711 vector signed int vec_lde (int, const long *);
16712 vector unsigned int vec_lde (int, const unsigned long *);
16714 vector float vec_lvewx (int, float *);
16715 vector signed int vec_lvewx (int, int *);
16716 vector unsigned int vec_lvewx (int, unsigned int *);
16717 vector signed int vec_lvewx (int, long *);
16718 vector unsigned int vec_lvewx (int, unsigned long *);
16720 vector signed short vec_lvehx (int, short *);
16721 vector unsigned short vec_lvehx (int, unsigned short *);
16723 vector signed char vec_lvebx (int, char *);
16724 vector unsigned char vec_lvebx (int, unsigned char *);
16726 vector float vec_ldl (int, const vector float *);
16727 vector float vec_ldl (int, const float *);
16728 vector bool int vec_ldl (int, const vector bool int *);
16729 vector signed int vec_ldl (int, const vector signed int *);
16730 vector signed int vec_ldl (int, const int *);
16731 vector signed int vec_ldl (int, const long *);
16732 vector unsigned int vec_ldl (int, const vector unsigned int *);
16733 vector unsigned int vec_ldl (int, const unsigned int *);
16734 vector unsigned int vec_ldl (int, const unsigned long *);
16735 vector bool short vec_ldl (int, const vector bool short *);
16736 vector pixel vec_ldl (int, const vector pixel *);
16737 vector signed short vec_ldl (int, const vector signed short *);
16738 vector signed short vec_ldl (int, const short *);
16739 vector unsigned short vec_ldl (int, const vector unsigned short *);
16740 vector unsigned short vec_ldl (int, const unsigned short *);
16741 vector bool char vec_ldl (int, const vector bool char *);
16742 vector signed char vec_ldl (int, const vector signed char *);
16743 vector signed char vec_ldl (int, const signed char *);
16744 vector unsigned char vec_ldl (int, const vector unsigned char *);
16745 vector unsigned char vec_ldl (int, const unsigned char *);
16747 vector float vec_loge (vector float);
16749 vector unsigned char vec_lvsl (int, const volatile unsigned char *);
16750 vector unsigned char vec_lvsl (int, const volatile signed char *);
16751 vector unsigned char vec_lvsl (int, const volatile unsigned short *);
16752 vector unsigned char vec_lvsl (int, const volatile short *);
16753 vector unsigned char vec_lvsl (int, const volatile unsigned int *);
16754 vector unsigned char vec_lvsl (int, const volatile int *);
16755 vector unsigned char vec_lvsl (int, const volatile unsigned long *);
16756 vector unsigned char vec_lvsl (int, const volatile long *);
16757 vector unsigned char vec_lvsl (int, const volatile float *);
16759 vector unsigned char vec_lvsr (int, const volatile unsigned char *);
16760 vector unsigned char vec_lvsr (int, const volatile signed char *);
16761 vector unsigned char vec_lvsr (int, const volatile unsigned short *);
16762 vector unsigned char vec_lvsr (int, const volatile short *);
16763 vector unsigned char vec_lvsr (int, const volatile unsigned int *);
16764 vector unsigned char vec_lvsr (int, const volatile int *);
16765 vector unsigned char vec_lvsr (int, const volatile unsigned long *);
16766 vector unsigned char vec_lvsr (int, const volatile long *);
16767 vector unsigned char vec_lvsr (int, const volatile float *);
16769 vector float vec_madd (vector float, vector float, vector float);
16771 vector signed short vec_madds (vector signed short,
16772                                vector signed short,
16773                                vector signed short);
16775 vector unsigned char vec_max (vector bool char, vector unsigned char);
16776 vector unsigned char vec_max (vector unsigned char, vector bool char);
16777 vector unsigned char vec_max (vector unsigned char,
16778                               vector unsigned char);
16779 vector signed char vec_max (vector bool char, vector signed char);
16780 vector signed char vec_max (vector signed char, vector bool char);
16781 vector signed char vec_max (vector signed char, vector signed char);
16782 vector unsigned short vec_max (vector bool short,
16783                                vector unsigned short);
16784 vector unsigned short vec_max (vector unsigned short,
16785                                vector bool short);
16786 vector unsigned short vec_max (vector unsigned short,
16787                                vector unsigned short);
16788 vector signed short vec_max (vector bool short, vector signed short);
16789 vector signed short vec_max (vector signed short, vector bool short);
16790 vector signed short vec_max (vector signed short, vector signed short);
16791 vector unsigned int vec_max (vector bool int, vector unsigned int);
16792 vector unsigned int vec_max (vector unsigned int, vector bool int);
16793 vector unsigned int vec_max (vector unsigned int, vector unsigned int);
16794 vector signed int vec_max (vector bool int, vector signed int);
16795 vector signed int vec_max (vector signed int, vector bool int);
16796 vector signed int vec_max (vector signed int, vector signed int);
16797 vector float vec_max (vector float, vector float);
16799 vector float vec_vmaxfp (vector float, vector float);
16801 vector signed int vec_vmaxsw (vector bool int, vector signed int);
16802 vector signed int vec_vmaxsw (vector signed int, vector bool int);
16803 vector signed int vec_vmaxsw (vector signed int, vector signed int);
16805 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
16806 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
16807 vector unsigned int vec_vmaxuw (vector unsigned int,
16808                                 vector unsigned int);
16810 vector signed short vec_vmaxsh (vector bool short, vector signed short);
16811 vector signed short vec_vmaxsh (vector signed short, vector bool short);
16812 vector signed short vec_vmaxsh (vector signed short,
16813                                 vector signed short);
16815 vector unsigned short vec_vmaxuh (vector bool short,
16816                                   vector unsigned short);
16817 vector unsigned short vec_vmaxuh (vector unsigned short,
16818                                   vector bool short);
16819 vector unsigned short vec_vmaxuh (vector unsigned short,
16820                                   vector unsigned short);
16822 vector signed char vec_vmaxsb (vector bool char, vector signed char);
16823 vector signed char vec_vmaxsb (vector signed char, vector bool char);
16824 vector signed char vec_vmaxsb (vector signed char, vector signed char);
16826 vector unsigned char vec_vmaxub (vector bool char,
16827                                  vector unsigned char);
16828 vector unsigned char vec_vmaxub (vector unsigned char,
16829                                  vector bool char);
16830 vector unsigned char vec_vmaxub (vector unsigned char,
16831                                  vector unsigned char);
16833 vector bool char vec_mergeh (vector bool char, vector bool char);
16834 vector signed char vec_mergeh (vector signed char, vector signed char);
16835 vector unsigned char vec_mergeh (vector unsigned char,
16836                                  vector unsigned char);
16837 vector bool short vec_mergeh (vector bool short, vector bool short);
16838 vector pixel vec_mergeh (vector pixel, vector pixel);
16839 vector signed short vec_mergeh (vector signed short,
16840                                 vector signed short);
16841 vector unsigned short vec_mergeh (vector unsigned short,
16842                                   vector unsigned short);
16843 vector float vec_mergeh (vector float, vector float);
16844 vector bool int vec_mergeh (vector bool int, vector bool int);
16845 vector signed int vec_mergeh (vector signed int, vector signed int);
16846 vector unsigned int vec_mergeh (vector unsigned int,
16847                                 vector unsigned int);
16849 vector float vec_vmrghw (vector float, vector float);
16850 vector bool int vec_vmrghw (vector bool int, vector bool int);
16851 vector signed int vec_vmrghw (vector signed int, vector signed int);
16852 vector unsigned int vec_vmrghw (vector unsigned int,
16853                                 vector unsigned int);
16855 vector bool short vec_vmrghh (vector bool short, vector bool short);
16856 vector signed short vec_vmrghh (vector signed short,
16857                                 vector signed short);
16858 vector unsigned short vec_vmrghh (vector unsigned short,
16859                                   vector unsigned short);
16860 vector pixel vec_vmrghh (vector pixel, vector pixel);
16862 vector bool char vec_vmrghb (vector bool char, vector bool char);
16863 vector signed char vec_vmrghb (vector signed char, vector signed char);
16864 vector unsigned char vec_vmrghb (vector unsigned char,
16865                                  vector unsigned char);
16867 vector bool char vec_mergel (vector bool char, vector bool char);
16868 vector signed char vec_mergel (vector signed char, vector signed char);
16869 vector unsigned char vec_mergel (vector unsigned char,
16870                                  vector unsigned char);
16871 vector bool short vec_mergel (vector bool short, vector bool short);
16872 vector pixel vec_mergel (vector pixel, vector pixel);
16873 vector signed short vec_mergel (vector signed short,
16874                                 vector signed short);
16875 vector unsigned short vec_mergel (vector unsigned short,
16876                                   vector unsigned short);
16877 vector float vec_mergel (vector float, vector float);
16878 vector bool int vec_mergel (vector bool int, vector bool int);
16879 vector signed int vec_mergel (vector signed int, vector signed int);
16880 vector unsigned int vec_mergel (vector unsigned int,
16881                                 vector unsigned int);
16883 vector float vec_vmrglw (vector float, vector float);
16884 vector signed int vec_vmrglw (vector signed int, vector signed int);
16885 vector unsigned int vec_vmrglw (vector unsigned int,
16886                                 vector unsigned int);
16887 vector bool int vec_vmrglw (vector bool int, vector bool int);
16889 vector bool short vec_vmrglh (vector bool short, vector bool short);
16890 vector signed short vec_vmrglh (vector signed short,
16891                                 vector signed short);
16892 vector unsigned short vec_vmrglh (vector unsigned short,
16893                                   vector unsigned short);
16894 vector pixel vec_vmrglh (vector pixel, vector pixel);
16896 vector bool char vec_vmrglb (vector bool char, vector bool char);
16897 vector signed char vec_vmrglb (vector signed char, vector signed char);
16898 vector unsigned char vec_vmrglb (vector unsigned char,
16899                                  vector unsigned char);
16901 vector unsigned short vec_mfvscr (void);
16903 vector unsigned char vec_min (vector bool char, vector unsigned char);
16904 vector unsigned char vec_min (vector unsigned char, vector bool char);
16905 vector unsigned char vec_min (vector unsigned char,
16906                               vector unsigned char);
16907 vector signed char vec_min (vector bool char, vector signed char);
16908 vector signed char vec_min (vector signed char, vector bool char);
16909 vector signed char vec_min (vector signed char, vector signed char);
16910 vector unsigned short vec_min (vector bool short,
16911                                vector unsigned short);
16912 vector unsigned short vec_min (vector unsigned short,
16913                                vector bool short);
16914 vector unsigned short vec_min (vector unsigned short,
16915                                vector unsigned short);
16916 vector signed short vec_min (vector bool short, vector signed short);
16917 vector signed short vec_min (vector signed short, vector bool short);
16918 vector signed short vec_min (vector signed short, vector signed short);
16919 vector unsigned int vec_min (vector bool int, vector unsigned int);
16920 vector unsigned int vec_min (vector unsigned int, vector bool int);
16921 vector unsigned int vec_min (vector unsigned int, vector unsigned int);
16922 vector signed int vec_min (vector bool int, vector signed int);
16923 vector signed int vec_min (vector signed int, vector bool int);
16924 vector signed int vec_min (vector signed int, vector signed int);
16925 vector float vec_min (vector float, vector float);
16927 vector float vec_vminfp (vector float, vector float);
16929 vector signed int vec_vminsw (vector bool int, vector signed int);
16930 vector signed int vec_vminsw (vector signed int, vector bool int);
16931 vector signed int vec_vminsw (vector signed int, vector signed int);
16933 vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
16934 vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
16935 vector unsigned int vec_vminuw (vector unsigned int,
16936                                 vector unsigned int);
16938 vector signed short vec_vminsh (vector bool short, vector signed short);
16939 vector signed short vec_vminsh (vector signed short, vector bool short);
16940 vector signed short vec_vminsh (vector signed short,
16941                                 vector signed short);
16943 vector unsigned short vec_vminuh (vector bool short,
16944                                   vector unsigned short);
16945 vector unsigned short vec_vminuh (vector unsigned short,
16946                                   vector bool short);
16947 vector unsigned short vec_vminuh (vector unsigned short,
16948                                   vector unsigned short);
16950 vector signed char vec_vminsb (vector bool char, vector signed char);
16951 vector signed char vec_vminsb (vector signed char, vector bool char);
16952 vector signed char vec_vminsb (vector signed char, vector signed char);
16954 vector unsigned char vec_vminub (vector bool char,
16955                                  vector unsigned char);
16956 vector unsigned char vec_vminub (vector unsigned char,
16957                                  vector bool char);
16958 vector unsigned char vec_vminub (vector unsigned char,
16959                                  vector unsigned char);
16961 vector signed short vec_mladd (vector signed short,
16962                                vector signed short,
16963                                vector signed short);
16964 vector signed short vec_mladd (vector signed short,
16965                                vector unsigned short,
16966                                vector unsigned short);
16967 vector signed short vec_mladd (vector unsigned short,
16968                                vector signed short,
16969                                vector signed short);
16970 vector unsigned short vec_mladd (vector unsigned short,
16971                                  vector unsigned short,
16972                                  vector unsigned short);
16974 vector signed short vec_mradds (vector signed short,
16975                                 vector signed short,
16976                                 vector signed short);
16978 vector unsigned int vec_msum (vector unsigned char,
16979                               vector unsigned char,
16980                               vector unsigned int);
16981 vector signed int vec_msum (vector signed char,
16982                             vector unsigned char,
16983                             vector signed int);
16984 vector unsigned int vec_msum (vector unsigned short,
16985                               vector unsigned short,
16986                               vector unsigned int);
16987 vector signed int vec_msum (vector signed short,
16988                             vector signed short,
16989                             vector signed int);
16991 vector signed int vec_vmsumshm (vector signed short,
16992                                 vector signed short,
16993                                 vector signed int);
16995 vector unsigned int vec_vmsumuhm (vector unsigned short,
16996                                   vector unsigned short,
16997                                   vector unsigned int);
16999 vector signed int vec_vmsummbm (vector signed char,
17000                                 vector unsigned char,
17001                                 vector signed int);
17003 vector unsigned int vec_vmsumubm (vector unsigned char,
17004                                   vector unsigned char,
17005                                   vector unsigned int);
17007 vector unsigned int vec_msums (vector unsigned short,
17008                                vector unsigned short,
17009                                vector unsigned int);
17010 vector signed int vec_msums (vector signed short,
17011                              vector signed short,
17012                              vector signed int);
17014 vector signed int vec_vmsumshs (vector signed short,
17015                                 vector signed short,
17016                                 vector signed int);
17018 vector unsigned int vec_vmsumuhs (vector unsigned short,
17019                                   vector unsigned short,
17020                                   vector unsigned int);
17022 void vec_mtvscr (vector signed int);
17023 void vec_mtvscr (vector unsigned int);
17024 void vec_mtvscr (vector bool int);
17025 void vec_mtvscr (vector signed short);
17026 void vec_mtvscr (vector unsigned short);
17027 void vec_mtvscr (vector bool short);
17028 void vec_mtvscr (vector pixel);
17029 void vec_mtvscr (vector signed char);
17030 void vec_mtvscr (vector unsigned char);
17031 void vec_mtvscr (vector bool char);
17033 vector unsigned short vec_mule (vector unsigned char,
17034                                 vector unsigned char);
17035 vector signed short vec_mule (vector signed char,
17036                               vector signed char);
17037 vector unsigned int vec_mule (vector unsigned short,
17038                               vector unsigned short);
17039 vector signed int vec_mule (vector signed short, vector signed short);
17040 vector unsigned long long vec_mule (vector unsigned int,
17041                                     vector unsigned int);
17042 vector signed long long vec_mule (vector signed int,
17043                                   vector signed int);
17045 vector signed int vec_vmulesh (vector signed short,
17046                                vector signed short);
17048 vector unsigned int vec_vmuleuh (vector unsigned short,
17049                                  vector unsigned short);
17051 vector signed short vec_vmulesb (vector signed char,
17052                                  vector signed char);
17054 vector unsigned short vec_vmuleub (vector unsigned char,
17055                                   vector unsigned char);
17057 vector unsigned short vec_mulo (vector unsigned char,
17058                                 vector unsigned char);
17059 vector signed short vec_mulo (vector signed char, vector signed char);
17060 vector unsigned int vec_mulo (vector unsigned short,
17061                               vector unsigned short);
17062 vector signed int vec_mulo (vector signed short, vector signed short);
17063 vector unsigned long long vec_mulo (vector unsigned int,
17064                                     vector unsigned int);
17065 vector signed long long vec_mulo (vector signed int,
17066                                   vector signed int);
17068 vector signed int vec_vmulosh (vector signed short,
17069                                vector signed short);
17071 vector unsigned int vec_vmulouh (vector unsigned short,
17072                                  vector unsigned short);
17074 vector signed short vec_vmulosb (vector signed char,
17075                                  vector signed char);
17077 vector unsigned short vec_vmuloub (vector unsigned char,
17078                                    vector unsigned char);
17080 vector float vec_nmsub (vector float, vector float, vector float);
17082 vector signed char vec_nabs (vector signed char);
17083 vector signed short vec_nabs (vector signed short);
17084 vector signed int vec_nabs (vector signed int);
17085 vector float vec_nabs (vector float);
17086 vector double vec_nabs (vector double);
17088 vector signed char vec_neg (vector signed char);
17089 vector signed short vec_neg (vector signed short);
17090 vector signed int vec_neg (vector signed int);
17091 vector signed long long vec_neg (vector signed long long);
17092 vector float  char vec_neg (vector float);
17093 vector double vec_neg (vector double);
17095 vector float vec_nor (vector float, vector float);
17096 vector signed int vec_nor (vector signed int, vector signed int);
17097 vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
17098 vector bool int vec_nor (vector bool int, vector bool int);
17099 vector signed short vec_nor (vector signed short, vector signed short);
17100 vector unsigned short vec_nor (vector unsigned short,
17101                                vector unsigned short);
17102 vector bool short vec_nor (vector bool short, vector bool short);
17103 vector signed char vec_nor (vector signed char, vector signed char);
17104 vector unsigned char vec_nor (vector unsigned char,
17105                               vector unsigned char);
17106 vector bool char vec_nor (vector bool char, vector bool char);
17108 vector float vec_or (vector float, vector float);
17109 vector float vec_or (vector float, vector bool int);
17110 vector float vec_or (vector bool int, vector float);
17111 vector bool int vec_or (vector bool int, vector bool int);
17112 vector signed int vec_or (vector bool int, vector signed int);
17113 vector signed int vec_or (vector signed int, vector bool int);
17114 vector signed int vec_or (vector signed int, vector signed int);
17115 vector unsigned int vec_or (vector bool int, vector unsigned int);
17116 vector unsigned int vec_or (vector unsigned int, vector bool int);
17117 vector unsigned int vec_or (vector unsigned int, vector unsigned int);
17118 vector bool short vec_or (vector bool short, vector bool short);
17119 vector signed short vec_or (vector bool short, vector signed short);
17120 vector signed short vec_or (vector signed short, vector bool short);
17121 vector signed short vec_or (vector signed short, vector signed short);
17122 vector unsigned short vec_or (vector bool short, vector unsigned short);
17123 vector unsigned short vec_or (vector unsigned short, vector bool short);
17124 vector unsigned short vec_or (vector unsigned short,
17125                               vector unsigned short);
17126 vector signed char vec_or (vector bool char, vector signed char);
17127 vector bool char vec_or (vector bool char, vector bool char);
17128 vector signed char vec_or (vector signed char, vector bool char);
17129 vector signed char vec_or (vector signed char, vector signed char);
17130 vector unsigned char vec_or (vector bool char, vector unsigned char);
17131 vector unsigned char vec_or (vector unsigned char, vector bool char);
17132 vector unsigned char vec_or (vector unsigned char,
17133                              vector unsigned char);
17135 vector signed char vec_pack (vector signed short, vector signed short);
17136 vector unsigned char vec_pack (vector unsigned short,
17137                                vector unsigned short);
17138 vector bool char vec_pack (vector bool short, vector bool short);
17139 vector signed short vec_pack (vector signed int, vector signed int);
17140 vector unsigned short vec_pack (vector unsigned int,
17141                                 vector unsigned int);
17142 vector bool short vec_pack (vector bool int, vector bool int);
17144 vector bool short vec_vpkuwum (vector bool int, vector bool int);
17145 vector signed short vec_vpkuwum (vector signed int, vector signed int);
17146 vector unsigned short vec_vpkuwum (vector unsigned int,
17147                                    vector unsigned int);
17149 vector bool char vec_vpkuhum (vector bool short, vector bool short);
17150 vector signed char vec_vpkuhum (vector signed short,
17151                                 vector signed short);
17152 vector unsigned char vec_vpkuhum (vector unsigned short,
17153                                   vector unsigned short);
17155 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
17157 vector unsigned char vec_packs (vector unsigned short,
17158                                 vector unsigned short);
17159 vector signed char vec_packs (vector signed short, vector signed short);
17160 vector unsigned short vec_packs (vector unsigned int,
17161                                  vector unsigned int);
17162 vector signed short vec_packs (vector signed int, vector signed int);
17164 vector signed short vec_vpkswss (vector signed int, vector signed int);
17166 vector unsigned short vec_vpkuwus (vector unsigned int,
17167                                    vector unsigned int);
17169 vector signed char vec_vpkshss (vector signed short,
17170                                 vector signed short);
17172 vector unsigned char vec_vpkuhus (vector unsigned short,
17173                                   vector unsigned short);
17175 vector unsigned char vec_packsu (vector unsigned short,
17176                                  vector unsigned short);
17177 vector unsigned char vec_packsu (vector signed short,
17178                                  vector signed short);
17179 vector unsigned short vec_packsu (vector unsigned int,
17180                                   vector unsigned int);
17181 vector unsigned short vec_packsu (vector signed int, vector signed int);
17183 vector unsigned short vec_vpkswus (vector signed int,
17184                                    vector signed int);
17186 vector unsigned char vec_vpkshus (vector signed short,
17187                                   vector signed short);
17189 vector float vec_perm (vector float,
17190                        vector float,
17191                        vector unsigned char);
17192 vector signed int vec_perm (vector signed int,
17193                             vector signed int,
17194                             vector unsigned char);
17195 vector unsigned int vec_perm (vector unsigned int,
17196                               vector unsigned int,
17197                               vector unsigned char);
17198 vector bool int vec_perm (vector bool int,
17199                           vector bool int,
17200                           vector unsigned char);
17201 vector signed short vec_perm (vector signed short,
17202                               vector signed short,
17203                               vector unsigned char);
17204 vector unsigned short vec_perm (vector unsigned short,
17205                                 vector unsigned short,
17206                                 vector unsigned char);
17207 vector bool short vec_perm (vector bool short,
17208                             vector bool short,
17209                             vector unsigned char);
17210 vector pixel vec_perm (vector pixel,
17211                        vector pixel,
17212                        vector unsigned char);
17213 vector signed char vec_perm (vector signed char,
17214                              vector signed char,
17215                              vector unsigned char);
17216 vector unsigned char vec_perm (vector unsigned char,
17217                                vector unsigned char,
17218                                vector unsigned char);
17219 vector bool char vec_perm (vector bool char,
17220                            vector bool char,
17221                            vector unsigned char);
17223 vector float vec_re (vector float);
17225 vector bool char vec_reve (vector bool char);
17226 vector signed char vec_reve (vector signed char);
17227 vector unsigned char vec_reve (vector unsigned char);
17228 vector bool int vec_reve (vector bool int);
17229 vector signed int vec_reve (vector signed int);
17230 vector unsigned int vec_reve (vector unsigned int);
17231 vector bool long long vec_reve (vector bool long long);
17232 vector signed long long vec_reve (vector signed long long);
17233 vector unsigned long long vec_reve (vector unsigned long long);
17234 vector bool short vec_reve (vector bool short);
17235 vector signed short vec_reve (vector signed short);
17236 vector unsigned short vec_reve (vector unsigned short);
17238 vector signed char vec_rl (vector signed char,
17239                            vector unsigned char);
17240 vector unsigned char vec_rl (vector unsigned char,
17241                              vector unsigned char);
17242 vector signed short vec_rl (vector signed short, vector unsigned short);
17243 vector unsigned short vec_rl (vector unsigned short,
17244                               vector unsigned short);
17245 vector signed int vec_rl (vector signed int, vector unsigned int);
17246 vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
17248 vector signed int vec_vrlw (vector signed int, vector unsigned int);
17249 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
17251 vector signed short vec_vrlh (vector signed short,
17252                               vector unsigned short);
17253 vector unsigned short vec_vrlh (vector unsigned short,
17254                                 vector unsigned short);
17256 vector signed char vec_vrlb (vector signed char, vector unsigned char);
17257 vector unsigned char vec_vrlb (vector unsigned char,
17258                                vector unsigned char);
17260 vector float vec_round (vector float);
17262 vector float vec_recip (vector float, vector float);
17264 vector float vec_rsqrt (vector float);
17266 vector float vec_rsqrte (vector float);
17268 vector float vec_sel (vector float, vector float, vector bool int);
17269 vector float vec_sel (vector float, vector float, vector unsigned int);
17270 vector signed int vec_sel (vector signed int,
17271                            vector signed int,
17272                            vector bool int);
17273 vector signed int vec_sel (vector signed int,
17274                            vector signed int,
17275                            vector unsigned int);
17276 vector unsigned int vec_sel (vector unsigned int,
17277                              vector unsigned int,
17278                              vector bool int);
17279 vector unsigned int vec_sel (vector unsigned int,
17280                              vector unsigned int,
17281                              vector unsigned int);
17282 vector bool int vec_sel (vector bool int,
17283                          vector bool int,
17284                          vector bool int);
17285 vector bool int vec_sel (vector bool int,
17286                          vector bool int,
17287                          vector unsigned int);
17288 vector signed short vec_sel (vector signed short,
17289                              vector signed short,
17290                              vector bool short);
17291 vector signed short vec_sel (vector signed short,
17292                              vector signed short,
17293                              vector unsigned short);
17294 vector unsigned short vec_sel (vector unsigned short,
17295                                vector unsigned short,
17296                                vector bool short);
17297 vector unsigned short vec_sel (vector unsigned short,
17298                                vector unsigned short,
17299                                vector unsigned short);
17300 vector bool short vec_sel (vector bool short,
17301                            vector bool short,
17302                            vector bool short);
17303 vector bool short vec_sel (vector bool short,
17304                            vector bool short,
17305                            vector unsigned short);
17306 vector signed char vec_sel (vector signed char,
17307                             vector signed char,
17308                             vector bool char);
17309 vector signed char vec_sel (vector signed char,
17310                             vector signed char,
17311                             vector unsigned char);
17312 vector unsigned char vec_sel (vector unsigned char,
17313                               vector unsigned char,
17314                               vector bool char);
17315 vector unsigned char vec_sel (vector unsigned char,
17316                               vector unsigned char,
17317                               vector unsigned char);
17318 vector bool char vec_sel (vector bool char,
17319                           vector bool char,
17320                           vector bool char);
17321 vector bool char vec_sel (vector bool char,
17322                           vector bool char,
17323                           vector unsigned char);
17325 vector signed long long vec_signed (vector double);
17326 vector signed int vec_signed (vector float);
17328 vector signed int vec_signede (vector double);
17329 vector signed int vec_signedo (vector double);
17330 vector signed int vec_signed2 (vector double, vector double);
17332 vector signed char vec_sl (vector signed char,
17333                            vector unsigned char);
17334 vector unsigned char vec_sl (vector unsigned char,
17335                              vector unsigned char);
17336 vector signed short vec_sl (vector signed short, vector unsigned short);
17337 vector unsigned short vec_sl (vector unsigned short,
17338                               vector unsigned short);
17339 vector signed int vec_sl (vector signed int, vector unsigned int);
17340 vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
17342 vector signed int vec_vslw (vector signed int, vector unsigned int);
17343 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
17345 vector signed short vec_vslh (vector signed short,
17346                               vector unsigned short);
17347 vector unsigned short vec_vslh (vector unsigned short,
17348                                 vector unsigned short);
17350 vector signed char vec_vslb (vector signed char, vector unsigned char);
17351 vector unsigned char vec_vslb (vector unsigned char,
17352                                vector unsigned char);
17354 vector float vec_sld (vector float, vector float, const int);
17355 vector double vec_sld (vector double, vector double, const int);
17357 vector signed int vec_sld (vector signed int,
17358                            vector signed int,
17359                            const int);
17360 vector unsigned int vec_sld (vector unsigned int,
17361                              vector unsigned int,
17362                              const int);
17363 vector bool int vec_sld (vector bool int,
17364                          vector bool int,
17365                          const int);
17366 vector signed short vec_sld (vector signed short,
17367                              vector signed short,
17368                              const int);
17369 vector unsigned short vec_sld (vector unsigned short,
17370                                vector unsigned short,
17371                                const int);
17372 vector bool short vec_sld (vector bool short,
17373                            vector bool short,
17374                            const int);
17375 vector pixel vec_sld (vector pixel,
17376                       vector pixel,
17377                       const int);
17378 vector signed char vec_sld (vector signed char,
17379                             vector signed char,
17380                             const int);
17381 vector unsigned char vec_sld (vector unsigned char,
17382                               vector unsigned char,
17383                               const int);
17384 vector bool char vec_sld (vector bool char,
17385                           vector bool char,
17386                           const int);
17387 vector bool long long int vec_sld (vector bool long long int,
17388                                    vector bool long long int, const int);
17389 vector long long int vec_sld (vector long long int,
17390                               vector  long long int, const int);
17391 vector unsigned long long int vec_sld (vector unsigned long long int,
17392                                        vector unsigned long long int,
17393                                        const int);
17395 vector signed char vec_sldw (vector signed char,
17396                              vector signed char,
17397                              const int);
17398 vector unsigned char vec_sldw (vector unsigned char,
17399                                vector unsigned char,
17400                                const int);
17401 vector signed short vec_sldw (vector signed short,
17402                               vector signed short,
17403                               const int);
17404 vector unsigned short vec_sldw (vector unsigned short,
17405                                 vector unsigned short,
17406                                 const int);
17407 vector signed int vec_sldw (vector signed int,
17408                             vector signed int,
17409                             const int);
17410 vector unsigned int vec_sldw (vector unsigned int,
17411                               vector unsigned int,
17412                               const int);
17413 vector signed long long vec_sldw (vector signed long long,
17414                                   vector signed long long,
17415                                   const int);
17416 vector unsigned long long vec_sldw (vector unsigned long long,
17417                                     vector unsigned long long,
17418                                     const int);
17420 vector signed int vec_sll (vector signed int,
17421                            vector unsigned int);
17422 vector signed int vec_sll (vector signed int,
17423                            vector unsigned short);
17424 vector signed int vec_sll (vector signed int,
17425                            vector unsigned char);
17426 vector unsigned int vec_sll (vector unsigned int,
17427                              vector unsigned int);
17428 vector unsigned int vec_sll (vector unsigned int,
17429                              vector unsigned short);
17430 vector unsigned int vec_sll (vector unsigned int,
17431                              vector unsigned char);
17432 vector bool int vec_sll (vector bool int,
17433                          vector unsigned int);
17434 vector bool int vec_sll (vector bool int,
17435                          vector unsigned short);
17436 vector bool int vec_sll (vector bool int,
17437                          vector unsigned char);
17438 vector signed short vec_sll (vector signed short,
17439                              vector unsigned int);
17440 vector signed short vec_sll (vector signed short,
17441                              vector unsigned short);
17442 vector signed short vec_sll (vector signed short,
17443                              vector unsigned char);
17444 vector unsigned short vec_sll (vector unsigned short,
17445                                vector unsigned int);
17446 vector unsigned short vec_sll (vector unsigned short,
17447                                vector unsigned short);
17448 vector unsigned short vec_sll (vector unsigned short,
17449                                vector unsigned char);
17450 vector long long int vec_sll (vector long long int,
17451                               vector unsigned char);
17452 vector unsigned long long int vec_sll (vector unsigned long long int,
17453                                        vector unsigned char);
17454 vector bool short vec_sll (vector bool short, vector unsigned int);
17455 vector bool short vec_sll (vector bool short, vector unsigned short);
17456 vector bool short vec_sll (vector bool short, vector unsigned char);
17457 vector pixel vec_sll (vector pixel, vector unsigned int);
17458 vector pixel vec_sll (vector pixel, vector unsigned short);
17459 vector pixel vec_sll (vector pixel, vector unsigned char);
17460 vector signed char vec_sll (vector signed char, vector unsigned int);
17461 vector signed char vec_sll (vector signed char, vector unsigned short);
17462 vector signed char vec_sll (vector signed char, vector unsigned char);
17463 vector unsigned char vec_sll (vector unsigned char,
17464                               vector unsigned int);
17465 vector unsigned char vec_sll (vector unsigned char,
17466                               vector unsigned short);
17467 vector unsigned char vec_sll (vector unsigned char,
17468                               vector unsigned char);
17469 vector bool char vec_sll (vector bool char, vector unsigned int);
17470 vector bool char vec_sll (vector bool char, vector unsigned short);
17471 vector bool char vec_sll (vector bool char, vector unsigned char);
17473 vector float vec_slo (vector float, vector signed char);
17474 vector float vec_slo (vector float, vector unsigned char);
17475 vector signed int vec_slo (vector signed int, vector signed char);
17476 vector signed int vec_slo (vector signed int, vector unsigned char);
17477 vector unsigned int vec_slo (vector unsigned int, vector signed char);
17478 vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
17479 vector signed short vec_slo (vector signed short, vector signed char);
17480 vector signed short vec_slo (vector signed short, vector unsigned char);
17481 vector unsigned short vec_slo (vector unsigned short,
17482                                vector signed char);
17483 vector unsigned short vec_slo (vector unsigned short,
17484                                vector unsigned char);
17485 vector pixel vec_slo (vector pixel, vector signed char);
17486 vector pixel vec_slo (vector pixel, vector unsigned char);
17487 vector signed char vec_slo (vector signed char, vector signed char);
17488 vector signed char vec_slo (vector signed char, vector unsigned char);
17489 vector unsigned char vec_slo (vector unsigned char, vector signed char);
17490 vector unsigned char vec_slo (vector unsigned char,
17491                               vector unsigned char);
17492 vector signed long long vec_slo (vector signed long long, vector signed char);
17493 vector signed long long vec_slo (vector signed long long, vector unsigned char);
17494 vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
17495 vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
17497 vector signed char vec_splat (vector signed char, const int);
17498 vector unsigned char vec_splat (vector unsigned char, const int);
17499 vector bool char vec_splat (vector bool char, const int);
17500 vector signed short vec_splat (vector signed short, const int);
17501 vector unsigned short vec_splat (vector unsigned short, const int);
17502 vector bool short vec_splat (vector bool short, const int);
17503 vector pixel vec_splat (vector pixel, const int);
17504 vector float vec_splat (vector float, const int);
17505 vector signed int vec_splat (vector signed int, const int);
17506 vector unsigned int vec_splat (vector unsigned int, const int);
17507 vector bool int vec_splat (vector bool int, const int);
17508 vector signed long vec_splat (vector signed long, const int);
17509 vector unsigned long vec_splat (vector unsigned long, const int);
17511 vector signed char vec_splats (signed char);
17512 vector unsigned char vec_splats (unsigned char);
17513 vector signed short vec_splats (signed short);
17514 vector unsigned short vec_splats (unsigned short);
17515 vector signed int vec_splats (signed int);
17516 vector unsigned int vec_splats (unsigned int);
17517 vector float vec_splats (float);
17519 vector float vec_vspltw (vector float, const int);
17520 vector signed int vec_vspltw (vector signed int, const int);
17521 vector unsigned int vec_vspltw (vector unsigned int, const int);
17522 vector bool int vec_vspltw (vector bool int, const int);
17524 vector bool short vec_vsplth (vector bool short, const int);
17525 vector signed short vec_vsplth (vector signed short, const int);
17526 vector unsigned short vec_vsplth (vector unsigned short, const int);
17527 vector pixel vec_vsplth (vector pixel, const int);
17529 vector signed char vec_vspltb (vector signed char, const int);
17530 vector unsigned char vec_vspltb (vector unsigned char, const int);
17531 vector bool char vec_vspltb (vector bool char, const int);
17533 vector signed char vec_splat_s8 (const int);
17535 vector signed short vec_splat_s16 (const int);
17537 vector signed int vec_splat_s32 (const int);
17539 vector unsigned char vec_splat_u8 (const int);
17541 vector unsigned short vec_splat_u16 (const int);
17543 vector unsigned int vec_splat_u32 (const int);
17545 vector signed char vec_sr (vector signed char, vector unsigned char);
17546 vector unsigned char vec_sr (vector unsigned char,
17547                              vector unsigned char);
17548 vector signed short vec_sr (vector signed short,
17549                             vector unsigned short);
17550 vector unsigned short vec_sr (vector unsigned short,
17551                               vector unsigned short);
17552 vector signed int vec_sr (vector signed int, vector unsigned int);
17553 vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
17555 vector signed int vec_vsrw (vector signed int, vector unsigned int);
17556 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
17558 vector signed short vec_vsrh (vector signed short,
17559                               vector unsigned short);
17560 vector unsigned short vec_vsrh (vector unsigned short,
17561                                 vector unsigned short);
17563 vector signed char vec_vsrb (vector signed char, vector unsigned char);
17564 vector unsigned char vec_vsrb (vector unsigned char,
17565                                vector unsigned char);
17567 vector signed char vec_sra (vector signed char, vector unsigned char);
17568 vector unsigned char vec_sra (vector unsigned char,
17569                               vector unsigned char);
17570 vector signed short vec_sra (vector signed short,
17571                              vector unsigned short);
17572 vector unsigned short vec_sra (vector unsigned short,
17573                                vector unsigned short);
17574 vector signed int vec_sra (vector signed int, vector unsigned int);
17575 vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
17577 vector signed int vec_vsraw (vector signed int, vector unsigned int);
17578 vector unsigned int vec_vsraw (vector unsigned int,
17579                                vector unsigned int);
17581 vector signed short vec_vsrah (vector signed short,
17582                                vector unsigned short);
17583 vector unsigned short vec_vsrah (vector unsigned short,
17584                                  vector unsigned short);
17586 vector signed char vec_vsrab (vector signed char, vector unsigned char);
17587 vector unsigned char vec_vsrab (vector unsigned char,
17588                                 vector unsigned char);
17590 vector signed int vec_srl (vector signed int, vector unsigned int);
17591 vector signed int vec_srl (vector signed int, vector unsigned short);
17592 vector signed int vec_srl (vector signed int, vector unsigned char);
17593 vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
17594 vector unsigned int vec_srl (vector unsigned int,
17595                              vector unsigned short);
17596 vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
17597 vector bool int vec_srl (vector bool int, vector unsigned int);
17598 vector bool int vec_srl (vector bool int, vector unsigned short);
17599 vector bool int vec_srl (vector bool int, vector unsigned char);
17600 vector signed short vec_srl (vector signed short, vector unsigned int);
17601 vector signed short vec_srl (vector signed short,
17602                              vector unsigned short);
17603 vector signed short vec_srl (vector signed short, vector unsigned char);
17604 vector unsigned short vec_srl (vector unsigned short,
17605                                vector unsigned int);
17606 vector unsigned short vec_srl (vector unsigned short,
17607                                vector unsigned short);
17608 vector unsigned short vec_srl (vector unsigned short,
17609                                vector unsigned char);
17610 vector long long int vec_srl (vector long long int,
17611                               vector unsigned char);
17612 vector unsigned long long int vec_srl (vector unsigned long long int,
17613                                        vector unsigned char);
17614 vector bool short vec_srl (vector bool short, vector unsigned int);
17615 vector bool short vec_srl (vector bool short, vector unsigned short);
17616 vector bool short vec_srl (vector bool short, vector unsigned char);
17617 vector pixel vec_srl (vector pixel, vector unsigned int);
17618 vector pixel vec_srl (vector pixel, vector unsigned short);
17619 vector pixel vec_srl (vector pixel, vector unsigned char);
17620 vector signed char vec_srl (vector signed char, vector unsigned int);
17621 vector signed char vec_srl (vector signed char, vector unsigned short);
17622 vector signed char vec_srl (vector signed char, vector unsigned char);
17623 vector unsigned char vec_srl (vector unsigned char,
17624                               vector unsigned int);
17625 vector unsigned char vec_srl (vector unsigned char,
17626                               vector unsigned short);
17627 vector unsigned char vec_srl (vector unsigned char,
17628                               vector unsigned char);
17629 vector bool char vec_srl (vector bool char, vector unsigned int);
17630 vector bool char vec_srl (vector bool char, vector unsigned short);
17631 vector bool char vec_srl (vector bool char, vector unsigned char);
17633 vector float vec_sro (vector float, vector signed char);
17634 vector float vec_sro (vector float, vector unsigned char);
17635 vector signed int vec_sro (vector signed int, vector signed char);
17636 vector signed int vec_sro (vector signed int, vector unsigned char);
17637 vector unsigned int vec_sro (vector unsigned int, vector signed char);
17638 vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
17639 vector signed short vec_sro (vector signed short, vector signed char);
17640 vector signed short vec_sro (vector signed short, vector unsigned char);
17641 vector unsigned short vec_sro (vector unsigned short,
17642                                vector signed char);
17643 vector unsigned short vec_sro (vector unsigned short,
17644                                vector unsigned char);
17645 vector long long int vec_sro (vector long long int,
17646                               vector char);
17647 vector long long int vec_sro (vector long long int,
17648                               vector unsigned char);
17649 vector unsigned long long int vec_sro (vector unsigned long long int,
17650                                        vector char);
17651 vector unsigned long long int vec_sro (vector unsigned long long int,
17652                                        vector unsigned char);
17653 vector pixel vec_sro (vector pixel, vector signed char);
17654 vector pixel vec_sro (vector pixel, vector unsigned char);
17655 vector signed char vec_sro (vector signed char, vector signed char);
17656 vector signed char vec_sro (vector signed char, vector unsigned char);
17657 vector unsigned char vec_sro (vector unsigned char, vector signed char);
17658 vector unsigned char vec_sro (vector unsigned char,
17659                               vector unsigned char);
17661 void vec_st (vector float, int, vector float *);
17662 void vec_st (vector float, int, float *);
17663 void vec_st (vector signed int, int, vector signed int *);
17664 void vec_st (vector signed int, int, int *);
17665 void vec_st (vector unsigned int, int, vector unsigned int *);
17666 void vec_st (vector unsigned int, int, unsigned int *);
17667 void vec_st (vector bool int, int, vector bool int *);
17668 void vec_st (vector bool int, int, unsigned int *);
17669 void vec_st (vector bool int, int, int *);
17670 void vec_st (vector signed short, int, vector signed short *);
17671 void vec_st (vector signed short, int, short *);
17672 void vec_st (vector unsigned short, int, vector unsigned short *);
17673 void vec_st (vector unsigned short, int, unsigned short *);
17674 void vec_st (vector bool short, int, vector bool short *);
17675 void vec_st (vector bool short, int, unsigned short *);
17676 void vec_st (vector pixel, int, vector pixel *);
17677 void vec_st (vector pixel, int, unsigned short *);
17678 void vec_st (vector pixel, int, short *);
17679 void vec_st (vector bool short, int, short *);
17680 void vec_st (vector signed char, int, vector signed char *);
17681 void vec_st (vector signed char, int, signed char *);
17682 void vec_st (vector unsigned char, int, vector unsigned char *);
17683 void vec_st (vector unsigned char, int, unsigned char *);
17684 void vec_st (vector bool char, int, vector bool char *);
17685 void vec_st (vector bool char, int, unsigned char *);
17686 void vec_st (vector bool char, int, signed char *);
17688 void vec_ste (vector signed char, int, signed char *);
17689 void vec_ste (vector unsigned char, int, unsigned char *);
17690 void vec_ste (vector bool char, int, signed char *);
17691 void vec_ste (vector bool char, int, unsigned char *);
17692 void vec_ste (vector signed short, int, short *);
17693 void vec_ste (vector unsigned short, int, unsigned short *);
17694 void vec_ste (vector bool short, int, short *);
17695 void vec_ste (vector bool short, int, unsigned short *);
17696 void vec_ste (vector pixel, int, short *);
17697 void vec_ste (vector pixel, int, unsigned short *);
17698 void vec_ste (vector float, int, float *);
17699 void vec_ste (vector signed int, int, int *);
17700 void vec_ste (vector unsigned int, int, unsigned int *);
17701 void vec_ste (vector bool int, int, int *);
17702 void vec_ste (vector bool int, int, unsigned int *);
17704 void vec_stvewx (vector float, int, float *);
17705 void vec_stvewx (vector signed int, int, int *);
17706 void vec_stvewx (vector unsigned int, int, unsigned int *);
17707 void vec_stvewx (vector bool int, int, int *);
17708 void vec_stvewx (vector bool int, int, unsigned int *);
17710 void vec_stvehx (vector signed short, int, short *);
17711 void vec_stvehx (vector unsigned short, int, unsigned short *);
17712 void vec_stvehx (vector bool short, int, short *);
17713 void vec_stvehx (vector bool short, int, unsigned short *);
17714 void vec_stvehx (vector pixel, int, short *);
17715 void vec_stvehx (vector pixel, int, unsigned short *);
17717 void vec_stvebx (vector signed char, int, signed char *);
17718 void vec_stvebx (vector unsigned char, int, unsigned char *);
17719 void vec_stvebx (vector bool char, int, signed char *);
17720 void vec_stvebx (vector bool char, int, unsigned char *);
17722 void vec_stl (vector float, int, vector float *);
17723 void vec_stl (vector float, int, float *);
17724 void vec_stl (vector signed int, int, vector signed int *);
17725 void vec_stl (vector signed int, int, int *);
17726 void vec_stl (vector unsigned int, int, vector unsigned int *);
17727 void vec_stl (vector unsigned int, int, unsigned int *);
17728 void vec_stl (vector bool int, int, vector bool int *);
17729 void vec_stl (vector bool int, int, unsigned int *);
17730 void vec_stl (vector bool int, int, int *);
17731 void vec_stl (vector signed short, int, vector signed short *);
17732 void vec_stl (vector signed short, int, short *);
17733 void vec_stl (vector unsigned short, int, vector unsigned short *);
17734 void vec_stl (vector unsigned short, int, unsigned short *);
17735 void vec_stl (vector bool short, int, vector bool short *);
17736 void vec_stl (vector bool short, int, unsigned short *);
17737 void vec_stl (vector bool short, int, short *);
17738 void vec_stl (vector pixel, int, vector pixel *);
17739 void vec_stl (vector pixel, int, unsigned short *);
17740 void vec_stl (vector pixel, int, short *);
17741 void vec_stl (vector signed char, int, vector signed char *);
17742 void vec_stl (vector signed char, int, signed char *);
17743 void vec_stl (vector unsigned char, int, vector unsigned char *);
17744 void vec_stl (vector unsigned char, int, unsigned char *);
17745 void vec_stl (vector bool char, int, vector bool char *);
17746 void vec_stl (vector bool char, int, unsigned char *);
17747 void vec_stl (vector bool char, int, signed char *);
17749 vector signed char vec_sub (vector bool char, vector signed char);
17750 vector signed char vec_sub (vector signed char, vector bool char);
17751 vector signed char vec_sub (vector signed char, vector signed char);
17752 vector unsigned char vec_sub (vector bool char, vector unsigned char);
17753 vector unsigned char vec_sub (vector unsigned char, vector bool char);
17754 vector unsigned char vec_sub (vector unsigned char,
17755                               vector unsigned char);
17756 vector signed short vec_sub (vector bool short, vector signed short);
17757 vector signed short vec_sub (vector signed short, vector bool short);
17758 vector signed short vec_sub (vector signed short, vector signed short);
17759 vector unsigned short vec_sub (vector bool short,
17760                                vector unsigned short);
17761 vector unsigned short vec_sub (vector unsigned short,
17762                                vector bool short);
17763 vector unsigned short vec_sub (vector unsigned short,
17764                                vector unsigned short);
17765 vector signed int vec_sub (vector bool int, vector signed int);
17766 vector signed int vec_sub (vector signed int, vector bool int);
17767 vector signed int vec_sub (vector signed int, vector signed int);
17768 vector unsigned int vec_sub (vector bool int, vector unsigned int);
17769 vector unsigned int vec_sub (vector unsigned int, vector bool int);
17770 vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
17771 vector float vec_sub (vector float, vector float);
17773 vector float vec_vsubfp (vector float, vector float);
17775 vector signed int vec_vsubuwm (vector bool int, vector signed int);
17776 vector signed int vec_vsubuwm (vector signed int, vector bool int);
17777 vector signed int vec_vsubuwm (vector signed int, vector signed int);
17778 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
17779 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
17780 vector unsigned int vec_vsubuwm (vector unsigned int,
17781                                  vector unsigned int);
17783 vector signed short vec_vsubuhm (vector bool short,
17784                                  vector signed short);
17785 vector signed short vec_vsubuhm (vector signed short,
17786                                  vector bool short);
17787 vector signed short vec_vsubuhm (vector signed short,
17788                                  vector signed short);
17789 vector unsigned short vec_vsubuhm (vector bool short,
17790                                    vector unsigned short);
17791 vector unsigned short vec_vsubuhm (vector unsigned short,
17792                                    vector bool short);
17793 vector unsigned short vec_vsubuhm (vector unsigned short,
17794                                    vector unsigned short);
17796 vector signed char vec_vsububm (vector bool char, vector signed char);
17797 vector signed char vec_vsububm (vector signed char, vector bool char);
17798 vector signed char vec_vsububm (vector signed char, vector signed char);
17799 vector unsigned char vec_vsububm (vector bool char,
17800                                   vector unsigned char);
17801 vector unsigned char vec_vsububm (vector unsigned char,
17802                                   vector bool char);
17803 vector unsigned char vec_vsububm (vector unsigned char,
17804                                   vector unsigned char);
17806 vector signed int vec_subc (vector signed int, vector signed int);
17807 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
17808 vector signed __int128 vec_subc (vector signed __int128,
17809                                  vector signed __int128);
17810 vector unsigned __int128 vec_subc (vector unsigned __int128,
17811                                    vector unsigned __int128);
17813 vector signed int vec_sube (vector signed int, vector signed int,
17814                             vector signed int);
17815 vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
17816                               vector unsigned int);
17817 vector signed __int128 vec_sube (vector signed __int128,
17818                                  vector signed __int128,
17819                                  vector signed __int128);
17820 vector unsigned __int128 vec_sube (vector unsigned __int128,
17821                                    vector unsigned __int128,
17822                                    vector unsigned __int128);
17824 vector signed int vec_subec (vector signed int, vector signed int,
17825                              vector signed int);
17826 vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
17827                                vector unsigned int);
17828 vector signed __int128 vec_subec (vector signed __int128,
17829                                   vector signed __int128,
17830                                   vector signed __int128);
17831 vector unsigned __int128 vec_subec (vector unsigned __int128,
17832                                     vector unsigned __int128,
17833                                     vector unsigned __int128);
17835 vector unsigned char vec_subs (vector bool char, vector unsigned char);
17836 vector unsigned char vec_subs (vector unsigned char, vector bool char);
17837 vector unsigned char vec_subs (vector unsigned char,
17838                                vector unsigned char);
17839 vector signed char vec_subs (vector bool char, vector signed char);
17840 vector signed char vec_subs (vector signed char, vector bool char);
17841 vector signed char vec_subs (vector signed char, vector signed char);
17842 vector unsigned short vec_subs (vector bool short,
17843                                 vector unsigned short);
17844 vector unsigned short vec_subs (vector unsigned short,
17845                                 vector bool short);
17846 vector unsigned short vec_subs (vector unsigned short,
17847                                 vector unsigned short);
17848 vector signed short vec_subs (vector bool short, vector signed short);
17849 vector signed short vec_subs (vector signed short, vector bool short);
17850 vector signed short vec_subs (vector signed short, vector signed short);
17851 vector unsigned int vec_subs (vector bool int, vector unsigned int);
17852 vector unsigned int vec_subs (vector unsigned int, vector bool int);
17853 vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
17854 vector signed int vec_subs (vector bool int, vector signed int);
17855 vector signed int vec_subs (vector signed int, vector bool int);
17856 vector signed int vec_subs (vector signed int, vector signed int);
17858 vector signed int vec_vsubsws (vector bool int, vector signed int);
17859 vector signed int vec_vsubsws (vector signed int, vector bool int);
17860 vector signed int vec_vsubsws (vector signed int, vector signed int);
17862 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
17863 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
17864 vector unsigned int vec_vsubuws (vector unsigned int,
17865                                  vector unsigned int);
17867 vector signed short vec_vsubshs (vector bool short,
17868                                  vector signed short);
17869 vector signed short vec_vsubshs (vector signed short,
17870                                  vector bool short);
17871 vector signed short vec_vsubshs (vector signed short,
17872                                  vector signed short);
17874 vector unsigned short vec_vsubuhs (vector bool short,
17875                                    vector unsigned short);
17876 vector unsigned short vec_vsubuhs (vector unsigned short,
17877                                    vector bool short);
17878 vector unsigned short vec_vsubuhs (vector unsigned short,
17879                                    vector unsigned short);
17881 vector signed char vec_vsubsbs (vector bool char, vector signed char);
17882 vector signed char vec_vsubsbs (vector signed char, vector bool char);
17883 vector signed char vec_vsubsbs (vector signed char, vector signed char);
17885 vector unsigned char vec_vsububs (vector bool char,
17886                                   vector unsigned char);
17887 vector unsigned char vec_vsububs (vector unsigned char,
17888                                   vector bool char);
17889 vector unsigned char vec_vsububs (vector unsigned char,
17890                                   vector unsigned char);
17892 vector unsigned int vec_sum4s (vector unsigned char,
17893                                vector unsigned int);
17894 vector signed int vec_sum4s (vector signed char, vector signed int);
17895 vector signed int vec_sum4s (vector signed short, vector signed int);
17897 vector signed int vec_vsum4shs (vector signed short, vector signed int);
17899 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
17901 vector unsigned int vec_vsum4ubs (vector unsigned char,
17902                                   vector unsigned int);
17904 vector signed int vec_sum2s (vector signed int, vector signed int);
17906 vector signed int vec_sums (vector signed int, vector signed int);
17908 vector float vec_trunc (vector float);
17910 vector signed long long vec_unsigned (vector double);
17911 vector signed int vec_unsigned (vector float);
17913 vector signed int vec_unsignede (vector double);
17914 vector signed int vec_unsignedo (vector double);
17915 vector signed int vec_unsigned2 (vector double, vector double);
17917 vector signed short vec_unpackh (vector signed char);
17918 vector bool short vec_unpackh (vector bool char);
17919 vector signed int vec_unpackh (vector signed short);
17920 vector bool int vec_unpackh (vector bool short);
17921 vector unsigned int vec_unpackh (vector pixel);
17922 vector double vec_unpackh (vector float);
17924 vector bool int vec_vupkhsh (vector bool short);
17925 vector signed int vec_vupkhsh (vector signed short);
17927 vector unsigned int vec_vupkhpx (vector pixel);
17929 vector bool short vec_vupkhsb (vector bool char);
17930 vector signed short vec_vupkhsb (vector signed char);
17932 vector signed short vec_unpackl (vector signed char);
17933 vector bool short vec_unpackl (vector bool char);
17934 vector unsigned int vec_unpackl (vector pixel);
17935 vector signed int vec_unpackl (vector signed short);
17936 vector bool int vec_unpackl (vector bool short);
17937 vector double vec_unpackl (vector float);
17939 vector unsigned int vec_vupklpx (vector pixel);
17941 vector bool int vec_vupklsh (vector bool short);
17942 vector signed int vec_vupklsh (vector signed short);
17944 vector bool short vec_vupklsb (vector bool char);
17945 vector signed short vec_vupklsb (vector signed char);
17947 vector float vec_xor (vector float, vector float);
17948 vector float vec_xor (vector float, vector bool int);
17949 vector float vec_xor (vector bool int, vector float);
17950 vector bool int vec_xor (vector bool int, vector bool int);
17951 vector signed int vec_xor (vector bool int, vector signed int);
17952 vector signed int vec_xor (vector signed int, vector bool int);
17953 vector signed int vec_xor (vector signed int, vector signed int);
17954 vector unsigned int vec_xor (vector bool int, vector unsigned int);
17955 vector unsigned int vec_xor (vector unsigned int, vector bool int);
17956 vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
17957 vector bool short vec_xor (vector bool short, vector bool short);
17958 vector signed short vec_xor (vector bool short, vector signed short);
17959 vector signed short vec_xor (vector signed short, vector bool short);
17960 vector signed short vec_xor (vector signed short, vector signed short);
17961 vector unsigned short vec_xor (vector bool short,
17962                                vector unsigned short);
17963 vector unsigned short vec_xor (vector unsigned short,
17964                                vector bool short);
17965 vector unsigned short vec_xor (vector unsigned short,
17966                                vector unsigned short);
17967 vector signed char vec_xor (vector bool char, vector signed char);
17968 vector bool char vec_xor (vector bool char, vector bool char);
17969 vector signed char vec_xor (vector signed char, vector bool char);
17970 vector signed char vec_xor (vector signed char, vector signed char);
17971 vector unsigned char vec_xor (vector bool char, vector unsigned char);
17972 vector unsigned char vec_xor (vector unsigned char, vector bool char);
17973 vector unsigned char vec_xor (vector unsigned char,
17974                               vector unsigned char);
17976 int vec_all_eq (vector signed char, vector bool char);
17977 int vec_all_eq (vector signed char, vector signed char);
17978 int vec_all_eq (vector unsigned char, vector bool char);
17979 int vec_all_eq (vector unsigned char, vector unsigned char);
17980 int vec_all_eq (vector bool char, vector bool char);
17981 int vec_all_eq (vector bool char, vector unsigned char);
17982 int vec_all_eq (vector bool char, vector signed char);
17983 int vec_all_eq (vector signed short, vector bool short);
17984 int vec_all_eq (vector signed short, vector signed short);
17985 int vec_all_eq (vector unsigned short, vector bool short);
17986 int vec_all_eq (vector unsigned short, vector unsigned short);
17987 int vec_all_eq (vector bool short, vector bool short);
17988 int vec_all_eq (vector bool short, vector unsigned short);
17989 int vec_all_eq (vector bool short, vector signed short);
17990 int vec_all_eq (vector pixel, vector pixel);
17991 int vec_all_eq (vector signed int, vector bool int);
17992 int vec_all_eq (vector signed int, vector signed int);
17993 int vec_all_eq (vector unsigned int, vector bool int);
17994 int vec_all_eq (vector unsigned int, vector unsigned int);
17995 int vec_all_eq (vector bool int, vector bool int);
17996 int vec_all_eq (vector bool int, vector unsigned int);
17997 int vec_all_eq (vector bool int, vector signed int);
17998 int vec_all_eq (vector float, vector float);
18000 int vec_all_ge (vector bool char, vector unsigned char);
18001 int vec_all_ge (vector unsigned char, vector bool char);
18002 int vec_all_ge (vector unsigned char, vector unsigned char);
18003 int vec_all_ge (vector bool char, vector signed char);
18004 int vec_all_ge (vector signed char, vector bool char);
18005 int vec_all_ge (vector signed char, vector signed char);
18006 int vec_all_ge (vector bool short, vector unsigned short);
18007 int vec_all_ge (vector unsigned short, vector bool short);
18008 int vec_all_ge (vector unsigned short, vector unsigned short);
18009 int vec_all_ge (vector signed short, vector signed short);
18010 int vec_all_ge (vector bool short, vector signed short);
18011 int vec_all_ge (vector signed short, vector bool short);
18012 int vec_all_ge (vector bool int, vector unsigned int);
18013 int vec_all_ge (vector unsigned int, vector bool int);
18014 int vec_all_ge (vector unsigned int, vector unsigned int);
18015 int vec_all_ge (vector bool int, vector signed int);
18016 int vec_all_ge (vector signed int, vector bool int);
18017 int vec_all_ge (vector signed int, vector signed int);
18018 int vec_all_ge (vector float, vector float);
18020 int vec_all_gt (vector bool char, vector unsigned char);
18021 int vec_all_gt (vector unsigned char, vector bool char);
18022 int vec_all_gt (vector unsigned char, vector unsigned char);
18023 int vec_all_gt (vector bool char, vector signed char);
18024 int vec_all_gt (vector signed char, vector bool char);
18025 int vec_all_gt (vector signed char, vector signed char);
18026 int vec_all_gt (vector bool short, vector unsigned short);
18027 int vec_all_gt (vector unsigned short, vector bool short);
18028 int vec_all_gt (vector unsigned short, vector unsigned short);
18029 int vec_all_gt (vector bool short, vector signed short);
18030 int vec_all_gt (vector signed short, vector bool short);
18031 int vec_all_gt (vector signed short, vector signed short);
18032 int vec_all_gt (vector bool int, vector unsigned int);
18033 int vec_all_gt (vector unsigned int, vector bool int);
18034 int vec_all_gt (vector unsigned int, vector unsigned int);
18035 int vec_all_gt (vector bool int, vector signed int);
18036 int vec_all_gt (vector signed int, vector bool int);
18037 int vec_all_gt (vector signed int, vector signed int);
18038 int vec_all_gt (vector float, vector float);
18040 int vec_all_in (vector float, vector float);
18042 int vec_all_le (vector bool char, vector unsigned char);
18043 int vec_all_le (vector unsigned char, vector bool char);
18044 int vec_all_le (vector unsigned char, vector unsigned char);
18045 int vec_all_le (vector bool char, vector signed char);
18046 int vec_all_le (vector signed char, vector bool char);
18047 int vec_all_le (vector signed char, vector signed char);
18048 int vec_all_le (vector bool short, vector unsigned short);
18049 int vec_all_le (vector unsigned short, vector bool short);
18050 int vec_all_le (vector unsigned short, vector unsigned short);
18051 int vec_all_le (vector bool short, vector signed short);
18052 int vec_all_le (vector signed short, vector bool short);
18053 int vec_all_le (vector signed short, vector signed short);
18054 int vec_all_le (vector bool int, vector unsigned int);
18055 int vec_all_le (vector unsigned int, vector bool int);
18056 int vec_all_le (vector unsigned int, vector unsigned int);
18057 int vec_all_le (vector bool int, vector signed int);
18058 int vec_all_le (vector signed int, vector bool int);
18059 int vec_all_le (vector signed int, vector signed int);
18060 int vec_all_le (vector float, vector float);
18062 int vec_all_lt (vector bool char, vector unsigned char);
18063 int vec_all_lt (vector unsigned char, vector bool char);
18064 int vec_all_lt (vector unsigned char, vector unsigned char);
18065 int vec_all_lt (vector bool char, vector signed char);
18066 int vec_all_lt (vector signed char, vector bool char);
18067 int vec_all_lt (vector signed char, vector signed char);
18068 int vec_all_lt (vector bool short, vector unsigned short);
18069 int vec_all_lt (vector unsigned short, vector bool short);
18070 int vec_all_lt (vector unsigned short, vector unsigned short);
18071 int vec_all_lt (vector bool short, vector signed short);
18072 int vec_all_lt (vector signed short, vector bool short);
18073 int vec_all_lt (vector signed short, vector signed short);
18074 int vec_all_lt (vector bool int, vector unsigned int);
18075 int vec_all_lt (vector unsigned int, vector bool int);
18076 int vec_all_lt (vector unsigned int, vector unsigned int);
18077 int vec_all_lt (vector bool int, vector signed int);
18078 int vec_all_lt (vector signed int, vector bool int);
18079 int vec_all_lt (vector signed int, vector signed int);
18080 int vec_all_lt (vector float, vector float);
18082 int vec_all_nan (vector float);
18084 int vec_all_ne (vector signed char, vector bool char);
18085 int vec_all_ne (vector signed char, vector signed char);
18086 int vec_all_ne (vector unsigned char, vector bool char);
18087 int vec_all_ne (vector unsigned char, vector unsigned char);
18088 int vec_all_ne (vector bool char, vector bool char);
18089 int vec_all_ne (vector bool char, vector unsigned char);
18090 int vec_all_ne (vector bool char, vector signed char);
18091 int vec_all_ne (vector signed short, vector bool short);
18092 int vec_all_ne (vector signed short, vector signed short);
18093 int vec_all_ne (vector unsigned short, vector bool short);
18094 int vec_all_ne (vector unsigned short, vector unsigned short);
18095 int vec_all_ne (vector bool short, vector bool short);
18096 int vec_all_ne (vector bool short, vector unsigned short);
18097 int vec_all_ne (vector bool short, vector signed short);
18098 int vec_all_ne (vector pixel, vector pixel);
18099 int vec_all_ne (vector signed int, vector bool int);
18100 int vec_all_ne (vector signed int, vector signed int);
18101 int vec_all_ne (vector unsigned int, vector bool int);
18102 int vec_all_ne (vector unsigned int, vector unsigned int);
18103 int vec_all_ne (vector bool int, vector bool int);
18104 int vec_all_ne (vector bool int, vector unsigned int);
18105 int vec_all_ne (vector bool int, vector signed int);
18106 int vec_all_ne (vector float, vector float);
18108 int vec_all_nge (vector float, vector float);
18110 int vec_all_ngt (vector float, vector float);
18112 int vec_all_nle (vector float, vector float);
18114 int vec_all_nlt (vector float, vector float);
18116 int vec_all_numeric (vector float);
18118 int vec_any_eq (vector signed char, vector bool char);
18119 int vec_any_eq (vector signed char, vector signed char);
18120 int vec_any_eq (vector unsigned char, vector bool char);
18121 int vec_any_eq (vector unsigned char, vector unsigned char);
18122 int vec_any_eq (vector bool char, vector bool char);
18123 int vec_any_eq (vector bool char, vector unsigned char);
18124 int vec_any_eq (vector bool char, vector signed char);
18125 int vec_any_eq (vector signed short, vector bool short);
18126 int vec_any_eq (vector signed short, vector signed short);
18127 int vec_any_eq (vector unsigned short, vector bool short);
18128 int vec_any_eq (vector unsigned short, vector unsigned short);
18129 int vec_any_eq (vector bool short, vector bool short);
18130 int vec_any_eq (vector bool short, vector unsigned short);
18131 int vec_any_eq (vector bool short, vector signed short);
18132 int vec_any_eq (vector pixel, vector pixel);
18133 int vec_any_eq (vector signed int, vector bool int);
18134 int vec_any_eq (vector signed int, vector signed int);
18135 int vec_any_eq (vector unsigned int, vector bool int);
18136 int vec_any_eq (vector unsigned int, vector unsigned int);
18137 int vec_any_eq (vector bool int, vector bool int);
18138 int vec_any_eq (vector bool int, vector unsigned int);
18139 int vec_any_eq (vector bool int, vector signed int);
18140 int vec_any_eq (vector float, vector float);
18142 int vec_any_ge (vector signed char, vector bool char);
18143 int vec_any_ge (vector unsigned char, vector bool char);
18144 int vec_any_ge (vector unsigned char, vector unsigned char);
18145 int vec_any_ge (vector signed char, vector signed char);
18146 int vec_any_ge (vector bool char, vector unsigned char);
18147 int vec_any_ge (vector bool char, vector signed char);
18148 int vec_any_ge (vector unsigned short, vector bool short);
18149 int vec_any_ge (vector unsigned short, vector unsigned short);
18150 int vec_any_ge (vector signed short, vector signed short);
18151 int vec_any_ge (vector signed short, vector bool short);
18152 int vec_any_ge (vector bool short, vector unsigned short);
18153 int vec_any_ge (vector bool short, vector signed short);
18154 int vec_any_ge (vector signed int, vector bool int);
18155 int vec_any_ge (vector unsigned int, vector bool int);
18156 int vec_any_ge (vector unsigned int, vector unsigned int);
18157 int vec_any_ge (vector signed int, vector signed int);
18158 int vec_any_ge (vector bool int, vector unsigned int);
18159 int vec_any_ge (vector bool int, vector signed int);
18160 int vec_any_ge (vector float, vector float);
18162 int vec_any_gt (vector bool char, vector unsigned char);
18163 int vec_any_gt (vector unsigned char, vector bool char);
18164 int vec_any_gt (vector unsigned char, vector unsigned char);
18165 int vec_any_gt (vector bool char, vector signed char);
18166 int vec_any_gt (vector signed char, vector bool char);
18167 int vec_any_gt (vector signed char, vector signed char);
18168 int vec_any_gt (vector bool short, vector unsigned short);
18169 int vec_any_gt (vector unsigned short, vector bool short);
18170 int vec_any_gt (vector unsigned short, vector unsigned short);
18171 int vec_any_gt (vector bool short, vector signed short);
18172 int vec_any_gt (vector signed short, vector bool short);
18173 int vec_any_gt (vector signed short, vector signed short);
18174 int vec_any_gt (vector bool int, vector unsigned int);
18175 int vec_any_gt (vector unsigned int, vector bool int);
18176 int vec_any_gt (vector unsigned int, vector unsigned int);
18177 int vec_any_gt (vector bool int, vector signed int);
18178 int vec_any_gt (vector signed int, vector bool int);
18179 int vec_any_gt (vector signed int, vector signed int);
18180 int vec_any_gt (vector float, vector float);
18182 int vec_any_le (vector bool char, vector unsigned char);
18183 int vec_any_le (vector unsigned char, vector bool char);
18184 int vec_any_le (vector unsigned char, vector unsigned char);
18185 int vec_any_le (vector bool char, vector signed char);
18186 int vec_any_le (vector signed char, vector bool char);
18187 int vec_any_le (vector signed char, vector signed char);
18188 int vec_any_le (vector bool short, vector unsigned short);
18189 int vec_any_le (vector unsigned short, vector bool short);
18190 int vec_any_le (vector unsigned short, vector unsigned short);
18191 int vec_any_le (vector bool short, vector signed short);
18192 int vec_any_le (vector signed short, vector bool short);
18193 int vec_any_le (vector signed short, vector signed short);
18194 int vec_any_le (vector bool int, vector unsigned int);
18195 int vec_any_le (vector unsigned int, vector bool int);
18196 int vec_any_le (vector unsigned int, vector unsigned int);
18197 int vec_any_le (vector bool int, vector signed int);
18198 int vec_any_le (vector signed int, vector bool int);
18199 int vec_any_le (vector signed int, vector signed int);
18200 int vec_any_le (vector float, vector float);
18202 int vec_any_lt (vector bool char, vector unsigned char);
18203 int vec_any_lt (vector unsigned char, vector bool char);
18204 int vec_any_lt (vector unsigned char, vector unsigned char);
18205 int vec_any_lt (vector bool char, vector signed char);
18206 int vec_any_lt (vector signed char, vector bool char);
18207 int vec_any_lt (vector signed char, vector signed char);
18208 int vec_any_lt (vector bool short, vector unsigned short);
18209 int vec_any_lt (vector unsigned short, vector bool short);
18210 int vec_any_lt (vector unsigned short, vector unsigned short);
18211 int vec_any_lt (vector bool short, vector signed short);
18212 int vec_any_lt (vector signed short, vector bool short);
18213 int vec_any_lt (vector signed short, vector signed short);
18214 int vec_any_lt (vector bool int, vector unsigned int);
18215 int vec_any_lt (vector unsigned int, vector bool int);
18216 int vec_any_lt (vector unsigned int, vector unsigned int);
18217 int vec_any_lt (vector bool int, vector signed int);
18218 int vec_any_lt (vector signed int, vector bool int);
18219 int vec_any_lt (vector signed int, vector signed int);
18220 int vec_any_lt (vector float, vector float);
18222 int vec_any_nan (vector float);
18224 int vec_any_ne (vector signed char, vector bool char);
18225 int vec_any_ne (vector signed char, vector signed char);
18226 int vec_any_ne (vector unsigned char, vector bool char);
18227 int vec_any_ne (vector unsigned char, vector unsigned char);
18228 int vec_any_ne (vector bool char, vector bool char);
18229 int vec_any_ne (vector bool char, vector unsigned char);
18230 int vec_any_ne (vector bool char, vector signed char);
18231 int vec_any_ne (vector signed short, vector bool short);
18232 int vec_any_ne (vector signed short, vector signed short);
18233 int vec_any_ne (vector unsigned short, vector bool short);
18234 int vec_any_ne (vector unsigned short, vector unsigned short);
18235 int vec_any_ne (vector bool short, vector bool short);
18236 int vec_any_ne (vector bool short, vector unsigned short);
18237 int vec_any_ne (vector bool short, vector signed short);
18238 int vec_any_ne (vector pixel, vector pixel);
18239 int vec_any_ne (vector signed int, vector bool int);
18240 int vec_any_ne (vector signed int, vector signed int);
18241 int vec_any_ne (vector unsigned int, vector bool int);
18242 int vec_any_ne (vector unsigned int, vector unsigned int);
18243 int vec_any_ne (vector bool int, vector bool int);
18244 int vec_any_ne (vector bool int, vector unsigned int);
18245 int vec_any_ne (vector bool int, vector signed int);
18246 int vec_any_ne (vector float, vector float);
18248 int vec_any_nge (vector float, vector float);
18250 int vec_any_ngt (vector float, vector float);
18252 int vec_any_nle (vector float, vector float);
18254 int vec_any_nlt (vector float, vector float);
18256 int vec_any_numeric (vector float);
18258 int vec_any_out (vector float, vector float);
18259 @end smallexample
18261 If the vector/scalar (VSX) instruction set is available, the following
18262 additional functions are available:
18264 @smallexample
18265 vector double vec_abs (vector double);
18266 vector double vec_add (vector double, vector double);
18267 vector double vec_and (vector double, vector double);
18268 vector double vec_and (vector double, vector bool long);
18269 vector double vec_and (vector bool long, vector double);
18270 vector long vec_and (vector long, vector long);
18271 vector long vec_and (vector long, vector bool long);
18272 vector long vec_and (vector bool long, vector long);
18273 vector unsigned long vec_and (vector unsigned long, vector unsigned long);
18274 vector unsigned long vec_and (vector unsigned long, vector bool long);
18275 vector unsigned long vec_and (vector bool long, vector unsigned long);
18276 vector double vec_andc (vector double, vector double);
18277 vector double vec_andc (vector double, vector bool long);
18278 vector double vec_andc (vector bool long, vector double);
18279 vector long vec_andc (vector long, vector long);
18280 vector long vec_andc (vector long, vector bool long);
18281 vector long vec_andc (vector bool long, vector long);
18282 vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
18283 vector unsigned long vec_andc (vector unsigned long, vector bool long);
18284 vector unsigned long vec_andc (vector bool long, vector unsigned long);
18285 vector double vec_ceil (vector double);
18286 vector bool long vec_cmpeq (vector double, vector double);
18287 vector bool long vec_cmpge (vector double, vector double);
18288 vector bool long vec_cmpgt (vector double, vector double);
18289 vector bool long vec_cmple (vector double, vector double);
18290 vector bool long vec_cmplt (vector double, vector double);
18291 vector double vec_cpsgn (vector double, vector double);
18292 vector float vec_div (vector float, vector float);
18293 vector double vec_div (vector double, vector double);
18294 vector long vec_div (vector long, vector long);
18295 vector unsigned long vec_div (vector unsigned long, vector unsigned long);
18296 vector double vec_floor (vector double);
18297 vector double vec_ld (int, const vector double *);
18298 vector double vec_ld (int, const double *);
18299 vector double vec_ldl (int, const vector double *);
18300 vector double vec_ldl (int, const double *);
18301 vector unsigned char vec_lvsl (int, const volatile double *);
18302 vector unsigned char vec_lvsr (int, const volatile double *);
18303 vector double vec_madd (vector double, vector double, vector double);
18304 vector double vec_max (vector double, vector double);
18305 vector signed long vec_mergeh (vector signed long, vector signed long);
18306 vector signed long vec_mergeh (vector signed long, vector bool long);
18307 vector signed long vec_mergeh (vector bool long, vector signed long);
18308 vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
18309 vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
18310 vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
18311 vector signed long vec_mergel (vector signed long, vector signed long);
18312 vector signed long vec_mergel (vector signed long, vector bool long);
18313 vector signed long vec_mergel (vector bool long, vector signed long);
18314 vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
18315 vector unsigned long vec_mergel (vector unsigned long, vector bool long);
18316 vector unsigned long vec_mergel (vector bool long, vector unsigned long);
18317 vector double vec_min (vector double, vector double);
18318 vector float vec_msub (vector float, vector float, vector float);
18319 vector double vec_msub (vector double, vector double, vector double);
18320 vector float vec_mul (vector float, vector float);
18321 vector double vec_mul (vector double, vector double);
18322 vector long vec_mul (vector long, vector long);
18323 vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
18324 vector float vec_nearbyint (vector float);
18325 vector double vec_nearbyint (vector double);
18326 vector float vec_nmadd (vector float, vector float, vector float);
18327 vector double vec_nmadd (vector double, vector double, vector double);
18328 vector double vec_nmsub (vector double, vector double, vector double);
18329 vector double vec_nor (vector double, vector double);
18330 vector long vec_nor (vector long, vector long);
18331 vector long vec_nor (vector long, vector bool long);
18332 vector long vec_nor (vector bool long, vector long);
18333 vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
18334 vector unsigned long vec_nor (vector unsigned long, vector bool long);
18335 vector unsigned long vec_nor (vector bool long, vector unsigned long);
18336 vector double vec_or (vector double, vector double);
18337 vector double vec_or (vector double, vector bool long);
18338 vector double vec_or (vector bool long, vector double);
18339 vector long vec_or (vector long, vector long);
18340 vector long vec_or (vector long, vector bool long);
18341 vector long vec_or (vector bool long, vector long);
18342 vector unsigned long vec_or (vector unsigned long, vector unsigned long);
18343 vector unsigned long vec_or (vector unsigned long, vector bool long);
18344 vector unsigned long vec_or (vector bool long, vector unsigned long);
18345 vector double vec_perm (vector double, vector double, vector unsigned char);
18346 vector long vec_perm (vector long, vector long, vector unsigned char);
18347 vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
18348                                vector unsigned char);
18349 vector double vec_rint (vector double);
18350 vector double vec_recip (vector double, vector double);
18351 vector double vec_rsqrt (vector double);
18352 vector double vec_rsqrte (vector double);
18353 vector double vec_sel (vector double, vector double, vector bool long);
18354 vector double vec_sel (vector double, vector double, vector unsigned long);
18355 vector long vec_sel (vector long, vector long, vector long);
18356 vector long vec_sel (vector long, vector long, vector unsigned long);
18357 vector long vec_sel (vector long, vector long, vector bool long);
18358 vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
18359                               vector long);
18360 vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
18361                               vector unsigned long);
18362 vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
18363                               vector bool long);
18364 vector double vec_splats (double);
18365 vector signed long vec_splats (signed long);
18366 vector unsigned long vec_splats (unsigned long);
18367 vector float vec_sqrt (vector float);
18368 vector double vec_sqrt (vector double);
18369 void vec_st (vector double, int, vector double *);
18370 void vec_st (vector double, int, double *);
18371 vector double vec_sub (vector double, vector double);
18372 vector double vec_trunc (vector double);
18373 vector double vec_xl (int, vector double *);
18374 vector double vec_xl (int, double *);
18375 vector long long vec_xl (int, vector long long *);
18376 vector long long vec_xl (int, long long *);
18377 vector unsigned long long vec_xl (int, vector unsigned long long *);
18378 vector unsigned long long vec_xl (int, unsigned long long *);
18379 vector float vec_xl (int, vector float *);
18380 vector float vec_xl (int, float *);
18381 vector int vec_xl (int, vector int *);
18382 vector int vec_xl (int, int *);
18383 vector unsigned int vec_xl (int, vector unsigned int *);
18384 vector unsigned int vec_xl (int, unsigned int *);
18385 vector double vec_xor (vector double, vector double);
18386 vector double vec_xor (vector double, vector bool long);
18387 vector double vec_xor (vector bool long, vector double);
18388 vector long vec_xor (vector long, vector long);
18389 vector long vec_xor (vector long, vector bool long);
18390 vector long vec_xor (vector bool long, vector long);
18391 vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
18392 vector unsigned long vec_xor (vector unsigned long, vector bool long);
18393 vector unsigned long vec_xor (vector bool long, vector unsigned long);
18394 void vec_xst (vector double, int, vector double *);
18395 void vec_xst (vector double, int, double *);
18396 void vec_xst (vector long long, int, vector long long *);
18397 void vec_xst (vector long long, int, long long *);
18398 void vec_xst (vector unsigned long long, int, vector unsigned long long *);
18399 void vec_xst (vector unsigned long long, int, unsigned long long *);
18400 void vec_xst (vector float, int, vector float *);
18401 void vec_xst (vector float, int, float *);
18402 void vec_xst (vector int, int, vector int *);
18403 void vec_xst (vector int, int, int *);
18404 void vec_xst (vector unsigned int, int, vector unsigned int *);
18405 void vec_xst (vector unsigned int, int, unsigned int *);
18406 int vec_all_eq (vector double, vector double);
18407 int vec_all_ge (vector double, vector double);
18408 int vec_all_gt (vector double, vector double);
18409 int vec_all_le (vector double, vector double);
18410 int vec_all_lt (vector double, vector double);
18411 int vec_all_nan (vector double);
18412 int vec_all_ne (vector double, vector double);
18413 int vec_all_nge (vector double, vector double);
18414 int vec_all_ngt (vector double, vector double);
18415 int vec_all_nle (vector double, vector double);
18416 int vec_all_nlt (vector double, vector double);
18417 int vec_all_numeric (vector double);
18418 int vec_any_eq (vector double, vector double);
18419 int vec_any_ge (vector double, vector double);
18420 int vec_any_gt (vector double, vector double);
18421 int vec_any_le (vector double, vector double);
18422 int vec_any_lt (vector double, vector double);
18423 int vec_any_nan (vector double);
18424 int vec_any_ne (vector double, vector double);
18425 int vec_any_nge (vector double, vector double);
18426 int vec_any_ngt (vector double, vector double);
18427 int vec_any_nle (vector double, vector double);
18428 int vec_any_nlt (vector double, vector double);
18429 int vec_any_numeric (vector double);
18431 vector double vec_vsx_ld (int, const vector double *);
18432 vector double vec_vsx_ld (int, const double *);
18433 vector float vec_vsx_ld (int, const vector float *);
18434 vector float vec_vsx_ld (int, const float *);
18435 vector bool int vec_vsx_ld (int, const vector bool int *);
18436 vector signed int vec_vsx_ld (int, const vector signed int *);
18437 vector signed int vec_vsx_ld (int, const int *);
18438 vector signed int vec_vsx_ld (int, const long *);
18439 vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
18440 vector unsigned int vec_vsx_ld (int, const unsigned int *);
18441 vector unsigned int vec_vsx_ld (int, const unsigned long *);
18442 vector bool short vec_vsx_ld (int, const vector bool short *);
18443 vector pixel vec_vsx_ld (int, const vector pixel *);
18444 vector signed short vec_vsx_ld (int, const vector signed short *);
18445 vector signed short vec_vsx_ld (int, const short *);
18446 vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
18447 vector unsigned short vec_vsx_ld (int, const unsigned short *);
18448 vector bool char vec_vsx_ld (int, const vector bool char *);
18449 vector signed char vec_vsx_ld (int, const vector signed char *);
18450 vector signed char vec_vsx_ld (int, const signed char *);
18451 vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
18452 vector unsigned char vec_vsx_ld (int, const unsigned char *);
18454 void vec_vsx_st (vector double, int, vector double *);
18455 void vec_vsx_st (vector double, int, double *);
18456 void vec_vsx_st (vector float, int, vector float *);
18457 void vec_vsx_st (vector float, int, float *);
18458 void vec_vsx_st (vector signed int, int, vector signed int *);
18459 void vec_vsx_st (vector signed int, int, int *);
18460 void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
18461 void vec_vsx_st (vector unsigned int, int, unsigned int *);
18462 void vec_vsx_st (vector bool int, int, vector bool int *);
18463 void vec_vsx_st (vector bool int, int, unsigned int *);
18464 void vec_vsx_st (vector bool int, int, int *);
18465 void vec_vsx_st (vector signed short, int, vector signed short *);
18466 void vec_vsx_st (vector signed short, int, short *);
18467 void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
18468 void vec_vsx_st (vector unsigned short, int, unsigned short *);
18469 void vec_vsx_st (vector bool short, int, vector bool short *);
18470 void vec_vsx_st (vector bool short, int, unsigned short *);
18471 void vec_vsx_st (vector pixel, int, vector pixel *);
18472 void vec_vsx_st (vector pixel, int, unsigned short *);
18473 void vec_vsx_st (vector pixel, int, short *);
18474 void vec_vsx_st (vector bool short, int, short *);
18475 void vec_vsx_st (vector signed char, int, vector signed char *);
18476 void vec_vsx_st (vector signed char, int, signed char *);
18477 void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
18478 void vec_vsx_st (vector unsigned char, int, unsigned char *);
18479 void vec_vsx_st (vector bool char, int, vector bool char *);
18480 void vec_vsx_st (vector bool char, int, unsigned char *);
18481 void vec_vsx_st (vector bool char, int, signed char *);
18483 vector double vec_xxpermdi (vector double, vector double, const int);
18484 vector float vec_xxpermdi (vector float, vector float, const int);
18485 vector long long vec_xxpermdi (vector long long, vector long long, const int);
18486 vector unsigned long long vec_xxpermdi (vector unsigned long long,
18487                                         vector unsigned long long, const int);
18488 vector int vec_xxpermdi (vector int, vector int, const int);
18489 vector unsigned int vec_xxpermdi (vector unsigned int,
18490                                   vector unsigned int, const int);
18491 vector short vec_xxpermdi (vector short, vector short, const int);
18492 vector unsigned short vec_xxpermdi (vector unsigned short,
18493                                     vector unsigned short, const int);
18494 vector signed char vec_xxpermdi (vector signed char, vector signed char,
18495                                  const int);
18496 vector unsigned char vec_xxpermdi (vector unsigned char,
18497                                    vector unsigned char, const int);
18499 vector double vec_xxsldi (vector double, vector double, int);
18500 vector float vec_xxsldi (vector float, vector float, int);
18501 vector long long vec_xxsldi (vector long long, vector long long, int);
18502 vector unsigned long long vec_xxsldi (vector unsigned long long,
18503                                       vector unsigned long long, int);
18504 vector int vec_xxsldi (vector int, vector int, int);
18505 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
18506 vector short vec_xxsldi (vector short, vector short, int);
18507 vector unsigned short vec_xxsldi (vector unsigned short,
18508                                   vector unsigned short, int);
18509 vector signed char vec_xxsldi (vector signed char, vector signed char, int);
18510 vector unsigned char vec_xxsldi (vector unsigned char,
18511                                  vector unsigned char, int);
18512 @end smallexample
18514 Note that the @samp{vec_ld} and @samp{vec_st} built-in functions always
18515 generate the AltiVec @samp{LVX} and @samp{STVX} instructions even
18516 if the VSX instruction set is available.  The @samp{vec_vsx_ld} and
18517 @samp{vec_vsx_st} built-in functions always generate the VSX @samp{LXVD2X},
18518 @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions.
18520 If the ISA 2.07 additions to the vector/scalar (power8-vector)
18521 instruction set are available, the following additional functions are
18522 available for both 32-bit and 64-bit targets.  For 64-bit targets, you
18523 can use @var{vector long} instead of @var{vector long long},
18524 @var{vector bool long} instead of @var{vector bool long long}, and
18525 @var{vector unsigned long} instead of @var{vector unsigned long long}.
18527 @smallexample
18528 vector long long vec_abs (vector long long);
18530 vector long long vec_add (vector long long, vector long long);
18531 vector unsigned long long vec_add (vector unsigned long long,
18532                                    vector unsigned long long);
18534 int vec_all_eq (vector long long, vector long long);
18535 int vec_all_eq (vector unsigned long long, vector unsigned long long);
18536 int vec_all_ge (vector long long, vector long long);
18537 int vec_all_ge (vector unsigned long long, vector unsigned long long);
18538 int vec_all_gt (vector long long, vector long long);
18539 int vec_all_gt (vector unsigned long long, vector unsigned long long);
18540 int vec_all_le (vector long long, vector long long);
18541 int vec_all_le (vector unsigned long long, vector unsigned long long);
18542 int vec_all_lt (vector long long, vector long long);
18543 int vec_all_lt (vector unsigned long long, vector unsigned long long);
18544 int vec_all_ne (vector long long, vector long long);
18545 int vec_all_ne (vector unsigned long long, vector unsigned long long);
18547 int vec_any_eq (vector long long, vector long long);
18548 int vec_any_eq (vector unsigned long long, vector unsigned long long);
18549 int vec_any_ge (vector long long, vector long long);
18550 int vec_any_ge (vector unsigned long long, vector unsigned long long);
18551 int vec_any_gt (vector long long, vector long long);
18552 int vec_any_gt (vector unsigned long long, vector unsigned long long);
18553 int vec_any_le (vector long long, vector long long);
18554 int vec_any_le (vector unsigned long long, vector unsigned long long);
18555 int vec_any_lt (vector long long, vector long long);
18556 int vec_any_lt (vector unsigned long long, vector unsigned long long);
18557 int vec_any_ne (vector long long, vector long long);
18558 int vec_any_ne (vector unsigned long long, vector unsigned long long);
18560 vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
18562 vector long long vec_eqv (vector long long, vector long long);
18563 vector long long vec_eqv (vector bool long long, vector long long);
18564 vector long long vec_eqv (vector long long, vector bool long long);
18565 vector unsigned long long vec_eqv (vector unsigned long long,
18566                                    vector unsigned long long);
18567 vector unsigned long long vec_eqv (vector bool long long,
18568                                    vector unsigned long long);
18569 vector unsigned long long vec_eqv (vector unsigned long long,
18570                                    vector bool long long);
18571 vector int vec_eqv (vector int, vector int);
18572 vector int vec_eqv (vector bool int, vector int);
18573 vector int vec_eqv (vector int, vector bool int);
18574 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
18575 vector unsigned int vec_eqv (vector bool unsigned int,
18576                              vector unsigned int);
18577 vector unsigned int vec_eqv (vector unsigned int,
18578                              vector bool unsigned int);
18579 vector short vec_eqv (vector short, vector short);
18580 vector short vec_eqv (vector bool short, vector short);
18581 vector short vec_eqv (vector short, vector bool short);
18582 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
18583 vector unsigned short vec_eqv (vector bool unsigned short,
18584                                vector unsigned short);
18585 vector unsigned short vec_eqv (vector unsigned short,
18586                                vector bool unsigned short);
18587 vector signed char vec_eqv (vector signed char, vector signed char);
18588 vector signed char vec_eqv (vector bool signed char, vector signed char);
18589 vector signed char vec_eqv (vector signed char, vector bool signed char);
18590 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
18591 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
18592 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
18594 vector long long vec_max (vector long long, vector long long);
18595 vector unsigned long long vec_max (vector unsigned long long,
18596                                    vector unsigned long long);
18598 vector signed int vec_mergee (vector signed int, vector signed int);
18599 vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
18600 vector bool int vec_mergee (vector bool int, vector bool int);
18602 vector signed int vec_mergeo (vector signed int, vector signed int);
18603 vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
18604 vector bool int vec_mergeo (vector bool int, vector bool int);
18606 vector long long vec_min (vector long long, vector long long);
18607 vector unsigned long long vec_min (vector unsigned long long,
18608                                    vector unsigned long long);
18610 vector signed long long vec_nabs (vector signed long long);
18612 vector long long vec_nand (vector long long, vector long long);
18613 vector long long vec_nand (vector bool long long, vector long long);
18614 vector long long vec_nand (vector long long, vector bool long long);
18615 vector unsigned long long vec_nand (vector unsigned long long,
18616                                     vector unsigned long long);
18617 vector unsigned long long vec_nand (vector bool long long,
18618                                    vector unsigned long long);
18619 vector unsigned long long vec_nand (vector unsigned long long,
18620                                     vector bool long long);
18621 vector int vec_nand (vector int, vector int);
18622 vector int vec_nand (vector bool int, vector int);
18623 vector int vec_nand (vector int, vector bool int);
18624 vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
18625 vector unsigned int vec_nand (vector bool unsigned int,
18626                               vector unsigned int);
18627 vector unsigned int vec_nand (vector unsigned int,
18628                               vector bool unsigned int);
18629 vector short vec_nand (vector short, vector short);
18630 vector short vec_nand (vector bool short, vector short);
18631 vector short vec_nand (vector short, vector bool short);
18632 vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
18633 vector unsigned short vec_nand (vector bool unsigned short,
18634                                 vector unsigned short);
18635 vector unsigned short vec_nand (vector unsigned short,
18636                                 vector bool unsigned short);
18637 vector signed char vec_nand (vector signed char, vector signed char);
18638 vector signed char vec_nand (vector bool signed char, vector signed char);
18639 vector signed char vec_nand (vector signed char, vector bool signed char);
18640 vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
18641 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
18642 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
18644 vector long long vec_orc (vector long long, vector long long);
18645 vector long long vec_orc (vector bool long long, vector long long);
18646 vector long long vec_orc (vector long long, vector bool long long);
18647 vector unsigned long long vec_orc (vector unsigned long long,
18648                                    vector unsigned long long);
18649 vector unsigned long long vec_orc (vector bool long long,
18650                                    vector unsigned long long);
18651 vector unsigned long long vec_orc (vector unsigned long long,
18652                                    vector bool long long);
18653 vector int vec_orc (vector int, vector int);
18654 vector int vec_orc (vector bool int, vector int);
18655 vector int vec_orc (vector int, vector bool int);
18656 vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
18657 vector unsigned int vec_orc (vector bool unsigned int,
18658                              vector unsigned int);
18659 vector unsigned int vec_orc (vector unsigned int,
18660                              vector bool unsigned int);
18661 vector short vec_orc (vector short, vector short);
18662 vector short vec_orc (vector bool short, vector short);
18663 vector short vec_orc (vector short, vector bool short);
18664 vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
18665 vector unsigned short vec_orc (vector bool unsigned short,
18666                                vector unsigned short);
18667 vector unsigned short vec_orc (vector unsigned short,
18668                                vector bool unsigned short);
18669 vector signed char vec_orc (vector signed char, vector signed char);
18670 vector signed char vec_orc (vector bool signed char, vector signed char);
18671 vector signed char vec_orc (vector signed char, vector bool signed char);
18672 vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
18673 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
18674 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
18676 vector int vec_pack (vector long long, vector long long);
18677 vector unsigned int vec_pack (vector unsigned long long,
18678                               vector unsigned long long);
18679 vector bool int vec_pack (vector bool long long, vector bool long long);
18680 vector float vec_pack (vector double, vector double);
18682 vector int vec_packs (vector long long, vector long long);
18683 vector unsigned int vec_packs (vector unsigned long long,
18684                                vector unsigned long long);
18686 test_vsi_packsu_vssi_vssi (vector signed short x,
18688 vector unsigned char vec_packsu (vector signed short, vector signed short )
18689 vector unsigned char vec_packsu (vector unsigned short, vector unsigned short )
18690 vector unsigned short int vec_packsu (vector signed int, vector signed int);
18691 vector unsigned short int vec_packsu (vector unsigned int,
18692                                       vector unsigned int);
18693 vector unsigned int vec_packsu (vector long long, vector long long);
18694 vector unsigned int vec_packsu (vector unsigned long long,
18695                                 vector unsigned long long);
18696 vector unsigned int vec_packsu (vector signed long long,
18697                                 vector signed long long);
18699 vector unsigned char vec_popcnt (vector signed char);
18700 vector unsigned char vec_popcnt (vector unsigned char);
18701 vector unsigned short vec_popcnt (vector signed short);
18702 vector unsigned short vec_popcnt (vector unsigned short);
18703 vector unsigned int vec_popcnt (vector signed int);
18704 vector unsigned int vec_popcnt (vector unsigned int);
18705 vector unsigned long long vec_popcnt (vector signed long long);
18706 vector unsigned long long vec_popcnt (vector unsigned long long);
18708 vector long long vec_rl (vector long long,
18709                          vector unsigned long long);
18710 vector long long vec_rl (vector unsigned long long,
18711                          vector unsigned long long);
18713 vector long long vec_sl (vector long long, vector unsigned long long);
18714 vector long long vec_sl (vector unsigned long long,
18715                          vector unsigned long long);
18717 vector long long vec_sr (vector long long, vector unsigned long long);
18718 vector unsigned long long char vec_sr (vector unsigned long long,
18719                                        vector unsigned long long);
18721 vector long long vec_sra (vector long long, vector unsigned long long);
18722 vector unsigned long long vec_sra (vector unsigned long long,
18723                                    vector unsigned long long);
18725 vector long long vec_sub (vector long long, vector long long);
18726 vector unsigned long long vec_sub (vector unsigned long long,
18727                                    vector unsigned long long);
18729 vector long long vec_unpackh (vector int);
18730 vector unsigned long long vec_unpackh (vector unsigned int);
18732 vector long long vec_unpackl (vector int);
18733 vector unsigned long long vec_unpackl (vector unsigned int);
18735 vector long long vec_vaddudm (vector long long, vector long long);
18736 vector long long vec_vaddudm (vector bool long long, vector long long);
18737 vector long long vec_vaddudm (vector long long, vector bool long long);
18738 vector unsigned long long vec_vaddudm (vector unsigned long long,
18739                                        vector unsigned long long);
18740 vector unsigned long long vec_vaddudm (vector bool unsigned long long,
18741                                        vector unsigned long long);
18742 vector unsigned long long vec_vaddudm (vector unsigned long long,
18743                                        vector bool unsigned long long);
18745 vector long long vec_vbpermq (vector signed char, vector signed char);
18746 vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
18748 vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
18749 vector unsigned char vec_bperm (vector unsigned long long,
18750                                 vector unsigned char);
18751 vector unsigned long long vec_bperm (vector unsigned __int128,
18752                                      vector unsigned char);
18754 vector long long vec_cntlz (vector long long);
18755 vector unsigned long long vec_cntlz (vector unsigned long long);
18756 vector int vec_cntlz (vector int);
18757 vector unsigned int vec_cntlz (vector int);
18758 vector short vec_cntlz (vector short);
18759 vector unsigned short vec_cntlz (vector unsigned short);
18760 vector signed char vec_cntlz (vector signed char);
18761 vector unsigned char vec_cntlz (vector unsigned char);
18763 vector long long vec_vclz (vector long long);
18764 vector unsigned long long vec_vclz (vector unsigned long long);
18765 vector int vec_vclz (vector int);
18766 vector unsigned int vec_vclz (vector int);
18767 vector short vec_vclz (vector short);
18768 vector unsigned short vec_vclz (vector unsigned short);
18769 vector signed char vec_vclz (vector signed char);
18770 vector unsigned char vec_vclz (vector unsigned char);
18772 vector signed char vec_vclzb (vector signed char);
18773 vector unsigned char vec_vclzb (vector unsigned char);
18775 vector long long vec_vclzd (vector long long);
18776 vector unsigned long long vec_vclzd (vector unsigned long long);
18778 vector short vec_vclzh (vector short);
18779 vector unsigned short vec_vclzh (vector unsigned short);
18781 vector int vec_vclzw (vector int);
18782 vector unsigned int vec_vclzw (vector int);
18784 vector signed char vec_vgbbd (vector signed char);
18785 vector unsigned char vec_vgbbd (vector unsigned char);
18787 vector long long vec_vmaxsd (vector long long, vector long long);
18789 vector unsigned long long vec_vmaxud (vector unsigned long long,
18790                                       unsigned vector long long);
18792 vector long long vec_vminsd (vector long long, vector long long);
18794 vector unsigned long long vec_vminud (vector long long,
18795                                       vector long long);
18797 vector int vec_vpksdss (vector long long, vector long long);
18798 vector unsigned int vec_vpksdss (vector long long, vector long long);
18800 vector unsigned int vec_vpkudus (vector unsigned long long,
18801                                  vector unsigned long long);
18803 vector int vec_vpkudum (vector long long, vector long long);
18804 vector unsigned int vec_vpkudum (vector unsigned long long,
18805                                  vector unsigned long long);
18806 vector bool int vec_vpkudum (vector bool long long, vector bool long long);
18808 vector long long vec_vpopcnt (vector long long);
18809 vector unsigned long long vec_vpopcnt (vector unsigned long long);
18810 vector int vec_vpopcnt (vector int);
18811 vector unsigned int vec_vpopcnt (vector int);
18812 vector short vec_vpopcnt (vector short);
18813 vector unsigned short vec_vpopcnt (vector unsigned short);
18814 vector signed char vec_vpopcnt (vector signed char);
18815 vector unsigned char vec_vpopcnt (vector unsigned char);
18817 vector signed char vec_vpopcntb (vector signed char);
18818 vector unsigned char vec_vpopcntb (vector unsigned char);
18820 vector long long vec_vpopcntd (vector long long);
18821 vector unsigned long long vec_vpopcntd (vector unsigned long long);
18823 vector short vec_vpopcnth (vector short);
18824 vector unsigned short vec_vpopcnth (vector unsigned short);
18826 vector int vec_vpopcntw (vector int);
18827 vector unsigned int vec_vpopcntw (vector int);
18829 vector long long vec_vrld (vector long long, vector unsigned long long);
18830 vector unsigned long long vec_vrld (vector unsigned long long,
18831                                     vector unsigned long long);
18833 vector long long vec_vsld (vector long long, vector unsigned long long);
18834 vector long long vec_vsld (vector unsigned long long,
18835                            vector unsigned long long);
18837 vector long long vec_vsrad (vector long long, vector unsigned long long);
18838 vector unsigned long long vec_vsrad (vector unsigned long long,
18839                                      vector unsigned long long);
18841 vector long long vec_vsrd (vector long long, vector unsigned long long);
18842 vector unsigned long long char vec_vsrd (vector unsigned long long,
18843                                          vector unsigned long long);
18845 vector long long vec_vsubudm (vector long long, vector long long);
18846 vector long long vec_vsubudm (vector bool long long, vector long long);
18847 vector long long vec_vsubudm (vector long long, vector bool long long);
18848 vector unsigned long long vec_vsubudm (vector unsigned long long,
18849                                        vector unsigned long long);
18850 vector unsigned long long vec_vsubudm (vector bool long long,
18851                                        vector unsigned long long);
18852 vector unsigned long long vec_vsubudm (vector unsigned long long,
18853                                        vector bool long long);
18855 vector long long vec_vupkhsw (vector int);
18856 vector unsigned long long vec_vupkhsw (vector unsigned int);
18858 vector long long vec_vupklsw (vector int);
18859 vector unsigned long long vec_vupklsw (vector int);
18860 @end smallexample
18862 If the ISA 2.07 additions to the vector/scalar (power8-vector)
18863 instruction set are available, the following additional functions are
18864 available for 64-bit targets.  New vector types
18865 (@var{vector __int128_t} and @var{vector __uint128_t}) are available
18866 to hold the @var{__int128_t} and @var{__uint128_t} types to use these
18867 builtins.
18869 The normal vector extract, and set operations work on
18870 @var{vector __int128_t} and @var{vector __uint128_t} types,
18871 but the index value must be 0.
18873 @smallexample
18874 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
18875 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
18877 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
18878 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
18880 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
18881                                 vector __int128_t);
18882 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
18883                                  vector __uint128_t);
18885 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
18886                                 vector __int128_t);
18887 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
18888                                  vector __uint128_t);
18890 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
18891                                 vector __int128_t);
18892 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
18893                                  vector __uint128_t);
18895 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
18896                                 vector __int128_t);
18897 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
18898                                  vector __uint128_t);
18900 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
18901 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
18903 __int128_t vec_vsubuqm (__int128_t, __int128_t);
18904 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
18906 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
18907 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
18908 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
18909 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
18910 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
18911 vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
18912 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
18913 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
18914 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
18915 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
18916 @end smallexample
18918 If the ISA 3.0 instruction set additions (@option{-mcpu=power9})
18919 are available:
18921 @smallexample
18922 vector unsigned long long vec_bperm (vector unsigned long long,
18923                                      vector unsigned char);
18925 vector bool char vec_cmpne (vector bool char, vector bool char);
18926 vector bool char vec_cmpne (vector signed char, vector signed char);
18927 vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
18928 vector bool int vec_cmpne (vector bool int, vector bool int);
18929 vector bool int vec_cmpne (vector signed int, vector signed int);
18930 vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
18931 vector bool long long vec_cmpne (vector bool long long, vector bool long long);
18932 vector bool long long vec_cmpne (vector signed long long,
18933                                  vector signed long long);
18934 vector bool long long vec_cmpne (vector unsigned long long,
18935                                  vector unsigned long long);
18936 vector bool short vec_cmpne (vector bool short, vector bool short);
18937 vector bool short vec_cmpne (vector signed short, vector signed short);
18938 vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
18939 vector bool long long vec_cmpne (vector double, vector double);
18940 vector bool int vec_cmpne (vector float, vector float);
18942 vector float vec_extract_fp32_from_shorth (vector unsigned short);
18943 vector float vec_extract_fp32_from_shortl (vector unsigned short);
18945 vector long long vec_vctz (vector long long);
18946 vector unsigned long long vec_vctz (vector unsigned long long);
18947 vector int vec_vctz (vector int);
18948 vector unsigned int vec_vctz (vector int);
18949 vector short vec_vctz (vector short);
18950 vector unsigned short vec_vctz (vector unsigned short);
18951 vector signed char vec_vctz (vector signed char);
18952 vector unsigned char vec_vctz (vector unsigned char);
18954 vector signed char vec_vctzb (vector signed char);
18955 vector unsigned char vec_vctzb (vector unsigned char);
18957 vector long long vec_vctzd (vector long long);
18958 vector unsigned long long vec_vctzd (vector unsigned long long);
18960 vector short vec_vctzh (vector short);
18961 vector unsigned short vec_vctzh (vector unsigned short);
18963 vector int vec_vctzw (vector int);
18964 vector unsigned int vec_vctzw (vector int);
18966 long long vec_vextract4b (const vector signed char, const int);
18967 long long vec_vextract4b (const vector unsigned char, const int);
18969 vector signed char vec_insert4b (vector int, vector signed char, const int);
18970 vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
18971                                    const int);
18972 vector signed char vec_insert4b (long long, vector signed char, const int);
18973 vector unsigned char vec_insert4b (long long, vector unsigned char, const int);
18975 vector unsigned int vec_parity_lsbb (vector signed int);
18976 vector unsigned int vec_parity_lsbb (vector unsigned int);
18977 vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
18978 vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
18979 vector unsigned long long vec_parity_lsbb (vector signed long long);
18980 vector unsigned long long vec_parity_lsbb (vector unsigned long long);
18982 vector int vec_vprtyb (vector int);
18983 vector unsigned int vec_vprtyb (vector unsigned int);
18984 vector long long vec_vprtyb (vector long long);
18985 vector unsigned long long vec_vprtyb (vector unsigned long long);
18987 vector int vec_vprtybw (vector int);
18988 vector unsigned int vec_vprtybw (vector unsigned int);
18990 vector long long vec_vprtybd (vector long long);
18991 vector unsigned long long vec_vprtybd (vector unsigned long long);
18992 @end smallexample
18994 On 64-bit targets, if the ISA 3.0 additions (@option{-mcpu=power9})
18995 are available:
18997 @smallexample
18998 vector long vec_vprtyb (vector long);
18999 vector unsigned long vec_vprtyb (vector unsigned long);
19000 vector __int128_t vec_vprtyb (vector __int128_t);
19001 vector __uint128_t vec_vprtyb (vector __uint128_t);
19003 vector long vec_vprtybd (vector long);
19004 vector unsigned long vec_vprtybd (vector unsigned long);
19006 vector __int128_t vec_vprtybq (vector __int128_t);
19007 vector __uint128_t vec_vprtybd (vector __uint128_t);
19008 @end smallexample
19010 The following built-in vector functions are available for the PowerPC family
19011 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
19012 @smallexample
19013 __vector unsigned char
19014 vec_slv (__vector unsigned char src, __vector unsigned char shift_distance);
19015 __vector unsigned char
19016 vec_srv (__vector unsigned char src, __vector unsigned char shift_distance);
19017 @end smallexample
19019 The @code{vec_slv} and @code{vec_srv} functions operate on
19020 all of the bytes of their @code{src} and @code{shift_distance}
19021 arguments in parallel.  The behavior of the @code{vec_slv} is as if
19022 there existed a temporary array of 17 unsigned characters
19023 @code{slv_array} within which elements 0 through 15 are the same as
19024 the entries in the @code{src} array and element 16 equals 0.  The
19025 result returned from the @code{vec_slv} function is a
19026 @code{__vector} of 16 unsigned characters within which element
19027 @code{i} is computed using the C expression
19028 @code{0xff & (*((unsigned short *)(slv_array + i)) << (0x07 &
19029 shift_distance[i]))},
19030 with this resulting value coerced to the @code{unsigned char} type.
19031 The behavior of the @code{vec_srv} is as if
19032 there existed a temporary array of 17 unsigned characters
19033 @code{srv_array} within which element 0 equals zero and
19034 elements 1 through 16 equal the elements 0 through 15 of
19035 the @code{src} array.  The
19036 result returned from the @code{vec_srv} function is a
19037 @code{__vector} of 16 unsigned characters within which element
19038 @code{i} is computed using the C expression
19039 @code{0xff & (*((unsigned short *)(srv_array + i)) >>
19040 (0x07 & shift_distance[i]))},
19041 with this resulting value coerced to the @code{unsigned char} type.
19043 The following built-in functions are available for the PowerPC family
19044 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
19045 @smallexample
19046 __vector unsigned char
19047 vec_absd (__vector unsigned char arg1, __vector unsigned char arg2);
19048 __vector unsigned short
19049 vec_absd (__vector unsigned short arg1, __vector unsigned short arg2);
19050 __vector unsigned int
19051 vec_absd (__vector unsigned int arg1, __vector unsigned int arg2);
19053 __vector unsigned char
19054 vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
19055 __vector unsigned short
19056 vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
19057 __vector unsigned int
19058 vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
19059 @end smallexample
19061 The @code{vec_absd}, @code{vec_absdb}, @code{vec_absdh}, and
19062 @code{vec_absdw} built-in functions each computes the absolute
19063 differences of the pairs of vector elements supplied in its two vector
19064 arguments, placing the absolute differences into the corresponding
19065 elements of the vector result.
19067 The following built-in functions are available for the PowerPC family
19068 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
19069 @smallexample
19070 __vector unsigned int
19071 vec_extract_exp (__vector float source);
19072 __vector unsigned long long int
19073 vec_extract_exp (__vector double source);
19075 __vector unsigned int
19076 vec_extract_sig (__vector float source);
19077 __vector unsigned long long int
19078 vec_extract_sig (__vector double source);
19080 __vector float
19081 vec_insert_exp (__vector unsigned int significands,
19082                 __vector unsigned int exponents);
19083 __vector float
19084 vec_insert_exp (__vector unsigned float significands,
19085                 __vector unsigned int exponents);
19086 __vector double
19087 vec_insert_exp (__vector unsigned long long int significands,
19088                 __vector unsigned long long int exponents);
19089 __vector double
19090 vec_insert_exp (__vector unsigned double significands,
19091                 __vector unsigned long long int exponents);
19093 __vector bool int vec_test_data_class (__vector float source,
19094                                        const int condition);
19095 __vector bool long long int vec_test_data_class (__vector double source,
19096                                                  const int condition);
19097 @end smallexample
19099 The @code{vec_extract_sig} and @code{vec_extract_exp} built-in
19100 functions return vectors representing the significands and biased
19101 exponent values of their @code{source} arguments respectively.
19102 Within the result vector returned by @code{vec_extract_sig}, the
19103 @code{0x800000} bit of each vector element returned when the
19104 function's @code{source} argument is of type @code{float} is set to 1
19105 if the corresponding floating point value is in normalized form.
19106 Otherwise, this bit is set to 0.  When the @code{source} argument is
19107 of type @code{double}, the @code{0x10000000000000} bit within each of
19108 the result vector's elements is set according to the same rules.
19109 Note that the sign of the significand is not represented in the result
19110 returned from the @code{vec_extract_sig} function.  To extract the
19111 sign bits, use the
19112 @code{vec_cpsgn} function, which returns a new vector within which all
19113 of the sign bits of its second argument vector are overwritten with the
19114 sign bits copied from the coresponding elements of its first argument
19115 vector, and all other (non-sign) bits of the second argument vector
19116 are copied unchanged into the result vector.
19118 The @code{vec_insert_exp} built-in functions return a vector of
19119 single- or double-precision floating
19120 point values constructed by assembling the values of their
19121 @code{significands} and @code{exponents} arguments into the
19122 corresponding elements of the returned vector.
19123 The sign of each
19124 element of the result is copied from the most significant bit of the
19125 corresponding entry within the @code{significands} argument.
19126 Note that the relevant
19127 bits of the @code{significands} argument are the same, for both integer
19128 and floating point types.
19130 significand and exponent components of each element of the result are
19131 composed of the least significant bits of the corresponding
19132 @code{significands} element and the least significant bits of the
19133 corresponding @code{exponents} element.
19135 The @code{vec_test_data_class} built-in function returns a vector
19136 representing the results of testing the @code{source} vector for the
19137 condition selected by the @code{condition} argument.  The
19138 @code{condition} argument must be a compile-time constant integer with
19139 value not exceeding 127.  The
19140 @code{condition} argument is encoded as a bitmask with each bit
19141 enabling the testing of a different condition, as characterized by the
19142 following:
19143 @smallexample
19144 0x40    Test for NaN
19145 0x20    Test for +Infinity
19146 0x10    Test for -Infinity
19147 0x08    Test for +Zero
19148 0x04    Test for -Zero
19149 0x02    Test for +Denormal
19150 0x01    Test for -Denormal
19151 @end smallexample
19153 If any of the enabled test conditions is true, the corresponding entry
19154 in the result vector is -1.  Otherwise (all of the enabled test
19155 conditions are false), the corresponding entry of the result vector is 0.
19157 The following built-in functions are available for the PowerPC family
19158 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
19159 @smallexample
19160 vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int,
19161                               vector unsigned int);
19162 vector unsigned long long vec_rlmi (vector unsigned long long,
19163                                     vector unsigned long long,
19164                                     vector unsigned long long);
19165 vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int,
19166                               vector unsigned int);
19167 vector unsigned long long vec_rlnm (vector unsigned long long,
19168                                     vector unsigned long long,
19169                                     vector unsigned long long);
19170 vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
19171 vector unsigned long long vec_vrlnm (vector unsigned long long,
19172                                      vector unsigned long long);
19173 @end smallexample
19175 The result of @code{vec_rlmi} is obtained by rotating each element of
19176 the first argument vector left and inserting it under mask into the
19177 second argument vector.  The third argument vector contains the mask
19178 beginning in bits 11:15, the mask end in bits 19:23, and the shift
19179 count in bits 27:31, of each element.
19181 The result of @code{vec_rlnm} is obtained by rotating each element of
19182 the first argument vector left and ANDing it with a mask specified by
19183 the second and third argument vectors.  The second argument vector
19184 contains the shift count for each element in the low-order byte.  The
19185 third argument vector contains the mask end for each element in the
19186 low-order byte, with the mask begin in the next higher byte.
19188 The result of @code{vec_vrlnm} is obtained by rotating each element
19189 of the first argument vector left and ANDing it with a mask.  The
19190 second argument vector contains the mask  beginning in bits 11:15,
19191 the mask end in bits 19:23, and the shift count in bits 27:31,
19192 of each element.
19194 If the ISA 3.0 instruction set additions (@option{-mcpu=power9})
19195 are available:
19196 @smallexample
19197 vector signed bool char vec_revb (vector signed char);
19198 vector signed char vec_revb (vector signed char);
19199 vector unsigned char vec_revb (vector unsigned char);
19200 vector bool short vec_revb (vector bool short);
19201 vector short vec_revb (vector short);
19202 vector unsigned short vec_revb (vector unsigned short);
19203 vector bool int vec_revb (vector bool int);
19204 vector int vec_revb (vector int);
19205 vector unsigned int vec_revb (vector unsigned int);
19206 vector float vec_revb (vector float);
19207 vector bool long long vec_revb (vector bool long long);
19208 vector long long vec_revb (vector long long);
19209 vector unsigned long long vec_revb (vector unsigned long long);
19210 vector double vec_revb (vector double);
19211 @end smallexample
19213 On 64-bit targets, if the ISA 3.0 additions (@option{-mcpu=power9})
19214 are available:
19215 @smallexample
19216 vector long vec_revb (vector long);
19217 vector unsigned long vec_revb (vector unsigned long);
19218 vector __int128_t vec_revb (vector __int128_t);
19219 vector __uint128_t vec_revb (vector __uint128_t);
19220 @end smallexample
19222 The @code{vec_revb} built-in function reverses the bytes on an element
19223 by element basis.  A vector of @code{vector unsigned char} or
19224 @code{vector signed char} reverses the bytes in the whole word.
19226 If the cryptographic instructions are enabled (@option{-mcrypto} or
19227 @option{-mcpu=power8}), the following builtins are enabled.
19229 @smallexample
19230 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
19232 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
19233                                                     vector unsigned long long);
19235 vector unsigned long long __builtin_crypto_vcipherlast
19236                                      (vector unsigned long long,
19237                                       vector unsigned long long);
19239 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
19240                                                      vector unsigned long long);
19242 vector unsigned long long __builtin_crypto_vncipherlast
19243                                      (vector unsigned long long,
19244                                       vector unsigned long long);
19246 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
19247                                                 vector unsigned char,
19248                                                 vector unsigned char);
19250 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
19251                                                  vector unsigned short,
19252                                                  vector unsigned short);
19254 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
19255                                                vector unsigned int,
19256                                                vector unsigned int);
19258 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
19259                                                      vector unsigned long long,
19260                                                      vector unsigned long long);
19262 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
19263                                                vector unsigned char);
19265 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
19266                                                 vector unsigned short);
19268 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
19269                                               vector unsigned int);
19271 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
19272                                                     vector unsigned long long);
19274 vector unsigned long long __builtin_crypto_vshasigmad
19275                                (vector unsigned long long, int, int);
19277 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
19278                                                  int, int);
19279 @end smallexample
19281 The second argument to @var{__builtin_crypto_vshasigmad} and
19282 @var{__builtin_crypto_vshasigmaw} must be a constant
19283 integer that is 0 or 1.  The third argument to these built-in functions
19284 must be a constant integer in the range of 0 to 15.
19286 If the ISA 3.0 instruction set additions 
19287 are enabled (@option{-mcpu=power9}), the following additional
19288 functions are available for both 32-bit and 64-bit targets.
19290 vector short vec_xl (int, vector short *);
19291 vector short vec_xl (int, short *);
19292 vector unsigned short vec_xl (int, vector unsigned short *);
19293 vector unsigned short vec_xl (int, unsigned short *);
19294 vector char vec_xl (int, vector char *);
19295 vector char vec_xl (int, char *);
19296 vector unsigned char vec_xl (int, vector unsigned char *);
19297 vector unsigned char vec_xl (int, unsigned char *);
19299 void vec_xst (vector short, int, vector short *);
19300 void vec_xst (vector short, int, short *);
19301 void vec_xst (vector unsigned short, int, vector unsigned short *);
19302 void vec_xst (vector unsigned short, int, unsigned short *);
19303 void vec_xst (vector char, int, vector char *);
19304 void vec_xst (vector char, int, char *);
19305 void vec_xst (vector unsigned char, int, vector unsigned char *);
19306 void vec_xst (vector unsigned char, int, unsigned char *);
19308 @node PowerPC Hardware Transactional Memory Built-in Functions
19309 @subsection PowerPC Hardware Transactional Memory Built-in Functions
19310 GCC provides two interfaces for accessing the Hardware Transactional
19311 Memory (HTM) instructions available on some of the PowerPC family
19312 of processors (eg, POWER8).  The two interfaces come in a low level
19313 interface, consisting of built-in functions specific to PowerPC and a
19314 higher level interface consisting of inline functions that are common
19315 between PowerPC and S/390.
19317 @subsubsection PowerPC HTM Low Level Built-in Functions
19319 The following low level built-in functions are available with
19320 @option{-mhtm} or @option{-mcpu=CPU} where CPU is `power8' or later.
19321 They all generate the machine instruction that is part of the name.
19323 The HTM builtins (with the exception of @code{__builtin_tbegin}) return
19324 the full 4-bit condition register value set by their associated hardware
19325 instruction.  The header file @code{htmintrin.h} defines some macros that can
19326 be used to decipher the return value.  The @code{__builtin_tbegin} builtin
19327 returns a simple true or false value depending on whether a transaction was
19328 successfully started or not.  The arguments of the builtins match exactly the
19329 type and order of the associated hardware instruction's operands, except for
19330 the @code{__builtin_tcheck} builtin, which does not take any input arguments.
19331 Refer to the ISA manual for a description of each instruction's operands.
19333 @smallexample
19334 unsigned int __builtin_tbegin (unsigned int)
19335 unsigned int __builtin_tend (unsigned int)
19337 unsigned int __builtin_tabort (unsigned int)
19338 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
19339 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
19340 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
19341 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
19343 unsigned int __builtin_tcheck (void)
19344 unsigned int __builtin_treclaim (unsigned int)
19345 unsigned int __builtin_trechkpt (void)
19346 unsigned int __builtin_tsr (unsigned int)
19347 @end smallexample
19349 In addition to the above HTM built-ins, we have added built-ins for
19350 some common extended mnemonics of the HTM instructions:
19352 @smallexample
19353 unsigned int __builtin_tendall (void)
19354 unsigned int __builtin_tresume (void)
19355 unsigned int __builtin_tsuspend (void)
19356 @end smallexample
19358 Note that the semantics of the above HTM builtins are required to mimic
19359 the locking semantics used for critical sections.  Builtins that are used
19360 to create a new transaction or restart a suspended transaction must have
19361 lock acquisition like semantics while those builtins that end or suspend a
19362 transaction must have lock release like semantics.  Specifically, this must
19363 mimic lock semantics as specified by C++11, for example: Lock acquisition is
19364 as-if an execution of __atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE)
19365 that returns 0, and lock release is as-if an execution of
19366 __atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
19367 implicit implementation-defined lock used for all transactions.  The HTM
19368 instructions associated with with the builtins inherently provide the
19369 correct acquisition and release hardware barriers required.  However,
19370 the compiler must also be prohibited from moving loads and stores across
19371 the builtins in a way that would violate their semantics.  This has been
19372 accomplished by adding memory barriers to the associated HTM instructions
19373 (which is a conservative approach to provide acquire and release semantics).
19374 Earlier versions of the compiler did not treat the HTM instructions as
19375 memory barriers.  A @code{__TM_FENCE__} macro has been added, which can
19376 be used to determine whether the current compiler treats HTM instructions
19377 as memory barriers or not.  This allows the user to explicitly add memory
19378 barriers to their code when using an older version of the compiler.
19380 The following set of built-in functions are available to gain access
19381 to the HTM specific special purpose registers.
19383 @smallexample
19384 unsigned long __builtin_get_texasr (void)
19385 unsigned long __builtin_get_texasru (void)
19386 unsigned long __builtin_get_tfhar (void)
19387 unsigned long __builtin_get_tfiar (void)
19389 void __builtin_set_texasr (unsigned long);
19390 void __builtin_set_texasru (unsigned long);
19391 void __builtin_set_tfhar (unsigned long);
19392 void __builtin_set_tfiar (unsigned long);
19393 @end smallexample
19395 Example usage of these low level built-in functions may look like:
19397 @smallexample
19398 #include <htmintrin.h>
19400 int num_retries = 10;
19402 while (1)
19403   @{
19404     if (__builtin_tbegin (0))
19405       @{
19406         /* Transaction State Initiated.  */
19407         if (is_locked (lock))
19408           __builtin_tabort (0);
19409         ... transaction code...
19410         __builtin_tend (0);
19411         break;
19412       @}
19413     else
19414       @{
19415         /* Transaction State Failed.  Use locks if the transaction
19416            failure is "persistent" or we've tried too many times.  */
19417         if (num_retries-- <= 0
19418             || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
19419           @{
19420             acquire_lock (lock);
19421             ... non transactional fallback path...
19422             release_lock (lock);
19423             break;
19424           @}
19425       @}
19426   @}
19427 @end smallexample
19429 One final built-in function has been added that returns the value of
19430 the 2-bit Transaction State field of the Machine Status Register (MSR)
19431 as stored in @code{CR0}.
19433 @smallexample
19434 unsigned long __builtin_ttest (void)
19435 @end smallexample
19437 This built-in can be used to determine the current transaction state
19438 using the following code example:
19440 @smallexample
19441 #include <htmintrin.h>
19443 unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
19445 if (tx_state == _HTM_TRANSACTIONAL)
19446   @{
19447     /* Code to use in transactional state.  */
19448   @}
19449 else if (tx_state == _HTM_NONTRANSACTIONAL)
19450   @{
19451     /* Code to use in non-transactional state.  */
19452   @}
19453 else if (tx_state == _HTM_SUSPENDED)
19454   @{
19455     /* Code to use in transaction suspended state.  */
19456   @}
19457 @end smallexample
19459 @subsubsection PowerPC HTM High Level Inline Functions
19461 The following high level HTM interface is made available by including
19462 @code{<htmxlintrin.h>} and using @option{-mhtm} or @option{-mcpu=CPU}
19463 where CPU is `power8' or later.  This interface is common between PowerPC
19464 and S/390, allowing users to write one HTM source implementation that
19465 can be compiled and executed on either system.
19467 @smallexample
19468 long __TM_simple_begin (void)
19469 long __TM_begin (void* const TM_buff)
19470 long __TM_end (void)
19471 void __TM_abort (void)
19472 void __TM_named_abort (unsigned char const code)
19473 void __TM_resume (void)
19474 void __TM_suspend (void)
19476 long __TM_is_user_abort (void* const TM_buff)
19477 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
19478 long __TM_is_illegal (void* const TM_buff)
19479 long __TM_is_footprint_exceeded (void* const TM_buff)
19480 long __TM_nesting_depth (void* const TM_buff)
19481 long __TM_is_nested_too_deep(void* const TM_buff)
19482 long __TM_is_conflict(void* const TM_buff)
19483 long __TM_is_failure_persistent(void* const TM_buff)
19484 long __TM_failure_address(void* const TM_buff)
19485 long long __TM_failure_code(void* const TM_buff)
19486 @end smallexample
19488 Using these common set of HTM inline functions, we can create
19489 a more portable version of the HTM example in the previous
19490 section that will work on either PowerPC or S/390:
19492 @smallexample
19493 #include <htmxlintrin.h>
19495 int num_retries = 10;
19496 TM_buff_type TM_buff;
19498 while (1)
19499   @{
19500     if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
19501       @{
19502         /* Transaction State Initiated.  */
19503         if (is_locked (lock))
19504           __TM_abort ();
19505         ... transaction code...
19506         __TM_end ();
19507         break;
19508       @}
19509     else
19510       @{
19511         /* Transaction State Failed.  Use locks if the transaction
19512            failure is "persistent" or we've tried too many times.  */
19513         if (num_retries-- <= 0
19514             || __TM_is_failure_persistent (TM_buff))
19515           @{
19516             acquire_lock (lock);
19517             ... non transactional fallback path...
19518             release_lock (lock);
19519             break;
19520           @}
19521       @}
19522   @}
19523 @end smallexample
19525 @node PowerPC Atomic Memory Operation Functions
19526 @subsection PowerPC Atomic Memory Operation Functions
19527 ISA 3.0 of the PowerPC added new atomic memory operation (amo)
19528 instructions.  GCC provides support for these instructions in 64-bit
19529 environments.  All of the functions are declared in the include file
19530 @code{amo.h}.
19532 The functions supported are:
19534 @smallexample
19535 #include <amo.h>
19537 uint32_t amo_lwat_add (uint32_t *, uint32_t);
19538 uint32_t amo_lwat_xor (uint32_t *, uint32_t);
19539 uint32_t amo_lwat_ior (uint32_t *, uint32_t);
19540 uint32_t amo_lwat_and (uint32_t *, uint32_t);
19541 uint32_t amo_lwat_umax (uint32_t *, uint32_t);
19542 uint32_t amo_lwat_umin (uint32_t *, uint32_t);
19543 uint32_t amo_lwat_swap (uint32_t *, uint32_t);
19545 int32_t amo_lwat_sadd (int32_t *, int32_t);
19546 int32_t amo_lwat_smax (int32_t *, int32_t);
19547 int32_t amo_lwat_smin (int32_t *, int32_t);
19548 int32_t amo_lwat_sswap (int32_t *, int32_t);
19550 uint64_t amo_ldat_add (uint64_t *, uint64_t);
19551 uint64_t amo_ldat_xor (uint64_t *, uint64_t);
19552 uint64_t amo_ldat_ior (uint64_t *, uint64_t);
19553 uint64_t amo_ldat_and (uint64_t *, uint64_t);
19554 uint64_t amo_ldat_umax (uint64_t *, uint64_t);
19555 uint64_t amo_ldat_umin (uint64_t *, uint64_t);
19556 uint64_t amo_ldat_swap (uint64_t *, uint64_t);
19558 int64_t amo_ldat_sadd (int64_t *, int64_t);
19559 int64_t amo_ldat_smax (int64_t *, int64_t);
19560 int64_t amo_ldat_smin (int64_t *, int64_t);
19561 int64_t amo_ldat_sswap (int64_t *, int64_t);
19563 void amo_stwat_add (uint32_t *, uint32_t);
19564 void amo_stwat_xor (uint32_t *, uint32_t);
19565 void amo_stwat_ior (uint32_t *, uint32_t);
19566 void amo_stwat_and (uint32_t *, uint32_t);
19567 void amo_stwat_umax (uint32_t *, uint32_t);
19568 void amo_stwat_umin (uint32_t *, uint32_t);
19570 void amo_stwat_sadd (int32_t *, int32_t);
19571 void amo_stwat_smax (int32_t *, int32_t);
19572 void amo_stwat_smin (int32_t *, int32_t);
19574 void amo_stdat_add (uint64_t *, uint64_t);
19575 void amo_stdat_xor (uint64_t *, uint64_t);
19576 void amo_stdat_ior (uint64_t *, uint64_t);
19577 void amo_stdat_and (uint64_t *, uint64_t);
19578 void amo_stdat_umax (uint64_t *, uint64_t);
19579 void amo_stdat_umin (uint64_t *, uint64_t);
19581 void amo_stdat_sadd (int64_t *, int64_t);
19582 void amo_stdat_smax (int64_t *, int64_t);
19583 void amo_stdat_smin (int64_t *, int64_t);
19584 @end smallexample
19586 @node RX Built-in Functions
19587 @subsection RX Built-in Functions
19588 GCC supports some of the RX instructions which cannot be expressed in
19589 the C programming language via the use of built-in functions.  The
19590 following functions are supported:
19592 @deftypefn {Built-in Function}  void __builtin_rx_brk (void)
19593 Generates the @code{brk} machine instruction.
19594 @end deftypefn
19596 @deftypefn {Built-in Function}  void __builtin_rx_clrpsw (int)
19597 Generates the @code{clrpsw} machine instruction to clear the specified
19598 bit in the processor status word.
19599 @end deftypefn
19601 @deftypefn {Built-in Function}  void __builtin_rx_int (int)
19602 Generates the @code{int} machine instruction to generate an interrupt
19603 with the specified value.
19604 @end deftypefn
19606 @deftypefn {Built-in Function}  void __builtin_rx_machi (int, int)
19607 Generates the @code{machi} machine instruction to add the result of
19608 multiplying the top 16 bits of the two arguments into the
19609 accumulator.
19610 @end deftypefn
19612 @deftypefn {Built-in Function}  void __builtin_rx_maclo (int, int)
19613 Generates the @code{maclo} machine instruction to add the result of
19614 multiplying the bottom 16 bits of the two arguments into the
19615 accumulator.
19616 @end deftypefn
19618 @deftypefn {Built-in Function}  void __builtin_rx_mulhi (int, int)
19619 Generates the @code{mulhi} machine instruction to place the result of
19620 multiplying the top 16 bits of the two arguments into the
19621 accumulator.
19622 @end deftypefn
19624 @deftypefn {Built-in Function}  void __builtin_rx_mullo (int, int)
19625 Generates the @code{mullo} machine instruction to place the result of
19626 multiplying the bottom 16 bits of the two arguments into the
19627 accumulator.
19628 @end deftypefn
19630 @deftypefn {Built-in Function}  int  __builtin_rx_mvfachi (void)
19631 Generates the @code{mvfachi} machine instruction to read the top
19632 32 bits of the accumulator.
19633 @end deftypefn
19635 @deftypefn {Built-in Function}  int  __builtin_rx_mvfacmi (void)
19636 Generates the @code{mvfacmi} machine instruction to read the middle
19637 32 bits of the accumulator.
19638 @end deftypefn
19640 @deftypefn {Built-in Function}  int __builtin_rx_mvfc (int)
19641 Generates the @code{mvfc} machine instruction which reads the control
19642 register specified in its argument and returns its value.
19643 @end deftypefn
19645 @deftypefn {Built-in Function}  void __builtin_rx_mvtachi (int)
19646 Generates the @code{mvtachi} machine instruction to set the top
19647 32 bits of the accumulator.
19648 @end deftypefn
19650 @deftypefn {Built-in Function}  void __builtin_rx_mvtaclo (int)
19651 Generates the @code{mvtaclo} machine instruction to set the bottom
19652 32 bits of the accumulator.
19653 @end deftypefn
19655 @deftypefn {Built-in Function}  void __builtin_rx_mvtc (int reg, int val)
19656 Generates the @code{mvtc} machine instruction which sets control
19657 register number @code{reg} to @code{val}.
19658 @end deftypefn
19660 @deftypefn {Built-in Function}  void __builtin_rx_mvtipl (int)
19661 Generates the @code{mvtipl} machine instruction set the interrupt
19662 priority level.
19663 @end deftypefn
19665 @deftypefn {Built-in Function}  void __builtin_rx_racw (int)
19666 Generates the @code{racw} machine instruction to round the accumulator
19667 according to the specified mode.
19668 @end deftypefn
19670 @deftypefn {Built-in Function}  int __builtin_rx_revw (int)
19671 Generates the @code{revw} machine instruction which swaps the bytes in
19672 the argument so that bits 0--7 now occupy bits 8--15 and vice versa,
19673 and also bits 16--23 occupy bits 24--31 and vice versa.
19674 @end deftypefn
19676 @deftypefn {Built-in Function}  void __builtin_rx_rmpa (void)
19677 Generates the @code{rmpa} machine instruction which initiates a
19678 repeated multiply and accumulate sequence.
19679 @end deftypefn
19681 @deftypefn {Built-in Function}  void __builtin_rx_round (float)
19682 Generates the @code{round} machine instruction which returns the
19683 floating-point argument rounded according to the current rounding mode
19684 set in the floating-point status word register.
19685 @end deftypefn
19687 @deftypefn {Built-in Function}  int __builtin_rx_sat (int)
19688 Generates the @code{sat} machine instruction which returns the
19689 saturated value of the argument.
19690 @end deftypefn
19692 @deftypefn {Built-in Function}  void __builtin_rx_setpsw (int)
19693 Generates the @code{setpsw} machine instruction to set the specified
19694 bit in the processor status word.
19695 @end deftypefn
19697 @deftypefn {Built-in Function}  void __builtin_rx_wait (void)
19698 Generates the @code{wait} machine instruction.
19699 @end deftypefn
19701 @node S/390 System z Built-in Functions
19702 @subsection S/390 System z Built-in Functions
19703 @deftypefn {Built-in Function} int __builtin_tbegin (void*)
19704 Generates the @code{tbegin} machine instruction starting a
19705 non-constrained hardware transaction.  If the parameter is non-NULL the
19706 memory area is used to store the transaction diagnostic buffer and
19707 will be passed as first operand to @code{tbegin}.  This buffer can be
19708 defined using the @code{struct __htm_tdb} C struct defined in
19709 @code{htmintrin.h} and must reside on a double-word boundary.  The
19710 second tbegin operand is set to @code{0xff0c}. This enables
19711 save/restore of all GPRs and disables aborts for FPR and AR
19712 manipulations inside the transaction body.  The condition code set by
19713 the tbegin instruction is returned as integer value.  The tbegin
19714 instruction by definition overwrites the content of all FPRs.  The
19715 compiler will generate code which saves and restores the FPRs.  For
19716 soft-float code it is recommended to used the @code{*_nofloat}
19717 variant.  In order to prevent a TDB from being written it is required
19718 to pass a constant zero value as parameter.  Passing a zero value
19719 through a variable is not sufficient.  Although modifications of
19720 access registers inside the transaction will not trigger an
19721 transaction abort it is not supported to actually modify them.  Access
19722 registers do not get saved when entering a transaction. They will have
19723 undefined state when reaching the abort code.
19724 @end deftypefn
19726 Macros for the possible return codes of tbegin are defined in the
19727 @code{htmintrin.h} header file:
19729 @table @code
19730 @item _HTM_TBEGIN_STARTED
19731 @code{tbegin} has been executed as part of normal processing.  The
19732 transaction body is supposed to be executed.
19733 @item _HTM_TBEGIN_INDETERMINATE
19734 The transaction was aborted due to an indeterminate condition which
19735 might be persistent.
19736 @item _HTM_TBEGIN_TRANSIENT
19737 The transaction aborted due to a transient failure.  The transaction
19738 should be re-executed in that case.
19739 @item _HTM_TBEGIN_PERSISTENT
19740 The transaction aborted due to a persistent failure.  Re-execution
19741 under same circumstances will not be productive.
19742 @end table
19744 @defmac _HTM_FIRST_USER_ABORT_CODE
19745 The @code{_HTM_FIRST_USER_ABORT_CODE} defined in @code{htmintrin.h}
19746 specifies the first abort code which can be used for
19747 @code{__builtin_tabort}.  Values below this threshold are reserved for
19748 machine use.
19749 @end defmac
19751 @deftp {Data type} {struct __htm_tdb}
19752 The @code{struct __htm_tdb} defined in @code{htmintrin.h} describes
19753 the structure of the transaction diagnostic block as specified in the
19754 Principles of Operation manual chapter 5-91.
19755 @end deftp
19757 @deftypefn {Built-in Function} int __builtin_tbegin_nofloat (void*)
19758 Same as @code{__builtin_tbegin} but without FPR saves and restores.
19759 Using this variant in code making use of FPRs will leave the FPRs in
19760 undefined state when entering the transaction abort handler code.
19761 @end deftypefn
19763 @deftypefn {Built-in Function} int __builtin_tbegin_retry (void*, int)
19764 In addition to @code{__builtin_tbegin} a loop for transient failures
19765 is generated.  If tbegin returns a condition code of 2 the transaction
19766 will be retried as often as specified in the second argument.  The
19767 perform processor assist instruction is used to tell the CPU about the
19768 number of fails so far.
19769 @end deftypefn
19771 @deftypefn {Built-in Function} int __builtin_tbegin_retry_nofloat (void*, int)
19772 Same as @code{__builtin_tbegin_retry} but without FPR saves and
19773 restores.  Using this variant in code making use of FPRs will leave
19774 the FPRs in undefined state when entering the transaction abort
19775 handler code.
19776 @end deftypefn
19778 @deftypefn {Built-in Function} void __builtin_tbeginc (void)
19779 Generates the @code{tbeginc} machine instruction starting a constrained
19780 hardware transaction.  The second operand is set to @code{0xff08}.
19781 @end deftypefn
19783 @deftypefn {Built-in Function} int __builtin_tend (void)
19784 Generates the @code{tend} machine instruction finishing a transaction
19785 and making the changes visible to other threads.  The condition code
19786 generated by tend is returned as integer value.
19787 @end deftypefn
19789 @deftypefn {Built-in Function} void __builtin_tabort (int)
19790 Generates the @code{tabort} machine instruction with the specified
19791 abort code.  Abort codes from 0 through 255 are reserved and will
19792 result in an error message.
19793 @end deftypefn
19795 @deftypefn {Built-in Function} void __builtin_tx_assist (int)
19796 Generates the @code{ppa rX,rY,1} machine instruction.  Where the
19797 integer parameter is loaded into rX and a value of zero is loaded into
19798 rY.  The integer parameter specifies the number of times the
19799 transaction repeatedly aborted.
19800 @end deftypefn
19802 @deftypefn {Built-in Function} int __builtin_tx_nesting_depth (void)
19803 Generates the @code{etnd} machine instruction.  The current nesting
19804 depth is returned as integer value.  For a nesting depth of 0 the code
19805 is not executed as part of an transaction.
19806 @end deftypefn
19808 @deftypefn {Built-in Function} void __builtin_non_tx_store (uint64_t *, uint64_t)
19810 Generates the @code{ntstg} machine instruction.  The second argument
19811 is written to the first arguments location.  The store operation will
19812 not be rolled-back in case of an transaction abort.
19813 @end deftypefn
19815 @node SH Built-in Functions
19816 @subsection SH Built-in Functions
19817 The following built-in functions are supported on the SH1, SH2, SH3 and SH4
19818 families of processors:
19820 @deftypefn {Built-in Function} {void} __builtin_set_thread_pointer (void *@var{ptr})
19821 Sets the @samp{GBR} register to the specified value @var{ptr}.  This is usually
19822 used by system code that manages threads and execution contexts.  The compiler
19823 normally does not generate code that modifies the contents of @samp{GBR} and
19824 thus the value is preserved across function calls.  Changing the @samp{GBR}
19825 value in user code must be done with caution, since the compiler might use
19826 @samp{GBR} in order to access thread local variables.
19828 @end deftypefn
19830 @deftypefn {Built-in Function} {void *} __builtin_thread_pointer (void)
19831 Returns the value that is currently set in the @samp{GBR} register.
19832 Memory loads and stores that use the thread pointer as a base address are
19833 turned into @samp{GBR} based displacement loads and stores, if possible.
19834 For example:
19835 @smallexample
19836 struct my_tcb
19838    int a, b, c, d, e;
19841 int get_tcb_value (void)
19843   // Generate @samp{mov.l @@(8,gbr),r0} instruction
19844   return ((my_tcb*)__builtin_thread_pointer ())->c;
19847 @end smallexample
19848 @end deftypefn
19850 @deftypefn {Built-in Function} {unsigned int} __builtin_sh_get_fpscr (void)
19851 Returns the value that is currently set in the @samp{FPSCR} register.
19852 @end deftypefn
19854 @deftypefn {Built-in Function} {void} __builtin_sh_set_fpscr (unsigned int @var{val})
19855 Sets the @samp{FPSCR} register to the specified value @var{val}, while
19856 preserving the current values of the FR, SZ and PR bits.
19857 @end deftypefn
19859 @node SPARC VIS Built-in Functions
19860 @subsection SPARC VIS Built-in Functions
19862 GCC supports SIMD operations on the SPARC using both the generic vector
19863 extensions (@pxref{Vector Extensions}) as well as built-in functions for
19864 the SPARC Visual Instruction Set (VIS).  When you use the @option{-mvis}
19865 switch, the VIS extension is exposed as the following built-in functions:
19867 @smallexample
19868 typedef int v1si __attribute__ ((vector_size (4)));
19869 typedef int v2si __attribute__ ((vector_size (8)));
19870 typedef short v4hi __attribute__ ((vector_size (8)));
19871 typedef short v2hi __attribute__ ((vector_size (4)));
19872 typedef unsigned char v8qi __attribute__ ((vector_size (8)));
19873 typedef unsigned char v4qi __attribute__ ((vector_size (4)));
19875 void __builtin_vis_write_gsr (int64_t);
19876 int64_t __builtin_vis_read_gsr (void);
19878 void * __builtin_vis_alignaddr (void *, long);
19879 void * __builtin_vis_alignaddrl (void *, long);
19880 int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
19881 v2si __builtin_vis_faligndatav2si (v2si, v2si);
19882 v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
19883 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
19885 v4hi __builtin_vis_fexpand (v4qi);
19887 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
19888 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
19889 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
19890 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
19891 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
19892 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
19893 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
19895 v4qi __builtin_vis_fpack16 (v4hi);
19896 v8qi __builtin_vis_fpack32 (v2si, v8qi);
19897 v2hi __builtin_vis_fpackfix (v2si);
19898 v8qi __builtin_vis_fpmerge (v4qi, v4qi);
19900 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
19902 long __builtin_vis_edge8 (void *, void *);
19903 long __builtin_vis_edge8l (void *, void *);
19904 long __builtin_vis_edge16 (void *, void *);
19905 long __builtin_vis_edge16l (void *, void *);
19906 long __builtin_vis_edge32 (void *, void *);
19907 long __builtin_vis_edge32l (void *, void *);
19909 long __builtin_vis_fcmple16 (v4hi, v4hi);
19910 long __builtin_vis_fcmple32 (v2si, v2si);
19911 long __builtin_vis_fcmpne16 (v4hi, v4hi);
19912 long __builtin_vis_fcmpne32 (v2si, v2si);
19913 long __builtin_vis_fcmpgt16 (v4hi, v4hi);
19914 long __builtin_vis_fcmpgt32 (v2si, v2si);
19915 long __builtin_vis_fcmpeq16 (v4hi, v4hi);
19916 long __builtin_vis_fcmpeq32 (v2si, v2si);
19918 v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
19919 v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
19920 v2si __builtin_vis_fpadd32 (v2si, v2si);
19921 v1si __builtin_vis_fpadd32s (v1si, v1si);
19922 v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
19923 v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
19924 v2si __builtin_vis_fpsub32 (v2si, v2si);
19925 v1si __builtin_vis_fpsub32s (v1si, v1si);
19927 long __builtin_vis_array8 (long, long);
19928 long __builtin_vis_array16 (long, long);
19929 long __builtin_vis_array32 (long, long);
19930 @end smallexample
19932 When you use the @option{-mvis2} switch, the VIS version 2.0 built-in
19933 functions also become available:
19935 @smallexample
19936 long __builtin_vis_bmask (long, long);
19937 int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
19938 v2si __builtin_vis_bshufflev2si (v2si, v2si);
19939 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
19940 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
19942 long __builtin_vis_edge8n (void *, void *);
19943 long __builtin_vis_edge8ln (void *, void *);
19944 long __builtin_vis_edge16n (void *, void *);
19945 long __builtin_vis_edge16ln (void *, void *);
19946 long __builtin_vis_edge32n (void *, void *);
19947 long __builtin_vis_edge32ln (void *, void *);
19948 @end smallexample
19950 When you use the @option{-mvis3} switch, the VIS version 3.0 built-in
19951 functions also become available:
19953 @smallexample
19954 void __builtin_vis_cmask8 (long);
19955 void __builtin_vis_cmask16 (long);
19956 void __builtin_vis_cmask32 (long);
19958 v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
19960 v4hi __builtin_vis_fsll16 (v4hi, v4hi);
19961 v4hi __builtin_vis_fslas16 (v4hi, v4hi);
19962 v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
19963 v4hi __builtin_vis_fsra16 (v4hi, v4hi);
19964 v2si __builtin_vis_fsll16 (v2si, v2si);
19965 v2si __builtin_vis_fslas16 (v2si, v2si);
19966 v2si __builtin_vis_fsrl16 (v2si, v2si);
19967 v2si __builtin_vis_fsra16 (v2si, v2si);
19969 long __builtin_vis_pdistn (v8qi, v8qi);
19971 v4hi __builtin_vis_fmean16 (v4hi, v4hi);
19973 int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
19974 int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
19976 v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
19977 v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
19978 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
19979 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
19980 v2si __builtin_vis_fpadds32 (v2si, v2si);
19981 v1si __builtin_vis_fpadds32s (v1si, v1si);
19982 v2si __builtin_vis_fpsubs32 (v2si, v2si);
19983 v1si __builtin_vis_fpsubs32s (v1si, v1si);
19985 long __builtin_vis_fucmple8 (v8qi, v8qi);
19986 long __builtin_vis_fucmpne8 (v8qi, v8qi);
19987 long __builtin_vis_fucmpgt8 (v8qi, v8qi);
19988 long __builtin_vis_fucmpeq8 (v8qi, v8qi);
19990 float __builtin_vis_fhadds (float, float);
19991 double __builtin_vis_fhaddd (double, double);
19992 float __builtin_vis_fhsubs (float, float);
19993 double __builtin_vis_fhsubd (double, double);
19994 float __builtin_vis_fnhadds (float, float);
19995 double __builtin_vis_fnhaddd (double, double);
19997 int64_t __builtin_vis_umulxhi (int64_t, int64_t);
19998 int64_t __builtin_vis_xmulx (int64_t, int64_t);
19999 int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
20000 @end smallexample
20002 When you use the @option{-mvis4} switch, the VIS version 4.0 built-in
20003 functions also become available:
20005 @smallexample
20006 v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
20007 v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
20008 v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
20009 v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
20011 v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
20012 v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
20013 v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
20014 v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
20016 long __builtin_vis_fpcmple8 (v8qi, v8qi);
20017 long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
20018 long __builtin_vis_fpcmpule16 (v4hi, v4hi);
20019 long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
20020 long __builtin_vis_fpcmpule32 (v2si, v2si);
20021 long __builtin_vis_fpcmpugt32 (v2si, v2si);
20023 v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
20024 v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
20025 v2si __builtin_vis_fpmax32 (v2si, v2si);
20027 v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
20028 v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
20029 v2si __builtin_vis_fpmaxu32 (v2si, v2si);
20032 v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
20033 v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
20034 v2si __builtin_vis_fpmin32 (v2si, v2si);
20036 v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
20037 v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
20038 v2si __builtin_vis_fpminu32 (v2si, v2si);
20039 @end smallexample
20041 When you use the @option{-mvis4b} switch, the VIS version 4.0B
20042 built-in functions also become available:
20044 @smallexample
20045 v8qi __builtin_vis_dictunpack8 (double, int);
20046 v4hi __builtin_vis_dictunpack16 (double, int);
20047 v2si __builtin_vis_dictunpack32 (double, int);
20049 long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
20050 long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
20051 long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
20052 long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
20054 long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
20055 long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
20056 long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
20057 long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
20059 long __builtin_vis_fpcmple32shl (v2si, v2si, int);
20060 long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
20061 long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
20062 long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
20064 long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
20065 long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
20066 long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
20067 long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
20068 long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
20069 long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
20071 long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
20072 long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
20073 long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
20075 long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
20076 long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
20077 long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
20078 @end smallexample
20080 @node SPU Built-in Functions
20081 @subsection SPU Built-in Functions
20083 GCC provides extensions for the SPU processor as described in the
20084 Sony/Toshiba/IBM SPU Language Extensions Specification.  GCC's
20085 implementation differs in several ways.
20087 @itemize @bullet
20089 @item
20090 The optional extension of specifying vector constants in parentheses is
20091 not supported.
20093 @item
20094 A vector initializer requires no cast if the vector constant is of the
20095 same type as the variable it is initializing.
20097 @item
20098 If @code{signed} or @code{unsigned} is omitted, the signedness of the
20099 vector type is the default signedness of the base type.  The default
20100 varies depending on the operating system, so a portable program should
20101 always specify the signedness.
20103 @item
20104 By default, the keyword @code{__vector} is added. The macro
20105 @code{vector} is defined in @code{<spu_intrinsics.h>} and can be
20106 undefined.
20108 @item
20109 GCC allows using a @code{typedef} name as the type specifier for a
20110 vector type.
20112 @item
20113 For C, overloaded functions are implemented with macros so the following
20114 does not work:
20116 @smallexample
20117   spu_add ((vector signed int)@{1, 2, 3, 4@}, foo);
20118 @end smallexample
20120 @noindent
20121 Since @code{spu_add} is a macro, the vector constant in the example
20122 is treated as four separate arguments.  Wrap the entire argument in
20123 parentheses for this to work.
20125 @item
20126 The extended version of @code{__builtin_expect} is not supported.
20128 @end itemize
20130 @emph{Note:} Only the interface described in the aforementioned
20131 specification is supported. Internally, GCC uses built-in functions to
20132 implement the required functionality, but these are not supported and
20133 are subject to change without notice.
20135 @node TI C6X Built-in Functions
20136 @subsection TI C6X Built-in Functions
20138 GCC provides intrinsics to access certain instructions of the TI C6X
20139 processors.  These intrinsics, listed below, are available after
20140 inclusion of the @code{c6x_intrinsics.h} header file.  They map directly
20141 to C6X instructions.
20143 @smallexample
20145 int _sadd (int, int)
20146 int _ssub (int, int)
20147 int _sadd2 (int, int)
20148 int _ssub2 (int, int)
20149 long long _mpy2 (int, int)
20150 long long _smpy2 (int, int)
20151 int _add4 (int, int)
20152 int _sub4 (int, int)
20153 int _saddu4 (int, int)
20155 int _smpy (int, int)
20156 int _smpyh (int, int)
20157 int _smpyhl (int, int)
20158 int _smpylh (int, int)
20160 int _sshl (int, int)
20161 int _subc (int, int)
20163 int _avg2 (int, int)
20164 int _avgu4 (int, int)
20166 int _clrr (int, int)
20167 int _extr (int, int)
20168 int _extru (int, int)
20169 int _abs (int)
20170 int _abs2 (int)
20172 @end smallexample
20174 @node TILE-Gx Built-in Functions
20175 @subsection TILE-Gx Built-in Functions
20177 GCC provides intrinsics to access every instruction of the TILE-Gx
20178 processor.  The intrinsics are of the form:
20180 @smallexample
20182 unsigned long long __insn_@var{op} (...)
20184 @end smallexample
20186 Where @var{op} is the name of the instruction.  Refer to the ISA manual
20187 for the complete list of instructions.
20189 GCC also provides intrinsics to directly access the network registers.
20190 The intrinsics are:
20192 @smallexample
20194 unsigned long long __tile_idn0_receive (void)
20195 unsigned long long __tile_idn1_receive (void)
20196 unsigned long long __tile_udn0_receive (void)
20197 unsigned long long __tile_udn1_receive (void)
20198 unsigned long long __tile_udn2_receive (void)
20199 unsigned long long __tile_udn3_receive (void)
20200 void __tile_idn_send (unsigned long long)
20201 void __tile_udn_send (unsigned long long)
20203 @end smallexample
20205 The intrinsic @code{void __tile_network_barrier (void)} is used to
20206 guarantee that no network operations before it are reordered with
20207 those after it.
20209 @node TILEPro Built-in Functions
20210 @subsection TILEPro Built-in Functions
20212 GCC provides intrinsics to access every instruction of the TILEPro
20213 processor.  The intrinsics are of the form:
20215 @smallexample
20217 unsigned __insn_@var{op} (...)
20219 @end smallexample
20221 @noindent
20222 where @var{op} is the name of the instruction.  Refer to the ISA manual
20223 for the complete list of instructions.
20225 GCC also provides intrinsics to directly access the network registers.
20226 The intrinsics are:
20228 @smallexample
20230 unsigned __tile_idn0_receive (void)
20231 unsigned __tile_idn1_receive (void)
20232 unsigned __tile_sn_receive (void)
20233 unsigned __tile_udn0_receive (void)
20234 unsigned __tile_udn1_receive (void)
20235 unsigned __tile_udn2_receive (void)
20236 unsigned __tile_udn3_receive (void)
20237 void __tile_idn_send (unsigned)
20238 void __tile_sn_send (unsigned)
20239 void __tile_udn_send (unsigned)
20241 @end smallexample
20243 The intrinsic @code{void __tile_network_barrier (void)} is used to
20244 guarantee that no network operations before it are reordered with
20245 those after it.
20247 @node x86 Built-in Functions
20248 @subsection x86 Built-in Functions
20250 These built-in functions are available for the x86-32 and x86-64 family
20251 of computers, depending on the command-line switches used.
20253 If you specify command-line switches such as @option{-msse},
20254 the compiler could use the extended instruction sets even if the built-ins
20255 are not used explicitly in the program.  For this reason, applications
20256 that perform run-time CPU detection must compile separate files for each
20257 supported architecture, using the appropriate flags.  In particular,
20258 the file containing the CPU detection code should be compiled without
20259 these options.
20261 The following machine modes are available for use with MMX built-in functions
20262 (@pxref{Vector Extensions}): @code{V2SI} for a vector of two 32-bit integers,
20263 @code{V4HI} for a vector of four 16-bit integers, and @code{V8QI} for a
20264 vector of eight 8-bit integers.  Some of the built-in functions operate on
20265 MMX registers as a whole 64-bit entity, these use @code{V1DI} as their mode.
20267 If 3DNow!@: extensions are enabled, @code{V2SF} is used as a mode for a vector
20268 of two 32-bit floating-point values.
20270 If SSE extensions are enabled, @code{V4SF} is used for a vector of four 32-bit
20271 floating-point values.  Some instructions use a vector of four 32-bit
20272 integers, these use @code{V4SI}.  Finally, some instructions operate on an
20273 entire vector register, interpreting it as a 128-bit integer, these use mode
20274 @code{TI}.
20276 The x86-32 and x86-64 family of processors use additional built-in
20277 functions for efficient use of @code{TF} (@code{__float128}) 128-bit
20278 floating point and @code{TC} 128-bit complex floating-point values.
20280 The following floating-point built-in functions are always available.  All
20281 of them implement the function that is part of the name.
20283 @smallexample
20284 __float128 __builtin_fabsq (__float128)
20285 __float128 __builtin_copysignq (__float128, __float128)
20286 @end smallexample
20288 The following built-in functions are always available.
20290 @table @code
20291 @item __float128 __builtin_infq (void)
20292 Similar to @code{__builtin_inf}, except the return type is @code{__float128}.
20293 @findex __builtin_infq
20295 @item __float128 __builtin_huge_valq (void)
20296 Similar to @code{__builtin_huge_val}, except the return type is @code{__float128}.
20297 @findex __builtin_huge_valq
20299 @item __float128 __builtin_nanq (void)
20300 Similar to @code{__builtin_nan}, except the return type is @code{__float128}.
20301 @findex __builtin_nanq
20303 @item __float128 __builtin_nansq (void)
20304 Similar to @code{__builtin_nans}, except the return type is @code{__float128}.
20305 @findex __builtin_nansq
20306 @end table
20308 The following built-in function is always available.
20310 @table @code
20311 @item void __builtin_ia32_pause (void)
20312 Generates the @code{pause} machine instruction with a compiler memory
20313 barrier.
20314 @end table
20316 The following built-in functions are always available and can be used to
20317 check the target platform type.
20319 @deftypefn {Built-in Function} void __builtin_cpu_init (void)
20320 This function runs the CPU detection code to check the type of CPU and the
20321 features supported.  This built-in function needs to be invoked along with the built-in functions
20322 to check CPU type and features, @code{__builtin_cpu_is} and
20323 @code{__builtin_cpu_supports}, only when used in a function that is
20324 executed before any constructors are called.  The CPU detection code is
20325 automatically executed in a very high priority constructor.
20327 For example, this function has to be used in @code{ifunc} resolvers that
20328 check for CPU type using the built-in functions @code{__builtin_cpu_is}
20329 and @code{__builtin_cpu_supports}, or in constructors on targets that
20330 don't support constructor priority.
20331 @smallexample
20333 static void (*resolve_memcpy (void)) (void)
20335   // ifunc resolvers fire before constructors, explicitly call the init
20336   // function.
20337   __builtin_cpu_init ();
20338   if (__builtin_cpu_supports ("ssse3"))
20339     return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
20340   else
20341     return default_memcpy;
20344 void *memcpy (void *, const void *, size_t)
20345      __attribute__ ((ifunc ("resolve_memcpy")));
20346 @end smallexample
20348 @end deftypefn
20350 @deftypefn {Built-in Function} int __builtin_cpu_is (const char *@var{cpuname})
20351 This function returns a positive integer if the run-time CPU
20352 is of type @var{cpuname}
20353 and returns @code{0} otherwise. The following CPU names can be detected:
20355 @table @samp
20356 @item intel
20357 Intel CPU.
20359 @item atom
20360 Intel Atom CPU.
20362 @item core2
20363 Intel Core 2 CPU.
20365 @item corei7
20366 Intel Core i7 CPU.
20368 @item nehalem
20369 Intel Core i7 Nehalem CPU.
20371 @item westmere
20372 Intel Core i7 Westmere CPU.
20374 @item sandybridge
20375 Intel Core i7 Sandy Bridge CPU.
20377 @item amd
20378 AMD CPU.
20380 @item amdfam10h
20381 AMD Family 10h CPU.
20383 @item barcelona
20384 AMD Family 10h Barcelona CPU.
20386 @item shanghai
20387 AMD Family 10h Shanghai CPU.
20389 @item istanbul
20390 AMD Family 10h Istanbul CPU.
20392 @item btver1
20393 AMD Family 14h CPU.
20395 @item amdfam15h
20396 AMD Family 15h CPU.
20398 @item bdver1
20399 AMD Family 15h Bulldozer version 1.
20401 @item bdver2
20402 AMD Family 15h Bulldozer version 2.
20404 @item bdver3
20405 AMD Family 15h Bulldozer version 3.
20407 @item bdver4
20408 AMD Family 15h Bulldozer version 4.
20410 @item btver2
20411 AMD Family 16h CPU.
20413 @item amdfam17h
20414 AMD Family 17h CPU.
20416 @item znver1
20417 AMD Family 17h Zen version 1.
20418 @end table
20420 Here is an example:
20421 @smallexample
20422 if (__builtin_cpu_is ("corei7"))
20423   @{
20424      do_corei7 (); // Core i7 specific implementation.
20425   @}
20426 else
20427   @{
20428      do_generic (); // Generic implementation.
20429   @}
20430 @end smallexample
20431 @end deftypefn
20433 @deftypefn {Built-in Function} int __builtin_cpu_supports (const char *@var{feature})
20434 This function returns a positive integer if the run-time CPU
20435 supports @var{feature}
20436 and returns @code{0} otherwise. The following features can be detected:
20438 @table @samp
20439 @item cmov
20440 CMOV instruction.
20441 @item mmx
20442 MMX instructions.
20443 @item popcnt
20444 POPCNT instruction.
20445 @item sse
20446 SSE instructions.
20447 @item sse2
20448 SSE2 instructions.
20449 @item sse3
20450 SSE3 instructions.
20451 @item ssse3
20452 SSSE3 instructions.
20453 @item sse4.1
20454 SSE4.1 instructions.
20455 @item sse4.2
20456 SSE4.2 instructions.
20457 @item avx
20458 AVX instructions.
20459 @item avx2
20460 AVX2 instructions.
20461 @item avx512f
20462 AVX512F instructions.
20463 @end table
20465 Here is an example:
20466 @smallexample
20467 if (__builtin_cpu_supports ("popcnt"))
20468   @{
20469      asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
20470   @}
20471 else
20472   @{
20473      count = generic_countbits (n); //generic implementation.
20474   @}
20475 @end smallexample
20476 @end deftypefn
20479 The following built-in functions are made available by @option{-mmmx}.
20480 All of them generate the machine instruction that is part of the name.
20482 @smallexample
20483 v8qi __builtin_ia32_paddb (v8qi, v8qi)
20484 v4hi __builtin_ia32_paddw (v4hi, v4hi)
20485 v2si __builtin_ia32_paddd (v2si, v2si)
20486 v8qi __builtin_ia32_psubb (v8qi, v8qi)
20487 v4hi __builtin_ia32_psubw (v4hi, v4hi)
20488 v2si __builtin_ia32_psubd (v2si, v2si)
20489 v8qi __builtin_ia32_paddsb (v8qi, v8qi)
20490 v4hi __builtin_ia32_paddsw (v4hi, v4hi)
20491 v8qi __builtin_ia32_psubsb (v8qi, v8qi)
20492 v4hi __builtin_ia32_psubsw (v4hi, v4hi)
20493 v8qi __builtin_ia32_paddusb (v8qi, v8qi)
20494 v4hi __builtin_ia32_paddusw (v4hi, v4hi)
20495 v8qi __builtin_ia32_psubusb (v8qi, v8qi)
20496 v4hi __builtin_ia32_psubusw (v4hi, v4hi)
20497 v4hi __builtin_ia32_pmullw (v4hi, v4hi)
20498 v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
20499 di __builtin_ia32_pand (di, di)
20500 di __builtin_ia32_pandn (di,di)
20501 di __builtin_ia32_por (di, di)
20502 di __builtin_ia32_pxor (di, di)
20503 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
20504 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
20505 v2si __builtin_ia32_pcmpeqd (v2si, v2si)
20506 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
20507 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
20508 v2si __builtin_ia32_pcmpgtd (v2si, v2si)
20509 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
20510 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
20511 v2si __builtin_ia32_punpckhdq (v2si, v2si)
20512 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
20513 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
20514 v2si __builtin_ia32_punpckldq (v2si, v2si)
20515 v8qi __builtin_ia32_packsswb (v4hi, v4hi)
20516 v4hi __builtin_ia32_packssdw (v2si, v2si)
20517 v8qi __builtin_ia32_packuswb (v4hi, v4hi)
20519 v4hi __builtin_ia32_psllw (v4hi, v4hi)
20520 v2si __builtin_ia32_pslld (v2si, v2si)
20521 v1di __builtin_ia32_psllq (v1di, v1di)
20522 v4hi __builtin_ia32_psrlw (v4hi, v4hi)
20523 v2si __builtin_ia32_psrld (v2si, v2si)
20524 v1di __builtin_ia32_psrlq (v1di, v1di)
20525 v4hi __builtin_ia32_psraw (v4hi, v4hi)
20526 v2si __builtin_ia32_psrad (v2si, v2si)
20527 v4hi __builtin_ia32_psllwi (v4hi, int)
20528 v2si __builtin_ia32_pslldi (v2si, int)
20529 v1di __builtin_ia32_psllqi (v1di, int)
20530 v4hi __builtin_ia32_psrlwi (v4hi, int)
20531 v2si __builtin_ia32_psrldi (v2si, int)
20532 v1di __builtin_ia32_psrlqi (v1di, int)
20533 v4hi __builtin_ia32_psrawi (v4hi, int)
20534 v2si __builtin_ia32_psradi (v2si, int)
20536 @end smallexample
20538 The following built-in functions are made available either with
20539 @option{-msse}, or with @option{-m3dnowa}.  All of them generate
20540 the machine instruction that is part of the name.
20542 @smallexample
20543 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
20544 v8qi __builtin_ia32_pavgb (v8qi, v8qi)
20545 v4hi __builtin_ia32_pavgw (v4hi, v4hi)
20546 v1di __builtin_ia32_psadbw (v8qi, v8qi)
20547 v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
20548 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
20549 v8qi __builtin_ia32_pminub (v8qi, v8qi)
20550 v4hi __builtin_ia32_pminsw (v4hi, v4hi)
20551 int __builtin_ia32_pmovmskb (v8qi)
20552 void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
20553 void __builtin_ia32_movntq (di *, di)
20554 void __builtin_ia32_sfence (void)
20555 @end smallexample
20557 The following built-in functions are available when @option{-msse} is used.
20558 All of them generate the machine instruction that is part of the name.
20560 @smallexample
20561 int __builtin_ia32_comieq (v4sf, v4sf)
20562 int __builtin_ia32_comineq (v4sf, v4sf)
20563 int __builtin_ia32_comilt (v4sf, v4sf)
20564 int __builtin_ia32_comile (v4sf, v4sf)
20565 int __builtin_ia32_comigt (v4sf, v4sf)
20566 int __builtin_ia32_comige (v4sf, v4sf)
20567 int __builtin_ia32_ucomieq (v4sf, v4sf)
20568 int __builtin_ia32_ucomineq (v4sf, v4sf)
20569 int __builtin_ia32_ucomilt (v4sf, v4sf)
20570 int __builtin_ia32_ucomile (v4sf, v4sf)
20571 int __builtin_ia32_ucomigt (v4sf, v4sf)
20572 int __builtin_ia32_ucomige (v4sf, v4sf)
20573 v4sf __builtin_ia32_addps (v4sf, v4sf)
20574 v4sf __builtin_ia32_subps (v4sf, v4sf)
20575 v4sf __builtin_ia32_mulps (v4sf, v4sf)
20576 v4sf __builtin_ia32_divps (v4sf, v4sf)
20577 v4sf __builtin_ia32_addss (v4sf, v4sf)
20578 v4sf __builtin_ia32_subss (v4sf, v4sf)
20579 v4sf __builtin_ia32_mulss (v4sf, v4sf)
20580 v4sf __builtin_ia32_divss (v4sf, v4sf)
20581 v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
20582 v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
20583 v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
20584 v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
20585 v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
20586 v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
20587 v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
20588 v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
20589 v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
20590 v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
20591 v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
20592 v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
20593 v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
20594 v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
20595 v4sf __builtin_ia32_cmpless (v4sf, v4sf)
20596 v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
20597 v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
20598 v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
20599 v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
20600 v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
20601 v4sf __builtin_ia32_maxps (v4sf, v4sf)
20602 v4sf __builtin_ia32_maxss (v4sf, v4sf)
20603 v4sf __builtin_ia32_minps (v4sf, v4sf)
20604 v4sf __builtin_ia32_minss (v4sf, v4sf)
20605 v4sf __builtin_ia32_andps (v4sf, v4sf)
20606 v4sf __builtin_ia32_andnps (v4sf, v4sf)
20607 v4sf __builtin_ia32_orps (v4sf, v4sf)
20608 v4sf __builtin_ia32_xorps (v4sf, v4sf)
20609 v4sf __builtin_ia32_movss (v4sf, v4sf)
20610 v4sf __builtin_ia32_movhlps (v4sf, v4sf)
20611 v4sf __builtin_ia32_movlhps (v4sf, v4sf)
20612 v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
20613 v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
20614 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
20615 v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
20616 v2si __builtin_ia32_cvtps2pi (v4sf)
20617 int __builtin_ia32_cvtss2si (v4sf)
20618 v2si __builtin_ia32_cvttps2pi (v4sf)
20619 int __builtin_ia32_cvttss2si (v4sf)
20620 v4sf __builtin_ia32_rcpps (v4sf)
20621 v4sf __builtin_ia32_rsqrtps (v4sf)
20622 v4sf __builtin_ia32_sqrtps (v4sf)
20623 v4sf __builtin_ia32_rcpss (v4sf)
20624 v4sf __builtin_ia32_rsqrtss (v4sf)
20625 v4sf __builtin_ia32_sqrtss (v4sf)
20626 v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
20627 void __builtin_ia32_movntps (float *, v4sf)
20628 int __builtin_ia32_movmskps (v4sf)
20629 @end smallexample
20631 The following built-in functions are available when @option{-msse} is used.
20633 @table @code
20634 @item v4sf __builtin_ia32_loadups (float *)
20635 Generates the @code{movups} machine instruction as a load from memory.
20636 @item void __builtin_ia32_storeups (float *, v4sf)
20637 Generates the @code{movups} machine instruction as a store to memory.
20638 @item v4sf __builtin_ia32_loadss (float *)
20639 Generates the @code{movss} machine instruction as a load from memory.
20640 @item v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
20641 Generates the @code{movhps} machine instruction as a load from memory.
20642 @item v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
20643 Generates the @code{movlps} machine instruction as a load from memory
20644 @item void __builtin_ia32_storehps (v2sf *, v4sf)
20645 Generates the @code{movhps} machine instruction as a store to memory.
20646 @item void __builtin_ia32_storelps (v2sf *, v4sf)
20647 Generates the @code{movlps} machine instruction as a store to memory.
20648 @end table
20650 The following built-in functions are available when @option{-msse2} is used.
20651 All of them generate the machine instruction that is part of the name.
20653 @smallexample
20654 int __builtin_ia32_comisdeq (v2df, v2df)
20655 int __builtin_ia32_comisdlt (v2df, v2df)
20656 int __builtin_ia32_comisdle (v2df, v2df)
20657 int __builtin_ia32_comisdgt (v2df, v2df)
20658 int __builtin_ia32_comisdge (v2df, v2df)
20659 int __builtin_ia32_comisdneq (v2df, v2df)
20660 int __builtin_ia32_ucomisdeq (v2df, v2df)
20661 int __builtin_ia32_ucomisdlt (v2df, v2df)
20662 int __builtin_ia32_ucomisdle (v2df, v2df)
20663 int __builtin_ia32_ucomisdgt (v2df, v2df)
20664 int __builtin_ia32_ucomisdge (v2df, v2df)
20665 int __builtin_ia32_ucomisdneq (v2df, v2df)
20666 v2df __builtin_ia32_cmpeqpd (v2df, v2df)
20667 v2df __builtin_ia32_cmpltpd (v2df, v2df)
20668 v2df __builtin_ia32_cmplepd (v2df, v2df)
20669 v2df __builtin_ia32_cmpgtpd (v2df, v2df)
20670 v2df __builtin_ia32_cmpgepd (v2df, v2df)
20671 v2df __builtin_ia32_cmpunordpd (v2df, v2df)
20672 v2df __builtin_ia32_cmpneqpd (v2df, v2df)
20673 v2df __builtin_ia32_cmpnltpd (v2df, v2df)
20674 v2df __builtin_ia32_cmpnlepd (v2df, v2df)
20675 v2df __builtin_ia32_cmpngtpd (v2df, v2df)
20676 v2df __builtin_ia32_cmpngepd (v2df, v2df)
20677 v2df __builtin_ia32_cmpordpd (v2df, v2df)
20678 v2df __builtin_ia32_cmpeqsd (v2df, v2df)
20679 v2df __builtin_ia32_cmpltsd (v2df, v2df)
20680 v2df __builtin_ia32_cmplesd (v2df, v2df)
20681 v2df __builtin_ia32_cmpunordsd (v2df, v2df)
20682 v2df __builtin_ia32_cmpneqsd (v2df, v2df)
20683 v2df __builtin_ia32_cmpnltsd (v2df, v2df)
20684 v2df __builtin_ia32_cmpnlesd (v2df, v2df)
20685 v2df __builtin_ia32_cmpordsd (v2df, v2df)
20686 v2di __builtin_ia32_paddq (v2di, v2di)
20687 v2di __builtin_ia32_psubq (v2di, v2di)
20688 v2df __builtin_ia32_addpd (v2df, v2df)
20689 v2df __builtin_ia32_subpd (v2df, v2df)
20690 v2df __builtin_ia32_mulpd (v2df, v2df)
20691 v2df __builtin_ia32_divpd (v2df, v2df)
20692 v2df __builtin_ia32_addsd (v2df, v2df)
20693 v2df __builtin_ia32_subsd (v2df, v2df)
20694 v2df __builtin_ia32_mulsd (v2df, v2df)
20695 v2df __builtin_ia32_divsd (v2df, v2df)
20696 v2df __builtin_ia32_minpd (v2df, v2df)
20697 v2df __builtin_ia32_maxpd (v2df, v2df)
20698 v2df __builtin_ia32_minsd (v2df, v2df)
20699 v2df __builtin_ia32_maxsd (v2df, v2df)
20700 v2df __builtin_ia32_andpd (v2df, v2df)
20701 v2df __builtin_ia32_andnpd (v2df, v2df)
20702 v2df __builtin_ia32_orpd (v2df, v2df)
20703 v2df __builtin_ia32_xorpd (v2df, v2df)
20704 v2df __builtin_ia32_movsd (v2df, v2df)
20705 v2df __builtin_ia32_unpckhpd (v2df, v2df)
20706 v2df __builtin_ia32_unpcklpd (v2df, v2df)
20707 v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
20708 v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
20709 v4si __builtin_ia32_paddd128 (v4si, v4si)
20710 v2di __builtin_ia32_paddq128 (v2di, v2di)
20711 v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
20712 v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
20713 v4si __builtin_ia32_psubd128 (v4si, v4si)
20714 v2di __builtin_ia32_psubq128 (v2di, v2di)
20715 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
20716 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
20717 v2di __builtin_ia32_pand128 (v2di, v2di)
20718 v2di __builtin_ia32_pandn128 (v2di, v2di)
20719 v2di __builtin_ia32_por128 (v2di, v2di)
20720 v2di __builtin_ia32_pxor128 (v2di, v2di)
20721 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
20722 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
20723 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
20724 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
20725 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
20726 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
20727 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
20728 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
20729 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
20730 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
20731 v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
20732 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
20733 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
20734 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
20735 v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
20736 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
20737 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
20738 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
20739 v4si __builtin_ia32_punpckldq128 (v4si, v4si)
20740 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
20741 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
20742 v8hi __builtin_ia32_packssdw128 (v4si, v4si)
20743 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
20744 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
20745 void __builtin_ia32_maskmovdqu (v16qi, v16qi)
20746 v2df __builtin_ia32_loadupd (double *)
20747 void __builtin_ia32_storeupd (double *, v2df)
20748 v2df __builtin_ia32_loadhpd (v2df, double const *)
20749 v2df __builtin_ia32_loadlpd (v2df, double const *)
20750 int __builtin_ia32_movmskpd (v2df)
20751 int __builtin_ia32_pmovmskb128 (v16qi)
20752 void __builtin_ia32_movnti (int *, int)
20753 void __builtin_ia32_movnti64 (long long int *, long long int)
20754 void __builtin_ia32_movntpd (double *, v2df)
20755 void __builtin_ia32_movntdq (v2df *, v2df)
20756 v4si __builtin_ia32_pshufd (v4si, int)
20757 v8hi __builtin_ia32_pshuflw (v8hi, int)
20758 v8hi __builtin_ia32_pshufhw (v8hi, int)
20759 v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
20760 v2df __builtin_ia32_sqrtpd (v2df)
20761 v2df __builtin_ia32_sqrtsd (v2df)
20762 v2df __builtin_ia32_shufpd (v2df, v2df, int)
20763 v2df __builtin_ia32_cvtdq2pd (v4si)
20764 v4sf __builtin_ia32_cvtdq2ps (v4si)
20765 v4si __builtin_ia32_cvtpd2dq (v2df)
20766 v2si __builtin_ia32_cvtpd2pi (v2df)
20767 v4sf __builtin_ia32_cvtpd2ps (v2df)
20768 v4si __builtin_ia32_cvttpd2dq (v2df)
20769 v2si __builtin_ia32_cvttpd2pi (v2df)
20770 v2df __builtin_ia32_cvtpi2pd (v2si)
20771 int __builtin_ia32_cvtsd2si (v2df)
20772 int __builtin_ia32_cvttsd2si (v2df)
20773 long long __builtin_ia32_cvtsd2si64 (v2df)
20774 long long __builtin_ia32_cvttsd2si64 (v2df)
20775 v4si __builtin_ia32_cvtps2dq (v4sf)
20776 v2df __builtin_ia32_cvtps2pd (v4sf)
20777 v4si __builtin_ia32_cvttps2dq (v4sf)
20778 v2df __builtin_ia32_cvtsi2sd (v2df, int)
20779 v2df __builtin_ia32_cvtsi642sd (v2df, long long)
20780 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
20781 v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
20782 void __builtin_ia32_clflush (const void *)
20783 void __builtin_ia32_lfence (void)
20784 void __builtin_ia32_mfence (void)
20785 v16qi __builtin_ia32_loaddqu (const char *)
20786 void __builtin_ia32_storedqu (char *, v16qi)
20787 v1di __builtin_ia32_pmuludq (v2si, v2si)
20788 v2di __builtin_ia32_pmuludq128 (v4si, v4si)
20789 v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
20790 v4si __builtin_ia32_pslld128 (v4si, v4si)
20791 v2di __builtin_ia32_psllq128 (v2di, v2di)
20792 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
20793 v4si __builtin_ia32_psrld128 (v4si, v4si)
20794 v2di __builtin_ia32_psrlq128 (v2di, v2di)
20795 v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
20796 v4si __builtin_ia32_psrad128 (v4si, v4si)
20797 v2di __builtin_ia32_pslldqi128 (v2di, int)
20798 v8hi __builtin_ia32_psllwi128 (v8hi, int)
20799 v4si __builtin_ia32_pslldi128 (v4si, int)
20800 v2di __builtin_ia32_psllqi128 (v2di, int)
20801 v2di __builtin_ia32_psrldqi128 (v2di, int)
20802 v8hi __builtin_ia32_psrlwi128 (v8hi, int)
20803 v4si __builtin_ia32_psrldi128 (v4si, int)
20804 v2di __builtin_ia32_psrlqi128 (v2di, int)
20805 v8hi __builtin_ia32_psrawi128 (v8hi, int)
20806 v4si __builtin_ia32_psradi128 (v4si, int)
20807 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
20808 v2di __builtin_ia32_movq128 (v2di)
20809 @end smallexample
20811 The following built-in functions are available when @option{-msse3} is used.
20812 All of them generate the machine instruction that is part of the name.
20814 @smallexample
20815 v2df __builtin_ia32_addsubpd (v2df, v2df)
20816 v4sf __builtin_ia32_addsubps (v4sf, v4sf)
20817 v2df __builtin_ia32_haddpd (v2df, v2df)
20818 v4sf __builtin_ia32_haddps (v4sf, v4sf)
20819 v2df __builtin_ia32_hsubpd (v2df, v2df)
20820 v4sf __builtin_ia32_hsubps (v4sf, v4sf)
20821 v16qi __builtin_ia32_lddqu (char const *)
20822 void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
20823 v4sf __builtin_ia32_movshdup (v4sf)
20824 v4sf __builtin_ia32_movsldup (v4sf)
20825 void __builtin_ia32_mwait (unsigned int, unsigned int)
20826 @end smallexample
20828 The following built-in functions are available when @option{-mssse3} is used.
20829 All of them generate the machine instruction that is part of the name.
20831 @smallexample
20832 v2si __builtin_ia32_phaddd (v2si, v2si)
20833 v4hi __builtin_ia32_phaddw (v4hi, v4hi)
20834 v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
20835 v2si __builtin_ia32_phsubd (v2si, v2si)
20836 v4hi __builtin_ia32_phsubw (v4hi, v4hi)
20837 v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
20838 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
20839 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
20840 v8qi __builtin_ia32_pshufb (v8qi, v8qi)
20841 v8qi __builtin_ia32_psignb (v8qi, v8qi)
20842 v2si __builtin_ia32_psignd (v2si, v2si)
20843 v4hi __builtin_ia32_psignw (v4hi, v4hi)
20844 v1di __builtin_ia32_palignr (v1di, v1di, int)
20845 v8qi __builtin_ia32_pabsb (v8qi)
20846 v2si __builtin_ia32_pabsd (v2si)
20847 v4hi __builtin_ia32_pabsw (v4hi)
20848 @end smallexample
20850 The following built-in functions are available when @option{-mssse3} is used.
20851 All of them generate the machine instruction that is part of the name.
20853 @smallexample
20854 v4si __builtin_ia32_phaddd128 (v4si, v4si)
20855 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
20856 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
20857 v4si __builtin_ia32_phsubd128 (v4si, v4si)
20858 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
20859 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
20860 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
20861 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
20862 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
20863 v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
20864 v4si __builtin_ia32_psignd128 (v4si, v4si)
20865 v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
20866 v2di __builtin_ia32_palignr128 (v2di, v2di, int)
20867 v16qi __builtin_ia32_pabsb128 (v16qi)
20868 v4si __builtin_ia32_pabsd128 (v4si)
20869 v8hi __builtin_ia32_pabsw128 (v8hi)
20870 @end smallexample
20872 The following built-in functions are available when @option{-msse4.1} is
20873 used.  All of them generate the machine instruction that is part of the
20874 name.
20876 @smallexample
20877 v2df __builtin_ia32_blendpd (v2df, v2df, const int)
20878 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
20879 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
20880 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
20881 v2df __builtin_ia32_dppd (v2df, v2df, const int)
20882 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
20883 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
20884 v2di __builtin_ia32_movntdqa (v2di *);
20885 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
20886 v8hi __builtin_ia32_packusdw128 (v4si, v4si)
20887 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
20888 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
20889 v2di __builtin_ia32_pcmpeqq (v2di, v2di)
20890 v8hi __builtin_ia32_phminposuw128 (v8hi)
20891 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
20892 v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
20893 v4si __builtin_ia32_pmaxud128 (v4si, v4si)
20894 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
20895 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
20896 v4si __builtin_ia32_pminsd128 (v4si, v4si)
20897 v4si __builtin_ia32_pminud128 (v4si, v4si)
20898 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
20899 v4si __builtin_ia32_pmovsxbd128 (v16qi)
20900 v2di __builtin_ia32_pmovsxbq128 (v16qi)
20901 v8hi __builtin_ia32_pmovsxbw128 (v16qi)
20902 v2di __builtin_ia32_pmovsxdq128 (v4si)
20903 v4si __builtin_ia32_pmovsxwd128 (v8hi)
20904 v2di __builtin_ia32_pmovsxwq128 (v8hi)
20905 v4si __builtin_ia32_pmovzxbd128 (v16qi)
20906 v2di __builtin_ia32_pmovzxbq128 (v16qi)
20907 v8hi __builtin_ia32_pmovzxbw128 (v16qi)
20908 v2di __builtin_ia32_pmovzxdq128 (v4si)
20909 v4si __builtin_ia32_pmovzxwd128 (v8hi)
20910 v2di __builtin_ia32_pmovzxwq128 (v8hi)
20911 v2di __builtin_ia32_pmuldq128 (v4si, v4si)
20912 v4si __builtin_ia32_pmulld128 (v4si, v4si)
20913 int __builtin_ia32_ptestc128 (v2di, v2di)
20914 int __builtin_ia32_ptestnzc128 (v2di, v2di)
20915 int __builtin_ia32_ptestz128 (v2di, v2di)
20916 v2df __builtin_ia32_roundpd (v2df, const int)
20917 v4sf __builtin_ia32_roundps (v4sf, const int)
20918 v2df __builtin_ia32_roundsd (v2df, v2df, const int)
20919 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
20920 @end smallexample
20922 The following built-in functions are available when @option{-msse4.1} is
20923 used.
20925 @table @code
20926 @item v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
20927 Generates the @code{insertps} machine instruction.
20928 @item int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
20929 Generates the @code{pextrb} machine instruction.
20930 @item v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
20931 Generates the @code{pinsrb} machine instruction.
20932 @item v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
20933 Generates the @code{pinsrd} machine instruction.
20934 @item v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)
20935 Generates the @code{pinsrq} machine instruction in 64bit mode.
20936 @end table
20938 The following built-in functions are changed to generate new SSE4.1
20939 instructions when @option{-msse4.1} is used.
20941 @table @code
20942 @item float __builtin_ia32_vec_ext_v4sf (v4sf, const int)
20943 Generates the @code{extractps} machine instruction.
20944 @item int __builtin_ia32_vec_ext_v4si (v4si, const int)
20945 Generates the @code{pextrd} machine instruction.
20946 @item long long __builtin_ia32_vec_ext_v2di (v2di, const int)
20947 Generates the @code{pextrq} machine instruction in 64bit mode.
20948 @end table
20950 The following built-in functions are available when @option{-msse4.2} is
20951 used.  All of them generate the machine instruction that is part of the
20952 name.
20954 @smallexample
20955 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
20956 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
20957 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
20958 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
20959 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
20960 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
20961 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
20962 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
20963 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
20964 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
20965 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
20966 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
20967 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
20968 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
20969 v2di __builtin_ia32_pcmpgtq (v2di, v2di)
20970 @end smallexample
20972 The following built-in functions are available when @option{-msse4.2} is
20973 used.
20975 @table @code
20976 @item unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)
20977 Generates the @code{crc32b} machine instruction.
20978 @item unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)
20979 Generates the @code{crc32w} machine instruction.
20980 @item unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)
20981 Generates the @code{crc32l} machine instruction.
20982 @item unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)
20983 Generates the @code{crc32q} machine instruction.
20984 @end table
20986 The following built-in functions are changed to generate new SSE4.2
20987 instructions when @option{-msse4.2} is used.
20989 @table @code
20990 @item int __builtin_popcount (unsigned int)
20991 Generates the @code{popcntl} machine instruction.
20992 @item int __builtin_popcountl (unsigned long)
20993 Generates the @code{popcntl} or @code{popcntq} machine instruction,
20994 depending on the size of @code{unsigned long}.
20995 @item int __builtin_popcountll (unsigned long long)
20996 Generates the @code{popcntq} machine instruction.
20997 @end table
20999 The following built-in functions are available when @option{-mavx} is
21000 used. All of them generate the machine instruction that is part of the
21001 name.
21003 @smallexample
21004 v4df __builtin_ia32_addpd256 (v4df,v4df)
21005 v8sf __builtin_ia32_addps256 (v8sf,v8sf)
21006 v4df __builtin_ia32_addsubpd256 (v4df,v4df)
21007 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
21008 v4df __builtin_ia32_andnpd256 (v4df,v4df)
21009 v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
21010 v4df __builtin_ia32_andpd256 (v4df,v4df)
21011 v8sf __builtin_ia32_andps256 (v8sf,v8sf)
21012 v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
21013 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
21014 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
21015 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
21016 v2df __builtin_ia32_cmppd (v2df,v2df,int)
21017 v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
21018 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
21019 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
21020 v2df __builtin_ia32_cmpsd (v2df,v2df,int)
21021 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
21022 v4df __builtin_ia32_cvtdq2pd256 (v4si)
21023 v8sf __builtin_ia32_cvtdq2ps256 (v8si)
21024 v4si __builtin_ia32_cvtpd2dq256 (v4df)
21025 v4sf __builtin_ia32_cvtpd2ps256 (v4df)
21026 v8si __builtin_ia32_cvtps2dq256 (v8sf)
21027 v4df __builtin_ia32_cvtps2pd256 (v4sf)
21028 v4si __builtin_ia32_cvttpd2dq256 (v4df)
21029 v8si __builtin_ia32_cvttps2dq256 (v8sf)
21030 v4df __builtin_ia32_divpd256 (v4df,v4df)
21031 v8sf __builtin_ia32_divps256 (v8sf,v8sf)
21032 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
21033 v4df __builtin_ia32_haddpd256 (v4df,v4df)
21034 v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
21035 v4df __builtin_ia32_hsubpd256 (v4df,v4df)
21036 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
21037 v32qi __builtin_ia32_lddqu256 (pcchar)
21038 v32qi __builtin_ia32_loaddqu256 (pcchar)
21039 v4df __builtin_ia32_loadupd256 (pcdouble)
21040 v8sf __builtin_ia32_loadups256 (pcfloat)
21041 v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
21042 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
21043 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
21044 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
21045 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
21046 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
21047 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
21048 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
21049 v4df __builtin_ia32_maxpd256 (v4df,v4df)
21050 v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
21051 v4df __builtin_ia32_minpd256 (v4df,v4df)
21052 v8sf __builtin_ia32_minps256 (v8sf,v8sf)
21053 v4df __builtin_ia32_movddup256 (v4df)
21054 int __builtin_ia32_movmskpd256 (v4df)
21055 int __builtin_ia32_movmskps256 (v8sf)
21056 v8sf __builtin_ia32_movshdup256 (v8sf)
21057 v8sf __builtin_ia32_movsldup256 (v8sf)
21058 v4df __builtin_ia32_mulpd256 (v4df,v4df)
21059 v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
21060 v4df __builtin_ia32_orpd256 (v4df,v4df)
21061 v8sf __builtin_ia32_orps256 (v8sf,v8sf)
21062 v2df __builtin_ia32_pd_pd256 (v4df)
21063 v4df __builtin_ia32_pd256_pd (v2df)
21064 v4sf __builtin_ia32_ps_ps256 (v8sf)
21065 v8sf __builtin_ia32_ps256_ps (v4sf)
21066 int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
21067 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
21068 int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
21069 v8sf __builtin_ia32_rcpps256 (v8sf)
21070 v4df __builtin_ia32_roundpd256 (v4df,int)
21071 v8sf __builtin_ia32_roundps256 (v8sf,int)
21072 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
21073 v8sf __builtin_ia32_rsqrtps256 (v8sf)
21074 v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
21075 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
21076 v4si __builtin_ia32_si_si256 (v8si)
21077 v8si __builtin_ia32_si256_si (v4si)
21078 v4df __builtin_ia32_sqrtpd256 (v4df)
21079 v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
21080 v8sf __builtin_ia32_sqrtps256 (v8sf)
21081 void __builtin_ia32_storedqu256 (pchar,v32qi)
21082 void __builtin_ia32_storeupd256 (pdouble,v4df)
21083 void __builtin_ia32_storeups256 (pfloat,v8sf)
21084 v4df __builtin_ia32_subpd256 (v4df,v4df)
21085 v8sf __builtin_ia32_subps256 (v8sf,v8sf)
21086 v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
21087 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
21088 v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
21089 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
21090 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
21091 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
21092 v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
21093 v4sf __builtin_ia32_vbroadcastss (pcfloat)
21094 v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
21095 v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
21096 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
21097 v4si __builtin_ia32_vextractf128_si256 (v8si,int)
21098 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
21099 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
21100 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
21101 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
21102 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
21103 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
21104 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
21105 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
21106 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
21107 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
21108 v2df __builtin_ia32_vpermilpd (v2df,int)
21109 v4df __builtin_ia32_vpermilpd256 (v4df,int)
21110 v4sf __builtin_ia32_vpermilps (v4sf,int)
21111 v8sf __builtin_ia32_vpermilps256 (v8sf,int)
21112 v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
21113 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
21114 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
21115 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
21116 int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
21117 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
21118 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
21119 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
21120 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
21121 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
21122 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
21123 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
21124 int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
21125 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
21126 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
21127 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
21128 void __builtin_ia32_vzeroall (void)
21129 void __builtin_ia32_vzeroupper (void)
21130 v4df __builtin_ia32_xorpd256 (v4df,v4df)
21131 v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
21132 @end smallexample
21134 The following built-in functions are available when @option{-mavx2} is
21135 used. All of them generate the machine instruction that is part of the
21136 name.
21138 @smallexample
21139 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
21140 v32qi __builtin_ia32_pabsb256 (v32qi)
21141 v16hi __builtin_ia32_pabsw256 (v16hi)
21142 v8si __builtin_ia32_pabsd256 (v8si)
21143 v16hi __builtin_ia32_packssdw256 (v8si,v8si)
21144 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
21145 v16hi __builtin_ia32_packusdw256 (v8si,v8si)
21146 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
21147 v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
21148 v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
21149 v8si __builtin_ia32_paddd256 (v8si,v8si)
21150 v4di __builtin_ia32_paddq256 (v4di,v4di)
21151 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
21152 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
21153 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
21154 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
21155 v4di __builtin_ia32_palignr256 (v4di,v4di,int)
21156 v4di __builtin_ia32_andsi256 (v4di,v4di)
21157 v4di __builtin_ia32_andnotsi256 (v4di,v4di)
21158 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
21159 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
21160 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
21161 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
21162 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
21163 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
21164 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
21165 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
21166 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
21167 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
21168 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
21169 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
21170 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
21171 v8si __builtin_ia32_phaddd256 (v8si,v8si)
21172 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
21173 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
21174 v8si __builtin_ia32_phsubd256 (v8si,v8si)
21175 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
21176 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
21177 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
21178 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
21179 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
21180 v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
21181 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
21182 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
21183 v8si __builtin_ia32_pmaxud256 (v8si,v8si)
21184 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
21185 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
21186 v8si __builtin_ia32_pminsd256 (v8si,v8si)
21187 v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
21188 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
21189 v8si __builtin_ia32_pminud256 (v8si,v8si)
21190 int __builtin_ia32_pmovmskb256 (v32qi)
21191 v16hi __builtin_ia32_pmovsxbw256 (v16qi)
21192 v8si __builtin_ia32_pmovsxbd256 (v16qi)
21193 v4di __builtin_ia32_pmovsxbq256 (v16qi)
21194 v8si __builtin_ia32_pmovsxwd256 (v8hi)
21195 v4di __builtin_ia32_pmovsxwq256 (v8hi)
21196 v4di __builtin_ia32_pmovsxdq256 (v4si)
21197 v16hi __builtin_ia32_pmovzxbw256 (v16qi)
21198 v8si __builtin_ia32_pmovzxbd256 (v16qi)
21199 v4di __builtin_ia32_pmovzxbq256 (v16qi)
21200 v8si __builtin_ia32_pmovzxwd256 (v8hi)
21201 v4di __builtin_ia32_pmovzxwq256 (v8hi)
21202 v4di __builtin_ia32_pmovzxdq256 (v4si)
21203 v4di __builtin_ia32_pmuldq256 (v8si,v8si)
21204 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
21205 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
21206 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
21207 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
21208 v8si __builtin_ia32_pmulld256 (v8si,v8si)
21209 v4di __builtin_ia32_pmuludq256 (v8si,v8si)
21210 v4di __builtin_ia32_por256 (v4di,v4di)
21211 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
21212 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
21213 v8si __builtin_ia32_pshufd256 (v8si,int)
21214 v16hi __builtin_ia32_pshufhw256 (v16hi,int)
21215 v16hi __builtin_ia32_pshuflw256 (v16hi,int)
21216 v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
21217 v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
21218 v8si __builtin_ia32_psignd256 (v8si,v8si)
21219 v4di __builtin_ia32_pslldqi256 (v4di,int)
21220 v16hi __builtin_ia32_psllwi256 (16hi,int)
21221 v16hi __builtin_ia32_psllw256(v16hi,v8hi)
21222 v8si __builtin_ia32_pslldi256 (v8si,int)
21223 v8si __builtin_ia32_pslld256(v8si,v4si)
21224 v4di __builtin_ia32_psllqi256 (v4di,int)
21225 v4di __builtin_ia32_psllq256(v4di,v2di)
21226 v16hi __builtin_ia32_psrawi256 (v16hi,int)
21227 v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
21228 v8si __builtin_ia32_psradi256 (v8si,int)
21229 v8si __builtin_ia32_psrad256 (v8si,v4si)
21230 v4di __builtin_ia32_psrldqi256 (v4di, int)
21231 v16hi __builtin_ia32_psrlwi256 (v16hi,int)
21232 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
21233 v8si __builtin_ia32_psrldi256 (v8si,int)
21234 v8si __builtin_ia32_psrld256 (v8si,v4si)
21235 v4di __builtin_ia32_psrlqi256 (v4di,int)
21236 v4di __builtin_ia32_psrlq256(v4di,v2di)
21237 v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
21238 v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
21239 v8si __builtin_ia32_psubd256 (v8si,v8si)
21240 v4di __builtin_ia32_psubq256 (v4di,v4di)
21241 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
21242 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
21243 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
21244 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
21245 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
21246 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
21247 v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
21248 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
21249 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
21250 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
21251 v8si __builtin_ia32_punpckldq256 (v8si,v8si)
21252 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
21253 v4di __builtin_ia32_pxor256 (v4di,v4di)
21254 v4di __builtin_ia32_movntdqa256 (pv4di)
21255 v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
21256 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
21257 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
21258 v4di __builtin_ia32_vbroadcastsi256 (v2di)
21259 v4si __builtin_ia32_pblendd128 (v4si,v4si)
21260 v8si __builtin_ia32_pblendd256 (v8si,v8si)
21261 v32qi __builtin_ia32_pbroadcastb256 (v16qi)
21262 v16hi __builtin_ia32_pbroadcastw256 (v8hi)
21263 v8si __builtin_ia32_pbroadcastd256 (v4si)
21264 v4di __builtin_ia32_pbroadcastq256 (v2di)
21265 v16qi __builtin_ia32_pbroadcastb128 (v16qi)
21266 v8hi __builtin_ia32_pbroadcastw128 (v8hi)
21267 v4si __builtin_ia32_pbroadcastd128 (v4si)
21268 v2di __builtin_ia32_pbroadcastq128 (v2di)
21269 v8si __builtin_ia32_permvarsi256 (v8si,v8si)
21270 v4df __builtin_ia32_permdf256 (v4df,int)
21271 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
21272 v4di __builtin_ia32_permdi256 (v4di,int)
21273 v4di __builtin_ia32_permti256 (v4di,v4di,int)
21274 v4di __builtin_ia32_extract128i256 (v4di,int)
21275 v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
21276 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
21277 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
21278 v4si __builtin_ia32_maskloadd (pcv4si,v4si)
21279 v2di __builtin_ia32_maskloadq (pcv2di,v2di)
21280 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
21281 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
21282 void __builtin_ia32_maskstored (pv4si,v4si,v4si)
21283 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
21284 v8si __builtin_ia32_psllv8si (v8si,v8si)
21285 v4si __builtin_ia32_psllv4si (v4si,v4si)
21286 v4di __builtin_ia32_psllv4di (v4di,v4di)
21287 v2di __builtin_ia32_psllv2di (v2di,v2di)
21288 v8si __builtin_ia32_psrav8si (v8si,v8si)
21289 v4si __builtin_ia32_psrav4si (v4si,v4si)
21290 v8si __builtin_ia32_psrlv8si (v8si,v8si)
21291 v4si __builtin_ia32_psrlv4si (v4si,v4si)
21292 v4di __builtin_ia32_psrlv4di (v4di,v4di)
21293 v2di __builtin_ia32_psrlv2di (v2di,v2di)
21294 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
21295 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
21296 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
21297 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
21298 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
21299 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
21300 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
21301 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
21302 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
21303 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
21304 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
21305 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
21306 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
21307 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
21308 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
21309 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
21310 @end smallexample
21312 The following built-in functions are available when @option{-maes} is
21313 used.  All of them generate the machine instruction that is part of the
21314 name.
21316 @smallexample
21317 v2di __builtin_ia32_aesenc128 (v2di, v2di)
21318 v2di __builtin_ia32_aesenclast128 (v2di, v2di)
21319 v2di __builtin_ia32_aesdec128 (v2di, v2di)
21320 v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
21321 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
21322 v2di __builtin_ia32_aesimc128 (v2di)
21323 @end smallexample
21325 The following built-in function is available when @option{-mpclmul} is
21326 used.
21328 @table @code
21329 @item v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)
21330 Generates the @code{pclmulqdq} machine instruction.
21331 @end table
21333 The following built-in function is available when @option{-mfsgsbase} is
21334 used.  All of them generate the machine instruction that is part of the
21335 name.
21337 @smallexample
21338 unsigned int __builtin_ia32_rdfsbase32 (void)
21339 unsigned long long __builtin_ia32_rdfsbase64 (void)
21340 unsigned int __builtin_ia32_rdgsbase32 (void)
21341 unsigned long long __builtin_ia32_rdgsbase64 (void)
21342 void _writefsbase_u32 (unsigned int)
21343 void _writefsbase_u64 (unsigned long long)
21344 void _writegsbase_u32 (unsigned int)
21345 void _writegsbase_u64 (unsigned long long)
21346 @end smallexample
21348 The following built-in function is available when @option{-mrdrnd} is
21349 used.  All of them generate the machine instruction that is part of the
21350 name.
21352 @smallexample
21353 unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
21354 unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
21355 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
21356 @end smallexample
21358 The following built-in functions are available when @option{-msse4a} is used.
21359 All of them generate the machine instruction that is part of the name.
21361 @smallexample
21362 void __builtin_ia32_movntsd (double *, v2df)
21363 void __builtin_ia32_movntss (float *, v4sf)
21364 v2di __builtin_ia32_extrq  (v2di, v16qi)
21365 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
21366 v2di __builtin_ia32_insertq (v2di, v2di)
21367 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
21368 @end smallexample
21370 The following built-in functions are available when @option{-mxop} is used.
21371 @smallexample
21372 v2df __builtin_ia32_vfrczpd (v2df)
21373 v4sf __builtin_ia32_vfrczps (v4sf)
21374 v2df __builtin_ia32_vfrczsd (v2df)
21375 v4sf __builtin_ia32_vfrczss (v4sf)
21376 v4df __builtin_ia32_vfrczpd256 (v4df)
21377 v8sf __builtin_ia32_vfrczps256 (v8sf)
21378 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
21379 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
21380 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
21381 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
21382 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
21383 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
21384 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
21385 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
21386 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
21387 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
21388 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
21389 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
21390 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
21391 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
21392 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
21393 v4si __builtin_ia32_vpcomeqd (v4si, v4si)
21394 v2di __builtin_ia32_vpcomeqq (v2di, v2di)
21395 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
21396 v4si __builtin_ia32_vpcomequd (v4si, v4si)
21397 v2di __builtin_ia32_vpcomequq (v2di, v2di)
21398 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
21399 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
21400 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
21401 v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
21402 v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
21403 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
21404 v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
21405 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
21406 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
21407 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
21408 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
21409 v4si __builtin_ia32_vpcomged (v4si, v4si)
21410 v2di __builtin_ia32_vpcomgeq (v2di, v2di)
21411 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
21412 v4si __builtin_ia32_vpcomgeud (v4si, v4si)
21413 v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
21414 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
21415 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
21416 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
21417 v4si __builtin_ia32_vpcomgtd (v4si, v4si)
21418 v2di __builtin_ia32_vpcomgtq (v2di, v2di)
21419 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
21420 v4si __builtin_ia32_vpcomgtud (v4si, v4si)
21421 v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
21422 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
21423 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
21424 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
21425 v4si __builtin_ia32_vpcomled (v4si, v4si)
21426 v2di __builtin_ia32_vpcomleq (v2di, v2di)
21427 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
21428 v4si __builtin_ia32_vpcomleud (v4si, v4si)
21429 v2di __builtin_ia32_vpcomleuq (v2di, v2di)
21430 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
21431 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
21432 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
21433 v4si __builtin_ia32_vpcomltd (v4si, v4si)
21434 v2di __builtin_ia32_vpcomltq (v2di, v2di)
21435 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
21436 v4si __builtin_ia32_vpcomltud (v4si, v4si)
21437 v2di __builtin_ia32_vpcomltuq (v2di, v2di)
21438 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
21439 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
21440 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
21441 v4si __builtin_ia32_vpcomned (v4si, v4si)
21442 v2di __builtin_ia32_vpcomneq (v2di, v2di)
21443 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
21444 v4si __builtin_ia32_vpcomneud (v4si, v4si)
21445 v2di __builtin_ia32_vpcomneuq (v2di, v2di)
21446 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
21447 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
21448 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
21449 v4si __builtin_ia32_vpcomtrued (v4si, v4si)
21450 v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
21451 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
21452 v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
21453 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
21454 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
21455 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
21456 v4si __builtin_ia32_vphaddbd (v16qi)
21457 v2di __builtin_ia32_vphaddbq (v16qi)
21458 v8hi __builtin_ia32_vphaddbw (v16qi)
21459 v2di __builtin_ia32_vphadddq (v4si)
21460 v4si __builtin_ia32_vphaddubd (v16qi)
21461 v2di __builtin_ia32_vphaddubq (v16qi)
21462 v8hi __builtin_ia32_vphaddubw (v16qi)
21463 v2di __builtin_ia32_vphaddudq (v4si)
21464 v4si __builtin_ia32_vphadduwd (v8hi)
21465 v2di __builtin_ia32_vphadduwq (v8hi)
21466 v4si __builtin_ia32_vphaddwd (v8hi)
21467 v2di __builtin_ia32_vphaddwq (v8hi)
21468 v8hi __builtin_ia32_vphsubbw (v16qi)
21469 v2di __builtin_ia32_vphsubdq (v4si)
21470 v4si __builtin_ia32_vphsubwd (v8hi)
21471 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
21472 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
21473 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
21474 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
21475 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
21476 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
21477 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
21478 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
21479 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
21480 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
21481 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
21482 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
21483 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
21484 v16qi __builtin_ia32_vprotb (v16qi, v16qi)
21485 v4si __builtin_ia32_vprotd (v4si, v4si)
21486 v2di __builtin_ia32_vprotq (v2di, v2di)
21487 v8hi __builtin_ia32_vprotw (v8hi, v8hi)
21488 v16qi __builtin_ia32_vpshab (v16qi, v16qi)
21489 v4si __builtin_ia32_vpshad (v4si, v4si)
21490 v2di __builtin_ia32_vpshaq (v2di, v2di)
21491 v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
21492 v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
21493 v4si __builtin_ia32_vpshld (v4si, v4si)
21494 v2di __builtin_ia32_vpshlq (v2di, v2di)
21495 v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
21496 @end smallexample
21498 The following built-in functions are available when @option{-mfma4} is used.
21499 All of them generate the machine instruction that is part of the name.
21501 @smallexample
21502 v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
21503 v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
21504 v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
21505 v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
21506 v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
21507 v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
21508 v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
21509 v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
21510 v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
21511 v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
21512 v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
21513 v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
21514 v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
21515 v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
21516 v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
21517 v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
21518 v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
21519 v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
21520 v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
21521 v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
21522 v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
21523 v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
21524 v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
21525 v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
21526 v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
21527 v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
21528 v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
21529 v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
21530 v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
21531 v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
21532 v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
21533 v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
21535 @end smallexample
21537 The following built-in functions are available when @option{-mlwp} is used.
21539 @smallexample
21540 void __builtin_ia32_llwpcb16 (void *);
21541 void __builtin_ia32_llwpcb32 (void *);
21542 void __builtin_ia32_llwpcb64 (void *);
21543 void * __builtin_ia32_llwpcb16 (void);
21544 void * __builtin_ia32_llwpcb32 (void);
21545 void * __builtin_ia32_llwpcb64 (void);
21546 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
21547 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
21548 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
21549 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
21550 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
21551 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
21552 @end smallexample
21554 The following built-in functions are available when @option{-mbmi} is used.
21555 All of them generate the machine instruction that is part of the name.
21556 @smallexample
21557 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
21558 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
21559 @end smallexample
21561 The following built-in functions are available when @option{-mbmi2} is used.
21562 All of them generate the machine instruction that is part of the name.
21563 @smallexample
21564 unsigned int _bzhi_u32 (unsigned int, unsigned int)
21565 unsigned int _pdep_u32 (unsigned int, unsigned int)
21566 unsigned int _pext_u32 (unsigned int, unsigned int)
21567 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
21568 unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
21569 unsigned long long _pext_u64 (unsigned long long, unsigned long long)
21570 @end smallexample
21572 The following built-in functions are available when @option{-mlzcnt} is used.
21573 All of them generate the machine instruction that is part of the name.
21574 @smallexample
21575 unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
21576 unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
21577 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
21578 @end smallexample
21580 The following built-in functions are available when @option{-mfxsr} is used.
21581 All of them generate the machine instruction that is part of the name.
21582 @smallexample
21583 void __builtin_ia32_fxsave (void *)
21584 void __builtin_ia32_fxrstor (void *)
21585 void __builtin_ia32_fxsave64 (void *)
21586 void __builtin_ia32_fxrstor64 (void *)
21587 @end smallexample
21589 The following built-in functions are available when @option{-mxsave} is used.
21590 All of them generate the machine instruction that is part of the name.
21591 @smallexample
21592 void __builtin_ia32_xsave (void *, long long)
21593 void __builtin_ia32_xrstor (void *, long long)
21594 void __builtin_ia32_xsave64 (void *, long long)
21595 void __builtin_ia32_xrstor64 (void *, long long)
21596 @end smallexample
21598 The following built-in functions are available when @option{-mxsaveopt} is used.
21599 All of them generate the machine instruction that is part of the name.
21600 @smallexample
21601 void __builtin_ia32_xsaveopt (void *, long long)
21602 void __builtin_ia32_xsaveopt64 (void *, long long)
21603 @end smallexample
21605 The following built-in functions are available when @option{-mtbm} is used.
21606 Both of them generate the immediate form of the bextr machine instruction.
21607 @smallexample
21608 unsigned int __builtin_ia32_bextri_u32 (unsigned int,
21609                                         const unsigned int);
21610 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
21611                                               const unsigned long long);
21612 @end smallexample
21615 The following built-in functions are available when @option{-m3dnow} is used.
21616 All of them generate the machine instruction that is part of the name.
21618 @smallexample
21619 void __builtin_ia32_femms (void)
21620 v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
21621 v2si __builtin_ia32_pf2id (v2sf)
21622 v2sf __builtin_ia32_pfacc (v2sf, v2sf)
21623 v2sf __builtin_ia32_pfadd (v2sf, v2sf)
21624 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
21625 v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
21626 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
21627 v2sf __builtin_ia32_pfmax (v2sf, v2sf)
21628 v2sf __builtin_ia32_pfmin (v2sf, v2sf)
21629 v2sf __builtin_ia32_pfmul (v2sf, v2sf)
21630 v2sf __builtin_ia32_pfrcp (v2sf)
21631 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
21632 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
21633 v2sf __builtin_ia32_pfrsqrt (v2sf)
21634 v2sf __builtin_ia32_pfsub (v2sf, v2sf)
21635 v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
21636 v2sf __builtin_ia32_pi2fd (v2si)
21637 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
21638 @end smallexample
21640 The following built-in functions are available when @option{-m3dnowa} is used.
21641 All of them generate the machine instruction that is part of the name.
21643 @smallexample
21644 v2si __builtin_ia32_pf2iw (v2sf)
21645 v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
21646 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
21647 v2sf __builtin_ia32_pi2fw (v2si)
21648 v2sf __builtin_ia32_pswapdsf (v2sf)
21649 v2si __builtin_ia32_pswapdsi (v2si)
21650 @end smallexample
21652 The following built-in functions are available when @option{-mrtm} is used
21653 They are used for restricted transactional memory. These are the internal
21654 low level functions. Normally the functions in 
21655 @ref{x86 transactional memory intrinsics} should be used instead.
21657 @smallexample
21658 int __builtin_ia32_xbegin ()
21659 void __builtin_ia32_xend ()
21660 void __builtin_ia32_xabort (status)
21661 int __builtin_ia32_xtest ()
21662 @end smallexample
21664 The following built-in functions are available when @option{-mmwaitx} is used.
21665 All of them generate the machine instruction that is part of the name.
21666 @smallexample
21667 void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
21668 void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
21669 @end smallexample
21671 The following built-in functions are available when @option{-mclzero} is used.
21672 All of them generate the machine instruction that is part of the name.
21673 @smallexample
21674 void __builtin_i32_clzero (void *)
21675 @end smallexample
21677 The following built-in functions are available when @option{-mpku} is used.
21678 They generate reads and writes to PKRU.
21679 @smallexample
21680 void __builtin_ia32_wrpkru (unsigned int)
21681 unsigned int __builtin_ia32_rdpkru ()
21682 @end smallexample
21684 The following built-in functions are available when @option{-mcet} is used.
21685 They are used to support Intel Control-flow Enforcment Technology (CET).
21686 Each built-in function generates the  machine instruction that is part of the
21687 function's name.
21688 @smallexample
21689 unsigned int __builtin_ia32_rdsspd (unsigned int)
21690 unsigned long long __builtin_ia32_rdsspq (unsigned long long)
21691 void __builtin_ia32_incsspd (unsigned int)
21692 void __builtin_ia32_incsspq (unsigned long long)
21693 void __builtin_ia32_saveprevssp(void);
21694 void __builtin_ia32_rstorssp(void *);
21695 void __builtin_ia32_wrssd(unsigned int, void *);
21696 void __builtin_ia32_wrssq(unsigned long long, void *);
21697 void __builtin_ia32_wrussd(unsigned int, void *);
21698 void __builtin_ia32_wrussq(unsigned long long, void *);
21699 void __builtin_ia32_setssbsy(void);
21700 void __builtin_ia32_clrssbsy(void *);
21701 @end smallexample
21703 @node x86 transactional memory intrinsics
21704 @subsection x86 Transactional Memory Intrinsics
21706 These hardware transactional memory intrinsics for x86 allow you to use
21707 memory transactions with RTM (Restricted Transactional Memory).
21708 This support is enabled with the @option{-mrtm} option.
21709 For using HLE (Hardware Lock Elision) see 
21710 @ref{x86 specific memory model extensions for transactional memory} instead.
21712 A memory transaction commits all changes to memory in an atomic way,
21713 as visible to other threads. If the transaction fails it is rolled back
21714 and all side effects discarded.
21716 Generally there is no guarantee that a memory transaction ever succeeds
21717 and suitable fallback code always needs to be supplied.
21719 @deftypefn {RTM Function} {unsigned} _xbegin ()
21720 Start a RTM (Restricted Transactional Memory) transaction. 
21721 Returns @code{_XBEGIN_STARTED} when the transaction
21722 started successfully (note this is not 0, so the constant has to be 
21723 explicitly tested).  
21725 If the transaction aborts, all side-effects 
21726 are undone and an abort code encoded as a bit mask is returned.
21727 The following macros are defined:
21729 @table @code
21730 @item _XABORT_EXPLICIT
21731 Transaction was explicitly aborted with @code{_xabort}.  The parameter passed
21732 to @code{_xabort} is available with @code{_XABORT_CODE(status)}.
21733 @item _XABORT_RETRY
21734 Transaction retry is possible.
21735 @item _XABORT_CONFLICT
21736 Transaction abort due to a memory conflict with another thread.
21737 @item _XABORT_CAPACITY
21738 Transaction abort due to the transaction using too much memory.
21739 @item _XABORT_DEBUG
21740 Transaction abort due to a debug trap.
21741 @item _XABORT_NESTED
21742 Transaction abort in an inner nested transaction.
21743 @end table
21745 There is no guarantee
21746 any transaction ever succeeds, so there always needs to be a valid
21747 fallback path.
21748 @end deftypefn
21750 @deftypefn {RTM Function} {void} _xend ()
21751 Commit the current transaction. When no transaction is active this faults.
21752 All memory side-effects of the transaction become visible
21753 to other threads in an atomic manner.
21754 @end deftypefn
21756 @deftypefn {RTM Function} {int} _xtest ()
21757 Return a nonzero value if a transaction is currently active, otherwise 0.
21758 @end deftypefn
21760 @deftypefn {RTM Function} {void} _xabort (status)
21761 Abort the current transaction. When no transaction is active this is a no-op.
21762 The @var{status} is an 8-bit constant; its value is encoded in the return 
21763 value from @code{_xbegin}.
21764 @end deftypefn
21766 Here is an example showing handling for @code{_XABORT_RETRY}
21767 and a fallback path for other failures:
21769 @smallexample
21770 #include <immintrin.h>
21772 int n_tries, max_tries;
21773 unsigned status = _XABORT_EXPLICIT;
21776 for (n_tries = 0; n_tries < max_tries; n_tries++) 
21777   @{
21778     status = _xbegin ();
21779     if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
21780       break;
21781   @}
21782 if (status == _XBEGIN_STARTED) 
21783   @{
21784     ... transaction code...
21785     _xend ();
21786   @} 
21787 else 
21788   @{
21789     ... non-transactional fallback path...
21790   @}
21791 @end smallexample
21793 @noindent
21794 Note that, in most cases, the transactional and non-transactional code
21795 must synchronize together to ensure consistency.
21797 @node Target Format Checks
21798 @section Format Checks Specific to Particular Target Machines
21800 For some target machines, GCC supports additional options to the
21801 format attribute
21802 (@pxref{Function Attributes,,Declaring Attributes of Functions}).
21804 @menu
21805 * Solaris Format Checks::
21806 * Darwin Format Checks::
21807 @end menu
21809 @node Solaris Format Checks
21810 @subsection Solaris Format Checks
21812 Solaris targets support the @code{cmn_err} (or @code{__cmn_err__}) format
21813 check.  @code{cmn_err} accepts a subset of the standard @code{printf}
21814 conversions, and the two-argument @code{%b} conversion for displaying
21815 bit-fields.  See the Solaris man page for @code{cmn_err} for more information.
21817 @node Darwin Format Checks
21818 @subsection Darwin Format Checks
21820 Darwin targets support the @code{CFString} (or @code{__CFString__}) in the format
21821 attribute context.  Declarations made with such attribution are parsed for correct syntax
21822 and format argument types.  However, parsing of the format string itself is currently undefined
21823 and is not carried out by this version of the compiler.
21825 Additionally, @code{CFStringRefs} (defined by the @code{CoreFoundation} headers) may
21826 also be used as format arguments.  Note that the relevant headers are only likely to be
21827 available on Darwin (OSX) installations.  On such installations, the XCode and system
21828 documentation provide descriptions of @code{CFString}, @code{CFStringRefs} and
21829 associated functions.
21831 @node Pragmas
21832 @section Pragmas Accepted by GCC
21833 @cindex pragmas
21834 @cindex @code{#pragma}
21836 GCC supports several types of pragmas, primarily in order to compile
21837 code originally written for other compilers.  Note that in general
21838 we do not recommend the use of pragmas; @xref{Function Attributes},
21839 for further explanation.
21841 @menu
21842 * AArch64 Pragmas::
21843 * ARM Pragmas::
21844 * M32C Pragmas::
21845 * MeP Pragmas::
21846 * RS/6000 and PowerPC Pragmas::
21847 * S/390 Pragmas::
21848 * Darwin Pragmas::
21849 * Solaris Pragmas::
21850 * Symbol-Renaming Pragmas::
21851 * Structure-Layout Pragmas::
21852 * Weak Pragmas::
21853 * Diagnostic Pragmas::
21854 * Visibility Pragmas::
21855 * Push/Pop Macro Pragmas::
21856 * Function Specific Option Pragmas::
21857 * Loop-Specific Pragmas::
21858 @end menu
21860 @node AArch64 Pragmas
21861 @subsection AArch64 Pragmas
21863 The pragmas defined by the AArch64 target correspond to the AArch64
21864 target function attributes.  They can be specified as below:
21865 @smallexample
21866 #pragma GCC target("string")
21867 @end smallexample
21869 where @code{@var{string}} can be any string accepted as an AArch64 target
21870 attribute.  @xref{AArch64 Function Attributes}, for more details
21871 on the permissible values of @code{string}.
21873 @node ARM Pragmas
21874 @subsection ARM Pragmas
21876 The ARM target defines pragmas for controlling the default addition of
21877 @code{long_call} and @code{short_call} attributes to functions.
21878 @xref{Function Attributes}, for information about the effects of these
21879 attributes.
21881 @table @code
21882 @item long_calls
21883 @cindex pragma, long_calls
21884 Set all subsequent functions to have the @code{long_call} attribute.
21886 @item no_long_calls
21887 @cindex pragma, no_long_calls
21888 Set all subsequent functions to have the @code{short_call} attribute.
21890 @item long_calls_off
21891 @cindex pragma, long_calls_off
21892 Do not affect the @code{long_call} or @code{short_call} attributes of
21893 subsequent functions.
21894 @end table
21896 @node M32C Pragmas
21897 @subsection M32C Pragmas
21899 @table @code
21900 @item GCC memregs @var{number}
21901 @cindex pragma, memregs
21902 Overrides the command-line option @code{-memregs=} for the current
21903 file.  Use with care!  This pragma must be before any function in the
21904 file, and mixing different memregs values in different objects may
21905 make them incompatible.  This pragma is useful when a
21906 performance-critical function uses a memreg for temporary values,
21907 as it may allow you to reduce the number of memregs used.
21909 @item ADDRESS @var{name} @var{address}
21910 @cindex pragma, address
21911 For any declared symbols matching @var{name}, this does three things
21912 to that symbol: it forces the symbol to be located at the given
21913 address (a number), it forces the symbol to be volatile, and it
21914 changes the symbol's scope to be static.  This pragma exists for
21915 compatibility with other compilers, but note that the common
21916 @code{1234H} numeric syntax is not supported (use @code{0x1234}
21917 instead).  Example:
21919 @smallexample
21920 #pragma ADDRESS port3 0x103
21921 char port3;
21922 @end smallexample
21924 @end table
21926 @node MeP Pragmas
21927 @subsection MeP Pragmas
21929 @table @code
21931 @item custom io_volatile (on|off)
21932 @cindex pragma, custom io_volatile
21933 Overrides the command-line option @code{-mio-volatile} for the current
21934 file.  Note that for compatibility with future GCC releases, this
21935 option should only be used once before any @code{io} variables in each
21936 file.
21938 @item GCC coprocessor available @var{registers}
21939 @cindex pragma, coprocessor available
21940 Specifies which coprocessor registers are available to the register
21941 allocator.  @var{registers} may be a single register, register range
21942 separated by ellipses, or comma-separated list of those.  Example:
21944 @smallexample
21945 #pragma GCC coprocessor available $c0...$c10, $c28
21946 @end smallexample
21948 @item GCC coprocessor call_saved @var{registers}
21949 @cindex pragma, coprocessor call_saved
21950 Specifies which coprocessor registers are to be saved and restored by
21951 any function using them.  @var{registers} may be a single register,
21952 register range separated by ellipses, or comma-separated list of
21953 those.  Example:
21955 @smallexample
21956 #pragma GCC coprocessor call_saved $c4...$c6, $c31
21957 @end smallexample
21959 @item GCC coprocessor subclass '(A|B|C|D)' = @var{registers}
21960 @cindex pragma, coprocessor subclass
21961 Creates and defines a register class.  These register classes can be
21962 used by inline @code{asm} constructs.  @var{registers} may be a single
21963 register, register range separated by ellipses, or comma-separated
21964 list of those.  Example:
21966 @smallexample
21967 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
21969 asm ("cpfoo %0" : "=B" (x));
21970 @end smallexample
21972 @item GCC disinterrupt @var{name} , @var{name} @dots{}
21973 @cindex pragma, disinterrupt
21974 For the named functions, the compiler adds code to disable interrupts
21975 for the duration of those functions.  If any functions so named 
21976 are not encountered in the source, a warning is emitted that the pragma is
21977 not used.  Examples:
21979 @smallexample
21980 #pragma disinterrupt foo
21981 #pragma disinterrupt bar, grill
21982 int foo () @{ @dots{} @}
21983 @end smallexample
21985 @item GCC call @var{name} , @var{name} @dots{}
21986 @cindex pragma, call
21987 For the named functions, the compiler always uses a register-indirect
21988 call model when calling the named functions.  Examples:
21990 @smallexample
21991 extern int foo ();
21992 #pragma call foo
21993 @end smallexample
21995 @end table
21997 @node RS/6000 and PowerPC Pragmas
21998 @subsection RS/6000 and PowerPC Pragmas
22000 The RS/6000 and PowerPC targets define one pragma for controlling
22001 whether or not the @code{longcall} attribute is added to function
22002 declarations by default.  This pragma overrides the @option{-mlongcall}
22003 option, but not the @code{longcall} and @code{shortcall} attributes.
22004 @xref{RS/6000 and PowerPC Options}, for more information about when long
22005 calls are and are not necessary.
22007 @table @code
22008 @item longcall (1)
22009 @cindex pragma, longcall
22010 Apply the @code{longcall} attribute to all subsequent function
22011 declarations.
22013 @item longcall (0)
22014 Do not apply the @code{longcall} attribute to subsequent function
22015 declarations.
22016 @end table
22018 @c Describe h8300 pragmas here.
22019 @c Describe sh pragmas here.
22020 @c Describe v850 pragmas here.
22022 @node S/390 Pragmas
22023 @subsection S/390 Pragmas
22025 The pragmas defined by the S/390 target correspond to the S/390
22026 target function attributes and some the additional options:
22028 @table @samp
22029 @item zvector
22030 @itemx no-zvector
22031 @end table
22033 Note that options of the pragma, unlike options of the target
22034 attribute, do change the value of preprocessor macros like
22035 @code{__VEC__}.  They can be specified as below:
22037 @smallexample
22038 #pragma GCC target("string[,string]...")
22039 #pragma GCC target("string"[,"string"]...)
22040 @end smallexample
22042 @node Darwin Pragmas
22043 @subsection Darwin Pragmas
22045 The following pragmas are available for all architectures running the
22046 Darwin operating system.  These are useful for compatibility with other
22047 Mac OS compilers.
22049 @table @code
22050 @item mark @var{tokens}@dots{}
22051 @cindex pragma, mark
22052 This pragma is accepted, but has no effect.
22054 @item options align=@var{alignment}
22055 @cindex pragma, options align
22056 This pragma sets the alignment of fields in structures.  The values of
22057 @var{alignment} may be @code{mac68k}, to emulate m68k alignment, or
22058 @code{power}, to emulate PowerPC alignment.  Uses of this pragma nest
22059 properly; to restore the previous setting, use @code{reset} for the
22060 @var{alignment}.
22062 @item segment @var{tokens}@dots{}
22063 @cindex pragma, segment
22064 This pragma is accepted, but has no effect.
22066 @item unused (@var{var} [, @var{var}]@dots{})
22067 @cindex pragma, unused
22068 This pragma declares variables to be possibly unused.  GCC does not
22069 produce warnings for the listed variables.  The effect is similar to
22070 that of the @code{unused} attribute, except that this pragma may appear
22071 anywhere within the variables' scopes.
22072 @end table
22074 @node Solaris Pragmas
22075 @subsection Solaris Pragmas
22077 The Solaris target supports @code{#pragma redefine_extname}
22078 (@pxref{Symbol-Renaming Pragmas}).  It also supports additional
22079 @code{#pragma} directives for compatibility with the system compiler.
22081 @table @code
22082 @item align @var{alignment} (@var{variable} [, @var{variable}]...)
22083 @cindex pragma, align
22085 Increase the minimum alignment of each @var{variable} to @var{alignment}.
22086 This is the same as GCC's @code{aligned} attribute @pxref{Variable
22087 Attributes}).  Macro expansion occurs on the arguments to this pragma
22088 when compiling C and Objective-C@.  It does not currently occur when
22089 compiling C++, but this is a bug which may be fixed in a future
22090 release.
22092 @item fini (@var{function} [, @var{function}]...)
22093 @cindex pragma, fini
22095 This pragma causes each listed @var{function} to be called after
22096 main, or during shared module unloading, by adding a call to the
22097 @code{.fini} section.
22099 @item init (@var{function} [, @var{function}]...)
22100 @cindex pragma, init
22102 This pragma causes each listed @var{function} to be called during
22103 initialization (before @code{main}) or during shared module loading, by
22104 adding a call to the @code{.init} section.
22106 @end table
22108 @node Symbol-Renaming Pragmas
22109 @subsection Symbol-Renaming Pragmas
22111 GCC supports a @code{#pragma} directive that changes the name used in
22112 assembly for a given declaration. While this pragma is supported on all
22113 platforms, it is intended primarily to provide compatibility with the
22114 Solaris system headers. This effect can also be achieved using the asm
22115 labels extension (@pxref{Asm Labels}).
22117 @table @code
22118 @item redefine_extname @var{oldname} @var{newname}
22119 @cindex pragma, redefine_extname
22121 This pragma gives the C function @var{oldname} the assembly symbol
22122 @var{newname}.  The preprocessor macro @code{__PRAGMA_REDEFINE_EXTNAME}
22123 is defined if this pragma is available (currently on all platforms).
22124 @end table
22126 This pragma and the asm labels extension interact in a complicated
22127 manner.  Here are some corner cases you may want to be aware of:
22129 @enumerate
22130 @item This pragma silently applies only to declarations with external
22131 linkage.  Asm labels do not have this restriction.
22133 @item In C++, this pragma silently applies only to declarations with
22134 ``C'' linkage.  Again, asm labels do not have this restriction.
22136 @item If either of the ways of changing the assembly name of a
22137 declaration are applied to a declaration whose assembly name has
22138 already been determined (either by a previous use of one of these
22139 features, or because the compiler needed the assembly name in order to
22140 generate code), and the new name is different, a warning issues and
22141 the name does not change.
22143 @item The @var{oldname} used by @code{#pragma redefine_extname} is
22144 always the C-language name.
22145 @end enumerate
22147 @node Structure-Layout Pragmas
22148 @subsection Structure-Layout Pragmas
22150 For compatibility with Microsoft Windows compilers, GCC supports a
22151 set of @code{#pragma} directives that change the maximum alignment of
22152 members of structures (other than zero-width bit-fields), unions, and
22153 classes subsequently defined. The @var{n} value below always is required
22154 to be a small power of two and specifies the new alignment in bytes.
22156 @enumerate
22157 @item @code{#pragma pack(@var{n})} simply sets the new alignment.
22158 @item @code{#pragma pack()} sets the alignment to the one that was in
22159 effect when compilation started (see also command-line option
22160 @option{-fpack-struct[=@var{n}]} @pxref{Code Gen Options}).
22161 @item @code{#pragma pack(push[,@var{n}])} pushes the current alignment
22162 setting on an internal stack and then optionally sets the new alignment.
22163 @item @code{#pragma pack(pop)} restores the alignment setting to the one
22164 saved at the top of the internal stack (and removes that stack entry).
22165 Note that @code{#pragma pack([@var{n}])} does not influence this internal
22166 stack; thus it is possible to have @code{#pragma pack(push)} followed by
22167 multiple @code{#pragma pack(@var{n})} instances and finalized by a single
22168 @code{#pragma pack(pop)}.
22169 @end enumerate
22171 Some targets, e.g.@: x86 and PowerPC, support the @code{#pragma ms_struct}
22172 directive which lays out structures and unions subsequently defined as the
22173 documented @code{__attribute__ ((ms_struct))}.
22175 @enumerate
22176 @item @code{#pragma ms_struct on} turns on the Microsoft layout.
22177 @item @code{#pragma ms_struct off} turns off the Microsoft layout.
22178 @item @code{#pragma ms_struct reset} goes back to the default layout.
22179 @end enumerate
22181 Most targets also support the @code{#pragma scalar_storage_order} directive
22182 which lays out structures and unions subsequently defined as the documented
22183 @code{__attribute__ ((scalar_storage_order))}.
22185 @enumerate
22186 @item @code{#pragma scalar_storage_order big-endian} sets the storage order
22187 of the scalar fields to big-endian.
22188 @item @code{#pragma scalar_storage_order little-endian} sets the storage order
22189 of the scalar fields to little-endian.
22190 @item @code{#pragma scalar_storage_order default} goes back to the endianness
22191 that was in effect when compilation started (see also command-line option
22192 @option{-fsso-struct=@var{endianness}} @pxref{C Dialect Options}).
22193 @end enumerate
22195 @node Weak Pragmas
22196 @subsection Weak Pragmas
22198 For compatibility with SVR4, GCC supports a set of @code{#pragma}
22199 directives for declaring symbols to be weak, and defining weak
22200 aliases.
22202 @table @code
22203 @item #pragma weak @var{symbol}
22204 @cindex pragma, weak
22205 This pragma declares @var{symbol} to be weak, as if the declaration
22206 had the attribute of the same name.  The pragma may appear before
22207 or after the declaration of @var{symbol}.  It is not an error for
22208 @var{symbol} to never be defined at all.
22210 @item #pragma weak @var{symbol1} = @var{symbol2}
22211 This pragma declares @var{symbol1} to be a weak alias of @var{symbol2}.
22212 It is an error if @var{symbol2} is not defined in the current
22213 translation unit.
22214 @end table
22216 @node Diagnostic Pragmas
22217 @subsection Diagnostic Pragmas
22219 GCC allows the user to selectively enable or disable certain types of
22220 diagnostics, and change the kind of the diagnostic.  For example, a
22221 project's policy might require that all sources compile with
22222 @option{-Werror} but certain files might have exceptions allowing
22223 specific types of warnings.  Or, a project might selectively enable
22224 diagnostics and treat them as errors depending on which preprocessor
22225 macros are defined.
22227 @table @code
22228 @item #pragma GCC diagnostic @var{kind} @var{option}
22229 @cindex pragma, diagnostic
22231 Modifies the disposition of a diagnostic.  Note that not all
22232 diagnostics are modifiable; at the moment only warnings (normally
22233 controlled by @samp{-W@dots{}}) can be controlled, and not all of them.
22234 Use @option{-fdiagnostics-show-option} to determine which diagnostics
22235 are controllable and which option controls them.
22237 @var{kind} is @samp{error} to treat this diagnostic as an error,
22238 @samp{warning} to treat it like a warning (even if @option{-Werror} is
22239 in effect), or @samp{ignored} if the diagnostic is to be ignored.
22240 @var{option} is a double quoted string that matches the command-line
22241 option.
22243 @smallexample
22244 #pragma GCC diagnostic warning "-Wformat"
22245 #pragma GCC diagnostic error "-Wformat"
22246 #pragma GCC diagnostic ignored "-Wformat"
22247 @end smallexample
22249 Note that these pragmas override any command-line options.  GCC keeps
22250 track of the location of each pragma, and issues diagnostics according
22251 to the state as of that point in the source file.  Thus, pragmas occurring
22252 after a line do not affect diagnostics caused by that line.
22254 @item #pragma GCC diagnostic push
22255 @itemx #pragma GCC diagnostic pop
22257 Causes GCC to remember the state of the diagnostics as of each
22258 @code{push}, and restore to that point at each @code{pop}.  If a
22259 @code{pop} has no matching @code{push}, the command-line options are
22260 restored.
22262 @smallexample
22263 #pragma GCC diagnostic error "-Wuninitialized"
22264   foo(a);                       /* error is given for this one */
22265 #pragma GCC diagnostic push
22266 #pragma GCC diagnostic ignored "-Wuninitialized"
22267   foo(b);                       /* no diagnostic for this one */
22268 #pragma GCC diagnostic pop
22269   foo(c);                       /* error is given for this one */
22270 #pragma GCC diagnostic pop
22271   foo(d);                       /* depends on command-line options */
22272 @end smallexample
22274 @end table
22276 GCC also offers a simple mechanism for printing messages during
22277 compilation.
22279 @table @code
22280 @item #pragma message @var{string}
22281 @cindex pragma, diagnostic
22283 Prints @var{string} as a compiler message on compilation.  The message
22284 is informational only, and is neither a compilation warning nor an error.
22286 @smallexample
22287 #pragma message "Compiling " __FILE__ "..."
22288 @end smallexample
22290 @var{string} may be parenthesized, and is printed with location
22291 information.  For example,
22293 @smallexample
22294 #define DO_PRAGMA(x) _Pragma (#x)
22295 #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
22297 TODO(Remember to fix this)
22298 @end smallexample
22300 @noindent
22301 prints @samp{/tmp/file.c:4: note: #pragma message:
22302 TODO - Remember to fix this}.
22304 @end table
22306 @node Visibility Pragmas
22307 @subsection Visibility Pragmas
22309 @table @code
22310 @item #pragma GCC visibility push(@var{visibility})
22311 @itemx #pragma GCC visibility pop
22312 @cindex pragma, visibility
22314 This pragma allows the user to set the visibility for multiple
22315 declarations without having to give each a visibility attribute
22316 (@pxref{Function Attributes}).
22318 In C++, @samp{#pragma GCC visibility} affects only namespace-scope
22319 declarations.  Class members and template specializations are not
22320 affected; if you want to override the visibility for a particular
22321 member or instantiation, you must use an attribute.
22323 @end table
22326 @node Push/Pop Macro Pragmas
22327 @subsection Push/Pop Macro Pragmas
22329 For compatibility with Microsoft Windows compilers, GCC supports
22330 @samp{#pragma push_macro(@var{"macro_name"})}
22331 and @samp{#pragma pop_macro(@var{"macro_name"})}.
22333 @table @code
22334 @item #pragma push_macro(@var{"macro_name"})
22335 @cindex pragma, push_macro
22336 This pragma saves the value of the macro named as @var{macro_name} to
22337 the top of the stack for this macro.
22339 @item #pragma pop_macro(@var{"macro_name"})
22340 @cindex pragma, pop_macro
22341 This pragma sets the value of the macro named as @var{macro_name} to
22342 the value on top of the stack for this macro. If the stack for
22343 @var{macro_name} is empty, the value of the macro remains unchanged.
22344 @end table
22346 For example:
22348 @smallexample
22349 #define X  1
22350 #pragma push_macro("X")
22351 #undef X
22352 #define X -1
22353 #pragma pop_macro("X")
22354 int x [X];
22355 @end smallexample
22357 @noindent
22358 In this example, the definition of X as 1 is saved by @code{#pragma
22359 push_macro} and restored by @code{#pragma pop_macro}.
22361 @node Function Specific Option Pragmas
22362 @subsection Function Specific Option Pragmas
22364 @table @code
22365 @item #pragma GCC target (@var{"string"}...)
22366 @cindex pragma GCC target
22368 This pragma allows you to set target specific options for functions
22369 defined later in the source file.  One or more strings can be
22370 specified.  Each function that is defined after this point is as
22371 if @code{attribute((target("STRING")))} was specified for that
22372 function.  The parenthesis around the options is optional.
22373 @xref{Function Attributes}, for more information about the
22374 @code{target} attribute and the attribute syntax.
22376 The @code{#pragma GCC target} pragma is presently implemented for
22377 x86, ARM, AArch64, PowerPC, S/390, and Nios II targets only.
22378 @end table
22380 @table @code
22381 @item #pragma GCC optimize (@var{"string"}...)
22382 @cindex pragma GCC optimize
22384 This pragma allows you to set global optimization options for functions
22385 defined later in the source file.  One or more strings can be
22386 specified.  Each function that is defined after this point is as
22387 if @code{attribute((optimize("STRING")))} was specified for that
22388 function.  The parenthesis around the options is optional.
22389 @xref{Function Attributes}, for more information about the
22390 @code{optimize} attribute and the attribute syntax.
22391 @end table
22393 @table @code
22394 @item #pragma GCC push_options
22395 @itemx #pragma GCC pop_options
22396 @cindex pragma GCC push_options
22397 @cindex pragma GCC pop_options
22399 These pragmas maintain a stack of the current target and optimization
22400 options.  It is intended for include files where you temporarily want
22401 to switch to using a different @samp{#pragma GCC target} or
22402 @samp{#pragma GCC optimize} and then to pop back to the previous
22403 options.
22404 @end table
22406 @table @code
22407 @item #pragma GCC reset_options
22408 @cindex pragma GCC reset_options
22410 This pragma clears the current @code{#pragma GCC target} and
22411 @code{#pragma GCC optimize} to use the default switches as specified
22412 on the command line.
22413 @end table
22415 @node Loop-Specific Pragmas
22416 @subsection Loop-Specific Pragmas
22418 @table @code
22419 @item #pragma GCC ivdep
22420 @cindex pragma GCC ivdep
22421 @end table
22423 With this pragma, the programmer asserts that there are no loop-carried
22424 dependencies which would prevent consecutive iterations of
22425 the following loop from executing concurrently with SIMD
22426 (single instruction multiple data) instructions.
22428 For example, the compiler can only unconditionally vectorize the following
22429 loop with the pragma:
22431 @smallexample
22432 void foo (int n, int *a, int *b, int *c)
22434   int i, j;
22435 #pragma GCC ivdep
22436   for (i = 0; i < n; ++i)
22437     a[i] = b[i] + c[i];
22439 @end smallexample
22441 @noindent
22442 In this example, using the @code{restrict} qualifier had the same
22443 effect. In the following example, that would not be possible. Assume
22444 @math{k < -m} or @math{k >= m}. Only with the pragma, the compiler knows
22445 that it can unconditionally vectorize the following loop:
22447 @smallexample
22448 void ignore_vec_dep (int *a, int k, int c, int m)
22450 #pragma GCC ivdep
22451   for (int i = 0; i < m; i++)
22452     a[i] = a[i + k] * c;
22454 @end smallexample
22457 @node Unnamed Fields
22458 @section Unnamed Structure and Union Fields
22459 @cindex @code{struct}
22460 @cindex @code{union}
22462 As permitted by ISO C11 and for compatibility with other compilers,
22463 GCC allows you to define
22464 a structure or union that contains, as fields, structures and unions
22465 without names.  For example:
22467 @smallexample
22468 struct @{
22469   int a;
22470   union @{
22471     int b;
22472     float c;
22473   @};
22474   int d;
22475 @} foo;
22476 @end smallexample
22478 @noindent
22479 In this example, you are able to access members of the unnamed
22480 union with code like @samp{foo.b}.  Note that only unnamed structs and
22481 unions are allowed, you may not have, for example, an unnamed
22482 @code{int}.
22484 You must never create such structures that cause ambiguous field definitions.
22485 For example, in this structure:
22487 @smallexample
22488 struct @{
22489   int a;
22490   struct @{
22491     int a;
22492   @};
22493 @} foo;
22494 @end smallexample
22496 @noindent
22497 it is ambiguous which @code{a} is being referred to with @samp{foo.a}.
22498 The compiler gives errors for such constructs.
22500 @opindex fms-extensions
22501 Unless @option{-fms-extensions} is used, the unnamed field must be a
22502 structure or union definition without a tag (for example, @samp{struct
22503 @{ int a; @};}).  If @option{-fms-extensions} is used, the field may
22504 also be a definition with a tag such as @samp{struct foo @{ int a;
22505 @};}, a reference to a previously defined structure or union such as
22506 @samp{struct foo;}, or a reference to a @code{typedef} name for a
22507 previously defined structure or union type.
22509 @opindex fplan9-extensions
22510 The option @option{-fplan9-extensions} enables
22511 @option{-fms-extensions} as well as two other extensions.  First, a
22512 pointer to a structure is automatically converted to a pointer to an
22513 anonymous field for assignments and function calls.  For example:
22515 @smallexample
22516 struct s1 @{ int a; @};
22517 struct s2 @{ struct s1; @};
22518 extern void f1 (struct s1 *);
22519 void f2 (struct s2 *p) @{ f1 (p); @}
22520 @end smallexample
22522 @noindent
22523 In the call to @code{f1} inside @code{f2}, the pointer @code{p} is
22524 converted into a pointer to the anonymous field.
22526 Second, when the type of an anonymous field is a @code{typedef} for a
22527 @code{struct} or @code{union}, code may refer to the field using the
22528 name of the @code{typedef}.
22530 @smallexample
22531 typedef struct @{ int a; @} s1;
22532 struct s2 @{ s1; @};
22533 s1 f1 (struct s2 *p) @{ return p->s1; @}
22534 @end smallexample
22536 These usages are only permitted when they are not ambiguous.
22538 @node Thread-Local
22539 @section Thread-Local Storage
22540 @cindex Thread-Local Storage
22541 @cindex @acronym{TLS}
22542 @cindex @code{__thread}
22544 Thread-local storage (@acronym{TLS}) is a mechanism by which variables
22545 are allocated such that there is one instance of the variable per extant
22546 thread.  The runtime model GCC uses to implement this originates
22547 in the IA-64 processor-specific ABI, but has since been migrated
22548 to other processors as well.  It requires significant support from
22549 the linker (@command{ld}), dynamic linker (@command{ld.so}), and
22550 system libraries (@file{libc.so} and @file{libpthread.so}), so it
22551 is not available everywhere.
22553 At the user level, the extension is visible with a new storage
22554 class keyword: @code{__thread}.  For example:
22556 @smallexample
22557 __thread int i;
22558 extern __thread struct state s;
22559 static __thread char *p;
22560 @end smallexample
22562 The @code{__thread} specifier may be used alone, with the @code{extern}
22563 or @code{static} specifiers, but with no other storage class specifier.
22564 When used with @code{extern} or @code{static}, @code{__thread} must appear
22565 immediately after the other storage class specifier.
22567 The @code{__thread} specifier may be applied to any global, file-scoped
22568 static, function-scoped static, or static data member of a class.  It may
22569 not be applied to block-scoped automatic or non-static data member.
22571 When the address-of operator is applied to a thread-local variable, it is
22572 evaluated at run time and returns the address of the current thread's
22573 instance of that variable.  An address so obtained may be used by any
22574 thread.  When a thread terminates, any pointers to thread-local variables
22575 in that thread become invalid.
22577 No static initialization may refer to the address of a thread-local variable.
22579 In C++, if an initializer is present for a thread-local variable, it must
22580 be a @var{constant-expression}, as defined in 5.19.2 of the ANSI/ISO C++
22581 standard.
22583 See @uref{https://www.akkadia.org/drepper/tls.pdf,
22584 ELF Handling For Thread-Local Storage} for a detailed explanation of
22585 the four thread-local storage addressing models, and how the runtime
22586 is expected to function.
22588 @menu
22589 * C99 Thread-Local Edits::
22590 * C++98 Thread-Local Edits::
22591 @end menu
22593 @node C99 Thread-Local Edits
22594 @subsection ISO/IEC 9899:1999 Edits for Thread-Local Storage
22596 The following are a set of changes to ISO/IEC 9899:1999 (aka C99)
22597 that document the exact semantics of the language extension.
22599 @itemize @bullet
22600 @item
22601 @cite{5.1.2  Execution environments}
22603 Add new text after paragraph 1
22605 @quotation
22606 Within either execution environment, a @dfn{thread} is a flow of
22607 control within a program.  It is implementation defined whether
22608 or not there may be more than one thread associated with a program.
22609 It is implementation defined how threads beyond the first are
22610 created, the name and type of the function called at thread
22611 startup, and how threads may be terminated.  However, objects
22612 with thread storage duration shall be initialized before thread
22613 startup.
22614 @end quotation
22616 @item
22617 @cite{6.2.4  Storage durations of objects}
22619 Add new text before paragraph 3
22621 @quotation
22622 An object whose identifier is declared with the storage-class
22623 specifier @w{@code{__thread}} has @dfn{thread storage duration}.
22624 Its lifetime is the entire execution of the thread, and its
22625 stored value is initialized only once, prior to thread startup.
22626 @end quotation
22628 @item
22629 @cite{6.4.1  Keywords}
22631 Add @code{__thread}.
22633 @item
22634 @cite{6.7.1  Storage-class specifiers}
22636 Add @code{__thread} to the list of storage class specifiers in
22637 paragraph 1.
22639 Change paragraph 2 to
22641 @quotation
22642 With the exception of @code{__thread}, at most one storage-class
22643 specifier may be given [@dots{}].  The @code{__thread} specifier may
22644 be used alone, or immediately following @code{extern} or
22645 @code{static}.
22646 @end quotation
22648 Add new text after paragraph 6
22650 @quotation
22651 The declaration of an identifier for a variable that has
22652 block scope that specifies @code{__thread} shall also
22653 specify either @code{extern} or @code{static}.
22655 The @code{__thread} specifier shall be used only with
22656 variables.
22657 @end quotation
22658 @end itemize
22660 @node C++98 Thread-Local Edits
22661 @subsection ISO/IEC 14882:1998 Edits for Thread-Local Storage
22663 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
22664 that document the exact semantics of the language extension.
22666 @itemize @bullet
22667 @item
22668 @b{[intro.execution]}
22670 New text after paragraph 4
22672 @quotation
22673 A @dfn{thread} is a flow of control within the abstract machine.
22674 It is implementation defined whether or not there may be more than
22675 one thread.
22676 @end quotation
22678 New text after paragraph 7
22680 @quotation
22681 It is unspecified whether additional action must be taken to
22682 ensure when and whether side effects are visible to other threads.
22683 @end quotation
22685 @item
22686 @b{[lex.key]}
22688 Add @code{__thread}.
22690 @item
22691 @b{[basic.start.main]}
22693 Add after paragraph 5
22695 @quotation
22696 The thread that begins execution at the @code{main} function is called
22697 the @dfn{main thread}.  It is implementation defined how functions
22698 beginning threads other than the main thread are designated or typed.
22699 A function so designated, as well as the @code{main} function, is called
22700 a @dfn{thread startup function}.  It is implementation defined what
22701 happens if a thread startup function returns.  It is implementation
22702 defined what happens to other threads when any thread calls @code{exit}.
22703 @end quotation
22705 @item
22706 @b{[basic.start.init]}
22708 Add after paragraph 4
22710 @quotation
22711 The storage for an object of thread storage duration shall be
22712 statically initialized before the first statement of the thread startup
22713 function.  An object of thread storage duration shall not require
22714 dynamic initialization.
22715 @end quotation
22717 @item
22718 @b{[basic.start.term]}
22720 Add after paragraph 3
22722 @quotation
22723 The type of an object with thread storage duration shall not have a
22724 non-trivial destructor, nor shall it be an array type whose elements
22725 (directly or indirectly) have non-trivial destructors.
22726 @end quotation
22728 @item
22729 @b{[basic.stc]}
22731 Add ``thread storage duration'' to the list in paragraph 1.
22733 Change paragraph 2
22735 @quotation
22736 Thread, static, and automatic storage durations are associated with
22737 objects introduced by declarations [@dots{}].
22738 @end quotation
22740 Add @code{__thread} to the list of specifiers in paragraph 3.
22742 @item
22743 @b{[basic.stc.thread]}
22745 New section before @b{[basic.stc.static]}
22747 @quotation
22748 The keyword @code{__thread} applied to a non-local object gives the
22749 object thread storage duration.
22751 A local variable or class data member declared both @code{static}
22752 and @code{__thread} gives the variable or member thread storage
22753 duration.
22754 @end quotation
22756 @item
22757 @b{[basic.stc.static]}
22759 Change paragraph 1
22761 @quotation
22762 All objects that have neither thread storage duration, dynamic
22763 storage duration nor are local [@dots{}].
22764 @end quotation
22766 @item
22767 @b{[dcl.stc]}
22769 Add @code{__thread} to the list in paragraph 1.
22771 Change paragraph 1
22773 @quotation
22774 With the exception of @code{__thread}, at most one
22775 @var{storage-class-specifier} shall appear in a given
22776 @var{decl-specifier-seq}.  The @code{__thread} specifier may
22777 be used alone, or immediately following the @code{extern} or
22778 @code{static} specifiers.  [@dots{}]
22779 @end quotation
22781 Add after paragraph 5
22783 @quotation
22784 The @code{__thread} specifier can be applied only to the names of objects
22785 and to anonymous unions.
22786 @end quotation
22788 @item
22789 @b{[class.mem]}
22791 Add after paragraph 6
22793 @quotation
22794 Non-@code{static} members shall not be @code{__thread}.
22795 @end quotation
22796 @end itemize
22798 @node Binary constants
22799 @section Binary Constants using the @samp{0b} Prefix
22800 @cindex Binary constants using the @samp{0b} prefix
22802 Integer constants can be written as binary constants, consisting of a
22803 sequence of @samp{0} and @samp{1} digits, prefixed by @samp{0b} or
22804 @samp{0B}.  This is particularly useful in environments that operate a
22805 lot on the bit level (like microcontrollers).
22807 The following statements are identical:
22809 @smallexample
22810 i =       42;
22811 i =     0x2a;
22812 i =      052;
22813 i = 0b101010;
22814 @end smallexample
22816 The type of these constants follows the same rules as for octal or
22817 hexadecimal integer constants, so suffixes like @samp{L} or @samp{UL}
22818 can be applied.
22820 @node C++ Extensions
22821 @chapter Extensions to the C++ Language
22822 @cindex extensions, C++ language
22823 @cindex C++ language extensions
22825 The GNU compiler provides these extensions to the C++ language (and you
22826 can also use most of the C language extensions in your C++ programs).  If you
22827 want to write code that checks whether these features are available, you can
22828 test for the GNU compiler the same way as for C programs: check for a
22829 predefined macro @code{__GNUC__}.  You can also use @code{__GNUG__} to
22830 test specifically for GNU C++ (@pxref{Common Predefined Macros,,
22831 Predefined Macros,cpp,The GNU C Preprocessor}).
22833 @menu
22834 * C++ Volatiles::       What constitutes an access to a volatile object.
22835 * Restricted Pointers:: C99 restricted pointers and references.
22836 * Vague Linkage::       Where G++ puts inlines, vtables and such.
22837 * C++ Interface::       You can use a single C++ header file for both
22838                         declarations and definitions.
22839 * Template Instantiation:: Methods for ensuring that exactly one copy of
22840                         each needed template instantiation is emitted.
22841 * Bound member functions:: You can extract a function pointer to the
22842                         method denoted by a @samp{->*} or @samp{.*} expression.
22843 * C++ Attributes::      Variable, function, and type attributes for C++ only.
22844 * Function Multiversioning::   Declaring multiple function versions.
22845 * Type Traits::         Compiler support for type traits.
22846 * C++ Concepts::        Improved support for generic programming.
22847 * Deprecated Features:: Things will disappear from G++.
22848 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
22849 @end menu
22851 @node C++ Volatiles
22852 @section When is a Volatile C++ Object Accessed?
22853 @cindex accessing volatiles
22854 @cindex volatile read
22855 @cindex volatile write
22856 @cindex volatile access
22858 The C++ standard differs from the C standard in its treatment of
22859 volatile objects.  It fails to specify what constitutes a volatile
22860 access, except to say that C++ should behave in a similar manner to C
22861 with respect to volatiles, where possible.  However, the different
22862 lvalueness of expressions between C and C++ complicate the behavior.
22863 G++ behaves the same as GCC for volatile access, @xref{C
22864 Extensions,,Volatiles}, for a description of GCC's behavior.
22866 The C and C++ language specifications differ when an object is
22867 accessed in a void context:
22869 @smallexample
22870 volatile int *src = @var{somevalue};
22871 *src;
22872 @end smallexample
22874 The C++ standard specifies that such expressions do not undergo lvalue
22875 to rvalue conversion, and that the type of the dereferenced object may
22876 be incomplete.  The C++ standard does not specify explicitly that it
22877 is lvalue to rvalue conversion that is responsible for causing an
22878 access.  There is reason to believe that it is, because otherwise
22879 certain simple expressions become undefined.  However, because it
22880 would surprise most programmers, G++ treats dereferencing a pointer to
22881 volatile object of complete type as GCC would do for an equivalent
22882 type in C@.  When the object has incomplete type, G++ issues a
22883 warning; if you wish to force an error, you must force a conversion to
22884 rvalue with, for instance, a static cast.
22886 When using a reference to volatile, G++ does not treat equivalent
22887 expressions as accesses to volatiles, but instead issues a warning that
22888 no volatile is accessed.  The rationale for this is that otherwise it
22889 becomes difficult to determine where volatile access occur, and not
22890 possible to ignore the return value from functions returning volatile
22891 references.  Again, if you wish to force a read, cast the reference to
22892 an rvalue.
22894 G++ implements the same behavior as GCC does when assigning to a
22895 volatile object---there is no reread of the assigned-to object, the
22896 assigned rvalue is reused.  Note that in C++ assignment expressions
22897 are lvalues, and if used as an lvalue, the volatile object is
22898 referred to.  For instance, @var{vref} refers to @var{vobj}, as
22899 expected, in the following example:
22901 @smallexample
22902 volatile int vobj;
22903 volatile int &vref = vobj = @var{something};
22904 @end smallexample
22906 @node Restricted Pointers
22907 @section Restricting Pointer Aliasing
22908 @cindex restricted pointers
22909 @cindex restricted references
22910 @cindex restricted this pointer
22912 As with the C front end, G++ understands the C99 feature of restricted pointers,
22913 specified with the @code{__restrict__}, or @code{__restrict} type
22914 qualifier.  Because you cannot compile C++ by specifying the @option{-std=c99}
22915 language flag, @code{restrict} is not a keyword in C++.
22917 In addition to allowing restricted pointers, you can specify restricted
22918 references, which indicate that the reference is not aliased in the local
22919 context.
22921 @smallexample
22922 void fn (int *__restrict__ rptr, int &__restrict__ rref)
22924   /* @r{@dots{}} */
22926 @end smallexample
22928 @noindent
22929 In the body of @code{fn}, @var{rptr} points to an unaliased integer and
22930 @var{rref} refers to a (different) unaliased integer.
22932 You may also specify whether a member function's @var{this} pointer is
22933 unaliased by using @code{__restrict__} as a member function qualifier.
22935 @smallexample
22936 void T::fn () __restrict__
22938   /* @r{@dots{}} */
22940 @end smallexample
22942 @noindent
22943 Within the body of @code{T::fn}, @var{this} has the effective
22944 definition @code{T *__restrict__ const this}.  Notice that the
22945 interpretation of a @code{__restrict__} member function qualifier is
22946 different to that of @code{const} or @code{volatile} qualifier, in that it
22947 is applied to the pointer rather than the object.  This is consistent with
22948 other compilers that implement restricted pointers.
22950 As with all outermost parameter qualifiers, @code{__restrict__} is
22951 ignored in function definition matching.  This means you only need to
22952 specify @code{__restrict__} in a function definition, rather than
22953 in a function prototype as well.
22955 @node Vague Linkage
22956 @section Vague Linkage
22957 @cindex vague linkage
22959 There are several constructs in C++ that require space in the object
22960 file but are not clearly tied to a single translation unit.  We say that
22961 these constructs have ``vague linkage''.  Typically such constructs are
22962 emitted wherever they are needed, though sometimes we can be more
22963 clever.
22965 @table @asis
22966 @item Inline Functions
22967 Inline functions are typically defined in a header file which can be
22968 included in many different compilations.  Hopefully they can usually be
22969 inlined, but sometimes an out-of-line copy is necessary, if the address
22970 of the function is taken or if inlining fails.  In general, we emit an
22971 out-of-line copy in all translation units where one is needed.  As an
22972 exception, we only emit inline virtual functions with the vtable, since
22973 it always requires a copy.
22975 Local static variables and string constants used in an inline function
22976 are also considered to have vague linkage, since they must be shared
22977 between all inlined and out-of-line instances of the function.
22979 @item VTables
22980 @cindex vtable
22981 C++ virtual functions are implemented in most compilers using a lookup
22982 table, known as a vtable.  The vtable contains pointers to the virtual
22983 functions provided by a class, and each object of the class contains a
22984 pointer to its vtable (or vtables, in some multiple-inheritance
22985 situations).  If the class declares any non-inline, non-pure virtual
22986 functions, the first one is chosen as the ``key method'' for the class,
22987 and the vtable is only emitted in the translation unit where the key
22988 method is defined.
22990 @emph{Note:} If the chosen key method is later defined as inline, the
22991 vtable is still emitted in every translation unit that defines it.
22992 Make sure that any inline virtuals are declared inline in the class
22993 body, even if they are not defined there.
22995 @item @code{type_info} objects
22996 @cindex @code{type_info}
22997 @cindex RTTI
22998 C++ requires information about types to be written out in order to
22999 implement @samp{dynamic_cast}, @samp{typeid} and exception handling.
23000 For polymorphic classes (classes with virtual functions), the @samp{type_info}
23001 object is written out along with the vtable so that @samp{dynamic_cast}
23002 can determine the dynamic type of a class object at run time.  For all
23003 other types, we write out the @samp{type_info} object when it is used: when
23004 applying @samp{typeid} to an expression, throwing an object, or
23005 referring to a type in a catch clause or exception specification.
23007 @item Template Instantiations
23008 Most everything in this section also applies to template instantiations,
23009 but there are other options as well.
23010 @xref{Template Instantiation,,Where's the Template?}.
23012 @end table
23014 When used with GNU ld version 2.8 or later on an ELF system such as
23015 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
23016 these constructs will be discarded at link time.  This is known as
23017 COMDAT support.
23019 On targets that don't support COMDAT, but do support weak symbols, GCC
23020 uses them.  This way one copy overrides all the others, but
23021 the unused copies still take up space in the executable.
23023 For targets that do not support either COMDAT or weak symbols,
23024 most entities with vague linkage are emitted as local symbols to
23025 avoid duplicate definition errors from the linker.  This does not happen
23026 for local statics in inlines, however, as having multiple copies
23027 almost certainly breaks things.
23029 @xref{C++ Interface,,Declarations and Definitions in One Header}, for
23030 another way to control placement of these constructs.
23032 @node C++ Interface
23033 @section C++ Interface and Implementation Pragmas
23035 @cindex interface and implementation headers, C++
23036 @cindex C++ interface and implementation headers
23037 @cindex pragmas, interface and implementation
23039 @code{#pragma interface} and @code{#pragma implementation} provide the
23040 user with a way of explicitly directing the compiler to emit entities
23041 with vague linkage (and debugging information) in a particular
23042 translation unit.
23044 @emph{Note:} These @code{#pragma}s have been superceded as of GCC 2.7.2
23045 by COMDAT support and the ``key method'' heuristic
23046 mentioned in @ref{Vague Linkage}.  Using them can actually cause your
23047 program to grow due to unnecessary out-of-line copies of inline
23048 functions.
23050 @table @code
23051 @item #pragma interface
23052 @itemx #pragma interface "@var{subdir}/@var{objects}.h"
23053 @kindex #pragma interface
23054 Use this directive in @emph{header files} that define object classes, to save
23055 space in most of the object files that use those classes.  Normally,
23056 local copies of certain information (backup copies of inline member
23057 functions, debugging information, and the internal tables that implement
23058 virtual functions) must be kept in each object file that includes class
23059 definitions.  You can use this pragma to avoid such duplication.  When a
23060 header file containing @samp{#pragma interface} is included in a
23061 compilation, this auxiliary information is not generated (unless
23062 the main input source file itself uses @samp{#pragma implementation}).
23063 Instead, the object files contain references to be resolved at link
23064 time.
23066 The second form of this directive is useful for the case where you have
23067 multiple headers with the same name in different directories.  If you
23068 use this form, you must specify the same string to @samp{#pragma
23069 implementation}.
23071 @item #pragma implementation
23072 @itemx #pragma implementation "@var{objects}.h"
23073 @kindex #pragma implementation
23074 Use this pragma in a @emph{main input file}, when you want full output from
23075 included header files to be generated (and made globally visible).  The
23076 included header file, in turn, should use @samp{#pragma interface}.
23077 Backup copies of inline member functions, debugging information, and the
23078 internal tables used to implement virtual functions are all generated in
23079 implementation files.
23081 @cindex implied @code{#pragma implementation}
23082 @cindex @code{#pragma implementation}, implied
23083 @cindex naming convention, implementation headers
23084 If you use @samp{#pragma implementation} with no argument, it applies to
23085 an include file with the same basename@footnote{A file's @dfn{basename}
23086 is the name stripped of all leading path information and of trailing
23087 suffixes, such as @samp{.h} or @samp{.C} or @samp{.cc}.} as your source
23088 file.  For example, in @file{allclass.cc}, giving just
23089 @samp{#pragma implementation}
23090 by itself is equivalent to @samp{#pragma implementation "allclass.h"}.
23092 Use the string argument if you want a single implementation file to
23093 include code from multiple header files.  (You must also use
23094 @samp{#include} to include the header file; @samp{#pragma
23095 implementation} only specifies how to use the file---it doesn't actually
23096 include it.)
23098 There is no way to split up the contents of a single header file into
23099 multiple implementation files.
23100 @end table
23102 @cindex inlining and C++ pragmas
23103 @cindex C++ pragmas, effect on inlining
23104 @cindex pragmas in C++, effect on inlining
23105 @samp{#pragma implementation} and @samp{#pragma interface} also have an
23106 effect on function inlining.
23108 If you define a class in a header file marked with @samp{#pragma
23109 interface}, the effect on an inline function defined in that class is
23110 similar to an explicit @code{extern} declaration---the compiler emits
23111 no code at all to define an independent version of the function.  Its
23112 definition is used only for inlining with its callers.
23114 @opindex fno-implement-inlines
23115 Conversely, when you include the same header file in a main source file
23116 that declares it as @samp{#pragma implementation}, the compiler emits
23117 code for the function itself; this defines a version of the function
23118 that can be found via pointers (or by callers compiled without
23119 inlining).  If all calls to the function can be inlined, you can avoid
23120 emitting the function by compiling with @option{-fno-implement-inlines}.
23121 If any calls are not inlined, you will get linker errors.
23123 @node Template Instantiation
23124 @section Where's the Template?
23125 @cindex template instantiation
23127 C++ templates were the first language feature to require more
23128 intelligence from the environment than was traditionally found on a UNIX
23129 system.  Somehow the compiler and linker have to make sure that each
23130 template instance occurs exactly once in the executable if it is needed,
23131 and not at all otherwise.  There are two basic approaches to this
23132 problem, which are referred to as the Borland model and the Cfront model.
23134 @table @asis
23135 @item Borland model
23136 Borland C++ solved the template instantiation problem by adding the code
23137 equivalent of common blocks to their linker; the compiler emits template
23138 instances in each translation unit that uses them, and the linker
23139 collapses them together.  The advantage of this model is that the linker
23140 only has to consider the object files themselves; there is no external
23141 complexity to worry about.  The disadvantage is that compilation time
23142 is increased because the template code is being compiled repeatedly.
23143 Code written for this model tends to include definitions of all
23144 templates in the header file, since they must be seen to be
23145 instantiated.
23147 @item Cfront model
23148 The AT&T C++ translator, Cfront, solved the template instantiation
23149 problem by creating the notion of a template repository, an
23150 automatically maintained place where template instances are stored.  A
23151 more modern version of the repository works as follows: As individual
23152 object files are built, the compiler places any template definitions and
23153 instantiations encountered in the repository.  At link time, the link
23154 wrapper adds in the objects in the repository and compiles any needed
23155 instances that were not previously emitted.  The advantages of this
23156 model are more optimal compilation speed and the ability to use the
23157 system linker; to implement the Borland model a compiler vendor also
23158 needs to replace the linker.  The disadvantages are vastly increased
23159 complexity, and thus potential for error; for some code this can be
23160 just as transparent, but in practice it can been very difficult to build
23161 multiple programs in one directory and one program in multiple
23162 directories.  Code written for this model tends to separate definitions
23163 of non-inline member templates into a separate file, which should be
23164 compiled separately.
23165 @end table
23167 G++ implements the Borland model on targets where the linker supports it,
23168 including ELF targets (such as GNU/Linux), Mac OS X and Microsoft Windows.
23169 Otherwise G++ implements neither automatic model.
23171 You have the following options for dealing with template instantiations:
23173 @enumerate
23174 @item
23175 Do nothing.  Code written for the Borland model works fine, but
23176 each translation unit contains instances of each of the templates it
23177 uses.  The duplicate instances will be discarded by the linker, but in
23178 a large program, this can lead to an unacceptable amount of code
23179 duplication in object files or shared libraries.
23181 Duplicate instances of a template can be avoided by defining an explicit
23182 instantiation in one object file, and preventing the compiler from doing
23183 implicit instantiations in any other object files by using an explicit
23184 instantiation declaration, using the @code{extern template} syntax:
23186 @smallexample
23187 extern template int max (int, int);
23188 @end smallexample
23190 This syntax is defined in the C++ 2011 standard, but has been supported by
23191 G++ and other compilers since well before 2011.
23193 Explicit instantiations can be used for the largest or most frequently
23194 duplicated instances, without having to know exactly which other instances
23195 are used in the rest of the program.  You can scatter the explicit
23196 instantiations throughout your program, perhaps putting them in the
23197 translation units where the instances are used or the translation units
23198 that define the templates themselves; you can put all of the explicit
23199 instantiations you need into one big file; or you can create small files
23200 like
23202 @smallexample
23203 #include "Foo.h"
23204 #include "Foo.cc"
23206 template class Foo<int>;
23207 template ostream& operator <<
23208                 (ostream&, const Foo<int>&);
23209 @end smallexample
23211 @noindent
23212 for each of the instances you need, and create a template instantiation
23213 library from those.
23215 This is the simplest option, but also offers flexibility and
23216 fine-grained control when necessary. It is also the most portable
23217 alternative and programs using this approach will work with most modern
23218 compilers.
23220 @item
23221 @opindex frepo
23222 Compile your template-using code with @option{-frepo}.  The compiler
23223 generates files with the extension @samp{.rpo} listing all of the
23224 template instantiations used in the corresponding object files that
23225 could be instantiated there; the link wrapper, @samp{collect2},
23226 then updates the @samp{.rpo} files to tell the compiler where to place
23227 those instantiations and rebuild any affected object files.  The
23228 link-time overhead is negligible after the first pass, as the compiler
23229 continues to place the instantiations in the same files.
23231 This can be a suitable option for application code written for the Borland
23232 model, as it usually just works.  Code written for the Cfront model 
23233 needs to be modified so that the template definitions are available at
23234 one or more points of instantiation; usually this is as simple as adding
23235 @code{#include <tmethods.cc>} to the end of each template header.
23237 For library code, if you want the library to provide all of the template
23238 instantiations it needs, just try to link all of its object files
23239 together; the link will fail, but cause the instantiations to be
23240 generated as a side effect.  Be warned, however, that this may cause
23241 conflicts if multiple libraries try to provide the same instantiations.
23242 For greater control, use explicit instantiation as described in the next
23243 option.
23245 @item
23246 @opindex fno-implicit-templates
23247 Compile your code with @option{-fno-implicit-templates} to disable the
23248 implicit generation of template instances, and explicitly instantiate
23249 all the ones you use.  This approach requires more knowledge of exactly
23250 which instances you need than do the others, but it's less
23251 mysterious and allows greater control if you want to ensure that only
23252 the intended instances are used.
23254 If you are using Cfront-model code, you can probably get away with not
23255 using @option{-fno-implicit-templates} when compiling files that don't
23256 @samp{#include} the member template definitions.
23258 If you use one big file to do the instantiations, you may want to
23259 compile it without @option{-fno-implicit-templates} so you get all of the
23260 instances required by your explicit instantiations (but not by any
23261 other files) without having to specify them as well.
23263 In addition to forward declaration of explicit instantiations
23264 (with @code{extern}), G++ has extended the template instantiation
23265 syntax to support instantiation of the compiler support data for a
23266 template class (i.e.@: the vtable) without instantiating any of its
23267 members (with @code{inline}), and instantiation of only the static data
23268 members of a template class, without the support data or member
23269 functions (with @code{static}):
23271 @smallexample
23272 inline template class Foo<int>;
23273 static template class Foo<int>;
23274 @end smallexample
23275 @end enumerate
23277 @node Bound member functions
23278 @section Extracting the Function Pointer from a Bound Pointer to Member Function
23279 @cindex pmf
23280 @cindex pointer to member function
23281 @cindex bound pointer to member function
23283 In C++, pointer to member functions (PMFs) are implemented using a wide
23284 pointer of sorts to handle all the possible call mechanisms; the PMF
23285 needs to store information about how to adjust the @samp{this} pointer,
23286 and if the function pointed to is virtual, where to find the vtable, and
23287 where in the vtable to look for the member function.  If you are using
23288 PMFs in an inner loop, you should really reconsider that decision.  If
23289 that is not an option, you can extract the pointer to the function that
23290 would be called for a given object/PMF pair and call it directly inside
23291 the inner loop, to save a bit of time.
23293 Note that you still pay the penalty for the call through a
23294 function pointer; on most modern architectures, such a call defeats the
23295 branch prediction features of the CPU@.  This is also true of normal
23296 virtual function calls.
23298 The syntax for this extension is
23300 @smallexample
23301 extern A a;
23302 extern int (A::*fp)();
23303 typedef int (*fptr)(A *);
23305 fptr p = (fptr)(a.*fp);
23306 @end smallexample
23308 For PMF constants (i.e.@: expressions of the form @samp{&Klasse::Member}),
23309 no object is needed to obtain the address of the function.  They can be
23310 converted to function pointers directly:
23312 @smallexample
23313 fptr p1 = (fptr)(&A::foo);
23314 @end smallexample
23316 @opindex Wno-pmf-conversions
23317 You must specify @option{-Wno-pmf-conversions} to use this extension.
23319 @node C++ Attributes
23320 @section C++-Specific Variable, Function, and Type Attributes
23322 Some attributes only make sense for C++ programs.
23324 @table @code
23325 @item abi_tag ("@var{tag}", ...)
23326 @cindex @code{abi_tag} function attribute
23327 @cindex @code{abi_tag} variable attribute
23328 @cindex @code{abi_tag} type attribute
23329 The @code{abi_tag} attribute can be applied to a function, variable, or class
23330 declaration.  It modifies the mangled name of the entity to
23331 incorporate the tag name, in order to distinguish the function or
23332 class from an earlier version with a different ABI; perhaps the class
23333 has changed size, or the function has a different return type that is
23334 not encoded in the mangled name.
23336 The attribute can also be applied to an inline namespace, but does not
23337 affect the mangled name of the namespace; in this case it is only used
23338 for @option{-Wabi-tag} warnings and automatic tagging of functions and
23339 variables.  Tagging inline namespaces is generally preferable to
23340 tagging individual declarations, but the latter is sometimes
23341 necessary, such as when only certain members of a class need to be
23342 tagged.
23344 The argument can be a list of strings of arbitrary length.  The
23345 strings are sorted on output, so the order of the list is
23346 unimportant.
23348 A redeclaration of an entity must not add new ABI tags,
23349 since doing so would change the mangled name.
23351 The ABI tags apply to a name, so all instantiations and
23352 specializations of a template have the same tags.  The attribute will
23353 be ignored if applied to an explicit specialization or instantiation.
23355 The @option{-Wabi-tag} flag enables a warning about a class which does
23356 not have all the ABI tags used by its subobjects and virtual functions; for users with code
23357 that needs to coexist with an earlier ABI, using this option can help
23358 to find all affected types that need to be tagged.
23360 When a type involving an ABI tag is used as the type of a variable or
23361 return type of a function where that tag is not already present in the
23362 signature of the function, the tag is automatically applied to the
23363 variable or function.  @option{-Wabi-tag} also warns about this
23364 situation; this warning can be avoided by explicitly tagging the
23365 variable or function or moving it into a tagged inline namespace.
23367 @item init_priority (@var{priority})
23368 @cindex @code{init_priority} variable attribute
23370 In Standard C++, objects defined at namespace scope are guaranteed to be
23371 initialized in an order in strict accordance with that of their definitions
23372 @emph{in a given translation unit}.  No guarantee is made for initializations
23373 across translation units.  However, GNU C++ allows users to control the
23374 order of initialization of objects defined at namespace scope with the
23375 @code{init_priority} attribute by specifying a relative @var{priority},
23376 a constant integral expression currently bounded between 101 and 65535
23377 inclusive.  Lower numbers indicate a higher priority.
23379 In the following example, @code{A} would normally be created before
23380 @code{B}, but the @code{init_priority} attribute reverses that order:
23382 @smallexample
23383 Some_Class  A  __attribute__ ((init_priority (2000)));
23384 Some_Class  B  __attribute__ ((init_priority (543)));
23385 @end smallexample
23387 @noindent
23388 Note that the particular values of @var{priority} do not matter; only their
23389 relative ordering.
23391 @item warn_unused
23392 @cindex @code{warn_unused} type attribute
23394 For C++ types with non-trivial constructors and/or destructors it is
23395 impossible for the compiler to determine whether a variable of this
23396 type is truly unused if it is not referenced. This type attribute
23397 informs the compiler that variables of this type should be warned
23398 about if they appear to be unused, just like variables of fundamental
23399 types.
23401 This attribute is appropriate for types which just represent a value,
23402 such as @code{std::string}; it is not appropriate for types which
23403 control a resource, such as @code{std::lock_guard}.
23405 This attribute is also accepted in C, but it is unnecessary because C
23406 does not have constructors or destructors.
23408 @end table
23410 @node Function Multiversioning
23411 @section Function Multiversioning
23412 @cindex function versions
23414 With the GNU C++ front end, for x86 targets, you may specify multiple
23415 versions of a function, where each function is specialized for a
23416 specific target feature.  At runtime, the appropriate version of the
23417 function is automatically executed depending on the characteristics of
23418 the execution platform.  Here is an example.
23420 @smallexample
23421 __attribute__ ((target ("default")))
23422 int foo ()
23424   // The default version of foo.
23425   return 0;
23428 __attribute__ ((target ("sse4.2")))
23429 int foo ()
23431   // foo version for SSE4.2
23432   return 1;
23435 __attribute__ ((target ("arch=atom")))
23436 int foo ()
23438   // foo version for the Intel ATOM processor
23439   return 2;
23442 __attribute__ ((target ("arch=amdfam10")))
23443 int foo ()
23445   // foo version for the AMD Family 0x10 processors.
23446   return 3;
23449 int main ()
23451   int (*p)() = &foo;
23452   assert ((*p) () == foo ());
23453   return 0;
23455 @end smallexample
23457 In the above example, four versions of function foo are created. The
23458 first version of foo with the target attribute "default" is the default
23459 version.  This version gets executed when no other target specific
23460 version qualifies for execution on a particular platform. A new version
23461 of foo is created by using the same function signature but with a
23462 different target string.  Function foo is called or a pointer to it is
23463 taken just like a regular function.  GCC takes care of doing the
23464 dispatching to call the right version at runtime.  Refer to the
23465 @uref{http://gcc.gnu.org/wiki/FunctionMultiVersioning, GCC wiki on
23466 Function Multiversioning} for more details.
23468 @node Type Traits
23469 @section Type Traits
23471 The C++ front end implements syntactic extensions that allow
23472 compile-time determination of 
23473 various characteristics of a type (or of a
23474 pair of types).
23476 @table @code
23477 @item __has_nothrow_assign (type)
23478 If @code{type} is const qualified or is a reference type then the trait is
23479 false.  Otherwise if @code{__has_trivial_assign (type)} is true then the trait
23480 is true, else if @code{type} is a cv class or union type with copy assignment
23481 operators that are known not to throw an exception then the trait is true,
23482 else it is false.  Requires: @code{type} shall be a complete type,
23483 (possibly cv-qualified) @code{void}, or an array of unknown bound.
23485 @item __has_nothrow_copy (type)
23486 If @code{__has_trivial_copy (type)} is true then the trait is true, else if
23487 @code{type} is a cv class or union type with copy constructors that
23488 are known not to throw an exception then the trait is true, else it is false.
23489 Requires: @code{type} shall be a complete type, (possibly cv-qualified)
23490 @code{void}, or an array of unknown bound.
23492 @item __has_nothrow_constructor (type)
23493 If @code{__has_trivial_constructor (type)} is true then the trait is
23494 true, else if @code{type} is a cv class or union type (or array
23495 thereof) with a default constructor that is known not to throw an
23496 exception then the trait is true, else it is false.  Requires:
23497 @code{type} shall be a complete type, (possibly cv-qualified)
23498 @code{void}, or an array of unknown bound.
23500 @item __has_trivial_assign (type)
23501 If @code{type} is const qualified or is a reference type then the trait is
23502 false.  Otherwise if @code{__is_pod (type)} is true then the trait is
23503 true, else if @code{type} is a cv class or union type with a trivial
23504 copy assignment ([class.copy]) then the trait is true, else it is
23505 false.  Requires: @code{type} shall be a complete type, (possibly
23506 cv-qualified) @code{void}, or an array of unknown bound.
23508 @item __has_trivial_copy (type)
23509 If @code{__is_pod (type)} is true or @code{type} is a reference type
23510 then the trait is true, else if @code{type} is a cv class or union type
23511 with a trivial copy constructor ([class.copy]) then the trait
23512 is true, else it is false.  Requires: @code{type} shall be a complete
23513 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23515 @item __has_trivial_constructor (type)
23516 If @code{__is_pod (type)} is true then the trait is true, else if
23517 @code{type} is a cv class or union type (or array thereof) with a
23518 trivial default constructor ([class.ctor]) then the trait is true,
23519 else it is false.  Requires: @code{type} shall be a complete
23520 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23522 @item __has_trivial_destructor (type)
23523 If @code{__is_pod (type)} is true or @code{type} is a reference type then
23524 the trait is true, else if @code{type} is a cv class or union type (or
23525 array thereof) with a trivial destructor ([class.dtor]) then the trait
23526 is true, else it is false.  Requires: @code{type} shall be a complete
23527 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23529 @item __has_virtual_destructor (type)
23530 If @code{type} is a class type with a virtual destructor
23531 ([class.dtor]) then the trait is true, else it is false.  Requires:
23532 @code{type} shall be a complete type, (possibly cv-qualified)
23533 @code{void}, or an array of unknown bound.
23535 @item __is_abstract (type)
23536 If @code{type} is an abstract class ([class.abstract]) then the trait
23537 is true, else it is false.  Requires: @code{type} shall be a complete
23538 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23540 @item __is_base_of (base_type, derived_type)
23541 If @code{base_type} is a base class of @code{derived_type}
23542 ([class.derived]) then the trait is true, otherwise it is false.
23543 Top-level cv qualifications of @code{base_type} and
23544 @code{derived_type} are ignored.  For the purposes of this trait, a
23545 class type is considered is own base.  Requires: if @code{__is_class
23546 (base_type)} and @code{__is_class (derived_type)} are true and
23547 @code{base_type} and @code{derived_type} are not the same type
23548 (disregarding cv-qualifiers), @code{derived_type} shall be a complete
23549 type.  A diagnostic is produced if this requirement is not met.
23551 @item __is_class (type)
23552 If @code{type} is a cv class type, and not a union type
23553 ([basic.compound]) the trait is true, else it is false.
23555 @item __is_empty (type)
23556 If @code{__is_class (type)} is false then the trait is false.
23557 Otherwise @code{type} is considered empty if and only if: @code{type}
23558 has no non-static data members, or all non-static data members, if
23559 any, are bit-fields of length 0, and @code{type} has no virtual
23560 members, and @code{type} has no virtual base classes, and @code{type}
23561 has no base classes @code{base_type} for which
23562 @code{__is_empty (base_type)} is false.  Requires: @code{type} shall
23563 be a complete type, (possibly cv-qualified) @code{void}, or an array
23564 of unknown bound.
23566 @item __is_enum (type)
23567 If @code{type} is a cv enumeration type ([basic.compound]) the trait is
23568 true, else it is false.
23570 @item __is_literal_type (type)
23571 If @code{type} is a literal type ([basic.types]) the trait is
23572 true, else it is false.  Requires: @code{type} shall be a complete type,
23573 (possibly cv-qualified) @code{void}, or an array of unknown bound.
23575 @item __is_pod (type)
23576 If @code{type} is a cv POD type ([basic.types]) then the trait is true,
23577 else it is false.  Requires: @code{type} shall be a complete type,
23578 (possibly cv-qualified) @code{void}, or an array of unknown bound.
23580 @item __is_polymorphic (type)
23581 If @code{type} is a polymorphic class ([class.virtual]) then the trait
23582 is true, else it is false.  Requires: @code{type} shall be a complete
23583 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23585 @item __is_standard_layout (type)
23586 If @code{type} is a standard-layout type ([basic.types]) the trait is
23587 true, else it is false.  Requires: @code{type} shall be a complete
23588 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23590 @item __is_trivial (type)
23591 If @code{type} is a trivial type ([basic.types]) the trait is
23592 true, else it is false.  Requires: @code{type} shall be a complete
23593 type, (possibly cv-qualified) @code{void}, or an array of unknown bound.
23595 @item __is_union (type)
23596 If @code{type} is a cv union type ([basic.compound]) the trait is
23597 true, else it is false.
23599 @item __underlying_type (type)
23600 The underlying type of @code{type}.  Requires: @code{type} shall be
23601 an enumeration type ([dcl.enum]).
23603 @item __integer_pack (length)
23604 When used as the pattern of a pack expansion within a template
23605 definition, expands to a template argument pack containing integers
23606 from @code{0} to @code{length-1}.  This is provided for efficient
23607 implementation of @code{std::make_integer_sequence}.
23609 @end table
23612 @node C++ Concepts
23613 @section C++ Concepts
23615 C++ concepts provide much-improved support for generic programming. In
23616 particular, they allow the specification of constraints on template arguments.
23617 The constraints are used to extend the usual overloading and partial
23618 specialization capabilities of the language, allowing generic data structures
23619 and algorithms to be ``refined'' based on their properties rather than their
23620 type names.
23622 The following keywords are reserved for concepts.
23624 @table @code
23625 @item assumes
23626 States an expression as an assumption, and if possible, verifies that the
23627 assumption is valid. For example, @code{assume(n > 0)}.
23629 @item axiom
23630 Introduces an axiom definition. Axioms introduce requirements on values.
23632 @item forall
23633 Introduces a universally quantified object in an axiom. For example,
23634 @code{forall (int n) n + 0 == n}).
23636 @item concept
23637 Introduces a concept definition. Concepts are sets of syntactic and semantic
23638 requirements on types and their values.
23640 @item requires
23641 Introduces constraints on template arguments or requirements for a member
23642 function of a class template.
23644 @end table
23646 The front end also exposes a number of internal mechanism that can be used
23647 to simplify the writing of type traits. Note that some of these traits are
23648 likely to be removed in the future.
23650 @table @code
23651 @item __is_same (type1, type2)
23652 A binary type trait: true whenever the type arguments are the same.
23654 @end table
23657 @node Deprecated Features
23658 @section Deprecated Features
23660 In the past, the GNU C++ compiler was extended to experiment with new
23661 features, at a time when the C++ language was still evolving.  Now that
23662 the C++ standard is complete, some of those features are superseded by
23663 superior alternatives.  Using the old features might cause a warning in
23664 some cases that the feature will be dropped in the future.  In other
23665 cases, the feature might be gone already.
23667 While the list below is not exhaustive, it documents some of the options
23668 that are now deprecated:
23670 @table @code
23671 @item -fexternal-templates
23672 @itemx -falt-external-templates
23673 These are two of the many ways for G++ to implement template
23674 instantiation.  @xref{Template Instantiation}.  The C++ standard clearly
23675 defines how template definitions have to be organized across
23676 implementation units.  G++ has an implicit instantiation mechanism that
23677 should work just fine for standard-conforming code.
23679 @item -fstrict-prototype
23680 @itemx -fno-strict-prototype
23681 Previously it was possible to use an empty prototype parameter list to
23682 indicate an unspecified number of parameters (like C), rather than no
23683 parameters, as C++ demands.  This feature has been removed, except where
23684 it is required for backwards compatibility.   @xref{Backwards Compatibility}.
23685 @end table
23687 G++ allows a virtual function returning @samp{void *} to be overridden
23688 by one returning a different pointer type.  This extension to the
23689 covariant return type rules is now deprecated and will be removed from a
23690 future version.
23692 The G++ minimum and maximum operators (@samp{<?} and @samp{>?}) and
23693 their compound forms (@samp{<?=}) and @samp{>?=}) have been deprecated
23694 and are now removed from G++.  Code using these operators should be
23695 modified to use @code{std::min} and @code{std::max} instead.
23697 The named return value extension has been deprecated, and is now
23698 removed from G++.
23700 The use of initializer lists with new expressions has been deprecated,
23701 and is now removed from G++.
23703 Floating and complex non-type template parameters have been deprecated,
23704 and are now removed from G++.
23706 The implicit typename extension has been deprecated and is now
23707 removed from G++.
23709 The use of default arguments in function pointers, function typedefs
23710 and other places where they are not permitted by the standard is
23711 deprecated and will be removed from a future version of G++.
23713 G++ allows floating-point literals to appear in integral constant expressions,
23714 e.g.@: @samp{ enum E @{ e = int(2.2 * 3.7) @} }
23715 This extension is deprecated and will be removed from a future version.
23717 G++ allows static data members of const floating-point type to be declared
23718 with an initializer in a class definition. The standard only allows
23719 initializers for static members of const integral types and const
23720 enumeration types so this extension has been deprecated and will be removed
23721 from a future version.
23723 @node Backwards Compatibility
23724 @section Backwards Compatibility
23725 @cindex Backwards Compatibility
23726 @cindex ARM [Annotated C++ Reference Manual]
23728 Now that there is a definitive ISO standard C++, G++ has a specification
23729 to adhere to.  The C++ language evolved over time, and features that
23730 used to be acceptable in previous drafts of the standard, such as the ARM
23731 [Annotated C++ Reference Manual], are no longer accepted.  In order to allow
23732 compilation of C++ written to such drafts, G++ contains some backwards
23733 compatibilities.  @emph{All such backwards compatibility features are
23734 liable to disappear in future versions of G++.} They should be considered
23735 deprecated.   @xref{Deprecated Features}.
23737 @table @code
23738 @item For scope
23739 If a variable is declared at for scope, it used to remain in scope until
23740 the end of the scope that contained the for statement (rather than just
23741 within the for scope).  G++ retains this, but issues a warning, if such a
23742 variable is accessed outside the for scope.
23744 @item Implicit C language
23745 Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
23746 scope to set the language.  On such systems, all header files are
23747 implicitly scoped inside a C language scope.  Also, an empty prototype
23748 @code{()} is treated as an unspecified number of arguments, rather
23749 than no arguments, as C++ demands.
23750 @end table
23752 @c  LocalWords:  emph deftypefn builtin ARCv2EM SIMD builtins msimd
23753 @c  LocalWords:  typedef v4si v8hi DMA dma vdiwr vdowr