comparison gcc/doc/extend.texi @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 c Copyright (C) 1988-2017 Free Software Foundation, Inc. 1 c Copyright (C) 1988-2018 Free Software Foundation, Inc.
2 2
3 @c This is part of the GCC manual. 3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi. 4 @c For copying conditions, see the file gcc.texi.
5 5
6 @node C Extensions 6 @node C Extensions
24 24
25 @menu 25 @menu
26 * Statement Exprs:: Putting statements and declarations inside expressions. 26 * Statement Exprs:: Putting statements and declarations inside expressions.
27 * Local Labels:: Labels local to a block. 27 * Local Labels:: Labels local to a block.
28 * Labels as Values:: Getting pointers to labels, and computed gotos. 28 * Labels as Values:: Getting pointers to labels, and computed gotos.
29 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 29 * Nested Functions:: Nested function in GNU C.
30 * Constructing Calls:: Dispatching a call to another function. 30 * Constructing Calls:: Dispatching a call to another function.
31 * Typeof:: @code{typeof}: referring to the type of an expression. 31 * Typeof:: @code{typeof}: referring to the type of an expression.
32 * Conditionals:: Omitting the middle operand of a @samp{?:} expression. 32 * Conditionals:: Omitting the middle operand of a @samp{?:} expression.
33 * __int128:: 128-bit integers---@code{__int128}. 33 * __int128:: 128-bit integers---@code{__int128}.
34 * Long Long:: Double-word integers---@code{long long int}. 34 * Long Long:: Double-word integers---@code{long long int}.
82 * Integer Overflow Builtins:: Built-in functions to perform arithmetics and 82 * Integer Overflow Builtins:: Built-in functions to perform arithmetics and
83 arithmetic overflow checking. 83 arithmetic overflow checking.
84 * x86 specific memory model extensions for transactional memory:: x86 memory models. 84 * x86 specific memory model extensions for transactional memory:: x86 memory models.
85 * Object Size Checking:: Built-in functions for limited buffer overflow 85 * Object Size Checking:: Built-in functions for limited buffer overflow
86 checking. 86 checking.
87 * Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
88 * Cilk Plus Builtins:: Built-in functions for the Cilk Plus language extension.
89 * Other Builtins:: Other built-in functions. 87 * Other Builtins:: Other built-in functions.
90 * Target Builtins:: Built-in functions specific to particular targets. 88 * Target Builtins:: Built-in functions specific to particular targets.
91 * Target Format Checks:: Format checks specific to particular targets. 89 * Target Format Checks:: Format checks specific to particular targets.
92 * Pragmas:: Pragmas accepted by GCC. 90 * Pragmas:: Pragmas accepted by GCC.
93 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 91 * Unnamed Fields:: Unnamed struct/union fields within structs/unions.
843 @cindex double-word arithmetic 841 @cindex double-word arithmetic
844 @cindex multiprecision arithmetic 842 @cindex multiprecision arithmetic
845 @cindex @code{LL} integer suffix 843 @cindex @code{LL} integer suffix
846 @cindex @code{ULL} integer suffix 844 @cindex @code{ULL} integer suffix
847 845
848 ISO C99 supports data types for integers that are at least 64 bits wide, 846 ISO C99 and ISO C++11 support data types for integers that are at least
849 and as an extension GCC supports them in C90 mode and in C++. 847 64 bits wide, and as an extension GCC supports them in C90 and C++98 modes.
850 Simply write @code{long long int} for a signed integer, or 848 Simply write @code{long long int} for a signed integer, or
851 @code{unsigned long long int} for an unsigned integer. To make an 849 @code{unsigned long long int} for an unsigned integer. To make an
852 integer constant of type @code{long long int}, add the suffix @samp{LL} 850 integer constant of type @code{long long int}, add the suffix @samp{LL}
853 to the integer. To make an integer constant of type @code{unsigned long 851 to the integer. To make an integer constant of type @code{unsigned long
854 long int}, add the suffix @samp{ULL} to the integer. 852 long int}, add the suffix @samp{ULL} to the integer.
895 value, but you can form any complex value you like by adding one to a 893 value, but you can form any complex value you like by adding one to a
896 real constant. This is a GNU extension; if you have an ISO C99 894 real constant. This is a GNU extension; if you have an ISO C99
897 conforming C library (such as the GNU C Library), and want to construct complex 895 conforming C library (such as the GNU C Library), and want to construct complex
898 constants of floating type, you should include @code{<complex.h>} and 896 constants of floating type, you should include @code{<complex.h>} and
899 use the macros @code{I} or @code{_Complex_I} instead. 897 use the macros @code{I} or @code{_Complex_I} instead.
898
899 The ISO C++14 library also defines the @samp{i} suffix, so C++14 code
900 that includes the @samp{<complex>} header cannot use @samp{i} for the
901 GNU extension. The @samp{j} suffix still has the GNU meaning.
900 902
901 @cindex @code{__real__} keyword 903 @cindex @code{__real__} keyword
902 @cindex @code{__imag__} keyword 904 @cindex @code{__imag__} keyword
903 To extract the real part of a complex-valued expression @var{exp}, write 905 To extract the real part of a complex-valued expression @var{exp}, write
904 @code{__real__ @var{exp}}. Likewise, use @code{__imag__} to 906 @code{__real__ @var{exp}}. Likewise, use @code{__imag__} to
1043 arithmetic and other operations, @code{__fp16} values in C or C++ 1045 arithmetic and other operations, @code{__fp16} values in C or C++
1044 expressions are automatically promoted to @code{float}. 1046 expressions are automatically promoted to @code{float}.
1045 1047
1046 The ARM target provides hardware support for conversions between 1048 The ARM target provides hardware support for conversions between
1047 @code{__fp16} and @code{float} values 1049 @code{__fp16} and @code{float} values
1048 as an extension to VFP and NEON (Advanced SIMD), and from ARMv8 provides 1050 as an extension to VFP and NEON (Advanced SIMD), and from ARMv8-A provides
1049 hardware support for conversions between @code{__fp16} and @code{double} 1051 hardware support for conversions between @code{__fp16} and @code{double}
1050 values. GCC generates code using these hardware instructions if you 1052 values. GCC generates code using these hardware instructions if you
1051 compile with options to select an FPU that provides them; 1053 compile with options to select an FPU that provides them;
1052 for example, @option{-mfpu=neon-fp16 -mfloat-abi=softfp}, 1054 for example, @option{-mfpu=neon-fp16 -mfloat-abi=softfp},
1053 in addition to the @option{-mfp16-format} option to select 1055 in addition to the @option{-mfp16-format} option to select
1117 1119
1118 @node Hex Floats 1120 @node Hex Floats
1119 @section Hex Floats 1121 @section Hex Floats
1120 @cindex hex floats 1122 @cindex hex floats
1121 1123
1122 ISO C99 supports floating-point numbers written not only in the usual 1124 ISO C99 and ISO C++17 support floating-point numbers written not only in
1123 decimal notation, such as @code{1.55e1}, but also numbers such as 1125 the usual decimal notation, such as @code{1.55e1}, but also numbers such as
1124 @code{0x1.fp3} written in hexadecimal format. As a GNU extension, GCC 1126 @code{0x1.fp3} written in hexadecimal format. As a GNU extension, GCC
1125 supports this in C90 mode (except in some cases when strictly 1127 supports this in C90 mode (except in some cases when strictly
1126 conforming) and in C++. In that format the 1128 conforming) and in C++98, C++11 and C++14 modes. In that format the
1127 @samp{0x} hex introducer and the @samp{p} or @samp{P} exponent field are 1129 @samp{0x} hex introducer and the @samp{p} or @samp{P} exponent field are
1128 mandatory. The exponent is a decimal number that indicates the power of 1130 mandatory. The exponent is a decimal number that indicates the power of
1129 2 by which the significant part is multiplied. Thus @samp{0x1.f} is 1131 2 by which the significant part is multiplied. Thus @samp{0x1.f} is
1130 @tex 1132 @tex
1131 $1 {15\over16}$, 1133 $1 {15\over16}$,
1533 @cindex arrays of length zero 1535 @cindex arrays of length zero
1534 @cindex zero-length arrays 1536 @cindex zero-length arrays
1535 @cindex length-zero arrays 1537 @cindex length-zero arrays
1536 @cindex flexible array members 1538 @cindex flexible array members
1537 1539
1538 Zero-length arrays are allowed in GNU C@. They are very useful as the 1540 Declaring zero-length arrays is allowed in GNU C as an extension.
1539 last element of a structure that is really a header for a variable-length 1541 A zero-length array can be useful as the last element of a structure
1540 object: 1542 that is really a header for a variable-length object:
1541 1543
1542 @smallexample 1544 @smallexample
1543 struct line @{ 1545 struct line @{
1544 int length; 1546 int length;
1545 char contents[0]; 1547 char contents[0];
1548 struct line *thisline = (struct line *) 1550 struct line *thisline = (struct line *)
1549 malloc (sizeof (struct line) + this_length); 1551 malloc (sizeof (struct line) + this_length);
1550 thisline->length = this_length; 1552 thisline->length = this_length;
1551 @end smallexample 1553 @end smallexample
1552 1554
1553 In ISO C90, you would have to give @code{contents} a length of 1, which 1555 Although the size of a zero-length array is zero, an array member of
1554 means either you waste space or complicate the argument to @code{malloc}. 1556 this kind may increase the size of the enclosing type as a result of tail
1555 1557 padding. The offset of a zero-length array member from the beginning
1556 In ISO C99, you would use a @dfn{flexible array member}, which is 1558 of the enclosing structure is the same as the offset of an array with
1557 slightly different in syntax and semantics: 1559 one or more elements of the same type. The alignment of a zero-length
1560 array is the same as the alignment of its elements.
1561
1562 Declaring zero-length arrays in other contexts, including as interior
1563 members of structure objects or as non-member objects, is discouraged.
1564 Accessing elements of zero-length arrays declared in such contexts is
1565 undefined and may be diagnosed.
1566
1567 In the absence of the zero-length array extension, in ISO C90
1568 the @code{contents} array in the example above would typically be declared
1569 to have a single element. Unlike a zero-length array which only contributes
1570 to the size of the enclosing structure for the purposes of alignment,
1571 a one-element array always occupies at least as much space as a single
1572 object of the type. Although using one-element arrays this way is
1573 discouraged, GCC handles accesses to trailing one-element array members
1574 analogously to zero-length arrays.
1575
1576 The preferred mechanism to declare variable-length types like
1577 @code{struct line} above is the ISO C99 @dfn{flexible array member},
1578 with slightly different syntax and semantics:
1558 1579
1559 @itemize @bullet 1580 @itemize @bullet
1560 @item 1581 @item
1561 Flexible array members are written as @code{contents[]} without 1582 Flexible array members are written as @code{contents[]} without
1562 the @code{0}. 1583 the @code{0}.
2045 @smallexample 2066 @smallexample
2046 int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @}; 2067 int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @};
2047 @end smallexample 2068 @end smallexample
2048 2069
2049 @noindent 2070 @noindent
2050 If the value in it has side-effects, the side-effects happen only once, 2071 If the value in it has side effects, the side effects happen only once,
2051 not for each initialized field by the range initializer. 2072 not for each initialized field by the range initializer.
2052 2073
2053 @noindent 2074 @noindent
2054 Note that the length of the array is the highest value specified 2075 Note that the length of the array is the highest value specified
2055 plus one. 2076 plus one.
2142 @end smallexample 2163 @end smallexample
2143 2164
2144 @noindent 2165 @noindent
2145 If the same field is initialized multiple times, it has the value from 2166 If the same field is initialized multiple times, it has the value from
2146 the last initialization. If any such overridden initialization has 2167 the last initialization. If any such overridden initialization has
2147 side-effect, it is unspecified whether the side-effect happens or not. 2168 side effect, it is unspecified whether the side effect happens or not.
2148 Currently, GCC discards them and issues a warning. 2169 Currently, GCC discards them and issues a warning.
2149 2170
2150 @node Case Ranges 2171 @node Case Ranges
2151 @section Case Ranges 2172 @section Case Ranges
2152 @cindex case ranges 2173 @cindex case ranges
2270 Function attributes are introduced by the @code{__attribute__} keyword 2291 Function attributes are introduced by the @code{__attribute__} keyword
2271 on a declaration, followed by an attribute specification inside double 2292 on a declaration, followed by an attribute specification inside double
2272 parentheses. You can specify multiple attributes in a declaration by 2293 parentheses. You can specify multiple attributes in a declaration by
2273 separating them by commas within the double parentheses or by 2294 separating them by commas within the double parentheses or by
2274 immediately following an attribute declaration with another attribute 2295 immediately following an attribute declaration with another attribute
2275 declaration. @xref{Attribute Syntax}, for the exact rules on 2296 declaration. @xref{Attribute Syntax}, for the exact rules on attribute
2276 attribute syntax and placement. 2297 syntax and placement. Compatible attribute specifications on distinct
2298 declarations of the same function are merged. An attribute specification
2299 that is not compatible with attributes already applied to a declaration
2300 of the same function is ignored with a warning.
2277 2301
2278 GCC also supports attributes on 2302 GCC also supports attributes on
2279 variable declarations (@pxref{Variable Attributes}), 2303 variable declarations (@pxref{Variable Attributes}),
2280 labels (@pxref{Label Attributes}), 2304 labels (@pxref{Label Attributes}),
2281 enumerators (@pxref{Enumerator Attributes}), 2305 enumerators (@pxref{Enumerator Attributes}),
2298 * ARC Function Attributes:: 2322 * ARC Function Attributes::
2299 * ARM Function Attributes:: 2323 * ARM Function Attributes::
2300 * AVR Function Attributes:: 2324 * AVR Function Attributes::
2301 * Blackfin Function Attributes:: 2325 * Blackfin Function Attributes::
2302 * CR16 Function Attributes:: 2326 * CR16 Function Attributes::
2327 * C-SKY Function Attributes::
2303 * Epiphany Function Attributes:: 2328 * Epiphany Function Attributes::
2304 * H8/300 Function Attributes:: 2329 * H8/300 Function Attributes::
2305 * IA-64 Function Attributes:: 2330 * IA-64 Function Attributes::
2306 * M32C Function Attributes:: 2331 * M32C Function Attributes::
2307 * M32R/D Function Attributes:: 2332 * M32R/D Function Attributes::
2314 * MSP430 Function Attributes:: 2339 * MSP430 Function Attributes::
2315 * NDS32 Function Attributes:: 2340 * NDS32 Function Attributes::
2316 * Nios II Function Attributes:: 2341 * Nios II Function Attributes::
2317 * Nvidia PTX Function Attributes:: 2342 * Nvidia PTX Function Attributes::
2318 * PowerPC Function Attributes:: 2343 * PowerPC Function Attributes::
2344 * RISC-V Function Attributes::
2319 * RL78 Function Attributes:: 2345 * RL78 Function Attributes::
2320 * RX Function Attributes:: 2346 * RX Function Attributes::
2321 * S/390 Function Attributes:: 2347 * S/390 Function Attributes::
2322 * SH Function Attributes:: 2348 * SH Function Attributes::
2323 * SPU Function Attributes:: 2349 * SPU Function Attributes::
2456 @noindent 2482 @noindent
2457 declares that @code{my_alloc1} returns 16-byte aligned pointer and 2483 declares that @code{my_alloc1} returns 16-byte aligned pointer and
2458 that @code{my_alloc2} returns a pointer whose value modulo 32 is equal 2484 that @code{my_alloc2} returns a pointer whose value modulo 32 is equal
2459 to 8. 2485 to 8.
2460 2486
2461 @item bnd_instrument
2462 @cindex @code{bnd_instrument} function attribute
2463 The @code{bnd_instrument} attribute on functions is used to inform the
2464 compiler that the function should be instrumented when compiled
2465 with the @option{-fchkp-instrument-marked-only} option.
2466
2467 @item bnd_legacy
2468 @cindex @code{bnd_legacy} function attribute
2469 @cindex Pointer Bounds Checker attributes
2470 The @code{bnd_legacy} attribute on functions is used to inform the
2471 compiler that the function should not be instrumented when compiled
2472 with the @option{-fcheck-pointer-bounds} option.
2473
2474 @item cold 2487 @item cold
2475 @cindex @code{cold} function attribute 2488 @cindex @code{cold} function attribute
2476 The @code{cold} attribute on functions is used to inform the compiler that 2489 The @code{cold} attribute on functions is used to inform the compiler that
2477 the function is unlikely to be executed. The function is optimized for 2490 the function is unlikely to be executed. The function is optimized for
2478 size rather than speed and on many targets it is placed into a special 2491 size rather than speed and on many targets it is placed into a special
2488 2501
2489 @item const 2502 @item const
2490 @cindex @code{const} function attribute 2503 @cindex @code{const} function attribute
2491 @cindex functions that have no side effects 2504 @cindex functions that have no side effects
2492 Many functions do not examine any values except their arguments, and 2505 Many functions do not examine any values except their arguments, and
2493 have no effects except the return value. Basically this is just slightly 2506 have no effects except to return a value. Calls to such functions lend
2494 more strict class than the @code{pure} attribute below, since function is not 2507 themselves to optimization such as common subexpression elimination.
2495 allowed to read global memory. 2508 The @code{const} attribute imposes greater restrictions on a function's
2509 definition than the similar @code{pure} attribute below because it prohibits
2510 the function from reading global variables. Consequently, the presence of
2511 the attribute on a function declaration allows GCC to emit more efficient
2512 code for some calls to the function. Decorating the same function with
2513 both the @code{const} and the @code{pure} attribute is diagnosed.
2496 2514
2497 @cindex pointer arguments 2515 @cindex pointer arguments
2498 Note that a function that has pointer arguments and examines the data 2516 Note that a function that has pointer arguments and examines the data
2499 pointed to must @emph{not} be declared @code{const}. Likewise, a 2517 pointed to must @emph{not} be declared @code{const}. Likewise, a
2500 function that calls a non-@code{const} function usually must not be 2518 function that calls a non-@code{const} function usually must not be
2501 @code{const}. It does not make sense for a @code{const} function to 2519 @code{const}. Because a @code{const} function cannot have any side
2502 return @code{void}. 2520 effects it does not make sense for such a function to return @code{void}.
2521 Declaring such a function is diagnosed.
2503 2522
2504 @item constructor 2523 @item constructor
2505 @itemx destructor 2524 @itemx destructor
2506 @itemx constructor (@var{priority}) 2525 @itemx constructor (@var{priority})
2507 @itemx destructor (@var{priority}) 2526 @itemx destructor (@var{priority})
2552 present. 2571 present.
2553 2572
2554 The @code{deprecated} attribute can also be used for variables and 2573 The @code{deprecated} attribute can also be used for variables and
2555 types (@pxref{Variable Attributes}, @pxref{Type Attributes}.) 2574 types (@pxref{Variable Attributes}, @pxref{Type Attributes}.)
2556 2575
2576 The message attached to the attribute is affected by the setting of
2577 the @option{-fmessage-length} option.
2578
2557 @item error ("@var{message}") 2579 @item error ("@var{message}")
2558 @itemx warning ("@var{message}") 2580 @itemx warning ("@var{message}")
2559 @cindex @code{error} function attribute 2581 @cindex @code{error} function attribute
2560 @cindex @code{warning} function attribute 2582 @cindex @code{warning} function attribute
2561 If the @code{error} or @code{warning} attribute 2583 If the @code{error} or @code{warning} attribute
2591 2613
2592 @item flatten 2614 @item flatten
2593 @cindex @code{flatten} function attribute 2615 @cindex @code{flatten} function attribute
2594 Generally, inlining into a function is limited. For a function marked with 2616 Generally, inlining into a function is limited. For a function marked with
2595 this attribute, every call inside this function is inlined, if possible. 2617 this attribute, every call inside this function is inlined, if possible.
2596 Whether the function itself is considered for inlining depends on its size and 2618 Functions declared with attribute @code{noinline} and similar are not
2597 the current inlining parameters. 2619 inlined. Whether the function itself is considered for inlining depends
2620 on its size and the current inlining parameters.
2598 2621
2599 @item format (@var{archetype}, @var{string-index}, @var{first-to-check}) 2622 @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
2600 @cindex @code{format} function attribute 2623 @cindex @code{format} function attribute
2601 @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments 2624 @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments
2602 @opindex Wformat 2625 @opindex Wformat
2674 Target Machines}. 2697 Target Machines}.
2675 2698
2676 @item format_arg (@var{string-index}) 2699 @item format_arg (@var{string-index})
2677 @cindex @code{format_arg} function attribute 2700 @cindex @code{format_arg} function attribute
2678 @opindex Wformat-nonliteral 2701 @opindex Wformat-nonliteral
2679 The @code{format_arg} attribute specifies that a function takes a format 2702 The @code{format_arg} attribute specifies that a function takes one or
2680 string for a @code{printf}, @code{scanf}, @code{strftime} or 2703 more format strings for a @code{printf}, @code{scanf}, @code{strftime} or
2681 @code{strfmon} style function and modifies it (for example, to translate 2704 @code{strfmon} style function and modifies it (for example, to translate
2682 it into another language), so the result can be passed to a 2705 it into another language), so the result can be passed to a
2683 @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style 2706 @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style
2684 function (with the remaining arguments to the format function the same 2707 function (with the remaining arguments to the format function the same
2685 as they would have been for the unmodified string). For example, the 2708 as they would have been for the unmodified string). Multiple
2709 @code{format_arg} attributes may be applied to the same function, each
2710 designating a distinct parameter as a format string. For example, the
2686 declaration: 2711 declaration:
2687 2712
2688 @smallexample 2713 @smallexample
2689 extern char * 2714 extern char *
2690 my_dgettext (char *my_domain, const char *my_format) 2715 my_dgettext (char *my_domain, const char *my_format)
2699 @code{format_arg} attribute had not been specified, all the compiler 2724 @code{format_arg} attribute had not been specified, all the compiler
2700 could tell in such calls to format functions would be that the format 2725 could tell in such calls to format functions would be that the format
2701 string argument is not constant; this would generate a warning when 2726 string argument is not constant; this would generate a warning when
2702 @option{-Wformat-nonliteral} is used, but the calls could not be checked 2727 @option{-Wformat-nonliteral} is used, but the calls could not be checked
2703 without the attribute. 2728 without the attribute.
2729
2730 In calls to a function declared with more than one @code{format_arg}
2731 attribute, each with a distinct argument value, the corresponding
2732 actual function arguments are checked against all format strings
2733 designated by the attributes. This capability is designed to support
2734 the GNU @code{ngettext} family of functions.
2704 2735
2705 The parameter @var{string-index} specifies which argument is the format 2736 The parameter @var{string-index} specifies which argument is the format
2706 string argument (starting from one). Since non-static C++ methods have 2737 string argument (starting from one). Since non-static C++ methods have
2707 an implicit @code{this} argument, the arguments of such methods should 2738 an implicit @code{this} argument, the arguments of such methods should
2708 be counted from two. 2739 be counted from two.
2918 This tells the compiler that a function is @code{malloc}-like, i.e., 2949 This tells the compiler that a function is @code{malloc}-like, i.e.,
2919 that the pointer @var{P} returned by the function cannot alias any 2950 that the pointer @var{P} returned by the function cannot alias any
2920 other pointer valid when the function returns, and moreover no 2951 other pointer valid when the function returns, and moreover no
2921 pointers to valid objects occur in any storage addressed by @var{P}. 2952 pointers to valid objects occur in any storage addressed by @var{P}.
2922 2953
2923 Using this attribute can improve optimization. Functions like 2954 Using this attribute can improve optimization. Compiler predicts
2955 that a function with the attribute returns non-null in most cases.
2956 Functions like
2924 @code{malloc} and @code{calloc} have this property because they return 2957 @code{malloc} and @code{calloc} have this property because they return
2925 a pointer to uninitialized or zeroed-out storage. However, functions 2958 a pointer to uninitialized or zeroed-out storage. However, functions
2926 like @code{realloc} do not have this property, as they can return a 2959 like @code{realloc} do not have this property, as they can return a
2927 pointer to storage containing pointers. 2960 pointer to storage containing pointers.
2928 2961
2962 @option{-fsanitize} option can be provided. 2995 @option{-fsanitize} option can be provided.
2963 2996
2964 @smallexample 2997 @smallexample
2965 void __attribute__ ((no_sanitize ("alignment", "object-size"))) 2998 void __attribute__ ((no_sanitize ("alignment", "object-size")))
2966 f () @{ /* @r{Do something.} */; @} 2999 f () @{ /* @r{Do something.} */; @}
3000 void __attribute__ ((no_sanitize ("alignment,object-size")))
3001 g () @{ /* @r{Do something.} */; @}
2967 @end smallexample 3002 @end smallexample
2968 3003
2969 @item no_sanitize_address 3004 @item no_sanitize_address
2970 @itemx no_address_safety_analysis 3005 @itemx no_address_safety_analysis
2971 @cindex @code{no_sanitize_address} function attribute 3006 @cindex @code{no_sanitize_address} function attribute
3013 @cindex @code{noinline} function attribute 3048 @cindex @code{noinline} function attribute
3014 This function attribute prevents a function from being considered for 3049 This function attribute prevents a function from being considered for
3015 inlining. 3050 inlining.
3016 @c Don't enumerate the optimizations by name here; we try to be 3051 @c Don't enumerate the optimizations by name here; we try to be
3017 @c future-compatible with this mechanism. 3052 @c future-compatible with this mechanism.
3018 If the function does not have side-effects, there are optimizations 3053 If the function does not have side effects, there are optimizations
3019 other than inlining that cause function calls to be optimized away, 3054 other than inlining that cause function calls to be optimized away,
3020 although the function call is live. To keep such calls from being 3055 although the function call is live. To keep such calls from being
3021 optimized away, put 3056 optimized away, put
3022 @smallexample 3057 @smallexample
3023 asm (""); 3058 asm ("");
3024 @end smallexample 3059 @end smallexample
3025 3060
3026 @noindent 3061 @noindent
3027 (@pxref{Extended Asm}) in the called function, to serve as a special 3062 (@pxref{Extended Asm}) in the called function, to serve as a special
3028 side-effect. 3063 side effect.
3029 3064
3030 @item noipa 3065 @item noipa
3031 @cindex @code{noipa} function attribute 3066 @cindex @code{noipa} function attribute
3032 Disable interprocedural optimizations between the function with this 3067 Disable interprocedural optimizations between the function with this
3033 attribute and its callers, as if the body of the function is not available 3068 attribute and its callers, as if the body of the function is not available
3038 existing and future optimizations employing interprocedural analysis, 3073 existing and future optimizations employing interprocedural analysis,
3039 including those that do not have an attribute suitable for disabling 3074 including those that do not have an attribute suitable for disabling
3040 them individually. This attribute is supported mainly for the purpose 3075 them individually. This attribute is supported mainly for the purpose
3041 of testing the compiler. 3076 of testing the compiler.
3042 3077
3043 @item nonnull (@var{arg-index}, @dots{}) 3078 @item nonnull
3079 @itemx nonnull (@var{arg-index}, @dots{})
3044 @cindex @code{nonnull} function attribute 3080 @cindex @code{nonnull} function attribute
3045 @cindex functions with non-null pointer arguments 3081 @cindex functions with non-null pointer arguments
3046 The @code{nonnull} attribute specifies that some function parameters should 3082 The @code{nonnull} attribute specifies that some function parameters should
3047 be non-null pointers. For instance, the declaration: 3083 be non-null pointers. For instance, the declaration:
3048 3084
3055 @noindent 3091 @noindent
3056 causes the compiler to check that, in calls to @code{my_memcpy}, 3092 causes the compiler to check that, in calls to @code{my_memcpy},
3057 arguments @var{dest} and @var{src} are non-null. If the compiler 3093 arguments @var{dest} and @var{src} are non-null. If the compiler
3058 determines that a null pointer is passed in an argument slot marked 3094 determines that a null pointer is passed in an argument slot marked
3059 as non-null, and the @option{-Wnonnull} option is enabled, a warning 3095 as non-null, and the @option{-Wnonnull} option is enabled, a warning
3060 is issued. The compiler may also choose to make optimizations based 3096 is issued. @xref{Warning Options}. Unless disabled by
3061 on the knowledge that certain function arguments will never be null. 3097 the @option{-fno-delete-null-pointer-checks} option the compiler may
3062 3098 also perform optimizations based on the knowledge that certain function
3063 If no argument index list is given to the @code{nonnull} attribute, 3099 arguments cannot be null. In addition,
3100 the @option{-fisolate-erroneous-paths-attribute} option can be specified
3101 to have GCC transform calls with null arguments to non-null functions
3102 into traps. @xref{Optimize Options}.
3103
3104 If no @var{arg-index} is given to the @code{nonnull} attribute,
3064 all pointer arguments are marked as non-null. To illustrate, the 3105 all pointer arguments are marked as non-null. To illustrate, the
3065 following declaration is equivalent to the previous example: 3106 following declaration is equivalent to the previous example:
3066 3107
3067 @smallexample 3108 @smallexample
3068 extern void * 3109 extern void *
3128 uninitialized variables. 3169 uninitialized variables.
3129 3170
3130 The @code{noreturn} keyword does not affect the exceptional path when that 3171 The @code{noreturn} keyword does not affect the exceptional path when that
3131 applies: a @code{noreturn}-marked function may still return to the caller 3172 applies: a @code{noreturn}-marked function may still return to the caller
3132 by throwing an exception or calling @code{longjmp}. 3173 by throwing an exception or calling @code{longjmp}.
3174
3175 In order to preserve backtraces, GCC will never turn calls to
3176 @code{noreturn} functions into tail calls.
3133 3177
3134 Do not assume that registers saved by the calling function are 3178 Do not assume that registers saved by the calling function are
3135 restored before calling the @code{noreturn} function. 3179 restored before calling the @code{noreturn} function.
3136 3180
3137 It does not make sense for a @code{noreturn} function to have a return 3181 It does not make sense for a @code{noreturn} function to have a return
3185 @item pure 3229 @item pure
3186 @cindex @code{pure} function attribute 3230 @cindex @code{pure} function attribute
3187 @cindex functions that have no side effects 3231 @cindex functions that have no side effects
3188 Many functions have no effects except the return value and their 3232 Many functions have no effects except the return value and their
3189 return value depends only on the parameters and/or global variables. 3233 return value depends only on the parameters and/or global variables.
3190 Such a function can be subject 3234 Calls to such functions can be subject
3191 to common subexpression elimination and loop optimization just as an 3235 to common subexpression elimination and loop optimization just as an
3192 arithmetic operator would be. These functions should be declared 3236 arithmetic operator would be. These functions should be declared
3193 with the attribute @code{pure}. For example, 3237 with the attribute @code{pure}. For example,
3194 3238
3195 @smallexample 3239 @smallexample
3202 3246
3203 Some common examples of pure functions are @code{strlen} or @code{memcmp}. 3247 Some common examples of pure functions are @code{strlen} or @code{memcmp}.
3204 Interesting non-pure functions are functions with infinite loops or those 3248 Interesting non-pure functions are functions with infinite loops or those
3205 depending on volatile memory or other system resource, that may change between 3249 depending on volatile memory or other system resource, that may change between
3206 two consecutive calls (such as @code{feof} in a multithreading environment). 3250 two consecutive calls (such as @code{feof} in a multithreading environment).
3251
3252 The @code{pure} attribute imposes similar but looser restrictions on
3253 a function's defintion than the @code{const} attribute: it allows the
3254 function to read global variables. Decorating the same function with
3255 both the @code{pure} and the @code{const} attribute is diagnosed.
3256 Because a @code{pure} function cannot have any side effects it does not
3257 make sense for such a function to return @code{void}. Declaring such
3258 a function is diagnosed.
3207 3259
3208 @item returns_nonnull 3260 @item returns_nonnull
3209 @cindex @code{returns_nonnull} function attribute 3261 @cindex @code{returns_nonnull} function attribute
3210 The @code{returns_nonnull} attribute specifies that the function 3262 The @code{returns_nonnull} attribute specifies that the function
3211 return value should be a non-null pointer. For instance, the declaration: 3263 return value should be a non-null pointer. For instance, the declaration:
3293 The optional argument @var{mask} may have the value 3345 The optional argument @var{mask} may have the value
3294 @code{notinbranch} or @code{inbranch}, 3346 @code{notinbranch} or @code{inbranch},
3295 and instructs the compiler to generate non-masked or masked 3347 and instructs the compiler to generate non-masked or masked
3296 clones correspondingly. By default, all clones are generated. 3348 clones correspondingly. By default, all clones are generated.
3297 3349
3298 The attribute should not be used together with Cilk Plus @code{vector}
3299 attribute on the same function.
3300
3301 If the attribute is specified and @code{#pragma omp declare simd} is 3350 If the attribute is specified and @code{#pragma omp declare simd} is
3302 present on a declaration and the @option{-fopenmp} or @option{-fopenmp-simd} 3351 present on a declaration and the @option{-fopenmp} or @option{-fopenmp-simd}
3303 switch is specified, then the attribute is ignored. 3352 switch is specified, then the attribute is ignored.
3304 3353
3305 @item stack_protect 3354 @item stack_protect
3590 Indicates that code should be generated for a particular code model for 3639 Indicates that code should be generated for a particular code model for
3591 this function. The behavior and permissible arguments are the same as 3640 this function. The behavior and permissible arguments are the same as
3592 for the command line option @option{-mcmodel=}. 3641 for the command line option @option{-mcmodel=}.
3593 3642
3594 @item strict-align 3643 @item strict-align
3644 @itemx no-strict-align
3595 @cindex @code{strict-align} function attribute, AArch64 3645 @cindex @code{strict-align} function attribute, AArch64
3596 Indicates that the compiler should not assume that unaligned memory references 3646 @code{strict-align} indicates that the compiler should not assume that unaligned
3597 are handled by the system. The behavior is the same as for the command-line 3647 memory references are handled by the system. To allow the compiler to assume
3598 option @option{-mstrict-align}. 3648 that aligned memory references are handled by the system, the inverse attribute
3649 @code{no-strict-align} can be specified. The behavior is same as for the
3650 command-line option @option{-mstrict-align} and @option{-mno-strict-align}.
3599 3651
3600 @item omit-leaf-frame-pointer 3652 @item omit-leaf-frame-pointer
3601 @cindex @code{omit-leaf-frame-pointer} function attribute, AArch64 3653 @cindex @code{omit-leaf-frame-pointer} function attribute, AArch64
3602 Indicates that the frame pointer should be omitted for a leaf function call. 3654 Indicates that the frame pointer should be omitted for a leaf function call.
3603 To keep the frame pointer, the inverse attribute 3655 To keep the frame pointer, the inverse attribute
3749 branch-and-link instruction, which has a 25-bit offset from 3801 branch-and-link instruction, which has a 25-bit offset from
3750 the call site. A function marked with the @code{short_call} 3802 the call site. A function marked with the @code{short_call}
3751 attribute will always be close enough to be called with a conditional 3803 attribute will always be close enough to be called with a conditional
3752 branch-and-link instruction, which has a 21-bit offset from 3804 branch-and-link instruction, which has a 21-bit offset from
3753 the call site. 3805 the call site.
3806
3807 @item jli_always
3808 @cindex @code{jli_always} function attribute, ARC
3809 Forces a particular function to be called using @code{jli}
3810 instruction. The @code{jli} instruction makes use of a table stored
3811 into @code{.jlitab} section, which holds the location of the functions
3812 which are addressed using this instruction.
3813
3814 @item jli_fixed
3815 @cindex @code{jli_fixed} function attribute, ARC
3816 Identical like the above one, but the location of the function in the
3817 @code{jli} table is known and given as an attribute parameter.
3818
3819 @item secure_call
3820 @cindex @code{secure_call} function attribute, ARC
3821 This attribute allows one to mark secure-code functions that are
3822 callable from normal mode. The location of the secure call function
3823 into the @code{sjli} table needs to be passed as argument.
3824
3754 @end table 3825 @end table
3755 3826
3756 @node ARM Function Attributes 3827 @node ARM Function Attributes
3757 @subsection ARM Function Attributes 3828 @subsection ARM Function Attributes
3758 3829
3855 @item fpu= 3926 @item fpu=
3856 @cindex @code{target("fpu=")} function attribute, ARM 3927 @cindex @code{target("fpu=")} function attribute, ARM
3857 Specifies the fpu for which to tune the performance of this function. 3928 Specifies the fpu for which to tune the performance of this function.
3858 The behavior and permissible arguments are the same as for the @option{-mfpu=} 3929 The behavior and permissible arguments are the same as for the @option{-mfpu=}
3859 command-line option. 3930 command-line option.
3931
3932 @item arch=
3933 @cindex @code{arch=} function attribute, ARM
3934 Specifies the architecture version and architectural extensions to use
3935 for this function. The behavior and permissible arguments are the same as
3936 for the @option{-march=} command-line option.
3937
3938 The above target attributes can be specified as follows:
3939
3940 @smallexample
3941 __attribute__((target("arch=armv8-a+crc")))
3942 int
3943 f (int a)
3944 @{
3945 return a + 5;
3946 @}
3947 @end smallexample
3948
3949 Additionally, the architectural extension string may be specified on its
3950 own. This can be used to turn on and off particular architectural extensions
3951 without having to specify a particular architecture version or core. Example:
3952
3953 @smallexample
3954 __attribute__((target("+crc+nocrypto")))
3955 int
3956 foo (int a)
3957 @{
3958 return a + 5;
3959 @}
3960 @end smallexample
3961
3962 In this example @code{target("+crc+nocrypto")} enables the @code{crc}
3963 extension and disables the @code{crypto} extension for the function @code{foo}
3964 without modifying an existing @option{-march=} or @option{-mcpu} option.
3860 3965
3861 @end table 3966 @end table
3862 3967
3863 @end table 3968 @end table
3864 3969
4058 Use this attribute to indicate 4163 Use this attribute to indicate
4059 that the specified function is an interrupt handler. The compiler generates 4164 that the specified function is an interrupt handler. The compiler generates
4060 function entry and exit sequences suitable for use in an interrupt handler 4165 function entry and exit sequences suitable for use in an interrupt handler
4061 when this attribute is present. 4166 when this attribute is present.
4062 @end table 4167 @end table
4168
4169 @node C-SKY Function Attributes
4170 @subsection C-SKY Function Attributes
4171
4172 These function attributes are supported by the C-SKY back end:
4173
4174 @table @code
4175 @item interrupt
4176 @itemx isr
4177 @cindex @code{interrupt} function attribute, C-SKY
4178 @cindex @code{isr} function attribute, C-SKY
4179 Use these attributes to indicate that the specified function
4180 is an interrupt handler.
4181 The compiler generates function entry and exit sequences suitable for
4182 use in an interrupt handler when either of these attributes are present.
4183
4184 Use of these options requires the @option{-mistack} command-line option
4185 to enable support for the necessary interrupt stack instructions. They
4186 are ignored with a warning otherwise. @xref{C-SKY Options}.
4187
4188 @item naked
4189 @cindex @code{naked} function attribute, C-SKY
4190 This attribute allows the compiler to construct the
4191 requisite function declaration, while allowing the body of the
4192 function to be assembly code. The specified function will not have
4193 prologue/epilogue sequences generated by the compiler. Only basic
4194 @code{asm} statements can safely be included in naked functions
4195 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
4196 basic @code{asm} and C code may appear to work, they cannot be
4197 depended upon to work reliably and are not supported.
4198 @end table
4199
4063 4200
4064 @node Epiphany Function Attributes 4201 @node Epiphany Function Attributes
4065 @subsection Epiphany Function Attributes 4202 @subsection Epiphany Function Attributes
4066 4203
4067 These function attributes are supported by the Epiphany back end: 4204 These function attributes are supported by the Epiphany back end:
5047 On the PowerPC, the inliner does not inline a 5184 On the PowerPC, the inliner does not inline a
5048 function that has different target options than the caller, unless the 5185 function that has different target options than the caller, unless the
5049 callee has a subset of the target options of the caller. 5186 callee has a subset of the target options of the caller.
5050 @end table 5187 @end table
5051 5188
5189 @node RISC-V Function Attributes
5190 @subsection RISC-V Function Attributes
5191
5192 These function attributes are supported by the RISC-V back end:
5193
5194 @table @code
5195 @item naked
5196 @cindex @code{naked} function attribute, RISC-V
5197 This attribute allows the compiler to construct the
5198 requisite function declaration, while allowing the body of the
5199 function to be assembly code. The specified function will not have
5200 prologue/epilogue sequences generated by the compiler. Only basic
5201 @code{asm} statements can safely be included in naked functions
5202 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
5203 basic @code{asm} and C code may appear to work, they cannot be
5204 depended upon to work reliably and are not supported.
5205
5206 @item interrupt
5207 @cindex @code{interrupt} function attribute, RISC-V
5208 Use this attribute to indicate that the specified function is an interrupt
5209 handler. The compiler generates function entry and exit sequences suitable
5210 for use in an interrupt handler when this attribute is present.
5211
5212 You can specify the kind of interrupt to be handled by adding an optional
5213 parameter to the interrupt attribute like this:
5214
5215 @smallexample
5216 void f (void) __attribute__ ((interrupt ("user")));
5217 @end smallexample
5218
5219 Permissible values for this parameter are @code{user}, @code{supervisor},
5220 and @code{machine}. If there is no parameter, then it defaults to
5221 @code{machine}.
5222 @end table
5223
5052 @node RL78 Function Attributes 5224 @node RL78 Function Attributes
5053 @subsection RL78 Function Attributes 5225 @subsection RL78 Function Attributes
5054 5226
5055 These function attributes are supported by the RL78 back end: 5227 These function attributes are supported by the RL78 back end:
5056 5228
5098 Use this attribute to indicate 5270 Use this attribute to indicate
5099 that the specified function is an interrupt handler. The compiler generates 5271 that the specified function is an interrupt handler. The compiler generates
5100 function entry and exit sequences suitable for use in an interrupt handler 5272 function entry and exit sequences suitable for use in an interrupt handler
5101 when this attribute is present. 5273 when this attribute is present.
5102 5274
5103 On RX targets, you may specify one or more vector numbers as arguments 5275 On RX and RL78 targets, you may specify one or more vector numbers as arguments
5104 to the attribute, as well as naming an alternate table name. 5276 to the attribute, as well as naming an alternate table name.
5105 Parameters are handled sequentially, so one handler can be assigned to 5277 Parameters are handled sequentially, so one handler can be assigned to
5106 multiple entries in multiple tables. One may also pass the magic 5278 multiple entries in multiple tables. One may also pass the magic
5107 string @code{"$default"} which causes the function to be used for any 5279 string @code{"$default"} which causes the function to be used for any
5108 unfilled slots in the current table. 5280 unfilled slots in the current table.
5476 Use this attribute to indicate that the specified function has no 5648 Use this attribute to indicate that the specified function has no
5477 caller-saved registers. That is, all registers are callee-saved. For 5649 caller-saved registers. That is, all registers are callee-saved. For
5478 example, this attribute can be used for a function called from an 5650 example, this attribute can be used for a function called from an
5479 interrupt handler. The compiler generates proper function entry and 5651 interrupt handler. The compiler generates proper function entry and
5480 exit sequences to save and restore any modified registers, except for 5652 exit sequences to save and restore any modified registers, except for
5481 the EFLAGS register. Since GCC doesn't preserve MPX, SSE, MMX nor x87 5653 the EFLAGS register. Since GCC doesn't preserve SSE, MMX nor x87
5482 states, the GCC option @option{-mgeneral-regs-only} should be used to 5654 states, the GCC option @option{-mgeneral-regs-only} should be used to
5483 compile functions with @code{no_caller_saved_registers} attribute. 5655 compile functions with @code{no_caller_saved_registers} attribute.
5484 5656
5485 @item interrupt 5657 @item interrupt
5486 @cindex @code{interrupt} function attribute, x86 5658 @cindex @code{interrupt} function attribute, x86
5490 entry and exit sequences suitable for use in an interrupt handler when 5662 entry and exit sequences suitable for use in an interrupt handler when
5491 this attribute is present. The @code{IRET} instruction, instead of the 5663 this attribute is present. The @code{IRET} instruction, instead of the
5492 @code{RET} instruction, is used to return from interrupt handlers. All 5664 @code{RET} instruction, is used to return from interrupt handlers. All
5493 registers, except for the EFLAGS register which is restored by the 5665 registers, except for the EFLAGS register which is restored by the
5494 @code{IRET} instruction, are preserved by the compiler. Since GCC 5666 @code{IRET} instruction, are preserved by the compiler. Since GCC
5495 doesn't preserve MPX, SSE, MMX nor x87 states, the GCC option 5667 doesn't preserve SSE, MMX nor x87 states, the GCC option
5496 @option{-mgeneral-regs-only} should be used to compile interrupt and 5668 @option{-mgeneral-regs-only} should be used to compile interrupt and
5497 exception handlers. 5669 exception handlers.
5498 5670
5499 Any interruptible-without-stack-switch code must be compiled with 5671 Any interruptible-without-stack-switch code must be compiled with
5500 @option{-mno-red-zone} since interrupt handlers can and will, because 5672 @option{-mno-red-zone} since interrupt handlers can and will, because
5688 @cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86 5860 @cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86
5689 Specify which floating-point unit to use. You must specify the 5861 Specify which floating-point unit to use. You must specify the
5690 @code{target("fpmath=sse,387")} option as 5862 @code{target("fpmath=sse,387")} option as
5691 @code{target("fpmath=sse+387")} because the comma would separate 5863 @code{target("fpmath=sse+387")} because the comma would separate
5692 different options. 5864 different options.
5865
5866 @item indirect_branch("@var{choice}")
5867 @cindex @code{indirect_branch} function attribute, x86
5868 On x86 targets, the @code{indirect_branch} attribute causes the compiler
5869 to convert indirect call and jump with @var{choice}. @samp{keep}
5870 keeps indirect call and jump unmodified. @samp{thunk} converts indirect
5871 call and jump to call and return thunk. @samp{thunk-inline} converts
5872 indirect call and jump to inlined call and return thunk.
5873 @samp{thunk-extern} converts indirect call and jump to external call
5874 and return thunk provided in a separate object file.
5875
5876 @item function_return("@var{choice}")
5877 @cindex @code{function_return} function attribute, x86
5878 On x86 targets, the @code{function_return} attribute causes the compiler
5879 to convert function return with @var{choice}. @samp{keep} keeps function
5880 return unmodified. @samp{thunk} converts function return to call and
5881 return thunk. @samp{thunk-inline} converts function return to inlined
5882 call and return thunk. @samp{thunk-extern} converts function return to
5883 external call and return thunk provided in a separate object file.
5693 5884
5694 @item nocf_check 5885 @item nocf_check
5695 @cindex @code{nocf_check} function attribute 5886 @cindex @code{nocf_check} function attribute
5696 The @code{nocf_check} attribute on a function is used to inform the 5887 The @code{nocf_check} attribute on a function is used to inform the
5697 compiler that the function's prologue should not be instrumented when 5888 compiler that the function's prologue should not be instrumented when
5719 @{ 5910 @{
5720 int foo (void) __attribute__(nocf_check); 5911 int foo (void) __attribute__(nocf_check);
5721 void (*foo1)(void) __attribute__(nocf_check); 5912 void (*foo1)(void) __attribute__(nocf_check);
5722 void (*foo2)(void); 5913 void (*foo2)(void);
5723 5914
5915 /* foo's address is assumed to be valid. */
5724 int 5916 int
5725 foo (void) /* The function's address is assumed to be valid. */ 5917 foo (void)
5726 5918
5727 /* This call site is not checked for control-flow validity. */ 5919 /* This call site is not checked for control-flow
5920 validity. */
5728 (*foo1)(); 5921 (*foo1)();
5729 5922
5730 foo1 = foo2; /* A warning is printed about attribute mismatch. */ 5923 /* A warning is issued about attribute mismatch. */
5731 /* This call site is still not checked for control-flow validity. */ 5924 foo1 = foo2;
5925
5926 /* This call site is still not checked. */
5732 (*foo1)(); 5927 (*foo1)();
5733 5928
5734 /* This call site is checked for control-flow validity. */ 5929 /* This call site is checked. */
5735 (*foo2)(); 5930 (*foo2)();
5736 5931
5737 foo2 = foo1; /* A warning is printed about attribute mismatch. */ 5932 /* A warning is issued about attribute mismatch. */
5738 /* This call site is still checked for control-flow validity. */ 5933 foo2 = foo1;
5934
5935 /* This call site is still checked. */
5739 (*foo2)(); 5936 (*foo2)();
5740 5937
5741 return 0; 5938 return 0;
5742 @} 5939 @}
5743 @end smallexample 5940 @end smallexample
5941
5942 @item indirect_return
5943 @cindex @code{indirect_return} function attribute, x86
5944
5945 The @code{indirect_return} attribute can be applied to a function,
5946 as well as variable or type of function pointer to inform the
5947 compiler that the function may return via indirect branch.
5744 5948
5745 @end table 5949 @end table
5746 5950
5747 On the x86, the inliner does not inline a 5951 On the x86, the inliner does not inline a
5748 function that has different target options than the caller, unless the 5952 function that has different target options than the caller, unless the
5785 @xref{Attribute Syntax}, for details of the exact syntax for using 5989 @xref{Attribute Syntax}, for details of the exact syntax for using
5786 attributes. 5990 attributes.
5787 5991
5788 @menu 5992 @menu
5789 * Common Variable Attributes:: 5993 * Common Variable Attributes::
5994 * ARC Variable Attributes::
5790 * AVR Variable Attributes:: 5995 * AVR Variable Attributes::
5791 * Blackfin Variable Attributes:: 5996 * Blackfin Variable Attributes::
5792 * H8/300 Variable Attributes:: 5997 * H8/300 Variable Attributes::
5793 * IA-64 Variable Attributes:: 5998 * IA-64 Variable Attributes::
5794 * M32R/D Variable Attributes:: 5999 * M32R/D Variable Attributes::
5967 6172
5968 The @code{deprecated} attribute can also be used for functions and 6173 The @code{deprecated} attribute can also be used for functions and
5969 types (@pxref{Common Function Attributes}, 6174 types (@pxref{Common Function Attributes},
5970 @pxref{Common Type Attributes}). 6175 @pxref{Common Type Attributes}).
5971 6176
5972 @item nonstring (@var{nonstring}) 6177 The message attached to the attribute is affected by the setting of
5973 @cindex @code{nonstring} variable attribute 6178 the @option{-fmessage-length} option.
5974 The @code{nonstring} variable attribute specifies that an object or member
5975 declaration with type array of @code{char} or pointer to @code{char} is
5976 intended to store character arrays that do not necessarily contain
5977 a terminating @code{NUL} character. This is useful to avoid warnings
5978 when such an array or pointer is used as an argument to a bounded string
5979 manipulation function such as @code{strncpy}. For example, without the
5980 attribute, GCC will issue a warning for the call below because it may
5981 truncate the copy without appending the terminating NUL character. Using
5982 the attribute makes it possible to suppress the warning.
5983
5984 @smallexample
5985 struct Data
5986 @{
5987 char name [32] __attribute__ ((nonstring));
5988 @};
5989 void f (struct Data *pd, const char *s)
5990 @{
5991 strncpy (pd->name, s, sizeof pd->name);
5992 @dots{}
5993 @}
5994 @end smallexample
5995 6179
5996 @item mode (@var{mode}) 6180 @item mode (@var{mode})
5997 @cindex @code{mode} variable attribute 6181 @cindex @code{mode} variable attribute
5998 This attribute specifies the data type for the declaration---whichever 6182 This attribute specifies the data type for the declaration---whichever
5999 type corresponds to the mode @var{mode}. This in effect lets you 6183 type corresponds to the mode @var{mode}. This in effect lets you
6004 You may also specify a mode of @code{byte} or @code{__byte__} to 6188 You may also specify a mode of @code{byte} or @code{__byte__} to
6005 indicate the mode corresponding to a one-byte integer, @code{word} or 6189 indicate the mode corresponding to a one-byte integer, @code{word} or
6006 @code{__word__} for the mode of a one-word integer, and @code{pointer} 6190 @code{__word__} for the mode of a one-word integer, and @code{pointer}
6007 or @code{__pointer__} for the mode used to represent pointers. 6191 or @code{__pointer__} for the mode used to represent pointers.
6008 6192
6193 @item nonstring
6194 @cindex @code{nonstring} variable attribute
6195 The @code{nonstring} variable attribute specifies that an object or member
6196 declaration with type array of @code{char}, @code{signed char}, or
6197 @code{unsigned char}, or pointer to such a type is intended to store
6198 character arrays that do not necessarily contain a terminating @code{NUL}.
6199 This is useful in detecting uses of such arrays or pointers with functions
6200 that expect @code{NUL}-terminated strings, and to avoid warnings when such
6201 an array or pointer is used as an argument to a bounded string manipulation
6202 function such as @code{strncpy}. For example, without the attribute, GCC
6203 will issue a warning for the @code{strncpy} call below because it may
6204 truncate the copy without appending the terminating @code{NUL} character.
6205 Using the attribute makes it possible to suppress the warning. However,
6206 when the array is declared with the attribute the call to @code{strlen} is
6207 diagnosed because when the array doesn't contain a @code{NUL}-terminated
6208 string the call is undefined. To copy, compare, of search non-string
6209 character arrays use the @code{memcpy}, @code{memcmp}, @code{memchr},
6210 and other functions that operate on arrays of bytes. In addition,
6211 calling @code{strnlen} and @code{strndup} with such arrays is safe
6212 provided a suitable bound is specified, and not diagnosed.
6213
6214 @smallexample
6215 struct Data
6216 @{
6217 char name [32] __attribute__ ((nonstring));
6218 @};
6219
6220 int f (struct Data *pd, const char *s)
6221 @{
6222 strncpy (pd->name, s, sizeof pd->name);
6223 @dots{}
6224 return strlen (pd->name); // unsafe, gets a warning
6225 @}
6226 @end smallexample
6227
6009 @item packed 6228 @item packed
6010 @cindex @code{packed} variable attribute 6229 @cindex @code{packed} variable attribute
6011 The @code{packed} attribute specifies that a variable or structure field 6230 The @code{packed} attribute specifies that a structure member should have
6012 should have the smallest possible alignment---one byte for a variable, 6231 the smallest possible alignment---one bit for a bit-field and one byte
6013 and one bit for a field, unless you specify a larger value with the 6232 otherwise, unless a larger value is specified with the @code{aligned}
6014 @code{aligned} attribute. 6233 attribute. The attribute does not apply to non-member objects.
6015 6234
6016 Here is a structure in which the field @code{x} is packed, so that it 6235 For example in the structure below, the member array @code{x} is packed
6017 immediately follows @code{a}: 6236 so that it immediately follows @code{a} with no intervening padding:
6018 6237
6019 @smallexample 6238 @smallexample
6020 struct foo 6239 struct foo
6021 @{ 6240 @{
6022 char a; 6241 char a;
6144 6363
6145 @item weak 6364 @item weak
6146 @cindex @code{weak} variable attribute 6365 @cindex @code{weak} variable attribute
6147 The @code{weak} attribute is described in 6366 The @code{weak} attribute is described in
6148 @ref{Common Function Attributes}. 6367 @ref{Common Function Attributes}.
6368
6369 @end table
6370
6371 @node ARC Variable Attributes
6372 @subsection ARC Variable Attributes
6373
6374 @table @code
6375 @item aux
6376 @cindex @code{aux} variable attribute, ARC
6377 The @code{aux} attribute is used to directly access the ARC's
6378 auxiliary register space from C. The auxilirary register number is
6379 given via attribute argument.
6149 6380
6150 @end table 6381 @end table
6151 6382
6152 @node AVR Variable Attributes 6383 @node AVR Variable Attributes
6153 @subsection AVR Variable Attributes 6384 @subsection AVR Variable Attributes
6697 @xref{Attribute Syntax}, for details of the exact syntax for using 6928 @xref{Attribute Syntax}, for details of the exact syntax for using
6698 attributes. 6929 attributes.
6699 6930
6700 @menu 6931 @menu
6701 * Common Type Attributes:: 6932 * Common Type Attributes::
6933 * ARC Type Attributes::
6702 * ARM Type Attributes:: 6934 * ARM Type Attributes::
6703 * MeP Type Attributes:: 6935 * MeP Type Attributes::
6704 * PowerPC Type Attributes:: 6936 * PowerPC Type Attributes::
6705 * SPU Type Attributes:: 6937 * SPU Type Attributes::
6706 * x86 Type Attributes:: 6938 * x86 Type Attributes::
6840 __u64 x; 7072 __u64 x;
6841 @} __attribute__((aligned(8))); 7073 @} __attribute__((aligned(8)));
6842 @end smallexample 7074 @end smallexample
6843 7075
6844 This warning can be disabled by @option{-Wno-if-not-aligned}. 7076 This warning can be disabled by @option{-Wno-if-not-aligned}.
6845
6846 @item bnd_variable_size
6847 @cindex @code{bnd_variable_size} type attribute
6848 @cindex Pointer Bounds Checker attributes
6849 When applied to a structure field, this attribute tells Pointer
6850 Bounds Checker that the size of this field should not be computed
6851 using static type information. It may be used to mark variably-sized
6852 static array fields placed at the end of a structure.
6853
6854 @smallexample
6855 struct S
6856 @{
6857 int size;
6858 char data[1];
6859 @}
6860 S *p = (S *)malloc (sizeof(S) + 100);
6861 p->data[10] = 0; //Bounds violation
6862 @end smallexample
6863
6864 @noindent
6865 By using an attribute for the field we may avoid unwanted bound
6866 violation checks:
6867
6868 @smallexample
6869 struct S
6870 @{
6871 int size;
6872 char data[1] __attribute__((bnd_variable_size));
6873 @}
6874 S *p = (S *)malloc (sizeof(S) + 100);
6875 p->data[10] = 0; //OK
6876 @end smallexample
6877 7077
6878 @item deprecated 7078 @item deprecated
6879 @itemx deprecated (@var{msg}) 7079 @itemx deprecated (@var{msg})
6880 @cindex @code{deprecated} type attribute 7080 @cindex @code{deprecated} type attribute
6881 The @code{deprecated} attribute results in a warning if the type 7081 The @code{deprecated} attribute results in a warning if the type
6901 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 7101 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No
6902 warning is issued for line 4 because T2 is not explicitly 7102 warning is issued for line 4 because T2 is not explicitly
6903 deprecated. Line 5 has no warning because T3 is explicitly 7103 deprecated. Line 5 has no warning because T3 is explicitly
6904 deprecated. Similarly for line 6. The optional @var{msg} 7104 deprecated. Similarly for line 6. The optional @var{msg}
6905 argument, which must be a string, is printed in the warning if 7105 argument, which must be a string, is printed in the warning if
6906 present. 7106 present. Control characters in the string will be replaced with
7107 escape sequences, and if the @option{-fmessage-length} option is set
7108 to 0 (its default value) then any newline characters will be ignored.
6907 7109
6908 The @code{deprecated} attribute can also be used for functions and 7110 The @code{deprecated} attribute can also be used for functions and
6909 variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.) 7111 variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.)
7112
7113 The message attached to the attribute is affected by the setting of
7114 the @option{-fmessage-length} option.
6910 7115
6911 @item designated_init 7116 @item designated_init
6912 @cindex @code{designated_init} type attribute 7117 @cindex @code{designated_init} type attribute
6913 This attribute may only be applied to structure types. It indicates 7118 This attribute may only be applied to structure types. It indicates
6914 that any initialization of an object of this type must use designated 7119 that any initialization of an object of this type must use designated
6959 If you replaced @code{short_a} with @code{short} in the variable 7164 If you replaced @code{short_a} with @code{short} in the variable
6960 declaration, the above program would abort when compiled with 7165 declaration, the above program would abort when compiled with
6961 @option{-fstrict-aliasing}, which is on by default at @option{-O2} or 7166 @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
6962 above. 7167 above.
6963 7168
7169 @item mode (@var{mode})
7170 @cindex @code{mode} type attribute
7171 This attribute specifies the data type for the declaration---whichever
7172 type corresponds to the mode @var{mode}. This in effect lets you
7173 request an integer or floating-point type according to its width.
7174
7175 @xref{Machine Modes,,, gccint, GNU Compiler Collection (GCC) Internals},
7176 for a list of the possible keywords for @var{mode}.
7177 You may also specify a mode of @code{byte} or @code{__byte__} to
7178 indicate the mode corresponding to a one-byte integer, @code{word} or
7179 @code{__word__} for the mode of a one-word integer, and @code{pointer}
7180 or @code{__pointer__} for the mode used to represent pointers.
7181
6964 @item packed 7182 @item packed
6965 @cindex @code{packed} type attribute 7183 @cindex @code{packed} type attribute
6966 This attribute, attached to @code{struct} or @code{union} type 7184 This attribute, attached to @code{struct} or @code{union} type
6967 definition, specifies that each member (other than zero-width bit-fields) 7185 definition, specifies that each member (other than zero-width bit-fields)
6968 of the structure or union is placed to minimize the memory required. When 7186 of the structure or union is placed to minimize the memory required. When
7129 @end table 7347 @end table
7130 7348
7131 To specify multiple attributes, separate them by commas within the 7349 To specify multiple attributes, separate them by commas within the
7132 double parentheses: for example, @samp{__attribute__ ((aligned (16), 7350 double parentheses: for example, @samp{__attribute__ ((aligned (16),
7133 packed))}. 7351 packed))}.
7352
7353 @node ARC Type Attributes
7354 @subsection ARC Type Attributes
7355
7356 @cindex @code{uncached} type attribute, ARC
7357 Declaring objects with @code{uncached} allows you to exclude
7358 data-cache participation in load and store operations on those objects
7359 without involving the additional semantic implications of
7360 @code{volatile}. The @code{.di} instruction suffix is used for all
7361 loads and stores of data declared @code{uncached}.
7134 7362
7135 @node ARM Type Attributes 7363 @node ARM Type Attributes
7136 @subsection ARM Type Attributes 7364 @subsection ARM Type Attributes
7137 7365
7138 @cindex @code{notshared} type attribute, ARM 7366 @cindex @code{notshared} type attribute, ARM
7773 8001
7774 GCC implements three different semantics of declaring a function 8002 GCC implements three different semantics of declaring a function
7775 inline. One is available with @option{-std=gnu89} or 8003 inline. One is available with @option{-std=gnu89} or
7776 @option{-fgnu89-inline} or when @code{gnu_inline} attribute is present 8004 @option{-fgnu89-inline} or when @code{gnu_inline} attribute is present
7777 on all inline declarations, another when 8005 on all inline declarations, another when
7778 @option{-std=c99}, @option{-std=c11}, 8006 @option{-std=c99},
7779 @option{-std=gnu99} or @option{-std=gnu11} 8007 @option{-std=gnu99} or an option for a later C version is used
7780 (without @option{-fgnu89-inline}), and the third 8008 (without @option{-fgnu89-inline}), and the third
7781 is used when compiling C++. 8009 is used when compiling C++.
7782 8010
7783 To declare a function inline, use the @code{inline} keyword in its 8011 To declare a function inline, use the @code{inline} keyword in its
7784 declaration, like this: 8012 declaration, like this:
9123 9351
9124 top: 9352 top:
9125 9353
9126 asm volatile goto ("some assembler instructions here" 9354 asm volatile goto ("some assembler instructions here"
9127 : /* No outputs. */ 9355 : /* No outputs. */
9128 : "q" (iInt), "X" (sizeof(unsigned char) + 1) 9356 : "q" (iInt), "X" (sizeof(unsigned char) + 1), "i" (42)
9129 : /* No clobbers. */ 9357 : /* No clobbers. */
9130 : top); 9358 : top);
9131 @} 9359 @}
9132 @end example 9360 @end example
9133 9361
9134 With no modifiers, this is what the output from the operands would be for the 9362 With no modifiers, this is what the output from the operands would be
9135 @samp{att} and @samp{intel} dialects of assembler: 9363 for the @samp{att} and @samp{intel} dialects of assembler:
9136 9364
9137 @multitable {Operand} {$.L2} {OFFSET FLAT:.L2} 9365 @multitable {Operand} {$.L2} {OFFSET FLAT:.L2}
9138 @headitem Operand @tab @samp{att} @tab @samp{intel} 9366 @headitem Operand @tab @samp{att} @tab @samp{intel}
9139 @item @code{%0} 9367 @item @code{%0}
9140 @tab @code{%eax} 9368 @tab @code{%eax}
9141 @tab @code{eax} 9369 @tab @code{eax}
9142 @item @code{%1} 9370 @item @code{%1}
9143 @tab @code{$2} 9371 @tab @code{$2}
9144 @tab @code{2} 9372 @tab @code{2}
9145 @item @code{%2} 9373 @item @code{%3}
9146 @tab @code{$.L2} 9374 @tab @code{$.L3}
9147 @tab @code{OFFSET FLAT:.L2} 9375 @tab @code{OFFSET FLAT:.L3}
9148 @end multitable 9376 @end multitable
9149 9377
9150 The table below shows the list of supported modifiers and their effects. 9378 The table below shows the list of supported modifiers and their effects.
9151 9379
9152 @multitable {Modifier} {Print the opcode suffix for the size of th} {Operand} {@samp{att}} {@samp{intel}} 9380 @multitable {Modifier} {Print the opcode suffix for the size of th} {Operand} {@samp{att}} {@samp{intel}}
9153 @headitem Modifier @tab Description @tab Operand @tab @samp{att} @tab @samp{intel} 9381 @headitem Modifier @tab Description @tab Operand @tab @samp{att} @tab @samp{intel}
9382 @item @code{a}
9383 @tab Print an absolute memory reference.
9384 @tab @code{%A0}
9385 @tab @code{*%rax}
9386 @tab @code{rax}
9387 @item @code{b}
9388 @tab Print the QImode name of the register.
9389 @tab @code{%b0}
9390 @tab @code{%al}
9391 @tab @code{al}
9392 @item @code{c}
9393 @tab Require a constant operand and print the constant expression with no punctuation.
9394 @tab @code{%c1}
9395 @tab @code{2}
9396 @tab @code{2}
9397 @item @code{E}
9398 @tab Print the address in Double Integer (DImode) mode (8 bytes) when the target is 64-bit.
9399 Otherwise mode is unspecified (VOIDmode).
9400 @tab @code{%E1}
9401 @tab @code{%(rax)}
9402 @tab @code{[rax]}
9403 @item @code{h}
9404 @tab Print the QImode name for a ``high'' register.
9405 @tab @code{%h0}
9406 @tab @code{%ah}
9407 @tab @code{ah}
9408 @item @code{H}
9409 @tab Add 8 bytes to an offsettable memory reference. Useful when accessing the
9410 high 8 bytes of SSE values. For a memref in (%rax), it generates
9411 @tab @code{%H0}
9412 @tab @code{8(%rax)}
9413 @tab @code{8[rax]}
9414 @item @code{k}
9415 @tab Print the SImode name of the register.
9416 @tab @code{%k0}
9417 @tab @code{%eax}
9418 @tab @code{eax}
9419 @item @code{l}
9420 @tab Print the label name with no punctuation.
9421 @tab @code{%l3}
9422 @tab @code{.L3}
9423 @tab @code{.L3}
9424 @item @code{p}
9425 @tab Print raw symbol name (without syntax-specific prefixes).
9426 @tab @code{%p2}
9427 @tab @code{42}
9428 @tab @code{42}
9429 @item @code{P}
9430 @tab If used for a function, print the PLT suffix and generate PIC code.
9431 For example, emit @code{foo@@PLT} instead of 'foo' for the function
9432 foo(). If used for a constant, drop all syntax-specific prefixes and
9433 issue the bare constant. See @code{p} above.
9434 @item @code{q}
9435 @tab Print the DImode name of the register.
9436 @tab @code{%q0}
9437 @tab @code{%rax}
9438 @tab @code{rax}
9439 @item @code{w}
9440 @tab Print the HImode name of the register.
9441 @tab @code{%w0}
9442 @tab @code{%ax}
9443 @tab @code{ax}
9154 @item @code{z} 9444 @item @code{z}
9155 @tab Print the opcode suffix for the size of the current integer operand (one of @code{b}/@code{w}/@code{l}/@code{q}). 9445 @tab Print the opcode suffix for the size of the current integer operand (one of @code{b}/@code{w}/@code{l}/@code{q}).
9156 @tab @code{%z0} 9446 @tab @code{%z0}
9157 @tab @code{l} 9447 @tab @code{l}
9158 @tab 9448 @tab
9159 @item @code{b}
9160 @tab Print the QImode name of the register.
9161 @tab @code{%b0}
9162 @tab @code{%al}
9163 @tab @code{al}
9164 @item @code{h}
9165 @tab Print the QImode name for a ``high'' register.
9166 @tab @code{%h0}
9167 @tab @code{%ah}
9168 @tab @code{ah}
9169 @item @code{w}
9170 @tab Print the HImode name of the register.
9171 @tab @code{%w0}
9172 @tab @code{%ax}
9173 @tab @code{ax}
9174 @item @code{k}
9175 @tab Print the SImode name of the register.
9176 @tab @code{%k0}
9177 @tab @code{%eax}
9178 @tab @code{eax}
9179 @item @code{q}
9180 @tab Print the DImode name of the register.
9181 @tab @code{%q0}
9182 @tab @code{%rax}
9183 @tab @code{rax}
9184 @item @code{l}
9185 @tab Print the label name with no punctuation.
9186 @tab @code{%l2}
9187 @tab @code{.L2}
9188 @tab @code{.L2}
9189 @item @code{c}
9190 @tab Require a constant operand and print the constant expression with no punctuation.
9191 @tab @code{%c1}
9192 @tab @code{2}
9193 @tab @code{2}
9194 @end multitable 9449 @end multitable
9450
9451 @code{V} is a special modifier which prints the name of the full integer
9452 register without @code{%}.
9195 9453
9196 @anchor{x86floatingpointasmoperands} 9454 @anchor{x86floatingpointasmoperands}
9197 @subsubsection x86 Floating-Point @code{asm} Operands 9455 @subsubsection x86 Floating-Point @code{asm} Operands
9198 9456
9199 On x86 targets, there are several rules on the usage of stack-like registers 9457 On x86 targets, there are several rules on the usage of stack-like registers
9384 a global variable the declaration appears outside a function. The 9642 a global variable the declaration appears outside a function. The
9385 @code{register} keyword is required, and cannot be combined with 9643 @code{register} keyword is required, and cannot be combined with
9386 @code{static}. The register name must be a valid register name for the 9644 @code{static}. The register name must be a valid register name for the
9387 target platform. 9645 target platform.
9388 9646
9647 Do not use type qualifiers such as @code{const} and @code{volatile}, as
9648 the outcome may be contrary to expectations. In particular, using the
9649 @code{volatile} qualifier does not fully prevent the compiler from
9650 optimizing accesses to the register.
9651
9389 Registers are a scarce resource on most systems and allowing the 9652 Registers are a scarce resource on most systems and allowing the
9390 compiler to manage their usage usually results in the best code. However, 9653 compiler to manage their usage usually results in the best code. However,
9391 under special circumstances it can make sense to reserve some globally. 9654 under special circumstances it can make sense to reserve some globally.
9392 For example this may be useful in programs such as programming language 9655 For example this may be useful in programs such as programming language
9393 interpreters that have a couple of global variables that are accessed 9656 interpreters that have a couple of global variables that are accessed
9395 9658
9396 After defining a global register variable, for the current compilation 9659 After defining a global register variable, for the current compilation
9397 unit: 9660 unit:
9398 9661
9399 @itemize @bullet 9662 @itemize @bullet
9400 @item The register is reserved entirely for this use, and will not be 9663 @item If the register is a call-saved register, call ABI is affected:
9401 allocated for any other purpose. 9664 the register will not be restored in function epilogue sequences after
9402 @item The register is not saved and restored by any functions. 9665 the variable has been assigned. Therefore, functions cannot safely
9403 @item Stores into this register are never deleted even if they appear to be 9666 return to callers that assume standard ABI.
9404 dead, but references may be deleted, moved or simplified. 9667 @item Conversely, if the register is a call-clobbered register, making
9668 calls to functions that use standard ABI may lose contents of the variable.
9669 Such calls may be created by the compiler even if none are evident in
9670 the original program, for example when libgcc functions are used to
9671 make up for unavailable instructions.
9672 @item Accesses to the variable may be optimized as usual and the register
9673 remains available for allocation and use in any computations, provided that
9674 observable values of the variable are not affected.
9675 @item If the variable is referenced in inline assembly, the type of access
9676 must be provided to the compiler via constraints (@pxref{Constraints}).
9677 Accesses from basic asms are not supported.
9405 @end itemize 9678 @end itemize
9406 9679
9407 Note that these points @emph{only} apply to code that is compiled with the 9680 Note that these points @emph{only} apply to code that is compiled with the
9408 definition. The behavior of code that is merely linked in (for example 9681 definition. The behavior of code that is merely linked in (for example
9409 code from libraries) is not affected. 9682 code from libraries) is not affected.
9441 the comparison function unless the @code{qsort} function itself is rebuilt. 9714 the comparison function unless the @code{qsort} function itself is rebuilt.
9442 9715
9443 Similarly, it is not safe to access the global register variables from signal 9716 Similarly, it is not safe to access the global register variables from signal
9444 handlers or from more than one thread of control. Unless you recompile 9717 handlers or from more than one thread of control. Unless you recompile
9445 them specially for the task at hand, the system library routines may 9718 them specially for the task at hand, the system library routines may
9446 temporarily use the register for other things. 9719 temporarily use the register for other things. Furthermore, since the register
9720 is not reserved exclusively for the variable, accessing it from handlers of
9721 asynchronous signals may observe unrelated temporary values residing in the
9722 register.
9447 9723
9448 @cindex register variable after @code{longjmp} 9724 @cindex register variable after @code{longjmp}
9449 @cindex global register after @code{longjmp} 9725 @cindex global register after @code{longjmp}
9450 @cindex value after @code{longjmp} 9726 @cindex value after @code{longjmp}
9451 @findex longjmp 9727 @findex longjmp
9456 register variables. To be portable, the function that called @code{setjmp} 9732 register variables. To be portable, the function that called @code{setjmp}
9457 should make other arrangements to save the values of the global register 9733 should make other arrangements to save the values of the global register
9458 variables, and to restore them in a @code{longjmp}. This way, the same 9734 variables, and to restore them in a @code{longjmp}. This way, the same
9459 thing happens regardless of what @code{longjmp} does. 9735 thing happens regardless of what @code{longjmp} does.
9460 9736
9461 Eventually there may be a way of asking the compiler to choose a register
9462 automatically, but first we need to figure out how it should choose and
9463 how to enable you to guide the choice. No solution is evident.
9464
9465 @node Local Register Variables 9737 @node Local Register Variables
9466 @subsubsection Specifying Registers for Local Variables 9738 @subsubsection Specifying Registers for Local Variables
9467 @anchor{Local Reg Vars} 9739 @anchor{Local Reg Vars}
9468 @cindex local variables, specifying registers 9740 @cindex local variables, specifying registers
9469 @cindex specifying registers for local variables 9741 @cindex specifying registers for local variables
9481 that this is the same syntax used for defining global register variables, 9753 that this is the same syntax used for defining global register variables,
9482 but for a local variable the declaration appears within a function. The 9754 but for a local variable the declaration appears within a function. The
9483 @code{register} keyword is required, and cannot be combined with 9755 @code{register} keyword is required, and cannot be combined with
9484 @code{static}. The register name must be a valid register name for the 9756 @code{static}. The register name must be a valid register name for the
9485 target platform. 9757 target platform.
9758
9759 Do not use type qualifiers such as @code{const} and @code{volatile}, as
9760 the outcome may be contrary to expectations. In particular, when the
9761 @code{const} qualifier is used, the compiler may substitute the
9762 variable with its initializer in @code{asm} statements, which may cause
9763 the corresponding operand to appear in a different register.
9486 9764
9487 As with global register variables, it is recommended that you choose 9765 As with global register variables, it is recommended that you choose
9488 a register that is normally saved and restored by function calls on your 9766 a register that is normally saved and restored by function calls on your
9489 machine, so that calls to library routines will not clobber it. 9767 machine, so that calls to library routines will not clobber it.
9490 9768
10511 10789
10512 The built-in functions promote the first two operands into infinite precision signed type 10790 The built-in functions promote the first two operands into infinite precision signed type
10513 and perform addition on those promoted operands. The result is then 10791 and perform addition on those promoted operands. The result is then
10514 cast to the type of the third argument. If the cast result is equal to the infinite 10792 cast to the type of the third argument. If the cast result is equal to the infinite
10515 precision result, the built-in functions return false, otherwise they return true. 10793 precision result, the built-in functions return false, otherwise they return true.
10516 The value of the third argument is ignored, just the side-effects in the third argument 10794 The value of the third argument is ignored, just the side effects in the third argument
10517 are evaluated, and no integral argument promotions are performed on the last argument. 10795 are evaluated, and no integral argument promotions are performed on the last argument.
10518 If the third argument is a bit-field, the type used for the result cast has the 10796 If the third argument is a bit-field, the type used for the result cast has the
10519 precision and signedness of the given bit-field, rather than precision and signedness 10797 precision and signedness of the given bit-field, rather than precision and signedness
10520 of the underlying type. 10798 of the underlying type.
10521 10799
10607 10885
10608 @deftypefn {Built-in Function} {size_t} __builtin_object_size (const void * @var{ptr}, int @var{type}) 10886 @deftypefn {Built-in Function} {size_t} __builtin_object_size (const void * @var{ptr}, int @var{type})
10609 is a built-in construct that returns a constant number of bytes from 10887 is a built-in construct that returns a constant number of bytes from
10610 @var{ptr} to the end of the object @var{ptr} pointer points to 10888 @var{ptr} to the end of the object @var{ptr} pointer points to
10611 (if known at compile time). @code{__builtin_object_size} never evaluates 10889 (if known at compile time). @code{__builtin_object_size} never evaluates
10612 its arguments for side-effects. If there are any side-effects in them, it 10890 its arguments for side effects. If there are any side effects in them, it
10613 returns @code{(size_t) -1} for @var{type} 0 or 1 and @code{(size_t) 0} 10891 returns @code{(size_t) -1} for @var{type} 0 or 1 and @code{(size_t) 0}
10614 for @var{type} 2 or 3. If there are multiple objects @var{ptr} can 10892 for @var{type} 2 or 3. If there are multiple objects @var{ptr} can
10615 point to and all of them are known at compile time, the returned number 10893 point to and all of them are known at compile time, the returned number
10616 is the maximum of remaining byte counts in those objects if @var{type} & 2 is 10894 is the maximum of remaining byte counts in those objects if @var{type} & 2 is
10617 0 and minimum if nonzero. If it is not possible to determine which objects 10895 0 and minimum if nonzero. If it is not possible to determine which objects
10712 These have just one additional argument, @var{flag}, right before 10990 These have just one additional argument, @var{flag}, right before
10713 format string @var{fmt}. If the compiler is able to optimize them to 10991 format string @var{fmt}. If the compiler is able to optimize them to
10714 @code{fputc} etc.@: functions, it does, otherwise the checking function 10992 @code{fputc} etc.@: functions, it does, otherwise the checking function
10715 is called and the @var{flag} argument passed to it. 10993 is called and the @var{flag} argument passed to it.
10716 10994
10717 @node Pointer Bounds Checker builtins
10718 @section Pointer Bounds Checker Built-in Functions
10719 @cindex Pointer Bounds Checker builtins
10720 @findex __builtin___bnd_set_ptr_bounds
10721 @findex __builtin___bnd_narrow_ptr_bounds
10722 @findex __builtin___bnd_copy_ptr_bounds
10723 @findex __builtin___bnd_init_ptr_bounds
10724 @findex __builtin___bnd_null_ptr_bounds
10725 @findex __builtin___bnd_store_ptr_bounds
10726 @findex __builtin___bnd_chk_ptr_lbounds
10727 @findex __builtin___bnd_chk_ptr_ubounds
10728 @findex __builtin___bnd_chk_ptr_bounds
10729 @findex __builtin___bnd_get_ptr_lbound
10730 @findex __builtin___bnd_get_ptr_ubound
10731
10732 GCC provides a set of built-in functions to control Pointer Bounds Checker
10733 instrumentation. Note that all Pointer Bounds Checker builtins can be used
10734 even if you compile with Pointer Bounds Checker off
10735 (@option{-fno-check-pointer-bounds}).
10736 The behavior may differ in such case as documented below.
10737
10738 @deftypefn {Built-in Function} {void *} __builtin___bnd_set_ptr_bounds (const void *@var{q}, size_t @var{size})
10739
10740 This built-in function returns a new pointer with the value of @var{q}, and
10741 associate it with the bounds [@var{q}, @var{q}+@var{size}-1]. With Pointer
10742 Bounds Checker off, the built-in function just returns the first argument.
10743
10744 @smallexample
10745 extern void *__wrap_malloc (size_t n)
10746 @{
10747 void *p = (void *)__real_malloc (n);
10748 if (!p) return __builtin___bnd_null_ptr_bounds (p);
10749 return __builtin___bnd_set_ptr_bounds (p, n);
10750 @}
10751 @end smallexample
10752
10753 @end deftypefn
10754
10755 @deftypefn {Built-in Function} {void *} __builtin___bnd_narrow_ptr_bounds (const void *@var{p}, const void *@var{q}, size_t @var{size})
10756
10757 This built-in function returns a new pointer with the value of @var{p}
10758 and associates it with the narrowed bounds formed by the intersection
10759 of bounds associated with @var{q} and the bounds
10760 [@var{p}, @var{p} + @var{size} - 1].
10761 With Pointer Bounds Checker off, the built-in function just returns the first
10762 argument.
10763
10764 @smallexample
10765 void init_objects (object *objs, size_t size)
10766 @{
10767 size_t i;
10768 /* Initialize objects one-by-one passing pointers with bounds of
10769 an object, not the full array of objects. */
10770 for (i = 0; i < size; i++)
10771 init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
10772 sizeof(object)));
10773 @}
10774 @end smallexample
10775
10776 @end deftypefn
10777
10778 @deftypefn {Built-in Function} {void *} __builtin___bnd_copy_ptr_bounds (const void *@var{q}, const void *@var{r})
10779
10780 This built-in function returns a new pointer with the value of @var{q},
10781 and associates it with the bounds already associated with pointer @var{r}.
10782 With Pointer Bounds Checker off, the built-in function just returns the first
10783 argument.
10784
10785 @smallexample
10786 /* Here is a way to get pointer to object's field but
10787 still with the full object's bounds. */
10788 int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field,
10789 objptr);
10790 @end smallexample
10791
10792 @end deftypefn
10793
10794 @deftypefn {Built-in Function} {void *} __builtin___bnd_init_ptr_bounds (const void *@var{q})
10795
10796 This built-in function returns a new pointer with the value of @var{q}, and
10797 associates it with INIT (allowing full memory access) bounds. With Pointer
10798 Bounds Checker off, the built-in function just returns the first argument.
10799
10800 @end deftypefn
10801
10802 @deftypefn {Built-in Function} {void *} __builtin___bnd_null_ptr_bounds (const void *@var{q})
10803
10804 This built-in function returns a new pointer with the value of @var{q}, and
10805 associates it with NULL (allowing no memory access) bounds. With Pointer
10806 Bounds Checker off, the built-in function just returns the first argument.
10807
10808 @end deftypefn
10809
10810 @deftypefn {Built-in Function} void __builtin___bnd_store_ptr_bounds (const void **@var{ptr_addr}, const void *@var{ptr_val})
10811
10812 This built-in function stores the bounds associated with pointer @var{ptr_val}
10813 and location @var{ptr_addr} into Bounds Table. This can be useful to propagate
10814 bounds from legacy code without touching the associated pointer's memory when
10815 pointers are copied as integers. With Pointer Bounds Checker off, the built-in
10816 function call is ignored.
10817
10818 @end deftypefn
10819
10820 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_lbounds (const void *@var{q})
10821
10822 This built-in function checks if the pointer @var{q} is within the lower
10823 bound of its associated bounds. With Pointer Bounds Checker off, the built-in
10824 function call is ignored.
10825
10826 @smallexample
10827 extern void *__wrap_memset (void *dst, int c, size_t len)
10828 @{
10829 if (len > 0)
10830 @{
10831 __builtin___bnd_chk_ptr_lbounds (dst);
10832 __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
10833 __real_memset (dst, c, len);
10834 @}
10835 return dst;
10836 @}
10837 @end smallexample
10838
10839 @end deftypefn
10840
10841 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_ubounds (const void *@var{q})
10842
10843 This built-in function checks if the pointer @var{q} is within the upper
10844 bound of its associated bounds. With Pointer Bounds Checker off, the built-in
10845 function call is ignored.
10846
10847 @end deftypefn
10848
10849 @deftypefn {Built-in Function} void __builtin___bnd_chk_ptr_bounds (const void *@var{q}, size_t @var{size})
10850
10851 This built-in function checks if [@var{q}, @var{q} + @var{size} - 1] is within
10852 the lower and upper bounds associated with @var{q}. With Pointer Bounds Checker
10853 off, the built-in function call is ignored.
10854
10855 @smallexample
10856 extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
10857 @{
10858 if (n > 0)
10859 @{
10860 __bnd_chk_ptr_bounds (dst, n);
10861 __bnd_chk_ptr_bounds (src, n);
10862 __real_memcpy (dst, src, n);
10863 @}
10864 return dst;
10865 @}
10866 @end smallexample
10867
10868 @end deftypefn
10869
10870 @deftypefn {Built-in Function} {const void *} __builtin___bnd_get_ptr_lbound (const void *@var{q})
10871
10872 This built-in function returns the lower bound associated
10873 with the pointer @var{q}, as a pointer value.
10874 This is useful for debugging using @code{printf}.
10875 With Pointer Bounds Checker off, the built-in function returns 0.
10876
10877 @smallexample
10878 void *lb = __builtin___bnd_get_ptr_lbound (q);
10879 void *ub = __builtin___bnd_get_ptr_ubound (q);
10880 printf ("q = %p lb(q) = %p ub(q) = %p", q, lb, ub);
10881 @end smallexample
10882
10883 @end deftypefn
10884
10885 @deftypefn {Built-in Function} {const void *} __builtin___bnd_get_ptr_ubound (const void *@var{q})
10886
10887 This built-in function returns the upper bound (which is a pointer) associated
10888 with the pointer @var{q}. With Pointer Bounds Checker off,
10889 the built-in function returns -1.
10890
10891 @end deftypefn
10892
10893 @node Cilk Plus Builtins
10894 @section Cilk Plus C/C++ Language Extension Built-in Functions
10895
10896 GCC provides support for the following built-in reduction functions if Cilk Plus
10897 is enabled. Cilk Plus can be enabled using the @option{-fcilkplus} flag.
10898
10899 @itemize @bullet
10900 @item @code{__sec_implicit_index}
10901 @item @code{__sec_reduce}
10902 @item @code{__sec_reduce_add}
10903 @item @code{__sec_reduce_all_nonzero}
10904 @item @code{__sec_reduce_all_zero}
10905 @item @code{__sec_reduce_any_nonzero}
10906 @item @code{__sec_reduce_any_zero}
10907 @item @code{__sec_reduce_max}
10908 @item @code{__sec_reduce_min}
10909 @item @code{__sec_reduce_max_ind}
10910 @item @code{__sec_reduce_min_ind}
10911 @item @code{__sec_reduce_mul}
10912 @item @code{__sec_reduce_mutating}
10913 @end itemize
10914
10915 Further details and examples about these built-in functions are described
10916 in the Cilk Plus language manual which can be found at
10917 @uref{https://www.cilkplus.org}.
10918
10919 @node Other Builtins 10995 @node Other Builtins
10920 @section Other Built-in Functions Provided by GCC 10996 @section Other Built-in Functions Provided by GCC
10921 @cindex built-in functions 10997 @cindex built-in functions
10922 @findex __builtin_alloca 10998 @findex __builtin_alloca
10923 @findex __builtin_alloca_with_align 10999 @findex __builtin_alloca_with_align
10924 @findex __builtin_alloca_with_align_and_max 11000 @findex __builtin_alloca_with_align_and_max
10925 @findex __builtin_call_with_static_chain 11001 @findex __builtin_call_with_static_chain
11002 @findex __builtin_extend_pointer
10926 @findex __builtin_fpclassify 11003 @findex __builtin_fpclassify
10927 @findex __builtin_isfinite 11004 @findex __builtin_isfinite
10928 @findex __builtin_isnormal 11005 @findex __builtin_isnormal
10929 @findex __builtin_isgreater 11006 @findex __builtin_isgreater
10930 @findex __builtin_isgreaterequal 11007 @findex __builtin_isgreaterequal
10934 @findex __builtin_islessgreater 11011 @findex __builtin_islessgreater
10935 @findex __builtin_isunordered 11012 @findex __builtin_isunordered
10936 @findex __builtin_powi 11013 @findex __builtin_powi
10937 @findex __builtin_powif 11014 @findex __builtin_powif
10938 @findex __builtin_powil 11015 @findex __builtin_powil
11016 @findex __builtin_speculation_safe_value
10939 @findex _Exit 11017 @findex _Exit
10940 @findex _exit 11018 @findex _exit
10941 @findex abort 11019 @findex abort
10942 @findex abs 11020 @findex abs
10943 @findex acos 11021 @findex acos
11279 @findex strncasecmp 11357 @findex strncasecmp
11280 @findex strncat 11358 @findex strncat
11281 @findex strncmp 11359 @findex strncmp
11282 @findex strncpy 11360 @findex strncpy
11283 @findex strndup 11361 @findex strndup
11362 @findex strnlen
11284 @findex strpbrk 11363 @findex strpbrk
11285 @findex strrchr 11364 @findex strrchr
11286 @findex strspn 11365 @findex strspn
11287 @findex strstr 11366 @findex strstr
11288 @findex tan 11367 @findex tan
11362 @code{signbit}, @code{signbitf}, @code{signbitl}, @code{signbitd32}, 11441 @code{signbit}, @code{signbitf}, @code{signbitl}, @code{signbitd32},
11363 @code{signbitd64}, @code{signbitd128}, @code{significandf}, 11442 @code{signbitd64}, @code{signbitd128}, @code{significandf},
11364 @code{significandl}, @code{significand}, @code{sincosf}, 11443 @code{significandl}, @code{significand}, @code{sincosf},
11365 @code{sincosl}, @code{sincos}, @code{stpcpy}, @code{stpncpy}, 11444 @code{sincosl}, @code{sincos}, @code{stpcpy}, @code{stpncpy},
11366 @code{strcasecmp}, @code{strdup}, @code{strfmon}, @code{strncasecmp}, 11445 @code{strcasecmp}, @code{strdup}, @code{strfmon}, @code{strncasecmp},
11367 @code{strndup}, @code{toascii}, @code{y0f}, @code{y0l}, @code{y0}, 11446 @code{strndup}, @code{strnlen}, @code{toascii}, @code{y0f}, @code{y0l},
11368 @code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and 11447 @code{y0}, @code{y1f}, @code{y1l}, @code{y1}, @code{ynf}, @code{ynl} and
11369 @code{yn} 11448 @code{yn}
11370 may be handled as built-in functions. 11449 may be handled as built-in functions.
11371 All these functions have corresponding versions 11450 All these functions have corresponding versions
11372 prefixed with @code{__builtin_}, which may be used even in strict C90 11451 prefixed with @code{__builtin_}, which may be used even in strict C90
11373 mode. 11452 mode.
11577 expression, it has no effect on code generation and no attempt is made to 11656 expression, it has no effect on code generation and no attempt is made to
11578 check its compatibility with @var{size}. 11657 check its compatibility with @var{size}.
11579 11658
11580 @end deftypefn 11659 @end deftypefn
11581 11660
11661 @deftypefn {Built-in Function} @var{type} __builtin_speculation_safe_value (@var{type} val, @var{type} failval)
11662
11663 This built-in function can be used to help mitigate against unsafe
11664 speculative execution. @var{type} may be any integral type or any
11665 pointer type.
11666
11667 @enumerate
11668 @item
11669 If the CPU is not speculatively executing the code, then @var{val}
11670 is returned.
11671 @item
11672 If the CPU is executing speculatively then either:
11673 @itemize
11674 @item
11675 The function may cause execution to pause until it is known that the
11676 code is no-longer being executed speculatively (in which case
11677 @var{val} can be returned, as above); or
11678 @item
11679 The function may use target-dependent speculation tracking state to cause
11680 @var{failval} to be returned when it is known that speculative
11681 execution has incorrectly predicted a conditional branch operation.
11682 @end itemize
11683 @end enumerate
11684
11685 The second argument, @var{failval}, is optional and defaults to zero
11686 if omitted.
11687
11688 GCC defines the preprocessor macro
11689 @code{__HAVE_BUILTIN_SPECULATION_SAFE_VALUE} for targets that have been
11690 updated to support this builtin.
11691
11692 The built-in function can be used where a variable appears to be used in a
11693 safe way, but the CPU, due to speculative execution may temporarily ignore
11694 the bounds checks. Consider, for example, the following function:
11695
11696 @smallexample
11697 int array[500];
11698 int f (unsigned untrusted_index)
11699 @{
11700 if (untrusted_index < 500)
11701 return array[untrusted_index];
11702 return 0;
11703 @}
11704 @end smallexample
11705
11706 If the function is called repeatedly with @code{untrusted_index} less
11707 than the limit of 500, then a branch predictor will learn that the
11708 block of code that returns a value stored in @code{array} will be
11709 executed. If the function is subsequently called with an
11710 out-of-range value it will still try to execute that block of code
11711 first until the CPU determines that the prediction was incorrect
11712 (the CPU will unwind any incorrect operations at that point).
11713 However, depending on how the result of the function is used, it might be
11714 possible to leave traces in the cache that can reveal what was stored
11715 at the out-of-bounds location. The built-in function can be used to
11716 provide some protection against leaking data in this way by changing
11717 the code to:
11718
11719 @smallexample
11720 int array[500];
11721 int f (unsigned untrusted_index)
11722 @{
11723 if (untrusted_index < 500)
11724 return array[__builtin_speculation_safe_value (untrusted_index)];
11725 return 0;
11726 @}
11727 @end smallexample
11728
11729 The built-in function will either cause execution to stall until the
11730 conditional branch has been fully resolved, or it may permit
11731 speculative execution to continue, but using 0 instead of
11732 @code{untrusted_value} if that exceeds the limit.
11733
11734 If accessing any memory location is potentially unsafe when speculative
11735 execution is incorrect, then the code can be rewritten as
11736
11737 @smallexample
11738 int array[500];
11739 int f (unsigned untrusted_index)
11740 @{
11741 if (untrusted_index < 500)
11742 return *__builtin_speculation_safe_value (&array[untrusted_index], NULL);
11743 return 0;
11744 @}
11745 @end smallexample
11746
11747 which will cause a @code{NULL} pointer to be used for the unsafe case.
11748
11749 @end deftypefn
11750
11582 @deftypefn {Built-in Function} int __builtin_types_compatible_p (@var{type1}, @var{type2}) 11751 @deftypefn {Built-in Function} int __builtin_types_compatible_p (@var{type1}, @var{type2})
11583 11752
11584 You can use the built-in function @code{__builtin_types_compatible_p} to 11753 You can use the built-in function @code{__builtin_types_compatible_p} to
11585 determine whether two types are the same. 11754 determine whether two types are the same.
11586 11755
11651 11820
11652 This built-in function is analogous to the @samp{? :} operator in C, 11821 This built-in function is analogous to the @samp{? :} operator in C,
11653 except that the expression returned has its type unaltered by promotion 11822 except that the expression returned has its type unaltered by promotion
11654 rules. Also, the built-in function does not evaluate the expression 11823 rules. Also, the built-in function does not evaluate the expression
11655 that is not chosen. For example, if @var{const_exp} evaluates to true, 11824 that is not chosen. For example, if @var{const_exp} evaluates to true,
11656 @var{exp2} is not evaluated even if it has side-effects. 11825 @var{exp2} is not evaluated even if it has side effects.
11657 11826
11658 This built-in function can return an lvalue if the chosen argument is an 11827 This built-in function can return an lvalue if the chosen argument is an
11659 lvalue. 11828 lvalue.
11660 11829
11661 If @var{exp1} is returned, the return type is the same as @var{exp1}'s 11830 If @var{exp1} is returned, the return type is the same as @var{exp1}'s
11682 @var{const_exp}) may still generate syntax errors. This may change in 11851 @var{const_exp}) may still generate syntax errors. This may change in
11683 future revisions. 11852 future revisions.
11684 11853
11685 @end deftypefn 11854 @end deftypefn
11686 11855
11856 @deftypefn {Built-in Function} @var{type} __builtin_tgmath (@var{functions}, @var{arguments})
11857
11858 The built-in function @code{__builtin_tgmath}, available only for C
11859 and Objective-C, calls a function determined according to the rules of
11860 @code{<tgmath.h>} macros. It is intended to be used in
11861 implementations of that header, so that expansions of macros from that
11862 header only expand each of their arguments once, to avoid problems
11863 when calls to such macros are nested inside the arguments of other
11864 calls to such macros; in addition, it results in better diagnostics
11865 for invalid calls to @code{<tgmath.h>} macros than implementations
11866 using other GNU C language features. For example, the @code{pow}
11867 type-generic macro might be defined as:
11868
11869 @smallexample
11870 #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
11871 cpowf, cpow, cpowl, a, b)
11872 @end smallexample
11873
11874 The arguments to @code{__builtin_tgmath} are at least two pointers to
11875 functions, followed by the arguments to the type-generic macro (which
11876 will be passed as arguments to the selected function). All the
11877 pointers to functions must be pointers to prototyped functions, none
11878 of which may have variable arguments, and all of which must have the
11879 same number of parameters; the number of parameters of the first
11880 function determines how many arguments to @code{__builtin_tgmath} are
11881 interpreted as function pointers, and how many as the arguments to the
11882 called function.
11883
11884 The types of the specified functions must all be different, but
11885 related to each other in the same way as a set of functions that may
11886 be selected between by a macro in @code{<tgmath.h>}. This means that
11887 the functions are parameterized by a floating-point type @var{t},
11888 different for each such function. The function return types may all
11889 be the same type, or they may be @var{t} for each function, or they
11890 may be the real type corresponding to @var{t} for each function (if
11891 some of the types @var{t} are complex). Likewise, for each parameter
11892 position, the type of the parameter in that position may always be the
11893 same type, or may be @var{t} for each function (this case must apply
11894 for at least one parameter position), or may be the real type
11895 corresponding to @var{t} for each function.
11896
11897 The standard rules for @code{<tgmath.h>} macros are used to find a
11898 common type @var{u} from the types of the arguments for parameters
11899 whose types vary between the functions; complex integer types (a GNU
11900 extension) are treated like @code{_Complex double} for this purpose
11901 (or @code{_Complex _Float64} if all the function return types are the
11902 same @code{_Float@var{n}} or @code{_Float@var{n}x} type).
11903 If the function return types vary, or are all the same integer type,
11904 the function called is the one for which @var{t} is @var{u}, and it is
11905 an error if there is no such function. If the function return types
11906 are all the same floating-point type, the type-generic macro is taken
11907 to be one of those from TS 18661 that rounds the result to a narrower
11908 type; if there is a function for which @var{t} is @var{u}, it is
11909 called, and otherwise the first function, if any, for which @var{t}
11910 has at least the range and precision of @var{u} is called, and it is
11911 an error if there is no such function.
11912
11913 @end deftypefn
11914
11687 @deftypefn {Built-in Function} @var{type} __builtin_complex (@var{real}, @var{imag}) 11915 @deftypefn {Built-in Function} @var{type} __builtin_complex (@var{real}, @var{imag})
11688 11916
11689 The built-in function @code{__builtin_complex} is provided for use in 11917 The built-in function @code{__builtin_complex} is provided for use in
11690 implementing the ISO C11 macros @code{CMPLXF}, @code{CMPLX} and 11918 implementing the ISO C11 macros @code{CMPLXF}, @code{CMPLX} and
11691 @code{CMPLXL}. @var{real} and @var{imag} must have the same type, a 11919 @code{CMPLXL}. @var{real} and @var{imag} must have the same type, a
11775 foo (*ptr); 12003 foo (*ptr);
11776 @end smallexample 12004 @end smallexample
11777 12005
11778 @noindent 12006 @noindent
11779 when testing pointer or floating-point values. 12007 when testing pointer or floating-point values.
12008 @end deftypefn
12009
12010 @deftypefn {Built-in Function} long __builtin_expect_with_probability
12011 (long @var{exp}, long @var{c}, long @var{probability})
12012
12013 The built-in has same semantics as @code{__builtin_expect_with_probability},
12014 but user can provide expected probability (in percent) for value of @var{exp}.
12015 Last argument @var{probability} is of float type and valid values
12016 are in inclusive range 0.0f and 1.0f.
11780 @end deftypefn 12017 @end deftypefn
11781 12018
11782 @deftypefn {Built-in Function} void __builtin_trap (void) 12019 @deftypefn {Built-in Function} void __builtin_trap (void)
11783 This function causes the program to exit abnormally. GCC implements 12020 This function causes the program to exit abnormally. GCC implements
11784 this function by using a target-dependent mechanism (such as 12021 this function by using a target-dependent mechanism (such as
12239 @end deftypefn 12476 @end deftypefn
12240 12477
12241 @deftypefn {Built-in Function} uint64_t __builtin_bswap64 (uint64_t x) 12478 @deftypefn {Built-in Function} uint64_t __builtin_bswap64 (uint64_t x)
12242 Similar to @code{__builtin_bswap32}, except the argument and return types 12479 Similar to @code{__builtin_bswap32}, except the argument and return types
12243 are 64 bit. 12480 are 64 bit.
12481 @end deftypefn
12482
12483 @deftypefn {Built-in Function} Pmode __builtin_extend_pointer (void * x)
12484 On targets where the user visible pointer size is smaller than the size
12485 of an actual hardware address this function returns the extended user
12486 pointer. Targets where this is true included ILP32 mode on x86_64 or
12487 Aarch64. This function is mainly useful when writing inline assembly
12488 code.
12489 @end deftypefn
12490
12491 @deftypefn {Built-in Function} int __builtin_goacc_parlevel_id (int x)
12492 Returns the openacc gang, worker or vector id depending on whether @var{x} is
12493 0, 1 or 2.
12494 @end deftypefn
12495
12496 @deftypefn {Built-in Function} int __builtin_goacc_parlevel_size (int x)
12497 Returns the openacc gang, worker or vector size depending on whether @var{x} is
12498 0, 1 or 2.
12244 @end deftypefn 12499 @end deftypefn
12245 12500
12246 @node Target Builtins 12501 @node Target Builtins
12247 @section Built-in Functions Specific to Particular Target Machines 12502 @section Built-in Functions Specific to Particular Target Machines
12248 12503
12269 * MIPS SIMD Architecture (MSA) Support:: 12524 * MIPS SIMD Architecture (MSA) Support::
12270 * Other MIPS Built-in Functions:: 12525 * Other MIPS Built-in Functions::
12271 * MSP430 Built-in Functions:: 12526 * MSP430 Built-in Functions::
12272 * NDS32 Built-in Functions:: 12527 * NDS32 Built-in Functions::
12273 * picoChip Built-in Functions:: 12528 * picoChip Built-in Functions::
12274 * PowerPC Built-in Functions:: 12529 * Basic PowerPC Built-in Functions::
12275 * PowerPC AltiVec/VSX Built-in Functions:: 12530 * PowerPC AltiVec/VSX Built-in Functions::
12276 * PowerPC Hardware Transactional Memory Built-in Functions:: 12531 * PowerPC Hardware Transactional Memory Built-in Functions::
12277 * PowerPC Atomic Memory Operation Functions:: 12532 * PowerPC Atomic Memory Operation Functions::
12278 * RX Built-in Functions:: 12533 * RX Built-in Functions::
12279 * S/390 System z Built-in Functions:: 12534 * S/390 System z Built-in Functions::
12283 * TI C6X Built-in Functions:: 12538 * TI C6X Built-in Functions::
12284 * TILE-Gx Built-in Functions:: 12539 * TILE-Gx Built-in Functions::
12285 * TILEPro Built-in Functions:: 12540 * TILEPro Built-in Functions::
12286 * x86 Built-in Functions:: 12541 * x86 Built-in Functions::
12287 * x86 transactional memory intrinsics:: 12542 * x86 transactional memory intrinsics::
12543 * x86 control-flow protection intrinsics::
12288 @end menu 12544 @end menu
12289 12545
12290 @node AArch64 Built-in Functions 12546 @node AArch64 Built-in Functions
12291 @subsection AArch64 Built-in Functions 12547 @subsection AArch64 Built-in Functions
12292 12548
15327 Halt. The processor stops execution. This built-in is useful for 15583 Halt. The processor stops execution. This built-in is useful for
15328 implementing assertions. 15584 implementing assertions.
15329 15585
15330 @end table 15586 @end table
15331 15587
15332 @node PowerPC Built-in Functions 15588 @node Basic PowerPC Built-in Functions
15333 @subsection PowerPC Built-in Functions 15589 @subsection Basic PowerPC Built-in Functions
15334 15590
15335 The following built-in functions are always available and can be used to 15591 @menu
15336 check the PowerPC target platform type: 15592 * Basic PowerPC Built-in Functions Available on all Configurations::
15593 * Basic PowerPC Built-in Functions Available on ISA 2.05::
15594 * Basic PowerPC Built-in Functions Available on ISA 2.06::
15595 * Basic PowerPC Built-in Functions Available on ISA 2.07::
15596 * Basic PowerPC Built-in Functions Available on ISA 3.0::
15597 @end menu
15598
15599 This section describes PowerPC built-in functions that do not require
15600 the inclusion of any special header files to declare prototypes or
15601 provide macro definitions. The sections that follow describe
15602 additional PowerPC built-in functions.
15603
15604 @node Basic PowerPC Built-in Functions Available on all Configurations
15605 @subsubsection Basic PowerPC Built-in Functions Available on all Configurations
15337 15606
15338 @deftypefn {Built-in Function} void __builtin_cpu_init (void) 15607 @deftypefn {Built-in Function} void __builtin_cpu_init (void)
15339 This function is a @code{nop} on the PowerPC platform and is included solely 15608 This function is a @code{nop} on the PowerPC platform and is included solely
15340 to maintain API compatibility with the x86 builtins. 15609 to maintain API compatibility with the x86 builtins.
15341 @end deftypefn 15610 @end deftypefn
15436 CPU supports the set of compatible performance monitoring events. 15705 CPU supports the set of compatible performance monitoring events.
15437 @item booke 15706 @item booke
15438 CPU supports the Embedded ISA category. 15707 CPU supports the Embedded ISA category.
15439 @item cellbe 15708 @item cellbe
15440 CPU has a CELL broadband engine. 15709 CPU has a CELL broadband engine.
15710 @item darn
15711 CPU supports the @code{darn} (deliver a random number) instruction.
15441 @item dfp 15712 @item dfp
15442 CPU has a decimal floating point unit. 15713 CPU has a decimal floating point unit.
15443 @item dscr 15714 @item dscr
15444 CPU supports the data stream control register. 15715 CPU supports the data stream control register.
15445 @item ebb 15716 @item ebb
15452 CPU has a floating point unit. 15723 CPU has a floating point unit.
15453 @item htm 15724 @item htm
15454 CPU has hardware transaction memory instructions. 15725 CPU has hardware transaction memory instructions.
15455 @item htm-nosc 15726 @item htm-nosc
15456 Kernel aborts hardware transactions when a syscall is made. 15727 Kernel aborts hardware transactions when a syscall is made.
15728 @item htm-no-suspend
15729 CPU supports hardware transaction memory but does not support the
15730 @code{tsuspend.} instruction.
15457 @item ic_snoop 15731 @item ic_snoop
15458 CPU supports icache snooping capabilities. 15732 CPU supports icache snooping capabilities.
15459 @item ieee128 15733 @item ieee128
15460 CPU supports 128-bit IEEE binary floating point instructions. 15734 CPU supports 128-bit IEEE binary floating point instructions.
15461 @item isel 15735 @item isel
15480 CPU supports the old POWER ISA (eg, 601) 15754 CPU supports the old POWER ISA (eg, 601)
15481 @item ppc64 15755 @item ppc64
15482 CPU supports 64-bit mode execution. 15756 CPU supports 64-bit mode execution.
15483 @item ppcle 15757 @item ppcle
15484 CPU supports a little-endian mode that uses address swizzling. 15758 CPU supports a little-endian mode that uses address swizzling.
15759 @item scv
15760 Kernel supports system call vectored.
15485 @item smt 15761 @item smt
15486 CPU support simultaneous multi-threading. 15762 CPU support simultaneous multi-threading.
15487 @item spe 15763 @item spe
15488 CPU has a signal processing extension unit. 15764 CPU has a signal processing extension unit.
15489 @item tar 15765 @item tar
15511 dst = __fadd (src1, src2); // Software FP addition function. 15787 dst = __fadd (src1, src2); // Software FP addition function.
15512 @} 15788 @}
15513 @end smallexample 15789 @end smallexample
15514 @end deftypefn 15790 @end deftypefn
15515 15791
15516 These built-in functions are available for the PowerPC family of 15792 The following built-in functions are also available on all PowerPC
15517 processors: 15793 processors:
15518 @smallexample 15794 @smallexample
15519 float __builtin_recipdivf (float, float);
15520 float __builtin_rsqrtf (float);
15521 double __builtin_recipdiv (double, double);
15522 double __builtin_rsqrt (double);
15523 uint64_t __builtin_ppc_get_timebase (); 15795 uint64_t __builtin_ppc_get_timebase ();
15524 unsigned long __builtin_ppc_mftb (); 15796 unsigned long __builtin_ppc_mftb ();
15525 double __builtin_unpack_longdouble (long double, int); 15797 __ibm128 __builtin_unpack_ibm128 (__ibm128, int);
15526 long double __builtin_pack_longdouble (double, double); 15798 __ibm128 __builtin_pack_ibm128 (double, double);
15527 @end smallexample 15799 double __builtin_mffs (void);
15528 15800 void __builtin_mtfsb0 (const int);
15529 The @code{vec_rsqrt}, @code{__builtin_rsqrt}, and 15801 void __builtin_mtfsb1 (const int);
15530 @code{__builtin_rsqrtf} functions generate multiple instructions to 15802 void __builtin_set_fpscr_rn (int);
15531 implement the reciprocal sqrt functionality using reciprocal sqrt 15803 @end smallexample
15532 estimate instructions.
15533
15534 The @code{__builtin_recipdiv}, and @code{__builtin_recipdivf}
15535 functions generate multiple instructions to implement division using
15536 the reciprocal estimate instructions.
15537 15804
15538 The @code{__builtin_ppc_get_timebase} and @code{__builtin_ppc_mftb} 15805 The @code{__builtin_ppc_get_timebase} and @code{__builtin_ppc_mftb}
15539 functions generate instructions to read the Time Base Register. The 15806 functions generate instructions to read the Time Base Register. The
15540 @code{__builtin_ppc_get_timebase} function may generate multiple 15807 @code{__builtin_ppc_get_timebase} function may generate multiple
15541 instructions and always returns the 64 bits of the Time Base Register. 15808 instructions and always returns the 64 bits of the Time Base Register.
15542 The @code{__builtin_ppc_mftb} function always generates one instruction and 15809 The @code{__builtin_ppc_mftb} function always generates one instruction and
15543 returns the Time Base Register value as an unsigned long, throwing away 15810 returns the Time Base Register value as an unsigned long, throwing away
15544 the most significant word on 32-bit environments. 15811 the most significant word on 32-bit environments. The @code{__builtin_mffs}
15545 15812 return the value of the FPSCR register. Note, ISA 3.0 supports the
15546 Additional built-in functions are available for the 64-bit PowerPC 15813 @code{__builtin_mffsl()} which permits software to read the control and
15547 family of processors, for efficient use of 128-bit floating point 15814 non-sticky status bits in the FSPCR without the higher latency associated with
15548 (@code{__float128}) values. 15815 accessing the sticky status bits. The
15549 15816 @code{__builtin_mtfsb0} and @code{__builtin_mtfsb1} take the bit to change
15550 The following floating-point built-in functions are available with 15817 as an argument. The valid bit range is between 0 and 31. The builtins map to
15551 @code{-mfloat128} and Altivec support. All of them implement the 15818 the @code{mtfsb0} and @code{mtfsb1} instructions which take the argument and
15552 function that is part of the name. 15819 add 32. Hence these instructions only modify the FPSCR[32:63] bits by
15553 15820 changing the specified bit to a zero or one respectively. The
15554 @smallexample 15821 @code{__builtin_set_fpscr_rn} builtin allows changing both of the floating
15555 __float128 __builtin_fabsq (__float128) 15822 point rounding mode bits. The argument is a 2-bit value. The argument can
15556 __float128 __builtin_copysignq (__float128, __float128) 15823 either be a const int or stored in a variable. The builtin uses the ISA 3.0
15557 @end smallexample 15824 instruction @code{mffscrn} if available, otherwise it reads the FPSCR, masks
15558 15825 the current rounding mode bits out and OR's in the new value.
15559 The following built-in functions are available with @code{-mfloat128} 15826
15560 and Altivec support. 15827 @node Basic PowerPC Built-in Functions Available on ISA 2.05
15561 15828 @subsubsection Basic PowerPC Built-in Functions Available on ISA 2.05
15562 @table @code 15829
15563 @item __float128 __builtin_infq (void) 15830 The basic built-in functions described in this section are
15564 Similar to @code{__builtin_inf}, except the return type is @code{__float128}. 15831 available on the PowerPC family of processors starting with ISA 2.05
15565 @findex __builtin_infq 15832 or later. Unless specific options are explicitly disabled on the
15566 15833 command line, specifying option @option{-mcpu=power6} has the effect of
15567 @item __float128 __builtin_huge_valq (void) 15834 enabling the @option{-mpowerpc64}, @option{-mpowerpc-gpopt},
15568 Similar to @code{__builtin_huge_val}, except the return type is @code{__float128}. 15835 @option{-mpowerpc-gfxopt}, @option{-mmfcrf}, @option{-mpopcntb},
15569 @findex __builtin_huge_valq 15836 @option{-mfprnd}, @option{-mcmpb}, @option{-mhard-dfp}, and
15570 15837 @option{-mrecip-precision} options. Specify the
15571 @item __float128 __builtin_nanq (void) 15838 @option{-maltivec} and @option{-mfpgpr} options explicitly in
15572 Similar to @code{__builtin_nan}, except the return type is @code{__float128}. 15839 combination with the above options if they are desired.
15573 @findex __builtin_nanq 15840
15574 15841 The following functions require option @option{-mcmpb}.
15575 @item __float128 __builtin_nansq (void)
15576 Similar to @code{__builtin_nans}, except the return type is @code{__float128}.
15577 @findex __builtin_nansq
15578 @end table
15579
15580 The following built-in functions are available on Linux 64-bit systems
15581 that use the ISA 3.0 instruction set.
15582
15583 @table @code
15584 @item __float128 __builtin_sqrtf128 (__float128)
15585 Perform a 128-bit IEEE floating point square root operation.
15586 @findex __builtin_sqrtf128
15587
15588 @item __float128 __builtin_fmaf128 (__float128, __float128, __float128)
15589 Perform a 128-bit IEEE floating point fused multiply and add operation.
15590 @findex __builtin_fmaf128
15591
15592 @item __float128 __builtin_addf128_round_to_odd (__float128, __float128)
15593 Perform a 128-bit IEEE floating point add using round to odd as the
15594 rounding mode.
15595 @findex __builtin_addf128_round_to_odd
15596
15597 @item __float128 __builtin_subf128_round_to_odd (__float128, __float128)
15598 Perform a 128-bit IEEE floating point subtract using round to odd as
15599 the rounding mode.
15600 @findex __builtin_subf128_round_to_odd
15601
15602 @item __float128 __builtin_mulf128_round_to_odd (__float128, __float128)
15603 Perform a 128-bit IEEE floating point multiply using round to odd as
15604 the rounding mode.
15605 @findex __builtin_mulf128_round_to_odd
15606
15607 @item __float128 __builtin_divf128_round_to_odd (__float128, __float128)
15608 Perform a 128-bit IEEE floating point divide using round to odd as
15609 the rounding mode.
15610 @findex __builtin_divf128_round_to_odd
15611
15612 @item __float128 __builtin_sqrtf128_round_to_odd (__float128)
15613 Perform a 128-bit IEEE floating point square root using round to odd
15614 as the rounding mode.
15615 @findex __builtin_sqrtf128_round_to_odd
15616
15617 @item __float128 __builtin_fmaf128 (__float128, __float128, __float128)
15618 Perform a 128-bit IEEE floating point fused multiply and add operation
15619 using round to odd as the rounding mode.
15620 @findex __builtin_fmaf128_round_to_odd
15621
15622 @item double __builtin_truncf128_round_to_odd (__float128)
15623 Convert a 128-bit IEEE floating point value to @code{double} using
15624 round to odd as the rounding mode.
15625 @findex __builtin_truncf128_round_to_odd
15626 @end table
15627
15628 The following built-in functions are available for the PowerPC family
15629 of processors, starting with ISA 2.05 or later (@option{-mcpu=power6}
15630 or @option{-mcmpb}):
15631 @smallexample 15842 @smallexample
15632 unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int); 15843 unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
15633 unsigned int __builtin_cmpb (unsigned int, unsigned int); 15844 unsigned int __builtin_cmpb (unsigned int, unsigned int);
15634 @end smallexample 15845 @end smallexample
15635 15846
15641 are not equal. If either of the arguments to this built-in function 15852 are not equal. If either of the arguments to this built-in function
15642 is wider than 32 bits, the function call expands into the form that 15853 is wider than 32 bits, the function call expands into the form that
15643 expects @code{unsigned long long int} arguments 15854 expects @code{unsigned long long int} arguments
15644 which is only available on 64-bit targets. 15855 which is only available on 64-bit targets.
15645 15856
15646 The following built-in functions are available for the PowerPC family 15857 The following built-in functions are available
15647 of processors, starting with ISA 2.06 or later (@option{-mcpu=power7} 15858 when hardware decimal floating point
15648 or @option{-mpopcntd}): 15859 (@option{-mhard-dfp}) is available:
15649 @smallexample 15860 @smallexample
15650 long __builtin_bpermd (long, long); 15861 void __builtin_set_fpscr_drn(int);
15862 _Decimal64 __builtin_ddedpd (int, _Decimal64);
15863 _Decimal128 __builtin_ddedpdq (int, _Decimal128);
15864 _Decimal64 __builtin_denbcd (int, _Decimal64);
15865 _Decimal128 __builtin_denbcdq (int, _Decimal128);
15866 _Decimal64 __builtin_diex (long long, _Decimal64);
15867 _Decimal128 _builtin_diexq (long long, _Decimal128);
15868 _Decimal64 __builtin_dscli (_Decimal64, int);
15869 _Decimal128 __builtin_dscliq (_Decimal128, int);
15870 _Decimal64 __builtin_dscri (_Decimal64, int);
15871 _Decimal128 __builtin_dscriq (_Decimal128, int);
15872 long long __builtin_dxex (_Decimal64);
15873 long long __builtin_dxexq (_Decimal128);
15874 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
15875 unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
15876
15877 The @code{__builtin_set_fpscr_drn} builtin allows changing the three decimal
15878 floating point rounding mode bits. The argument is a 3-bit value. The
15879 argument can either be a const int or the value can be stored in a variable.
15880 The builtin uses the ISA 3.0 instruction @code{mffscdrn} if available.
15881 Otherwise the builtin reads the FPSCR, masks the current decimal rounding
15882 mode bits out and OR's in the new value.
15883
15884 @end smallexample
15885
15886 The following functions require @option{-mhard-float},
15887 @option{-mpowerpc-gfxopt}, and @option{-mpopcntb} options.
15888
15889 @smallexample
15890 double __builtin_recipdiv (double, double);
15891 float __builtin_recipdivf (float, float);
15892 double __builtin_rsqrt (double);
15893 float __builtin_rsqrtf (float);
15894 @end smallexample
15895
15896 The @code{vec_rsqrt}, @code{__builtin_rsqrt}, and
15897 @code{__builtin_rsqrtf} functions generate multiple instructions to
15898 implement the reciprocal sqrt functionality using reciprocal sqrt
15899 estimate instructions.
15900
15901 The @code{__builtin_recipdiv}, and @code{__builtin_recipdivf}
15902 functions generate multiple instructions to implement division using
15903 the reciprocal estimate instructions.
15904
15905 The following functions require @option{-mhard-float} and
15906 @option{-mmultiple} options.
15907
15908 The @code{__builtin_unpack_longdouble} function takes a
15909 @code{long double} argument and a compile time constant of 0 or 1. If
15910 the constant is 0, the first @code{double} within the
15911 @code{long double} is returned, otherwise the second @code{double}
15912 is returned. The @code{__builtin_unpack_longdouble} function is only
15913 availble if @code{long double} uses the IBM extended double
15914 representation.
15915
15916 The @code{__builtin_pack_longdouble} function takes two @code{double}
15917 arguments and returns a @code{long double} value that combines the two
15918 arguments. The @code{__builtin_pack_longdouble} function is only
15919 availble if @code{long double} uses the IBM extended double
15920 representation.
15921
15922 The @code{__builtin_unpack_ibm128} function takes a @code{__ibm128}
15923 argument and a compile time constant of 0 or 1. If the constant is 0,
15924 the first @code{double} within the @code{__ibm128} is returned,
15925 otherwise the second @code{double} is returned.
15926
15927 The @code{__builtin_pack_ibm128} function takes two @code{double}
15928 arguments and returns a @code{__ibm128} value that combines the two
15929 arguments.
15930
15931 Additional built-in functions are available for the 64-bit PowerPC
15932 family of processors, for efficient use of 128-bit floating point
15933 (@code{__float128}) values.
15934
15935 @node Basic PowerPC Built-in Functions Available on ISA 2.06
15936 @subsubsection Basic PowerPC Built-in Functions Available on ISA 2.06
15937
15938 The basic built-in functions described in this section are
15939 available on the PowerPC family of processors starting with ISA 2.05
15940 or later. Unless specific options are explicitly disabled on the
15941 command line, specifying option @option{-mcpu=power7} has the effect of
15942 enabling all the same options as for @option{-mcpu=power6} in
15943 addition to the @option{-maltivec}, @option{-mpopcntd}, and
15944 @option{-mvsx} options.
15945
15946 The following basic built-in functions require @option{-mpopcntd}:
15947 @smallexample
15948 unsigned int __builtin_addg6s (unsigned int, unsigned int);
15949 long long __builtin_bpermd (long long, long long);
15950 unsigned int __builtin_cbcdtd (unsigned int);
15951 unsigned int __builtin_cdtbcd (unsigned int);
15952 long long __builtin_divde (long long, long long);
15953 unsigned long long __builtin_divdeu (unsigned long long, unsigned long long);
15651 int __builtin_divwe (int, int); 15954 int __builtin_divwe (int, int);
15652 int __builtin_divweo (int, int);
15653 unsigned int __builtin_divweu (unsigned int, unsigned int); 15955 unsigned int __builtin_divweu (unsigned int, unsigned int);
15654 unsigned int __builtin_divweuo (unsigned int, unsigned int); 15956 vector __int128 __builtin_pack_vector_int128 (long long, long long);
15655 long __builtin_divde (long, long); 15957 void __builtin_rs6000_speculation_barrier (void);
15656 long __builtin_divdeo (long, long); 15958 long long __builtin_unpack_vector_int128 (vector __int128, signed char);
15657 unsigned long __builtin_divdeu (unsigned long, unsigned long); 15959 @end smallexample
15658 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 15960
15659 unsigned int cdtbcd (unsigned int); 15961 Of these, the @code{__builtin_divde} and @code{__builtin_divdeu} functions
15660 unsigned int cbcdtd (unsigned int); 15962 require a 64-bit environment.
15661 unsigned int addg6s (unsigned int, unsigned int); 15963
15662 @end smallexample 15964 The following basic built-in functions, which are also supported on
15663 15965 x86 targets, require @option{-mfloat128}.
15664 The @code{__builtin_divde}, @code{__builtin_divdeo}, 15966 @smallexample
15665 @code{__builtin_divdeu}, @code{__builtin_divdeou} functions require a 15967 __float128 __builtin_fabsq (__float128);
15666 64-bit environment support ISA 2.06 or later. 15968 __float128 __builtin_copysignq (__float128, __float128);
15667 15969 __float128 __builtin_infq (void);
15668 The following built-in functions are available for the PowerPC family 15970 __float128 __builtin_huge_valq (void);
15669 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}): 15971 __float128 __builtin_nanq (void);
15972 __float128 __builtin_nansq (void);
15973
15974 __float128 __builtin_sqrtf128 (__float128);
15975 __float128 __builtin_fmaf128 (__float128, __float128, __float128);
15976 @end smallexample
15977
15978 @node Basic PowerPC Built-in Functions Available on ISA 2.07
15979 @subsubsection Basic PowerPC Built-in Functions Available on ISA 2.07
15980
15981 The basic built-in functions described in this section are
15982 available on the PowerPC family of processors starting with ISA 2.07
15983 or later. Unless specific options are explicitly disabled on the
15984 command line, specifying option @option{-mcpu=power8} has the effect of
15985 enabling all the same options as for @option{-mcpu=power7} in
15986 addition to the @option{-mpower8-fusion}, @option{-mpower8-vector},
15987 @option{-mcrypto}, @option{-mhtm}, @option{-mquad-memory}, and
15988 @option{-mquad-memory-atomic} options.
15989
15990 This section intentionally empty.
15991
15992 @node Basic PowerPC Built-in Functions Available on ISA 3.0
15993 @subsubsection Basic PowerPC Built-in Functions Available on ISA 3.0
15994
15995 The basic built-in functions described in this section are
15996 available on the PowerPC family of processors starting with ISA 3.0
15997 or later. Unless specific options are explicitly disabled on the
15998 command line, specifying option @option{-mcpu=power9} has the effect of
15999 enabling all the same options as for @option{-mcpu=power8} in
16000 addition to the @option{-misel} option.
16001
16002 The following built-in functions are available on Linux 64-bit systems
16003 that use the ISA 3.0 instruction set (@option{-mcpu=power9}):
16004
16005 @table @code
16006 @item __float128 __builtin_addf128_round_to_odd (__float128, __float128)
16007 Perform a 128-bit IEEE floating point add using round to odd as the
16008 rounding mode.
16009 @findex __builtin_addf128_round_to_odd
16010
16011 @item __float128 __builtin_subf128_round_to_odd (__float128, __float128)
16012 Perform a 128-bit IEEE floating point subtract using round to odd as
16013 the rounding mode.
16014 @findex __builtin_subf128_round_to_odd
16015
16016 @item __float128 __builtin_mulf128_round_to_odd (__float128, __float128)
16017 Perform a 128-bit IEEE floating point multiply using round to odd as
16018 the rounding mode.
16019 @findex __builtin_mulf128_round_to_odd
16020
16021 @item __float128 __builtin_divf128_round_to_odd (__float128, __float128)
16022 Perform a 128-bit IEEE floating point divide using round to odd as
16023 the rounding mode.
16024 @findex __builtin_divf128_round_to_odd
16025
16026 @item __float128 __builtin_sqrtf128_round_to_odd (__float128)
16027 Perform a 128-bit IEEE floating point square root using round to odd
16028 as the rounding mode.
16029 @findex __builtin_sqrtf128_round_to_odd
16030
16031 @item __float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)
16032 Perform a 128-bit IEEE floating point fused multiply and add operation
16033 using round to odd as the rounding mode.
16034 @findex __builtin_fmaf128_round_to_odd
16035
16036 @item double __builtin_truncf128_round_to_odd (__float128)
16037 Convert a 128-bit IEEE floating point value to @code{double} using
16038 round to odd as the rounding mode.
16039 @findex __builtin_truncf128_round_to_odd
16040 @end table
16041
16042 The following additional built-in functions are also available for the
16043 PowerPC family of processors, starting with ISA 3.0 or later:
15670 @smallexample 16044 @smallexample
15671 long long __builtin_darn (void); 16045 long long __builtin_darn (void);
15672 long long __builtin_darn_raw (void); 16046 long long __builtin_darn_raw (void);
15673 int __builtin_darn_32 (void); 16047 int __builtin_darn_32 (void);
15674
15675 unsigned int scalar_extract_exp (double source);
15676 unsigned long long int scalar_extract_exp (__ieee128 source);
15677
15678 unsigned long long int scalar_extract_sig (double source);
15679 unsigned __int128 scalar_extract_sig (__ieee128 source);
15680
15681 double
15682 scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent);
15683 double
15684 scalar_insert_exp (double significand, unsigned long long int exponent);
15685
15686 ieee_128
15687 scalar_insert_exp (unsigned __int128 significand, unsigned long long int exponent);
15688 ieee_128
15689 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
15690
15691 int scalar_cmp_exp_gt (double arg1, double arg2);
15692 int scalar_cmp_exp_lt (double arg1, double arg2);
15693 int scalar_cmp_exp_eq (double arg1, double arg2);
15694 int scalar_cmp_exp_unordered (double arg1, double arg2);
15695
15696 bool scalar_test_data_class (float source, const int condition);
15697 bool scalar_test_data_class (double source, const int condition);
15698 bool scalar_test_data_class (__ieee128 source, const int condition);
15699
15700 bool scalar_test_neg (float source);
15701 bool scalar_test_neg (double source);
15702 bool scalar_test_neg (__ieee128 source);
15703
15704 int __builtin_byte_in_set (unsigned char u, unsigned long long set);
15705 int __builtin_byte_in_range (unsigned char u, unsigned int range);
15706 int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
15707
15708 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
15709 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
15710 int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
15711 int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
15712
15713 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
15714 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
15715 int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
15716 int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
15717
15718 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
15719 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
15720 int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
15721 int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
15722
15723 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
15724 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
15725 int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
15726 int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
15727 @end smallexample 16048 @end smallexample
15728 16049
15729 The @code{__builtin_darn} and @code{__builtin_darn_raw} 16050 The @code{__builtin_darn} and @code{__builtin_darn_raw}
15730 functions require a 16051 functions require a
15731 64-bit environment supporting ISA 3.0 or later. 16052 64-bit environment supporting ISA 3.0 or later.
15732 The @code{__builtin_darn} function provides a 64-bit conditioned 16053 The @code{__builtin_darn} function provides a 64-bit conditioned
15733 random number. The @code{__builtin_darn_raw} function provides a 16054 random number. The @code{__builtin_darn_raw} function provides a
15734 64-bit raw random number. The @code{__builtin_darn_32} function 16055 64-bit raw random number. The @code{__builtin_darn_32} function
15735 provides a 32-bit random number. 16056 provides a 32-bit conditioned random number.
15736 16057
15737 The @code{scalar_extract_exp} and @code{scalar_extract_sig} 16058 The following additional built-in functions are also available for the
15738 functions require a 64-bit environment supporting ISA 3.0 or later. 16059 PowerPC family of processors, starting with ISA 3.0 or later:
15739 The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in 16060
15740 functions return the significand and the biased exponent value 16061 @smallexample
15741 respectively of their @code{source} arguments. 16062 int __builtin_byte_in_set (unsigned char u, unsigned long long set);
15742 When supplied with a 64-bit @code{source} argument, the 16063 int __builtin_byte_in_range (unsigned char u, unsigned int range);
15743 result returned by @code{scalar_extract_sig} has 16064 int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
15744 the @code{0x0010000000000000} bit set if the 16065
15745 function's @code{source} argument is in normalized form. 16066 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
15746 Otherwise, this bit is set to 0. 16067 int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
15747 When supplied with a 128-bit @code{source} argument, the 16068 int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
15748 @code{0x00010000000000000000000000000000} bit of the result is 16069 int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
15749 treated similarly. 16070
15750 Note that the sign of the significand is not represented in the result 16071 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
15751 returned from the @code{scalar_extract_sig} function. Use the 16072 int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
15752 @code{scalar_test_neg} function to test the sign of its @code{double} 16073 int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
15753 argument. 16074 int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
15754 16075
15755 The @code{scalar_insert_exp} 16076 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
15756 functions require a 64-bit environment supporting ISA 3.0 or later. 16077 int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
15757 When supplied with a 64-bit first argument, the 16078 int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
15758 @code{scalar_insert_exp} built-in function returns a double-precision 16079 int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
15759 floating point value that is constructed by assembling the values of its 16080
15760 @code{significand} and @code{exponent} arguments. The sign of the 16081 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
15761 result is copied from the most significant bit of the 16082 int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
15762 @code{significand} argument. The significand and exponent components 16083 int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
15763 of the result are composed of the least significant 11 bits of the 16084 int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
15764 @code{exponent} argument and the least significant 52 bits of the 16085
15765 @code{significand} argument respectively. 16086 double __builtin_mffsl(void);
15766 16087
15767 When supplied with a 128-bit first argument, the 16088 @end smallexample
15768 @code{scalar_insert_exp} built-in function returns a quad-precision
15769 ieee floating point value. The sign bit of the result is copied from
15770 the most significant bit of the @code{significand} argument.
15771 The significand and exponent components of the result are composed of
15772 the least significant 15 bits of the @code{exponent} argument and the
15773 least significant 112 bits of the @code{significand} argument respectively.
15774
15775 The @code{scalar_cmp_exp_gt}, @code{scalar_cmp_exp_lt},
15776 @code{scalar_cmp_exp_eq}, and @code{scalar_cmp_exp_unordered} built-in
15777 functions return a non-zero value if @code{arg1} is greater than, less
15778 than, equal to, or not comparable to @code{arg2} respectively. The
15779 arguments are not comparable if one or the other equals NaN (not a
15780 number).
15781
15782 The @code{scalar_test_data_class} built-in function returns 1
15783 if any of the condition tests enabled by the value of the
15784 @code{condition} variable are true, and 0 otherwise. The
15785 @code{condition} argument must be a compile-time constant integer with
15786 value not exceeding 127. The
15787 @code{condition} argument is encoded as a bitmask with each bit
15788 enabling the testing of a different condition, as characterized by the
15789 following:
15790 @smallexample
15791 0x40 Test for NaN
15792 0x20 Test for +Infinity
15793 0x10 Test for -Infinity
15794 0x08 Test for +Zero
15795 0x04 Test for -Zero
15796 0x02 Test for +Denormal
15797 0x01 Test for -Denormal
15798 @end smallexample
15799
15800 The @code{scalar_test_neg} built-in function returns 1 if its
15801 @code{source} argument holds a negative value, 0 otherwise.
15802
15803 The @code{__builtin_byte_in_set} function requires a 16089 The @code{__builtin_byte_in_set} function requires a
15804 64-bit environment supporting ISA 3.0 or later. This function returns 16090 64-bit environment supporting ISA 3.0 or later. This function returns
15805 a non-zero value if and only if its @code{u} argument exactly equals one of 16091 a non-zero value if and only if its @code{u} argument exactly equals one of
15806 the eight bytes contained within its 64-bit @code{set} argument. 16092 the eight bytes contained within its 64-bit @code{set} argument.
15807 16093
15848 The @code{__builtin_dfp_dtstsfi_ov_dd} and 16134 The @code{__builtin_dfp_dtstsfi_ov_dd} and
15849 @code{__builtin_dfp_dtstsfi_ov_td} functions behave similarly, but 16135 @code{__builtin_dfp_dtstsfi_ov_td} functions behave similarly, but
15850 require that the type of the @code{value} argument be 16136 require that the type of the @code{value} argument be
15851 @code{__Decimal64} and @code{__Decimal128} respectively. 16137 @code{__Decimal64} and @code{__Decimal128} respectively.
15852 16138
15853 The following built-in functions are also available for the PowerPC family 16139 The @code{__builtin_mffsl} uses the ISA 3.0 @code{mffsl} instruction to read
15854 of processors, starting with ISA 3.0 or later 16140 the FPSCR. The instruction is a lower latency version of the @code{mffs}
15855 (@option{-mcpu=power9}). These string functions are described 16141 instruction. If the @code{mffsl} instruction is not available, then the
15856 separately in order to group the descriptions closer to the function 16142 builtin uses the older @code{mffs} instruction to read the FPSCR.
15857 prototypes: 16143
15858 @smallexample
15859 int vec_all_nez (vector signed char, vector signed char);
15860 int vec_all_nez (vector unsigned char, vector unsigned char);
15861 int vec_all_nez (vector signed short, vector signed short);
15862 int vec_all_nez (vector unsigned short, vector unsigned short);
15863 int vec_all_nez (vector signed int, vector signed int);
15864 int vec_all_nez (vector unsigned int, vector unsigned int);
15865
15866 int vec_any_eqz (vector signed char, vector signed char);
15867 int vec_any_eqz (vector unsigned char, vector unsigned char);
15868 int vec_any_eqz (vector signed short, vector signed short);
15869 int vec_any_eqz (vector unsigned short, vector unsigned short);
15870 int vec_any_eqz (vector signed int, vector signed int);
15871 int vec_any_eqz (vector unsigned int, vector unsigned int);
15872
15873 vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
15874 vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
15875 vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
15876 vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
15877 vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
15878 vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
15879
15880 vector signed char vec_cnttz (vector signed char);
15881 vector unsigned char vec_cnttz (vector unsigned char);
15882 vector signed short vec_cnttz (vector signed short);
15883 vector unsigned short vec_cnttz (vector unsigned short);
15884 vector signed int vec_cnttz (vector signed int);
15885 vector unsigned int vec_cnttz (vector unsigned int);
15886 vector signed long long vec_cnttz (vector signed long long);
15887 vector unsigned long long vec_cnttz (vector unsigned long long);
15888
15889 signed int vec_cntlz_lsbb (vector signed char);
15890 signed int vec_cntlz_lsbb (vector unsigned char);
15891
15892 signed int vec_cnttz_lsbb (vector signed char);
15893 signed int vec_cnttz_lsbb (vector unsigned char);
15894
15895 vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
15896
15897 vector signed char vec_xl_be (signed long long, signed char *);
15898 vector unsigned char vec_xl_be (signed long long, unsigned char *);
15899 vector signed int vec_xl_be (signed long long, signed int *);
15900 vector unsigned int vec_xl_be (signed long long, unsigned int *);
15901 vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
15902 vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
15903 vector signed long long vec_xl_be (signed long long, signed long long *);
15904 vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
15905 vector signed short vec_xl_be (signed long long, signed short *);
15906 vector unsigned short vec_xl_be (signed long long, unsigned short *);
15907 vector double vec_xl_be (signed long long, double *);
15908 vector float vec_xl_be (signed long long, float *);
15909
15910 vector signed char vec_xl_len (signed char *addr, size_t len);
15911 vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
15912 vector signed int vec_xl_len (signed int *addr, size_t len);
15913 vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
15914 vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
15915 vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
15916 vector signed long long vec_xl_len (signed long long *addr, size_t len);
15917 vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
15918 vector signed short vec_xl_len (signed short *addr, size_t len);
15919 vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
15920 vector double vec_xl_len (double *addr, size_t len);
15921 vector float vec_xl_len (float *addr, size_t len);
15922
15923 vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
15924
15925 void vec_xst_len (vector signed char data, signed char *addr, size_t len);
15926 void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
15927 void vec_xst_len (vector signed int data, signed int *addr, size_t len);
15928 void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
15929 void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
15930 void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
15931 void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
15932 void vec_xst_len (vector signed short data, signed short *addr, size_t len);
15933 void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
15934 void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
15935 void vec_xst_len (vector double data, double *addr, size_t len);
15936 void vec_xst_len (vector float data, float *addr, size_t len);
15937
15938 void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
15939
15940 signed char vec_xlx (unsigned int index, vector signed char data);
15941 unsigned char vec_xlx (unsigned int index, vector unsigned char data);
15942 signed short vec_xlx (unsigned int index, vector signed short data);
15943 unsigned short vec_xlx (unsigned int index, vector unsigned short data);
15944 signed int vec_xlx (unsigned int index, vector signed int data);
15945 unsigned int vec_xlx (unsigned int index, vector unsigned int data);
15946 float vec_xlx (unsigned int index, vector float data);
15947
15948 signed char vec_xrx (unsigned int index, vector signed char data);
15949 unsigned char vec_xrx (unsigned int index, vector unsigned char data);
15950 signed short vec_xrx (unsigned int index, vector signed short data);
15951 unsigned short vec_xrx (unsigned int index, vector unsigned short data);
15952 signed int vec_xrx (unsigned int index, vector signed int data);
15953 unsigned int vec_xrx (unsigned int index, vector unsigned int data);
15954 float vec_xrx (unsigned int index, vector float data);
15955 @end smallexample
15956
15957 The @code{vec_all_nez}, @code{vec_any_eqz}, and @code{vec_cmpnez}
15958 perform pairwise comparisons between the elements at the same
15959 positions within their two vector arguments.
15960 The @code{vec_all_nez} function returns a
15961 non-zero value if and only if all pairwise comparisons are not
15962 equal and no element of either vector argument contains a zero.
15963 The @code{vec_any_eqz} function returns a
15964 non-zero value if and only if at least one pairwise comparison is equal
15965 or if at least one element of either vector argument contains a zero.
15966 The @code{vec_cmpnez} function returns a vector of the same type as
15967 its two arguments, within which each element consists of all ones to
15968 denote that either the corresponding elements of the incoming arguments are
15969 not equal or that at least one of the corresponding elements contains
15970 zero. Otherwise, the element of the returned vector contains all zeros.
15971
15972 The @code{vec_cntlz_lsbb} function returns the count of the number of
15973 consecutive leading byte elements (starting from position 0 within the
15974 supplied vector argument) for which the least-significant bit
15975 equals zero. The @code{vec_cnttz_lsbb} function returns the count of
15976 the number of consecutive trailing byte elements (starting from
15977 position 15 and counting backwards within the supplied vector
15978 argument) for which the least-significant bit equals zero.
15979
15980 The @code{vec_xl_len} and @code{vec_xst_len} functions require a
15981 64-bit environment supporting ISA 3.0 or later. The @code{vec_xl_len}
15982 function loads a variable length vector from memory. The
15983 @code{vec_xst_len} function stores a variable length vector to memory.
15984 With both the @code{vec_xl_len} and @code{vec_xst_len} functions, the
15985 @code{addr} argument represents the memory address to or from which
15986 data will be transferred, and the
15987 @code{len} argument represents the number of bytes to be
15988 transferred, as computed by the C expression @code{min((len & 0xff), 16)}.
15989 If this expression's value is not a multiple of the vector element's
15990 size, the behavior of this function is undefined.
15991 In the case that the underlying computer is configured to run in
15992 big-endian mode, the data transfer moves bytes 0 to @code{(len - 1)} of
15993 the corresponding vector. In little-endian mode, the data transfer
15994 moves bytes @code{(16 - len)} to @code{15} of the corresponding
15995 vector. For the load function, any bytes of the result vector that
15996 are not loaded from memory are set to zero.
15997 The value of the @code{addr} argument need not be aligned on a
15998 multiple of the vector's element size.
15999
16000 The @code{vec_xlx} and @code{vec_xrx} functions extract the single
16001 element selected by the @code{index} argument from the vector
16002 represented by the @code{data} argument. The @code{index} argument
16003 always specifies a byte offset, regardless of the size of the vector
16004 element. With @code{vec_xlx}, @code{index} is the offset of the first
16005 byte of the element to be extracted. With @code{vec_xrx}, @code{index}
16006 represents the last byte of the element to be extracted, measured
16007 from the right end of the vector. In other words, the last byte of
16008 the element to be extracted is found at position @code{(15 - index)}.
16009 There is no requirement that @code{index} be a multiple of the vector
16010 element size. However, if the size of the vector element added to
16011 @code{index} is greater than 15, the content of the returned value is
16012 undefined.
16013
16014 The following built-in functions are available for the PowerPC family
16015 of processors when hardware decimal floating point
16016 (@option{-mhard-dfp}) is available:
16017 @smallexample
16018 long long __builtin_dxex (_Decimal64);
16019 long long __builtin_dxexq (_Decimal128);
16020 _Decimal64 __builtin_ddedpd (int, _Decimal64);
16021 _Decimal128 __builtin_ddedpdq (int, _Decimal128);
16022 _Decimal64 __builtin_denbcd (int, _Decimal64);
16023 _Decimal128 __builtin_denbcdq (int, _Decimal128);
16024 _Decimal64 __builtin_diex (long long, _Decimal64);
16025 _Decimal128 _builtin_diexq (long long, _Decimal128);
16026 _Decimal64 __builtin_dscli (_Decimal64, int);
16027 _Decimal128 __builtin_dscliq (_Decimal128, int);
16028 _Decimal64 __builtin_dscri (_Decimal64, int);
16029 _Decimal128 __builtin_dscriq (_Decimal128, int);
16030 unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
16031 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
16032 @end smallexample
16033
16034 The following built-in functions are available for the PowerPC family
16035 of processors when the Vector Scalar (vsx) instruction set is
16036 available:
16037 @smallexample
16038 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
16039 vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
16040 unsigned long long);
16041 @end smallexample
16042 16144
16043 @node PowerPC AltiVec/VSX Built-in Functions 16145 @node PowerPC AltiVec/VSX Built-in Functions
16044 @subsection PowerPC AltiVec Built-in Functions 16146 @subsection PowerPC AltiVec/VSX Built-in Functions
16045 16147
16046 GCC provides an interface for the PowerPC family of processors to access 16148 GCC provides an interface for the PowerPC family of processors to access
16047 the AltiVec operations described in Motorola's AltiVec Programming 16149 the AltiVec operations described in Motorola's AltiVec Programming
16048 Interface Manual. The interface is made available by including 16150 Interface Manual. The interface is made available by including
16049 @code{<altivec.h>} and using @option{-maltivec} and 16151 @code{<altivec.h>} and using @option{-maltivec} and
16063 vector unsigned int 16165 vector unsigned int
16064 vector signed int 16166 vector signed int
16065 vector bool int 16167 vector bool int
16066 vector float 16168 vector float
16067 @end smallexample 16169 @end smallexample
16068
16069 If @option{-mvsx} is used the following additional vector types are
16070 implemented.
16071
16072 @smallexample
16073 vector unsigned long
16074 vector signed long
16075 vector double
16076 @end smallexample
16077
16078 The long types are only implemented for 64-bit code generation, and
16079 the long type is only used in the floating point/integer conversion
16080 instructions.
16081 16170
16082 GCC's implementation of the high-level language interface available from 16171 GCC's implementation of the high-level language interface available from
16083 C and C++ code differs from Motorola's documentation in several ways. 16172 C and C++ code differs from Motorola's documentation in several ways.
16084 16173
16085 @itemize @bullet 16174 @itemize @bullet
16134 provided by compliant compilers. Programmers should preferentially use 16223 provided by compliant compilers. Programmers should preferentially use
16135 the interfaces described therein. However, historically GCC has provided 16224 the interfaces described therein. However, historically GCC has provided
16136 additional interfaces for access to vector instructions. These are 16225 additional interfaces for access to vector instructions. These are
16137 briefly described below. 16226 briefly described below.
16138 16227
16228 @menu
16229 * PowerPC AltiVec Built-in Functions on ISA 2.05::
16230 * PowerPC AltiVec Built-in Functions Available on ISA 2.06::
16231 * PowerPC AltiVec Built-in Functions Available on ISA 2.07::
16232 * PowerPC AltiVec Built-in Functions Available on ISA 3.0::
16233 @end menu
16234
16235 @node PowerPC AltiVec Built-in Functions on ISA 2.05
16236 @subsubsection PowerPC AltiVec Built-in Functions on ISA 2.05
16237
16139 The following interfaces are supported for the generic and specific 16238 The following interfaces are supported for the generic and specific
16140 AltiVec operations and the AltiVec predicates. In cases where there 16239 AltiVec operations and the AltiVec predicates. In cases where there
16141 is a direct mapping between generic and specific operations, only the 16240 is a direct mapping between generic and specific operations, only the
16142 generic names are shown here, although the specific operations can also 16241 generic names are shown here, although the specific operations can also
16143 be used. 16242 be used.
16158 vector signed char vec_add (vector bool char, vector signed char); 16257 vector signed char vec_add (vector bool char, vector signed char);
16159 vector signed char vec_add (vector signed char, vector bool char); 16258 vector signed char vec_add (vector signed char, vector bool char);
16160 vector signed char vec_add (vector signed char, vector signed char); 16259 vector signed char vec_add (vector signed char, vector signed char);
16161 vector unsigned char vec_add (vector bool char, vector unsigned char); 16260 vector unsigned char vec_add (vector bool char, vector unsigned char);
16162 vector unsigned char vec_add (vector unsigned char, vector bool char); 16261 vector unsigned char vec_add (vector unsigned char, vector bool char);
16163 vector unsigned char vec_add (vector unsigned char, 16262 vector unsigned char vec_add (vector unsigned char, vector unsigned char);
16164 vector unsigned char);
16165 vector signed short vec_add (vector bool short, vector signed short); 16263 vector signed short vec_add (vector bool short, vector signed short);
16166 vector signed short vec_add (vector signed short, vector bool short); 16264 vector signed short vec_add (vector signed short, vector bool short);
16167 vector signed short vec_add (vector signed short, vector signed short); 16265 vector signed short vec_add (vector signed short, vector signed short);
16168 vector unsigned short vec_add (vector bool short, 16266 vector unsigned short vec_add (vector bool short, vector unsigned short);
16169 vector unsigned short); 16267 vector unsigned short vec_add (vector unsigned short, vector bool short);
16170 vector unsigned short vec_add (vector unsigned short, 16268 vector unsigned short vec_add (vector unsigned short, vector unsigned short);
16171 vector bool short);
16172 vector unsigned short vec_add (vector unsigned short,
16173 vector unsigned short);
16174 vector signed int vec_add (vector bool int, vector signed int); 16269 vector signed int vec_add (vector bool int, vector signed int);
16175 vector signed int vec_add (vector signed int, vector bool int); 16270 vector signed int vec_add (vector signed int, vector bool int);
16176 vector signed int vec_add (vector signed int, vector signed int); 16271 vector signed int vec_add (vector signed int, vector signed int);
16177 vector unsigned int vec_add (vector bool int, vector unsigned int); 16272 vector unsigned int vec_add (vector bool int, vector unsigned int);
16178 vector unsigned int vec_add (vector unsigned int, vector bool int); 16273 vector unsigned int vec_add (vector unsigned int, vector bool int);
16179 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 16274 vector unsigned int vec_add (vector unsigned int, vector unsigned int);
16180 vector float vec_add (vector float, vector float); 16275 vector float vec_add (vector float, vector float);
16181 16276
16182 vector float vec_vaddfp (vector float, vector float);
16183
16184 vector signed int vec_vadduwm (vector bool int, vector signed int);
16185 vector signed int vec_vadduwm (vector signed int, vector bool int);
16186 vector signed int vec_vadduwm (vector signed int, vector signed int);
16187 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
16188 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
16189 vector unsigned int vec_vadduwm (vector unsigned int,
16190 vector unsigned int);
16191
16192 vector signed short vec_vadduhm (vector bool short,
16193 vector signed short);
16194 vector signed short vec_vadduhm (vector signed short,
16195 vector bool short);
16196 vector signed short vec_vadduhm (vector signed short,
16197 vector signed short);
16198 vector unsigned short vec_vadduhm (vector bool short,
16199 vector unsigned short);
16200 vector unsigned short vec_vadduhm (vector unsigned short,
16201 vector bool short);
16202 vector unsigned short vec_vadduhm (vector unsigned short,
16203 vector unsigned short);
16204
16205 vector signed char vec_vaddubm (vector bool char, vector signed char);
16206 vector signed char vec_vaddubm (vector signed char, vector bool char);
16207 vector signed char vec_vaddubm (vector signed char, vector signed char);
16208 vector unsigned char vec_vaddubm (vector bool char,
16209 vector unsigned char);
16210 vector unsigned char vec_vaddubm (vector unsigned char,
16211 vector bool char);
16212 vector unsigned char vec_vaddubm (vector unsigned char,
16213 vector unsigned char);
16214
16215 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 16277 vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
16216 16278
16217 vector unsigned char vec_adds (vector bool char, vector unsigned char); 16279 vector unsigned char vec_adds (vector bool char, vector unsigned char);
16218 vector unsigned char vec_adds (vector unsigned char, vector bool char); 16280 vector unsigned char vec_adds (vector unsigned char, vector bool char);
16219 vector unsigned char vec_adds (vector unsigned char, 16281 vector unsigned char vec_adds (vector unsigned char, vector unsigned char);
16220 vector unsigned char);
16221 vector signed char vec_adds (vector bool char, vector signed char); 16282 vector signed char vec_adds (vector bool char, vector signed char);
16222 vector signed char vec_adds (vector signed char, vector bool char); 16283 vector signed char vec_adds (vector signed char, vector bool char);
16223 vector signed char vec_adds (vector signed char, vector signed char); 16284 vector signed char vec_adds (vector signed char, vector signed char);
16224 vector unsigned short vec_adds (vector bool short, 16285 vector unsigned short vec_adds (vector bool short, vector unsigned short);
16225 vector unsigned short); 16286 vector unsigned short vec_adds (vector unsigned short, vector bool short);
16226 vector unsigned short vec_adds (vector unsigned short, 16287 vector unsigned short vec_adds (vector unsigned short, vector unsigned short);
16227 vector bool short);
16228 vector unsigned short vec_adds (vector unsigned short,
16229 vector unsigned short);
16230 vector signed short vec_adds (vector bool short, vector signed short); 16288 vector signed short vec_adds (vector bool short, vector signed short);
16231 vector signed short vec_adds (vector signed short, vector bool short); 16289 vector signed short vec_adds (vector signed short, vector bool short);
16232 vector signed short vec_adds (vector signed short, vector signed short); 16290 vector signed short vec_adds (vector signed short, vector signed short);
16233 vector unsigned int vec_adds (vector bool int, vector unsigned int); 16291 vector unsigned int vec_adds (vector bool int, vector unsigned int);
16234 vector unsigned int vec_adds (vector unsigned int, vector bool int); 16292 vector unsigned int vec_adds (vector unsigned int, vector bool int);
16235 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 16293 vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
16236 vector signed int vec_adds (vector bool int, vector signed int); 16294 vector signed int vec_adds (vector bool int, vector signed int);
16237 vector signed int vec_adds (vector signed int, vector bool int); 16295 vector signed int vec_adds (vector signed int, vector bool int);
16238 vector signed int vec_adds (vector signed int, vector signed int); 16296 vector signed int vec_adds (vector signed int, vector signed int);
16239
16240 vector signed int vec_vaddsws (vector bool int, vector signed int);
16241 vector signed int vec_vaddsws (vector signed int, vector bool int);
16242 vector signed int vec_vaddsws (vector signed int, vector signed int);
16243
16244 vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
16245 vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
16246 vector unsigned int vec_vadduws (vector unsigned int,
16247 vector unsigned int);
16248
16249 vector signed short vec_vaddshs (vector bool short,
16250 vector signed short);
16251 vector signed short vec_vaddshs (vector signed short,
16252 vector bool short);
16253 vector signed short vec_vaddshs (vector signed short,
16254 vector signed short);
16255
16256 vector unsigned short vec_vadduhs (vector bool short,
16257 vector unsigned short);
16258 vector unsigned short vec_vadduhs (vector unsigned short,
16259 vector bool short);
16260 vector unsigned short vec_vadduhs (vector unsigned short,
16261 vector unsigned short);
16262
16263 vector signed char vec_vaddsbs (vector bool char, vector signed char);
16264 vector signed char vec_vaddsbs (vector signed char, vector bool char);
16265 vector signed char vec_vaddsbs (vector signed char, vector signed char);
16266
16267 vector unsigned char vec_vaddubs (vector bool char,
16268 vector unsigned char);
16269 vector unsigned char vec_vaddubs (vector unsigned char,
16270 vector bool char);
16271 vector unsigned char vec_vaddubs (vector unsigned char,
16272 vector unsigned char);
16273
16274 vector float vec_and (vector float, vector float);
16275 vector float vec_and (vector float, vector bool int);
16276 vector float vec_and (vector bool int, vector float);
16277 vector bool int vec_and (vector bool int, vector bool int);
16278 vector signed int vec_and (vector bool int, vector signed int);
16279 vector signed int vec_and (vector signed int, vector bool int);
16280 vector signed int vec_and (vector signed int, vector signed int);
16281 vector unsigned int vec_and (vector bool int, vector unsigned int);
16282 vector unsigned int vec_and (vector unsigned int, vector bool int);
16283 vector unsigned int vec_and (vector unsigned int, vector unsigned int);
16284 vector bool short vec_and (vector bool short, vector bool short);
16285 vector signed short vec_and (vector bool short, vector signed short);
16286 vector signed short vec_and (vector signed short, vector bool short);
16287 vector signed short vec_and (vector signed short, vector signed short);
16288 vector unsigned short vec_and (vector bool short,
16289 vector unsigned short);
16290 vector unsigned short vec_and (vector unsigned short,
16291 vector bool short);
16292 vector unsigned short vec_and (vector unsigned short,
16293 vector unsigned short);
16294 vector signed char vec_and (vector bool char, vector signed char);
16295 vector bool char vec_and (vector bool char, vector bool char);
16296 vector signed char vec_and (vector signed char, vector bool char);
16297 vector signed char vec_and (vector signed char, vector signed char);
16298 vector unsigned char vec_and (vector bool char, vector unsigned char);
16299 vector unsigned char vec_and (vector unsigned char, vector bool char);
16300 vector unsigned char vec_and (vector unsigned char,
16301 vector unsigned char);
16302
16303 vector float vec_andc (vector float, vector float);
16304 vector float vec_andc (vector float, vector bool int);
16305 vector float vec_andc (vector bool int, vector float);
16306 vector bool int vec_andc (vector bool int, vector bool int);
16307 vector signed int vec_andc (vector bool int, vector signed int);
16308 vector signed int vec_andc (vector signed int, vector bool int);
16309 vector signed int vec_andc (vector signed int, vector signed int);
16310 vector unsigned int vec_andc (vector bool int, vector unsigned int);
16311 vector unsigned int vec_andc (vector unsigned int, vector bool int);
16312 vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
16313 vector bool short vec_andc (vector bool short, vector bool short);
16314 vector signed short vec_andc (vector bool short, vector signed short);
16315 vector signed short vec_andc (vector signed short, vector bool short);
16316 vector signed short vec_andc (vector signed short, vector signed short);
16317 vector unsigned short vec_andc (vector bool short,
16318 vector unsigned short);
16319 vector unsigned short vec_andc (vector unsigned short,
16320 vector bool short);
16321 vector unsigned short vec_andc (vector unsigned short,
16322 vector unsigned short);
16323 vector signed char vec_andc (vector bool char, vector signed char);
16324 vector bool char vec_andc (vector bool char, vector bool char);
16325 vector signed char vec_andc (vector signed char, vector bool char);
16326 vector signed char vec_andc (vector signed char, vector signed char);
16327 vector unsigned char vec_andc (vector bool char, vector unsigned char);
16328 vector unsigned char vec_andc (vector unsigned char, vector bool char);
16329 vector unsigned char vec_andc (vector unsigned char,
16330 vector unsigned char);
16331
16332 vector unsigned char vec_avg (vector unsigned char,
16333 vector unsigned char);
16334 vector signed char vec_avg (vector signed char, vector signed char);
16335 vector unsigned short vec_avg (vector unsigned short,
16336 vector unsigned short);
16337 vector signed short vec_avg (vector signed short, vector signed short);
16338 vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
16339 vector signed int vec_avg (vector signed int, vector signed int);
16340
16341 vector signed int vec_vavgsw (vector signed int, vector signed int);
16342
16343 vector unsigned int vec_vavguw (vector unsigned int,
16344 vector unsigned int);
16345
16346 vector signed short vec_vavgsh (vector signed short,
16347 vector signed short);
16348
16349 vector unsigned short vec_vavguh (vector unsigned short,
16350 vector unsigned short);
16351
16352 vector signed char vec_vavgsb (vector signed char, vector signed char);
16353
16354 vector unsigned char vec_vavgub (vector unsigned char,
16355 vector unsigned char);
16356
16357 vector float vec_copysign (vector float);
16358
16359 vector float vec_ceil (vector float);
16360
16361 vector signed int vec_cmpb (vector float, vector float);
16362
16363 vector bool char vec_cmpeq (vector bool char, vector bool char);
16364 vector bool short vec_cmpeq (vector bool short, vector bool short);
16365 vector bool int vec_cmpeq (vector bool int, vector bool int);
16366 vector bool char vec_cmpeq (vector signed char, vector signed char);
16367 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
16368 vector bool short vec_cmpeq (vector signed short, vector signed short);
16369 vector bool short vec_cmpeq (vector unsigned short,
16370 vector unsigned short);
16371 vector bool int vec_cmpeq (vector signed int, vector signed int);
16372 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
16373 vector bool int vec_cmpeq (vector float, vector float);
16374
16375 vector bool int vec_vcmpeqfp (vector float, vector float);
16376
16377 vector bool int vec_vcmpequw (vector signed int, vector signed int);
16378 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
16379
16380 vector bool short vec_vcmpequh (vector signed short,
16381 vector signed short);
16382 vector bool short vec_vcmpequh (vector unsigned short,
16383 vector unsigned short);
16384
16385 vector bool char vec_vcmpequb (vector signed char, vector signed char);
16386 vector bool char vec_vcmpequb (vector unsigned char,
16387 vector unsigned char);
16388
16389 vector bool int vec_cmpge (vector float, vector float);
16390
16391 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
16392 vector bool char vec_cmpgt (vector signed char, vector signed char);
16393 vector bool short vec_cmpgt (vector unsigned short,
16394 vector unsigned short);
16395 vector bool short vec_cmpgt (vector signed short, vector signed short);
16396 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
16397 vector bool int vec_cmpgt (vector signed int, vector signed int);
16398 vector bool int vec_cmpgt (vector float, vector float);
16399
16400 vector bool int vec_vcmpgtfp (vector float, vector float);
16401
16402 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
16403
16404 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
16405
16406 vector bool short vec_vcmpgtsh (vector signed short,
16407 vector signed short);
16408
16409 vector bool short vec_vcmpgtuh (vector unsigned short,
16410 vector unsigned short);
16411
16412 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
16413
16414 vector bool char vec_vcmpgtub (vector unsigned char,
16415 vector unsigned char);
16416
16417 vector bool int vec_cmple (vector float, vector float);
16418
16419 vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
16420 vector bool char vec_cmplt (vector signed char, vector signed char);
16421 vector bool short vec_cmplt (vector unsigned short,
16422 vector unsigned short);
16423 vector bool short vec_cmplt (vector signed short, vector signed short);
16424 vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
16425 vector bool int vec_cmplt (vector signed int, vector signed int);
16426 vector bool int vec_cmplt (vector float, vector float);
16427
16428 vector float vec_cpsgn (vector float, vector float);
16429
16430 vector float vec_ctf (vector unsigned int, const int);
16431 vector float vec_ctf (vector signed int, const int);
16432 vector double vec_ctf (vector unsigned long, const int);
16433 vector double vec_ctf (vector signed long, const int);
16434
16435 vector float vec_vcfsx (vector signed int, const int);
16436
16437 vector float vec_vcfux (vector unsigned int, const int);
16438
16439 vector signed int vec_cts (vector float, const int);
16440 vector signed long vec_cts (vector double, const int);
16441
16442 vector unsigned int vec_ctu (vector float, const int);
16443 vector unsigned long vec_ctu (vector double, const int);
16444
16445 vector double vec_doublee (vector float);
16446 vector double vec_doublee (vector signed int);
16447 vector double vec_doublee (vector unsigned int);
16448
16449 vector double vec_doubleo (vector float);
16450 vector double vec_doubleo (vector signed int);
16451 vector double vec_doubleo (vector unsigned int);
16452
16453 vector double vec_doubleh (vector float);
16454 vector double vec_doubleh (vector signed int);
16455 vector double vec_doubleh (vector unsigned int);
16456
16457 vector double vec_doublel (vector float);
16458 vector double vec_doublel (vector signed int);
16459 vector double vec_doublel (vector unsigned int);
16460
16461 void vec_dss (const int);
16462
16463 void vec_dssall (void);
16464
16465 void vec_dst (const vector unsigned char *, int, const int);
16466 void vec_dst (const vector signed char *, int, const int);
16467 void vec_dst (const vector bool char *, int, const int);
16468 void vec_dst (const vector unsigned short *, int, const int);
16469 void vec_dst (const vector signed short *, int, const int);
16470 void vec_dst (const vector bool short *, int, const int);
16471 void vec_dst (const vector pixel *, int, const int);
16472 void vec_dst (const vector unsigned int *, int, const int);
16473 void vec_dst (const vector signed int *, int, const int);
16474 void vec_dst (const vector bool int *, int, const int);
16475 void vec_dst (const vector float *, int, const int);
16476 void vec_dst (const unsigned char *, int, const int);
16477 void vec_dst (const signed char *, int, const int);
16478 void vec_dst (const unsigned short *, int, const int);
16479 void vec_dst (const short *, int, const int);
16480 void vec_dst (const unsigned int *, int, const int);
16481 void vec_dst (const int *, int, const int);
16482 void vec_dst (const unsigned long *, int, const int);
16483 void vec_dst (const long *, int, const int);
16484 void vec_dst (const float *, int, const int);
16485
16486 void vec_dstst (const vector unsigned char *, int, const int);
16487 void vec_dstst (const vector signed char *, int, const int);
16488 void vec_dstst (const vector bool char *, int, const int);
16489 void vec_dstst (const vector unsigned short *, int, const int);
16490 void vec_dstst (const vector signed short *, int, const int);
16491 void vec_dstst (const vector bool short *, int, const int);
16492 void vec_dstst (const vector pixel *, int, const int);
16493 void vec_dstst (const vector unsigned int *, int, const int);
16494 void vec_dstst (const vector signed int *, int, const int);
16495 void vec_dstst (const vector bool int *, int, const int);
16496 void vec_dstst (const vector float *, int, const int);
16497 void vec_dstst (const unsigned char *, int, const int);
16498 void vec_dstst (const signed char *, int, const int);
16499 void vec_dstst (const unsigned short *, int, const int);
16500 void vec_dstst (const short *, int, const int);
16501 void vec_dstst (const unsigned int *, int, const int);
16502 void vec_dstst (const int *, int, const int);
16503 void vec_dstst (const unsigned long *, int, const int);
16504 void vec_dstst (const long *, int, const int);
16505 void vec_dstst (const float *, int, const int);
16506
16507 void vec_dststt (const vector unsigned char *, int, const int);
16508 void vec_dststt (const vector signed char *, int, const int);
16509 void vec_dststt (const vector bool char *, int, const int);
16510 void vec_dststt (const vector unsigned short *, int, const int);
16511 void vec_dststt (const vector signed short *, int, const int);
16512 void vec_dststt (const vector bool short *, int, const int);
16513 void vec_dststt (const vector pixel *, int, const int);
16514 void vec_dststt (const vector unsigned int *, int, const int);
16515 void vec_dststt (const vector signed int *, int, const int);
16516 void vec_dststt (const vector bool int *, int, const int);
16517 void vec_dststt (const vector float *, int, const int);
16518 void vec_dststt (const unsigned char *, int, const int);
16519 void vec_dststt (const signed char *, int, const int);
16520 void vec_dststt (const unsigned short *, int, const int);
16521 void vec_dststt (const short *, int, const int);
16522 void vec_dststt (const unsigned int *, int, const int);
16523 void vec_dststt (const int *, int, const int);
16524 void vec_dststt (const unsigned long *, int, const int);
16525 void vec_dststt (const long *, int, const int);
16526 void vec_dststt (const float *, int, const int);
16527
16528 void vec_dstt (const vector unsigned char *, int, const int);
16529 void vec_dstt (const vector signed char *, int, const int);
16530 void vec_dstt (const vector bool char *, int, const int);
16531 void vec_dstt (const vector unsigned short *, int, const int);
16532 void vec_dstt (const vector signed short *, int, const int);
16533 void vec_dstt (const vector bool short *, int, const int);
16534 void vec_dstt (const vector pixel *, int, const int);
16535 void vec_dstt (const vector unsigned int *, int, const int);
16536 void vec_dstt (const vector signed int *, int, const int);
16537 void vec_dstt (const vector bool int *, int, const int);
16538 void vec_dstt (const vector float *, int, const int);
16539 void vec_dstt (const unsigned char *, int, const int);
16540 void vec_dstt (const signed char *, int, const int);
16541 void vec_dstt (const unsigned short *, int, const int);
16542 void vec_dstt (const short *, int, const int);
16543 void vec_dstt (const unsigned int *, int, const int);
16544 void vec_dstt (const int *, int, const int);
16545 void vec_dstt (const unsigned long *, int, const int);
16546 void vec_dstt (const long *, int, const int);
16547 void vec_dstt (const float *, int, const int);
16548
16549 vector float vec_expte (vector float);
16550
16551 vector float vec_floor (vector float);
16552
16553 vector float vec_float (vector signed int);
16554 vector float vec_float (vector unsigned int);
16555
16556 vector float vec_float2 (vector signed long long, vector signed long long);
16557 vector float vec_float2 (vector unsigned long long, vector signed long long);
16558
16559 vector float vec_floate (vector double);
16560 vector float vec_floate (vector signed long long);
16561 vector float vec_floate (vector unsigned long long);
16562
16563 vector float vec_floato (vector double);
16564 vector float vec_floato (vector signed long long);
16565 vector float vec_floato (vector unsigned long long);
16566
16567 vector float vec_ld (int, const vector float *);
16568 vector float vec_ld (int, const float *);
16569 vector bool int vec_ld (int, const vector bool int *);
16570 vector signed int vec_ld (int, const vector signed int *);
16571 vector signed int vec_ld (int, const int *);
16572 vector signed int vec_ld (int, const long *);
16573 vector unsigned int vec_ld (int, const vector unsigned int *);
16574 vector unsigned int vec_ld (int, const unsigned int *);
16575 vector unsigned int vec_ld (int, const unsigned long *);
16576 vector bool short vec_ld (int, const vector bool short *);
16577 vector pixel vec_ld (int, const vector pixel *);
16578 vector signed short vec_ld (int, const vector signed short *);
16579 vector signed short vec_ld (int, const short *);
16580 vector unsigned short vec_ld (int, const vector unsigned short *);
16581 vector unsigned short vec_ld (int, const unsigned short *);
16582 vector bool char vec_ld (int, const vector bool char *);
16583 vector signed char vec_ld (int, const vector signed char *);
16584 vector signed char vec_ld (int, const signed char *);
16585 vector unsigned char vec_ld (int, const vector unsigned char *);
16586 vector unsigned char vec_ld (int, const unsigned char *);
16587
16588 vector signed char vec_lde (int, const signed char *);
16589 vector unsigned char vec_lde (int, const unsigned char *);
16590 vector signed short vec_lde (int, const short *);
16591 vector unsigned short vec_lde (int, const unsigned short *);
16592 vector float vec_lde (int, const float *);
16593 vector signed int vec_lde (int, const int *);
16594 vector unsigned int vec_lde (int, const unsigned int *);
16595 vector signed int vec_lde (int, const long *);
16596 vector unsigned int vec_lde (int, const unsigned long *);
16597
16598 vector float vec_lvewx (int, float *);
16599 vector signed int vec_lvewx (int, int *);
16600 vector unsigned int vec_lvewx (int, unsigned int *);
16601 vector signed int vec_lvewx (int, long *);
16602 vector unsigned int vec_lvewx (int, unsigned long *);
16603
16604 vector signed short vec_lvehx (int, short *);
16605 vector unsigned short vec_lvehx (int, unsigned short *);
16606
16607 vector signed char vec_lvebx (int, char *);
16608 vector unsigned char vec_lvebx (int, unsigned char *);
16609
16610 vector float vec_ldl (int, const vector float *);
16611 vector float vec_ldl (int, const float *);
16612 vector bool int vec_ldl (int, const vector bool int *);
16613 vector signed int vec_ldl (int, const vector signed int *);
16614 vector signed int vec_ldl (int, const int *);
16615 vector signed int vec_ldl (int, const long *);
16616 vector unsigned int vec_ldl (int, const vector unsigned int *);
16617 vector unsigned int vec_ldl (int, const unsigned int *);
16618 vector unsigned int vec_ldl (int, const unsigned long *);
16619 vector bool short vec_ldl (int, const vector bool short *);
16620 vector pixel vec_ldl (int, const vector pixel *);
16621 vector signed short vec_ldl (int, const vector signed short *);
16622 vector signed short vec_ldl (int, const short *);
16623 vector unsigned short vec_ldl (int, const vector unsigned short *);
16624 vector unsigned short vec_ldl (int, const unsigned short *);
16625 vector bool char vec_ldl (int, const vector bool char *);
16626 vector signed char vec_ldl (int, const vector signed char *);
16627 vector signed char vec_ldl (int, const signed char *);
16628 vector unsigned char vec_ldl (int, const vector unsigned char *);
16629 vector unsigned char vec_ldl (int, const unsigned char *);
16630
16631 vector float vec_loge (vector float);
16632
16633 vector unsigned char vec_lvsl (int, const volatile unsigned char *);
16634 vector unsigned char vec_lvsl (int, const volatile signed char *);
16635 vector unsigned char vec_lvsl (int, const volatile unsigned short *);
16636 vector unsigned char vec_lvsl (int, const volatile short *);
16637 vector unsigned char vec_lvsl (int, const volatile unsigned int *);
16638 vector unsigned char vec_lvsl (int, const volatile int *);
16639 vector unsigned char vec_lvsl (int, const volatile unsigned long *);
16640 vector unsigned char vec_lvsl (int, const volatile long *);
16641 vector unsigned char vec_lvsl (int, const volatile float *);
16642
16643 vector unsigned char vec_lvsr (int, const volatile unsigned char *);
16644 vector unsigned char vec_lvsr (int, const volatile signed char *);
16645 vector unsigned char vec_lvsr (int, const volatile unsigned short *);
16646 vector unsigned char vec_lvsr (int, const volatile short *);
16647 vector unsigned char vec_lvsr (int, const volatile unsigned int *);
16648 vector unsigned char vec_lvsr (int, const volatile int *);
16649 vector unsigned char vec_lvsr (int, const volatile unsigned long *);
16650 vector unsigned char vec_lvsr (int, const volatile long *);
16651 vector unsigned char vec_lvsr (int, const volatile float *);
16652
16653 vector float vec_madd (vector float, vector float, vector float);
16654
16655 vector signed short vec_madds (vector signed short,
16656 vector signed short,
16657 vector signed short);
16658
16659 vector unsigned char vec_max (vector bool char, vector unsigned char);
16660 vector unsigned char vec_max (vector unsigned char, vector bool char);
16661 vector unsigned char vec_max (vector unsigned char,
16662 vector unsigned char);
16663 vector signed char vec_max (vector bool char, vector signed char);
16664 vector signed char vec_max (vector signed char, vector bool char);
16665 vector signed char vec_max (vector signed char, vector signed char);
16666 vector unsigned short vec_max (vector bool short,
16667 vector unsigned short);
16668 vector unsigned short vec_max (vector unsigned short,
16669 vector bool short);
16670 vector unsigned short vec_max (vector unsigned short,
16671 vector unsigned short);
16672 vector signed short vec_max (vector bool short, vector signed short);
16673 vector signed short vec_max (vector signed short, vector bool short);
16674 vector signed short vec_max (vector signed short, vector signed short);
16675 vector unsigned int vec_max (vector bool int, vector unsigned int);
16676 vector unsigned int vec_max (vector unsigned int, vector bool int);
16677 vector unsigned int vec_max (vector unsigned int, vector unsigned int);
16678 vector signed int vec_max (vector bool int, vector signed int);
16679 vector signed int vec_max (vector signed int, vector bool int);
16680 vector signed int vec_max (vector signed int, vector signed int);
16681 vector float vec_max (vector float, vector float);
16682
16683 vector float vec_vmaxfp (vector float, vector float);
16684
16685 vector signed int vec_vmaxsw (vector bool int, vector signed int);
16686 vector signed int vec_vmaxsw (vector signed int, vector bool int);
16687 vector signed int vec_vmaxsw (vector signed int, vector signed int);
16688
16689 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
16690 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
16691 vector unsigned int vec_vmaxuw (vector unsigned int,
16692 vector unsigned int);
16693
16694 vector signed short vec_vmaxsh (vector bool short, vector signed short);
16695 vector signed short vec_vmaxsh (vector signed short, vector bool short);
16696 vector signed short vec_vmaxsh (vector signed short,
16697 vector signed short);
16698
16699 vector unsigned short vec_vmaxuh (vector bool short,
16700 vector unsigned short);
16701 vector unsigned short vec_vmaxuh (vector unsigned short,
16702 vector bool short);
16703 vector unsigned short vec_vmaxuh (vector unsigned short,
16704 vector unsigned short);
16705
16706 vector signed char vec_vmaxsb (vector bool char, vector signed char);
16707 vector signed char vec_vmaxsb (vector signed char, vector bool char);
16708 vector signed char vec_vmaxsb (vector signed char, vector signed char);
16709
16710 vector unsigned char vec_vmaxub (vector bool char,
16711 vector unsigned char);
16712 vector unsigned char vec_vmaxub (vector unsigned char,
16713 vector bool char);
16714 vector unsigned char vec_vmaxub (vector unsigned char,
16715 vector unsigned char);
16716
16717 vector bool char vec_mergeh (vector bool char, vector bool char);
16718 vector signed char vec_mergeh (vector signed char, vector signed char);
16719 vector unsigned char vec_mergeh (vector unsigned char,
16720 vector unsigned char);
16721 vector bool short vec_mergeh (vector bool short, vector bool short);
16722 vector pixel vec_mergeh (vector pixel, vector pixel);
16723 vector signed short vec_mergeh (vector signed short,
16724 vector signed short);
16725 vector unsigned short vec_mergeh (vector unsigned short,
16726 vector unsigned short);
16727 vector float vec_mergeh (vector float, vector float);
16728 vector bool int vec_mergeh (vector bool int, vector bool int);
16729 vector signed int vec_mergeh (vector signed int, vector signed int);
16730 vector unsigned int vec_mergeh (vector unsigned int,
16731 vector unsigned int);
16732
16733 vector float vec_vmrghw (vector float, vector float);
16734 vector bool int vec_vmrghw (vector bool int, vector bool int);
16735 vector signed int vec_vmrghw (vector signed int, vector signed int);
16736 vector unsigned int vec_vmrghw (vector unsigned int,
16737 vector unsigned int);
16738
16739 vector bool short vec_vmrghh (vector bool short, vector bool short);
16740 vector signed short vec_vmrghh (vector signed short,
16741 vector signed short);
16742 vector unsigned short vec_vmrghh (vector unsigned short,
16743 vector unsigned short);
16744 vector pixel vec_vmrghh (vector pixel, vector pixel);
16745
16746 vector bool char vec_vmrghb (vector bool char, vector bool char);
16747 vector signed char vec_vmrghb (vector signed char, vector signed char);
16748 vector unsigned char vec_vmrghb (vector unsigned char,
16749 vector unsigned char);
16750
16751 vector bool char vec_mergel (vector bool char, vector bool char);
16752 vector signed char vec_mergel (vector signed char, vector signed char);
16753 vector unsigned char vec_mergel (vector unsigned char,
16754 vector unsigned char);
16755 vector bool short vec_mergel (vector bool short, vector bool short);
16756 vector pixel vec_mergel (vector pixel, vector pixel);
16757 vector signed short vec_mergel (vector signed short,
16758 vector signed short);
16759 vector unsigned short vec_mergel (vector unsigned short,
16760 vector unsigned short);
16761 vector float vec_mergel (vector float, vector float);
16762 vector bool int vec_mergel (vector bool int, vector bool int);
16763 vector signed int vec_mergel (vector signed int, vector signed int);
16764 vector unsigned int vec_mergel (vector unsigned int,
16765 vector unsigned int);
16766
16767 vector float vec_vmrglw (vector float, vector float);
16768 vector signed int vec_vmrglw (vector signed int, vector signed int);
16769 vector unsigned int vec_vmrglw (vector unsigned int,
16770 vector unsigned int);
16771 vector bool int vec_vmrglw (vector bool int, vector bool int);
16772
16773 vector bool short vec_vmrglh (vector bool short, vector bool short);
16774 vector signed short vec_vmrglh (vector signed short,
16775 vector signed short);
16776 vector unsigned short vec_vmrglh (vector unsigned short,
16777 vector unsigned short);
16778 vector pixel vec_vmrglh (vector pixel, vector pixel);
16779
16780 vector bool char vec_vmrglb (vector bool char, vector bool char);
16781 vector signed char vec_vmrglb (vector signed char, vector signed char);
16782 vector unsigned char vec_vmrglb (vector unsigned char,
16783 vector unsigned char);
16784
16785 vector unsigned short vec_mfvscr (void);
16786
16787 vector unsigned char vec_min (vector bool char, vector unsigned char);
16788 vector unsigned char vec_min (vector unsigned char, vector bool char);
16789 vector unsigned char vec_min (vector unsigned char,
16790 vector unsigned char);
16791 vector signed char vec_min (vector bool char, vector signed char);
16792 vector signed char vec_min (vector signed char, vector bool char);
16793 vector signed char vec_min (vector signed char, vector signed char);
16794 vector unsigned short vec_min (vector bool short,
16795 vector unsigned short);
16796 vector unsigned short vec_min (vector unsigned short,
16797 vector bool short);
16798 vector unsigned short vec_min (vector unsigned short,
16799 vector unsigned short);
16800 vector signed short vec_min (vector bool short, vector signed short);
16801 vector signed short vec_min (vector signed short, vector bool short);
16802 vector signed short vec_min (vector signed short, vector signed short);
16803 vector unsigned int vec_min (vector bool int, vector unsigned int);
16804 vector unsigned int vec_min (vector unsigned int, vector bool int);
16805 vector unsigned int vec_min (vector unsigned int, vector unsigned int);
16806 vector signed int vec_min (vector bool int, vector signed int);
16807 vector signed int vec_min (vector signed int, vector bool int);
16808 vector signed int vec_min (vector signed int, vector signed int);
16809 vector float vec_min (vector float, vector float);
16810
16811 vector float vec_vminfp (vector float, vector float);
16812
16813 vector signed int vec_vminsw (vector bool int, vector signed int);
16814 vector signed int vec_vminsw (vector signed int, vector bool int);
16815 vector signed int vec_vminsw (vector signed int, vector signed int);
16816
16817 vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
16818 vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
16819 vector unsigned int vec_vminuw (vector unsigned int,
16820 vector unsigned int);
16821
16822 vector signed short vec_vminsh (vector bool short, vector signed short);
16823 vector signed short vec_vminsh (vector signed short, vector bool short);
16824 vector signed short vec_vminsh (vector signed short,
16825 vector signed short);
16826
16827 vector unsigned short vec_vminuh (vector bool short,
16828 vector unsigned short);
16829 vector unsigned short vec_vminuh (vector unsigned short,
16830 vector bool short);
16831 vector unsigned short vec_vminuh (vector unsigned short,
16832 vector unsigned short);
16833
16834 vector signed char vec_vminsb (vector bool char, vector signed char);
16835 vector signed char vec_vminsb (vector signed char, vector bool char);
16836 vector signed char vec_vminsb (vector signed char, vector signed char);
16837
16838 vector unsigned char vec_vminub (vector bool char,
16839 vector unsigned char);
16840 vector unsigned char vec_vminub (vector unsigned char,
16841 vector bool char);
16842 vector unsigned char vec_vminub (vector unsigned char,
16843 vector unsigned char);
16844
16845 vector signed short vec_mladd (vector signed short,
16846 vector signed short,
16847 vector signed short);
16848 vector signed short vec_mladd (vector signed short,
16849 vector unsigned short,
16850 vector unsigned short);
16851 vector signed short vec_mladd (vector unsigned short,
16852 vector signed short,
16853 vector signed short);
16854 vector unsigned short vec_mladd (vector unsigned short,
16855 vector unsigned short,
16856 vector unsigned short);
16857
16858 vector signed short vec_mradds (vector signed short,
16859 vector signed short,
16860 vector signed short);
16861
16862 vector unsigned int vec_msum (vector unsigned char,
16863 vector unsigned char,
16864 vector unsigned int);
16865 vector signed int vec_msum (vector signed char,
16866 vector unsigned char,
16867 vector signed int);
16868 vector unsigned int vec_msum (vector unsigned short,
16869 vector unsigned short,
16870 vector unsigned int);
16871 vector signed int vec_msum (vector signed short,
16872 vector signed short,
16873 vector signed int);
16874
16875 vector signed int vec_vmsumshm (vector signed short,
16876 vector signed short,
16877 vector signed int);
16878
16879 vector unsigned int vec_vmsumuhm (vector unsigned short,
16880 vector unsigned short,
16881 vector unsigned int);
16882
16883 vector signed int vec_vmsummbm (vector signed char,
16884 vector unsigned char,
16885 vector signed int);
16886
16887 vector unsigned int vec_vmsumubm (vector unsigned char,
16888 vector unsigned char,
16889 vector unsigned int);
16890
16891 vector unsigned int vec_msums (vector unsigned short,
16892 vector unsigned short,
16893 vector unsigned int);
16894 vector signed int vec_msums (vector signed short,
16895 vector signed short,
16896 vector signed int);
16897
16898 vector signed int vec_vmsumshs (vector signed short,
16899 vector signed short,
16900 vector signed int);
16901
16902 vector unsigned int vec_vmsumuhs (vector unsigned short,
16903 vector unsigned short,
16904 vector unsigned int);
16905
16906 void vec_mtvscr (vector signed int);
16907 void vec_mtvscr (vector unsigned int);
16908 void vec_mtvscr (vector bool int);
16909 void vec_mtvscr (vector signed short);
16910 void vec_mtvscr (vector unsigned short);
16911 void vec_mtvscr (vector bool short);
16912 void vec_mtvscr (vector pixel);
16913 void vec_mtvscr (vector signed char);
16914 void vec_mtvscr (vector unsigned char);
16915 void vec_mtvscr (vector bool char);
16916
16917 vector unsigned short vec_mule (vector unsigned char,
16918 vector unsigned char);
16919 vector signed short vec_mule (vector signed char,
16920 vector signed char);
16921 vector unsigned int vec_mule (vector unsigned short,
16922 vector unsigned short);
16923 vector signed int vec_mule (vector signed short, vector signed short);
16924 vector unsigned long long vec_mule (vector unsigned int,
16925 vector unsigned int);
16926 vector signed long long vec_mule (vector signed int,
16927 vector signed int);
16928
16929 vector signed int vec_vmulesh (vector signed short,
16930 vector signed short);
16931
16932 vector unsigned int vec_vmuleuh (vector unsigned short,
16933 vector unsigned short);
16934
16935 vector signed short vec_vmulesb (vector signed char,
16936 vector signed char);
16937
16938 vector unsigned short vec_vmuleub (vector unsigned char,
16939 vector unsigned char);
16940
16941 vector unsigned short vec_mulo (vector unsigned char,
16942 vector unsigned char);
16943 vector signed short vec_mulo (vector signed char, vector signed char);
16944 vector unsigned int vec_mulo (vector unsigned short,
16945 vector unsigned short);
16946 vector signed int vec_mulo (vector signed short, vector signed short);
16947 vector unsigned long long vec_mulo (vector unsigned int,
16948 vector unsigned int);
16949 vector signed long long vec_mulo (vector signed int,
16950 vector signed int);
16951
16952 vector signed int vec_vmulosh (vector signed short,
16953 vector signed short);
16954
16955 vector unsigned int vec_vmulouh (vector unsigned short,
16956 vector unsigned short);
16957
16958 vector signed short vec_vmulosb (vector signed char,
16959 vector signed char);
16960
16961 vector unsigned short vec_vmuloub (vector unsigned char,
16962 vector unsigned char);
16963
16964 vector float vec_nmsub (vector float, vector float, vector float);
16965
16966 vector signed char vec_nabs (vector signed char);
16967 vector signed short vec_nabs (vector signed short);
16968 vector signed int vec_nabs (vector signed int);
16969 vector float vec_nabs (vector float);
16970 vector double vec_nabs (vector double);
16971
16972 vector signed char vec_neg (vector signed char);
16973 vector signed short vec_neg (vector signed short);
16974 vector signed int vec_neg (vector signed int);
16975 vector signed long long vec_neg (vector signed long long);
16976 vector float char vec_neg (vector float);
16977 vector double vec_neg (vector double);
16978
16979 vector float vec_nor (vector float, vector float);
16980 vector signed int vec_nor (vector signed int, vector signed int);
16981 vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
16982 vector bool int vec_nor (vector bool int, vector bool int);
16983 vector signed short vec_nor (vector signed short, vector signed short);
16984 vector unsigned short vec_nor (vector unsigned short,
16985 vector unsigned short);
16986 vector bool short vec_nor (vector bool short, vector bool short);
16987 vector signed char vec_nor (vector signed char, vector signed char);
16988 vector unsigned char vec_nor (vector unsigned char,
16989 vector unsigned char);
16990 vector bool char vec_nor (vector bool char, vector bool char);
16991
16992 vector float vec_or (vector float, vector float);
16993 vector float vec_or (vector float, vector bool int);
16994 vector float vec_or (vector bool int, vector float);
16995 vector bool int vec_or (vector bool int, vector bool int);
16996 vector signed int vec_or (vector bool int, vector signed int);
16997 vector signed int vec_or (vector signed int, vector bool int);
16998 vector signed int vec_or (vector signed int, vector signed int);
16999 vector unsigned int vec_or (vector bool int, vector unsigned int);
17000 vector unsigned int vec_or (vector unsigned int, vector bool int);
17001 vector unsigned int vec_or (vector unsigned int, vector unsigned int);
17002 vector bool short vec_or (vector bool short, vector bool short);
17003 vector signed short vec_or (vector bool short, vector signed short);
17004 vector signed short vec_or (vector signed short, vector bool short);
17005 vector signed short vec_or (vector signed short, vector signed short);
17006 vector unsigned short vec_or (vector bool short, vector unsigned short);
17007 vector unsigned short vec_or (vector unsigned short, vector bool short);
17008 vector unsigned short vec_or (vector unsigned short,
17009 vector unsigned short);
17010 vector signed char vec_or (vector bool char, vector signed char);
17011 vector bool char vec_or (vector bool char, vector bool char);
17012 vector signed char vec_or (vector signed char, vector bool char);
17013 vector signed char vec_or (vector signed char, vector signed char);
17014 vector unsigned char vec_or (vector bool char, vector unsigned char);
17015 vector unsigned char vec_or (vector unsigned char, vector bool char);
17016 vector unsigned char vec_or (vector unsigned char,
17017 vector unsigned char);
17018
17019 vector signed char vec_pack (vector signed short, vector signed short);
17020 vector unsigned char vec_pack (vector unsigned short,
17021 vector unsigned short);
17022 vector bool char vec_pack (vector bool short, vector bool short);
17023 vector signed short vec_pack (vector signed int, vector signed int);
17024 vector unsigned short vec_pack (vector unsigned int,
17025 vector unsigned int);
17026 vector bool short vec_pack (vector bool int, vector bool int);
17027
17028 vector bool short vec_vpkuwum (vector bool int, vector bool int);
17029 vector signed short vec_vpkuwum (vector signed int, vector signed int);
17030 vector unsigned short vec_vpkuwum (vector unsigned int,
17031 vector unsigned int);
17032
17033 vector bool char vec_vpkuhum (vector bool short, vector bool short);
17034 vector signed char vec_vpkuhum (vector signed short,
17035 vector signed short);
17036 vector unsigned char vec_vpkuhum (vector unsigned short,
17037 vector unsigned short);
17038
17039 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
17040
17041 vector unsigned char vec_packs (vector unsigned short,
17042 vector unsigned short);
17043 vector signed char vec_packs (vector signed short, vector signed short);
17044 vector unsigned short vec_packs (vector unsigned int,
17045 vector unsigned int);
17046 vector signed short vec_packs (vector signed int, vector signed int);
17047
17048 vector signed short vec_vpkswss (vector signed int, vector signed int);
17049
17050 vector unsigned short vec_vpkuwus (vector unsigned int,
17051 vector unsigned int);
17052
17053 vector signed char vec_vpkshss (vector signed short,
17054 vector signed short);
17055
17056 vector unsigned char vec_vpkuhus (vector unsigned short,
17057 vector unsigned short);
17058
17059 vector unsigned char vec_packsu (vector unsigned short,
17060 vector unsigned short);
17061 vector unsigned char vec_packsu (vector signed short,
17062 vector signed short);
17063 vector unsigned short vec_packsu (vector unsigned int,
17064 vector unsigned int);
17065 vector unsigned short vec_packsu (vector signed int, vector signed int);
17066
17067 vector unsigned short vec_vpkswus (vector signed int,
17068 vector signed int);
17069
17070 vector unsigned char vec_vpkshus (vector signed short,
17071 vector signed short);
17072
17073 vector float vec_perm (vector float,
17074 vector float,
17075 vector unsigned char);
17076 vector signed int vec_perm (vector signed int,
17077 vector signed int,
17078 vector unsigned char);
17079 vector unsigned int vec_perm (vector unsigned int,
17080 vector unsigned int,
17081 vector unsigned char);
17082 vector bool int vec_perm (vector bool int,
17083 vector bool int,
17084 vector unsigned char);
17085 vector signed short vec_perm (vector signed short,
17086 vector signed short,
17087 vector unsigned char);
17088 vector unsigned short vec_perm (vector unsigned short,
17089 vector unsigned short,
17090 vector unsigned char);
17091 vector bool short vec_perm (vector bool short,
17092 vector bool short,
17093 vector unsigned char);
17094 vector pixel vec_perm (vector pixel,
17095 vector pixel,
17096 vector unsigned char);
17097 vector signed char vec_perm (vector signed char,
17098 vector signed char,
17099 vector unsigned char);
17100 vector unsigned char vec_perm (vector unsigned char,
17101 vector unsigned char,
17102 vector unsigned char);
17103 vector bool char vec_perm (vector bool char,
17104 vector bool char,
17105 vector unsigned char);
17106
17107 vector float vec_re (vector float);
17108
17109 vector bool char vec_reve (vector bool char);
17110 vector signed char vec_reve (vector signed char);
17111 vector unsigned char vec_reve (vector unsigned char);
17112 vector bool int vec_reve (vector bool int);
17113 vector signed int vec_reve (vector signed int);
17114 vector unsigned int vec_reve (vector unsigned int);
17115 vector bool long long vec_reve (vector bool long long);
17116 vector signed long long vec_reve (vector signed long long);
17117 vector unsigned long long vec_reve (vector unsigned long long);
17118 vector bool short vec_reve (vector bool short);
17119 vector signed short vec_reve (vector signed short);
17120 vector unsigned short vec_reve (vector unsigned short);
17121
17122 vector signed char vec_rl (vector signed char,
17123 vector unsigned char);
17124 vector unsigned char vec_rl (vector unsigned char,
17125 vector unsigned char);
17126 vector signed short vec_rl (vector signed short, vector unsigned short);
17127 vector unsigned short vec_rl (vector unsigned short,
17128 vector unsigned short);
17129 vector signed int vec_rl (vector signed int, vector unsigned int);
17130 vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
17131
17132 vector signed int vec_vrlw (vector signed int, vector unsigned int);
17133 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
17134
17135 vector signed short vec_vrlh (vector signed short,
17136 vector unsigned short);
17137 vector unsigned short vec_vrlh (vector unsigned short,
17138 vector unsigned short);
17139
17140 vector signed char vec_vrlb (vector signed char, vector unsigned char);
17141 vector unsigned char vec_vrlb (vector unsigned char,
17142 vector unsigned char);
17143
17144 vector float vec_round (vector float);
17145
17146 vector float vec_recip (vector float, vector float);
17147
17148 vector float vec_rsqrt (vector float);
17149
17150 vector float vec_rsqrte (vector float);
17151
17152 vector float vec_sel (vector float, vector float, vector bool int);
17153 vector float vec_sel (vector float, vector float, vector unsigned int);
17154 vector signed int vec_sel (vector signed int,
17155 vector signed int,
17156 vector bool int);
17157 vector signed int vec_sel (vector signed int,
17158 vector signed int,
17159 vector unsigned int);
17160 vector unsigned int vec_sel (vector unsigned int,
17161 vector unsigned int,
17162 vector bool int);
17163 vector unsigned int vec_sel (vector unsigned int,
17164 vector unsigned int,
17165 vector unsigned int);
17166 vector bool int vec_sel (vector bool int,
17167 vector bool int,
17168 vector bool int);
17169 vector bool int vec_sel (vector bool int,
17170 vector bool int,
17171 vector unsigned int);
17172 vector signed short vec_sel (vector signed short,
17173 vector signed short,
17174 vector bool short);
17175 vector signed short vec_sel (vector signed short,
17176 vector signed short,
17177 vector unsigned short);
17178 vector unsigned short vec_sel (vector unsigned short,
17179 vector unsigned short,
17180 vector bool short);
17181 vector unsigned short vec_sel (vector unsigned short,
17182 vector unsigned short,
17183 vector unsigned short);
17184 vector bool short vec_sel (vector bool short,
17185 vector bool short,
17186 vector bool short);
17187 vector bool short vec_sel (vector bool short,
17188 vector bool short,
17189 vector unsigned short);
17190 vector signed char vec_sel (vector signed char,
17191 vector signed char,
17192 vector bool char);
17193 vector signed char vec_sel (vector signed char,
17194 vector signed char,
17195 vector unsigned char);
17196 vector unsigned char vec_sel (vector unsigned char,
17197 vector unsigned char,
17198 vector bool char);
17199 vector unsigned char vec_sel (vector unsigned char,
17200 vector unsigned char,
17201 vector unsigned char);
17202 vector bool char vec_sel (vector bool char,
17203 vector bool char,
17204 vector bool char);
17205 vector bool char vec_sel (vector bool char,
17206 vector bool char,
17207 vector unsigned char);
17208
17209 vector signed long long vec_signed (vector double);
17210 vector signed int vec_signed (vector float);
17211
17212 vector signed int vec_signede (vector double);
17213 vector signed int vec_signedo (vector double);
17214 vector signed int vec_signed2 (vector double, vector double);
17215
17216 vector signed char vec_sl (vector signed char,
17217 vector unsigned char);
17218 vector unsigned char vec_sl (vector unsigned char,
17219 vector unsigned char);
17220 vector signed short vec_sl (vector signed short, vector unsigned short);
17221 vector unsigned short vec_sl (vector unsigned short,
17222 vector unsigned short);
17223 vector signed int vec_sl (vector signed int, vector unsigned int);
17224 vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
17225
17226 vector signed int vec_vslw (vector signed int, vector unsigned int);
17227 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
17228
17229 vector signed short vec_vslh (vector signed short,
17230 vector unsigned short);
17231 vector unsigned short vec_vslh (vector unsigned short,
17232 vector unsigned short);
17233
17234 vector signed char vec_vslb (vector signed char, vector unsigned char);
17235 vector unsigned char vec_vslb (vector unsigned char,
17236 vector unsigned char);
17237
17238 vector float vec_sld (vector float, vector float, const int);
17239 vector double vec_sld (vector double, vector double, const int);
17240
17241 vector signed int vec_sld (vector signed int,
17242 vector signed int,
17243 const int);
17244 vector unsigned int vec_sld (vector unsigned int,
17245 vector unsigned int,
17246 const int);
17247 vector bool int vec_sld (vector bool int,
17248 vector bool int,
17249 const int);
17250 vector signed short vec_sld (vector signed short,
17251 vector signed short,
17252 const int);
17253 vector unsigned short vec_sld (vector unsigned short,
17254 vector unsigned short,
17255 const int);
17256 vector bool short vec_sld (vector bool short,
17257 vector bool short,
17258 const int);
17259 vector pixel vec_sld (vector pixel,
17260 vector pixel,
17261 const int);
17262 vector signed char vec_sld (vector signed char,
17263 vector signed char,
17264 const int);
17265 vector unsigned char vec_sld (vector unsigned char,
17266 vector unsigned char,
17267 const int);
17268 vector bool char vec_sld (vector bool char,
17269 vector bool char,
17270 const int);
17271
17272 vector signed char vec_sldw (vector signed char,
17273 vector signed char,
17274 const int);
17275 vector unsigned char vec_sldw (vector unsigned char,
17276 vector unsigned char,
17277 const int);
17278 vector signed short vec_sldw (vector signed short,
17279 vector signed short,
17280 const int);
17281 vector unsigned short vec_sldw (vector unsigned short,
17282 vector unsigned short,
17283 const int);
17284 vector signed int vec_sldw (vector signed int,
17285 vector signed int,
17286 const int);
17287 vector unsigned int vec_sldw (vector unsigned int,
17288 vector unsigned int,
17289 const int);
17290 vector signed long long vec_sldw (vector signed long long,
17291 vector signed long long,
17292 const int);
17293 vector unsigned long long vec_sldw (vector unsigned long long,
17294 vector unsigned long long,
17295 const int);
17296
17297 vector signed int vec_sll (vector signed int,
17298 vector unsigned int);
17299 vector signed int vec_sll (vector signed int,
17300 vector unsigned short);
17301 vector signed int vec_sll (vector signed int,
17302 vector unsigned char);
17303 vector unsigned int vec_sll (vector unsigned int,
17304 vector unsigned int);
17305 vector unsigned int vec_sll (vector unsigned int,
17306 vector unsigned short);
17307 vector unsigned int vec_sll (vector unsigned int,
17308 vector unsigned char);
17309 vector bool int vec_sll (vector bool int,
17310 vector unsigned int);
17311 vector bool int vec_sll (vector bool int,
17312 vector unsigned short);
17313 vector bool int vec_sll (vector bool int,
17314 vector unsigned char);
17315 vector signed short vec_sll (vector signed short,
17316 vector unsigned int);
17317 vector signed short vec_sll (vector signed short,
17318 vector unsigned short);
17319 vector signed short vec_sll (vector signed short,
17320 vector unsigned char);
17321 vector unsigned short vec_sll (vector unsigned short,
17322 vector unsigned int);
17323 vector unsigned short vec_sll (vector unsigned short,
17324 vector unsigned short);
17325 vector unsigned short vec_sll (vector unsigned short,
17326 vector unsigned char);
17327 vector bool short vec_sll (vector bool short, vector unsigned int);
17328 vector bool short vec_sll (vector bool short, vector unsigned short);
17329 vector bool short vec_sll (vector bool short, vector unsigned char);
17330 vector pixel vec_sll (vector pixel, vector unsigned int);
17331 vector pixel vec_sll (vector pixel, vector unsigned short);
17332 vector pixel vec_sll (vector pixel, vector unsigned char);
17333 vector signed char vec_sll (vector signed char, vector unsigned int);
17334 vector signed char vec_sll (vector signed char, vector unsigned short);
17335 vector signed char vec_sll (vector signed char, vector unsigned char);
17336 vector unsigned char vec_sll (vector unsigned char,
17337 vector unsigned int);
17338 vector unsigned char vec_sll (vector unsigned char,
17339 vector unsigned short);
17340 vector unsigned char vec_sll (vector unsigned char,
17341 vector unsigned char);
17342 vector bool char vec_sll (vector bool char, vector unsigned int);
17343 vector bool char vec_sll (vector bool char, vector unsigned short);
17344 vector bool char vec_sll (vector bool char, vector unsigned char);
17345
17346 vector float vec_slo (vector float, vector signed char);
17347 vector float vec_slo (vector float, vector unsigned char);
17348 vector signed int vec_slo (vector signed int, vector signed char);
17349 vector signed int vec_slo (vector signed int, vector unsigned char);
17350 vector unsigned int vec_slo (vector unsigned int, vector signed char);
17351 vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
17352 vector signed short vec_slo (vector signed short, vector signed char);
17353 vector signed short vec_slo (vector signed short, vector unsigned char);
17354 vector unsigned short vec_slo (vector unsigned short,
17355 vector signed char);
17356 vector unsigned short vec_slo (vector unsigned short,
17357 vector unsigned char);
17358 vector pixel vec_slo (vector pixel, vector signed char);
17359 vector pixel vec_slo (vector pixel, vector unsigned char);
17360 vector signed char vec_slo (vector signed char, vector signed char);
17361 vector signed char vec_slo (vector signed char, vector unsigned char);
17362 vector unsigned char vec_slo (vector unsigned char, vector signed char);
17363 vector unsigned char vec_slo (vector unsigned char,
17364 vector unsigned char);
17365 vector signed long long vec_slo (vector signed long long, vector signed char);
17366 vector signed long long vec_slo (vector signed long long, vector unsigned char);
17367 vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
17368 vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
17369
17370 vector signed char vec_splat (vector signed char, const int);
17371 vector unsigned char vec_splat (vector unsigned char, const int);
17372 vector bool char vec_splat (vector bool char, const int);
17373 vector signed short vec_splat (vector signed short, const int);
17374 vector unsigned short vec_splat (vector unsigned short, const int);
17375 vector bool short vec_splat (vector bool short, const int);
17376 vector pixel vec_splat (vector pixel, const int);
17377 vector float vec_splat (vector float, const int);
17378 vector signed int vec_splat (vector signed int, const int);
17379 vector unsigned int vec_splat (vector unsigned int, const int);
17380 vector bool int vec_splat (vector bool int, const int);
17381 vector signed long vec_splat (vector signed long, const int);
17382 vector unsigned long vec_splat (vector unsigned long, const int);
17383
17384 vector signed char vec_splats (signed char);
17385 vector unsigned char vec_splats (unsigned char);
17386 vector signed short vec_splats (signed short);
17387 vector unsigned short vec_splats (unsigned short);
17388 vector signed int vec_splats (signed int);
17389 vector unsigned int vec_splats (unsigned int);
17390 vector float vec_splats (float);
17391
17392 vector float vec_vspltw (vector float, const int);
17393 vector signed int vec_vspltw (vector signed int, const int);
17394 vector unsigned int vec_vspltw (vector unsigned int, const int);
17395 vector bool int vec_vspltw (vector bool int, const int);
17396
17397 vector bool short vec_vsplth (vector bool short, const int);
17398 vector signed short vec_vsplth (vector signed short, const int);
17399 vector unsigned short vec_vsplth (vector unsigned short, const int);
17400 vector pixel vec_vsplth (vector pixel, const int);
17401
17402 vector signed char vec_vspltb (vector signed char, const int);
17403 vector unsigned char vec_vspltb (vector unsigned char, const int);
17404 vector bool char vec_vspltb (vector bool char, const int);
17405
17406 vector signed char vec_splat_s8 (const int);
17407
17408 vector signed short vec_splat_s16 (const int);
17409
17410 vector signed int vec_splat_s32 (const int);
17411
17412 vector unsigned char vec_splat_u8 (const int);
17413
17414 vector unsigned short vec_splat_u16 (const int);
17415
17416 vector unsigned int vec_splat_u32 (const int);
17417
17418 vector signed char vec_sr (vector signed char, vector unsigned char);
17419 vector unsigned char vec_sr (vector unsigned char,
17420 vector unsigned char);
17421 vector signed short vec_sr (vector signed short,
17422 vector unsigned short);
17423 vector unsigned short vec_sr (vector unsigned short,
17424 vector unsigned short);
17425 vector signed int vec_sr (vector signed int, vector unsigned int);
17426 vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
17427
17428 vector signed int vec_vsrw (vector signed int, vector unsigned int);
17429 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
17430
17431 vector signed short vec_vsrh (vector signed short,
17432 vector unsigned short);
17433 vector unsigned short vec_vsrh (vector unsigned short,
17434 vector unsigned short);
17435
17436 vector signed char vec_vsrb (vector signed char, vector unsigned char);
17437 vector unsigned char vec_vsrb (vector unsigned char,
17438 vector unsigned char);
17439
17440 vector signed char vec_sra (vector signed char, vector unsigned char);
17441 vector unsigned char vec_sra (vector unsigned char,
17442 vector unsigned char);
17443 vector signed short vec_sra (vector signed short,
17444 vector unsigned short);
17445 vector unsigned short vec_sra (vector unsigned short,
17446 vector unsigned short);
17447 vector signed int vec_sra (vector signed int, vector unsigned int);
17448 vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
17449
17450 vector signed int vec_vsraw (vector signed int, vector unsigned int);
17451 vector unsigned int vec_vsraw (vector unsigned int,
17452 vector unsigned int);
17453
17454 vector signed short vec_vsrah (vector signed short,
17455 vector unsigned short);
17456 vector unsigned short vec_vsrah (vector unsigned short,
17457 vector unsigned short);
17458
17459 vector signed char vec_vsrab (vector signed char, vector unsigned char);
17460 vector unsigned char vec_vsrab (vector unsigned char,
17461 vector unsigned char);
17462
17463 vector signed int vec_srl (vector signed int, vector unsigned int);
17464 vector signed int vec_srl (vector signed int, vector unsigned short);
17465 vector signed int vec_srl (vector signed int, vector unsigned char);
17466 vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
17467 vector unsigned int vec_srl (vector unsigned int,
17468 vector unsigned short);
17469 vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
17470 vector bool int vec_srl (vector bool int, vector unsigned int);
17471 vector bool int vec_srl (vector bool int, vector unsigned short);
17472 vector bool int vec_srl (vector bool int, vector unsigned char);
17473 vector signed short vec_srl (vector signed short, vector unsigned int);
17474 vector signed short vec_srl (vector signed short,
17475 vector unsigned short);
17476 vector signed short vec_srl (vector signed short, vector unsigned char);
17477 vector unsigned short vec_srl (vector unsigned short,
17478 vector unsigned int);
17479 vector unsigned short vec_srl (vector unsigned short,
17480 vector unsigned short);
17481 vector unsigned short vec_srl (vector unsigned short,
17482 vector unsigned char);
17483 vector bool short vec_srl (vector bool short, vector unsigned int);
17484 vector bool short vec_srl (vector bool short, vector unsigned short);
17485 vector bool short vec_srl (vector bool short, vector unsigned char);
17486 vector pixel vec_srl (vector pixel, vector unsigned int);
17487 vector pixel vec_srl (vector pixel, vector unsigned short);
17488 vector pixel vec_srl (vector pixel, vector unsigned char);
17489 vector signed char vec_srl (vector signed char, vector unsigned int);
17490 vector signed char vec_srl (vector signed char, vector unsigned short);
17491 vector signed char vec_srl (vector signed char, vector unsigned char);
17492 vector unsigned char vec_srl (vector unsigned char,
17493 vector unsigned int);
17494 vector unsigned char vec_srl (vector unsigned char,
17495 vector unsigned short);
17496 vector unsigned char vec_srl (vector unsigned char,
17497 vector unsigned char);
17498 vector bool char vec_srl (vector bool char, vector unsigned int);
17499 vector bool char vec_srl (vector bool char, vector unsigned short);
17500 vector bool char vec_srl (vector bool char, vector unsigned char);
17501
17502 vector float vec_sro (vector float, vector signed char);
17503 vector float vec_sro (vector float, vector unsigned char);
17504 vector signed int vec_sro (vector signed int, vector signed char);
17505 vector signed int vec_sro (vector signed int, vector unsigned char);
17506 vector unsigned int vec_sro (vector unsigned int, vector signed char);
17507 vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
17508 vector signed short vec_sro (vector signed short, vector signed char);
17509 vector signed short vec_sro (vector signed short, vector unsigned char);
17510 vector unsigned short vec_sro (vector unsigned short,
17511 vector signed char);
17512 vector unsigned short vec_sro (vector unsigned short,
17513 vector unsigned char);
17514 vector pixel vec_sro (vector pixel, vector signed char);
17515 vector pixel vec_sro (vector pixel, vector unsigned char);
17516 vector signed char vec_sro (vector signed char, vector signed char);
17517 vector signed char vec_sro (vector signed char, vector unsigned char);
17518 vector unsigned char vec_sro (vector unsigned char, vector signed char);
17519 vector unsigned char vec_sro (vector unsigned char,
17520 vector unsigned char);
17521
17522 void vec_st (vector float, int, vector float *);
17523 void vec_st (vector float, int, float *);
17524 void vec_st (vector signed int, int, vector signed int *);
17525 void vec_st (vector signed int, int, int *);
17526 void vec_st (vector unsigned int, int, vector unsigned int *);
17527 void vec_st (vector unsigned int, int, unsigned int *);
17528 void vec_st (vector bool int, int, vector bool int *);
17529 void vec_st (vector bool int, int, unsigned int *);
17530 void vec_st (vector bool int, int, int *);
17531 void vec_st (vector signed short, int, vector signed short *);
17532 void vec_st (vector signed short, int, short *);
17533 void vec_st (vector unsigned short, int, vector unsigned short *);
17534 void vec_st (vector unsigned short, int, unsigned short *);
17535 void vec_st (vector bool short, int, vector bool short *);
17536 void vec_st (vector bool short, int, unsigned short *);
17537 void vec_st (vector pixel, int, vector pixel *);
17538 void vec_st (vector pixel, int, unsigned short *);
17539 void vec_st (vector pixel, int, short *);
17540 void vec_st (vector bool short, int, short *);
17541 void vec_st (vector signed char, int, vector signed char *);
17542 void vec_st (vector signed char, int, signed char *);
17543 void vec_st (vector unsigned char, int, vector unsigned char *);
17544 void vec_st (vector unsigned char, int, unsigned char *);
17545 void vec_st (vector bool char, int, vector bool char *);
17546 void vec_st (vector bool char, int, unsigned char *);
17547 void vec_st (vector bool char, int, signed char *);
17548
17549 void vec_ste (vector signed char, int, signed char *);
17550 void vec_ste (vector unsigned char, int, unsigned char *);
17551 void vec_ste (vector bool char, int, signed char *);
17552 void vec_ste (vector bool char, int, unsigned char *);
17553 void vec_ste (vector signed short, int, short *);
17554 void vec_ste (vector unsigned short, int, unsigned short *);
17555 void vec_ste (vector bool short, int, short *);
17556 void vec_ste (vector bool short, int, unsigned short *);
17557 void vec_ste (vector pixel, int, short *);
17558 void vec_ste (vector pixel, int, unsigned short *);
17559 void vec_ste (vector float, int, float *);
17560 void vec_ste (vector signed int, int, int *);
17561 void vec_ste (vector unsigned int, int, unsigned int *);
17562 void vec_ste (vector bool int, int, int *);
17563 void vec_ste (vector bool int, int, unsigned int *);
17564
17565 void vec_stvewx (vector float, int, float *);
17566 void vec_stvewx (vector signed int, int, int *);
17567 void vec_stvewx (vector unsigned int, int, unsigned int *);
17568 void vec_stvewx (vector bool int, int, int *);
17569 void vec_stvewx (vector bool int, int, unsigned int *);
17570
17571 void vec_stvehx (vector signed short, int, short *);
17572 void vec_stvehx (vector unsigned short, int, unsigned short *);
17573 void vec_stvehx (vector bool short, int, short *);
17574 void vec_stvehx (vector bool short, int, unsigned short *);
17575 void vec_stvehx (vector pixel, int, short *);
17576 void vec_stvehx (vector pixel, int, unsigned short *);
17577
17578 void vec_stvebx (vector signed char, int, signed char *);
17579 void vec_stvebx (vector unsigned char, int, unsigned char *);
17580 void vec_stvebx (vector bool char, int, signed char *);
17581 void vec_stvebx (vector bool char, int, unsigned char *);
17582
17583 void vec_stl (vector float, int, vector float *);
17584 void vec_stl (vector float, int, float *);
17585 void vec_stl (vector signed int, int, vector signed int *);
17586 void vec_stl (vector signed int, int, int *);
17587 void vec_stl (vector unsigned int, int, vector unsigned int *);
17588 void vec_stl (vector unsigned int, int, unsigned int *);
17589 void vec_stl (vector bool int, int, vector bool int *);
17590 void vec_stl (vector bool int, int, unsigned int *);
17591 void vec_stl (vector bool int, int, int *);
17592 void vec_stl (vector signed short, int, vector signed short *);
17593 void vec_stl (vector signed short, int, short *);
17594 void vec_stl (vector unsigned short, int, vector unsigned short *);
17595 void vec_stl (vector unsigned short, int, unsigned short *);
17596 void vec_stl (vector bool short, int, vector bool short *);
17597 void vec_stl (vector bool short, int, unsigned short *);
17598 void vec_stl (vector bool short, int, short *);
17599 void vec_stl (vector pixel, int, vector pixel *);
17600 void vec_stl (vector pixel, int, unsigned short *);
17601 void vec_stl (vector pixel, int, short *);
17602 void vec_stl (vector signed char, int, vector signed char *);
17603 void vec_stl (vector signed char, int, signed char *);
17604 void vec_stl (vector unsigned char, int, vector unsigned char *);
17605 void vec_stl (vector unsigned char, int, unsigned char *);
17606 void vec_stl (vector bool char, int, vector bool char *);
17607 void vec_stl (vector bool char, int, unsigned char *);
17608 void vec_stl (vector bool char, int, signed char *);
17609
17610 vector signed char vec_sub (vector bool char, vector signed char);
17611 vector signed char vec_sub (vector signed char, vector bool char);
17612 vector signed char vec_sub (vector signed char, vector signed char);
17613 vector unsigned char vec_sub (vector bool char, vector unsigned char);
17614 vector unsigned char vec_sub (vector unsigned char, vector bool char);
17615 vector unsigned char vec_sub (vector unsigned char,
17616 vector unsigned char);
17617 vector signed short vec_sub (vector bool short, vector signed short);
17618 vector signed short vec_sub (vector signed short, vector bool short);
17619 vector signed short vec_sub (vector signed short, vector signed short);
17620 vector unsigned short vec_sub (vector bool short,
17621 vector unsigned short);
17622 vector unsigned short vec_sub (vector unsigned short,
17623 vector bool short);
17624 vector unsigned short vec_sub (vector unsigned short,
17625 vector unsigned short);
17626 vector signed int vec_sub (vector bool int, vector signed int);
17627 vector signed int vec_sub (vector signed int, vector bool int);
17628 vector signed int vec_sub (vector signed int, vector signed int);
17629 vector unsigned int vec_sub (vector bool int, vector unsigned int);
17630 vector unsigned int vec_sub (vector unsigned int, vector bool int);
17631 vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
17632 vector float vec_sub (vector float, vector float);
17633
17634 vector float vec_vsubfp (vector float, vector float);
17635
17636 vector signed int vec_vsubuwm (vector bool int, vector signed int);
17637 vector signed int vec_vsubuwm (vector signed int, vector bool int);
17638 vector signed int vec_vsubuwm (vector signed int, vector signed int);
17639 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
17640 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
17641 vector unsigned int vec_vsubuwm (vector unsigned int,
17642 vector unsigned int);
17643
17644 vector signed short vec_vsubuhm (vector bool short,
17645 vector signed short);
17646 vector signed short vec_vsubuhm (vector signed short,
17647 vector bool short);
17648 vector signed short vec_vsubuhm (vector signed short,
17649 vector signed short);
17650 vector unsigned short vec_vsubuhm (vector bool short,
17651 vector unsigned short);
17652 vector unsigned short vec_vsubuhm (vector unsigned short,
17653 vector bool short);
17654 vector unsigned short vec_vsubuhm (vector unsigned short,
17655 vector unsigned short);
17656
17657 vector signed char vec_vsububm (vector bool char, vector signed char);
17658 vector signed char vec_vsububm (vector signed char, vector bool char);
17659 vector signed char vec_vsububm (vector signed char, vector signed char);
17660 vector unsigned char vec_vsububm (vector bool char,
17661 vector unsigned char);
17662 vector unsigned char vec_vsububm (vector unsigned char,
17663 vector bool char);
17664 vector unsigned char vec_vsububm (vector unsigned char,
17665 vector unsigned char);
17666
17667 vector signed int vec_subc (vector signed int, vector signed int);
17668 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
17669 vector signed __int128 vec_subc (vector signed __int128,
17670 vector signed __int128);
17671 vector unsigned __int128 vec_subc (vector unsigned __int128,
17672 vector unsigned __int128);
17673
17674 vector signed int vec_sube (vector signed int, vector signed int,
17675 vector signed int);
17676 vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
17677 vector unsigned int);
17678 vector signed __int128 vec_sube (vector signed __int128,
17679 vector signed __int128,
17680 vector signed __int128);
17681 vector unsigned __int128 vec_sube (vector unsigned __int128,
17682 vector unsigned __int128,
17683 vector unsigned __int128);
17684
17685 vector signed int vec_subec (vector signed int, vector signed int,
17686 vector signed int);
17687 vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
17688 vector unsigned int);
17689 vector signed __int128 vec_subec (vector signed __int128,
17690 vector signed __int128,
17691 vector signed __int128);
17692 vector unsigned __int128 vec_subec (vector unsigned __int128,
17693 vector unsigned __int128,
17694 vector unsigned __int128);
17695
17696 vector unsigned char vec_subs (vector bool char, vector unsigned char);
17697 vector unsigned char vec_subs (vector unsigned char, vector bool char);
17698 vector unsigned char vec_subs (vector unsigned char,
17699 vector unsigned char);
17700 vector signed char vec_subs (vector bool char, vector signed char);
17701 vector signed char vec_subs (vector signed char, vector bool char);
17702 vector signed char vec_subs (vector signed char, vector signed char);
17703 vector unsigned short vec_subs (vector bool short,
17704 vector unsigned short);
17705 vector unsigned short vec_subs (vector unsigned short,
17706 vector bool short);
17707 vector unsigned short vec_subs (vector unsigned short,
17708 vector unsigned short);
17709 vector signed short vec_subs (vector bool short, vector signed short);
17710 vector signed short vec_subs (vector signed short, vector bool short);
17711 vector signed short vec_subs (vector signed short, vector signed short);
17712 vector unsigned int vec_subs (vector bool int, vector unsigned int);
17713 vector unsigned int vec_subs (vector unsigned int, vector bool int);
17714 vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
17715 vector signed int vec_subs (vector bool int, vector signed int);
17716 vector signed int vec_subs (vector signed int, vector bool int);
17717 vector signed int vec_subs (vector signed int, vector signed int);
17718
17719 vector signed int vec_vsubsws (vector bool int, vector signed int);
17720 vector signed int vec_vsubsws (vector signed int, vector bool int);
17721 vector signed int vec_vsubsws (vector signed int, vector signed int);
17722
17723 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
17724 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
17725 vector unsigned int vec_vsubuws (vector unsigned int,
17726 vector unsigned int);
17727
17728 vector signed short vec_vsubshs (vector bool short,
17729 vector signed short);
17730 vector signed short vec_vsubshs (vector signed short,
17731 vector bool short);
17732 vector signed short vec_vsubshs (vector signed short,
17733 vector signed short);
17734
17735 vector unsigned short vec_vsubuhs (vector bool short,
17736 vector unsigned short);
17737 vector unsigned short vec_vsubuhs (vector unsigned short,
17738 vector bool short);
17739 vector unsigned short vec_vsubuhs (vector unsigned short,
17740 vector unsigned short);
17741
17742 vector signed char vec_vsubsbs (vector bool char, vector signed char);
17743 vector signed char vec_vsubsbs (vector signed char, vector bool char);
17744 vector signed char vec_vsubsbs (vector signed char, vector signed char);
17745
17746 vector unsigned char vec_vsububs (vector bool char,
17747 vector unsigned char);
17748 vector unsigned char vec_vsububs (vector unsigned char,
17749 vector bool char);
17750 vector unsigned char vec_vsububs (vector unsigned char,
17751 vector unsigned char);
17752
17753 vector unsigned int vec_sum4s (vector unsigned char,
17754 vector unsigned int);
17755 vector signed int vec_sum4s (vector signed char, vector signed int);
17756 vector signed int vec_sum4s (vector signed short, vector signed int);
17757
17758 vector signed int vec_vsum4shs (vector signed short, vector signed int);
17759
17760 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
17761
17762 vector unsigned int vec_vsum4ubs (vector unsigned char,
17763 vector unsigned int);
17764
17765 vector signed int vec_sum2s (vector signed int, vector signed int);
17766
17767 vector signed int vec_sums (vector signed int, vector signed int);
17768
17769 vector float vec_trunc (vector float);
17770
17771 vector signed long long vec_unsigned (vector double);
17772 vector signed int vec_unsigned (vector float);
17773
17774 vector signed int vec_unsignede (vector double);
17775 vector signed int vec_unsignedo (vector double);
17776 vector signed int vec_unsigned2 (vector double, vector double);
17777
17778 vector signed short vec_unpackh (vector signed char);
17779 vector bool short vec_unpackh (vector bool char);
17780 vector signed int vec_unpackh (vector signed short);
17781 vector bool int vec_unpackh (vector bool short);
17782 vector unsigned int vec_unpackh (vector pixel);
17783
17784 vector bool int vec_vupkhsh (vector bool short);
17785 vector signed int vec_vupkhsh (vector signed short);
17786
17787 vector unsigned int vec_vupkhpx (vector pixel);
17788
17789 vector bool short vec_vupkhsb (vector bool char);
17790 vector signed short vec_vupkhsb (vector signed char);
17791
17792 vector signed short vec_unpackl (vector signed char);
17793 vector bool short vec_unpackl (vector bool char);
17794 vector unsigned int vec_unpackl (vector pixel);
17795 vector signed int vec_unpackl (vector signed short);
17796 vector bool int vec_unpackl (vector bool short);
17797
17798 vector unsigned int vec_vupklpx (vector pixel);
17799
17800 vector bool int vec_vupklsh (vector bool short);
17801 vector signed int vec_vupklsh (vector signed short);
17802
17803 vector bool short vec_vupklsb (vector bool char);
17804 vector signed short vec_vupklsb (vector signed char);
17805
17806 vector float vec_xor (vector float, vector float);
17807 vector float vec_xor (vector float, vector bool int);
17808 vector float vec_xor (vector bool int, vector float);
17809 vector bool int vec_xor (vector bool int, vector bool int);
17810 vector signed int vec_xor (vector bool int, vector signed int);
17811 vector signed int vec_xor (vector signed int, vector bool int);
17812 vector signed int vec_xor (vector signed int, vector signed int);
17813 vector unsigned int vec_xor (vector bool int, vector unsigned int);
17814 vector unsigned int vec_xor (vector unsigned int, vector bool int);
17815 vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
17816 vector bool short vec_xor (vector bool short, vector bool short);
17817 vector signed short vec_xor (vector bool short, vector signed short);
17818 vector signed short vec_xor (vector signed short, vector bool short);
17819 vector signed short vec_xor (vector signed short, vector signed short);
17820 vector unsigned short vec_xor (vector bool short,
17821 vector unsigned short);
17822 vector unsigned short vec_xor (vector unsigned short,
17823 vector bool short);
17824 vector unsigned short vec_xor (vector unsigned short,
17825 vector unsigned short);
17826 vector signed char vec_xor (vector bool char, vector signed char);
17827 vector bool char vec_xor (vector bool char, vector bool char);
17828 vector signed char vec_xor (vector signed char, vector bool char);
17829 vector signed char vec_xor (vector signed char, vector signed char);
17830 vector unsigned char vec_xor (vector bool char, vector unsigned char);
17831 vector unsigned char vec_xor (vector unsigned char, vector bool char);
17832 vector unsigned char vec_xor (vector unsigned char,
17833 vector unsigned char);
17834 16297
17835 int vec_all_eq (vector signed char, vector bool char); 16298 int vec_all_eq (vector signed char, vector bool char);
17836 int vec_all_eq (vector signed char, vector signed char); 16299 int vec_all_eq (vector signed char, vector signed char);
17837 int vec_all_eq (vector unsigned char, vector bool char); 16300 int vec_all_eq (vector unsigned char, vector bool char);
17838 int vec_all_eq (vector unsigned char, vector unsigned char); 16301 int vec_all_eq (vector unsigned char, vector unsigned char);
17972 16435
17973 int vec_all_nlt (vector float, vector float); 16436 int vec_all_nlt (vector float, vector float);
17974 16437
17975 int vec_all_numeric (vector float); 16438 int vec_all_numeric (vector float);
17976 16439
16440 vector float vec_and (vector float, vector float);
16441 vector float vec_and (vector float, vector bool int);
16442 vector float vec_and (vector bool int, vector float);
16443 vector bool int vec_and (vector bool int, vector bool int);
16444 vector signed int vec_and (vector bool int, vector signed int);
16445 vector signed int vec_and (vector signed int, vector bool int);
16446 vector signed int vec_and (vector signed int, vector signed int);
16447 vector unsigned int vec_and (vector bool int, vector unsigned int);
16448 vector unsigned int vec_and (vector unsigned int, vector bool int);
16449 vector unsigned int vec_and (vector unsigned int, vector unsigned int);
16450 vector bool short vec_and (vector bool short, vector bool short);
16451 vector signed short vec_and (vector bool short, vector signed short);
16452 vector signed short vec_and (vector signed short, vector bool short);
16453 vector signed short vec_and (vector signed short, vector signed short);
16454 vector unsigned short vec_and (vector bool short, vector unsigned short);
16455 vector unsigned short vec_and (vector unsigned short, vector bool short);
16456 vector unsigned short vec_and (vector unsigned short, vector unsigned short);
16457 vector signed char vec_and (vector bool char, vector signed char);
16458 vector bool char vec_and (vector bool char, vector bool char);
16459 vector signed char vec_and (vector signed char, vector bool char);
16460 vector signed char vec_and (vector signed char, vector signed char);
16461 vector unsigned char vec_and (vector bool char, vector unsigned char);
16462 vector unsigned char vec_and (vector unsigned char, vector bool char);
16463 vector unsigned char vec_and (vector unsigned char, vector unsigned char);
16464
16465 vector float vec_andc (vector float, vector float);
16466 vector float vec_andc (vector float, vector bool int);
16467 vector float vec_andc (vector bool int, vector float);
16468 vector bool int vec_andc (vector bool int, vector bool int);
16469 vector signed int vec_andc (vector bool int, vector signed int);
16470 vector signed int vec_andc (vector signed int, vector bool int);
16471 vector signed int vec_andc (vector signed int, vector signed int);
16472 vector unsigned int vec_andc (vector bool int, vector unsigned int);
16473 vector unsigned int vec_andc (vector unsigned int, vector bool int);
16474 vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
16475 vector bool short vec_andc (vector bool short, vector bool short);
16476 vector signed short vec_andc (vector bool short, vector signed short);
16477 vector signed short vec_andc (vector signed short, vector bool short);
16478 vector signed short vec_andc (vector signed short, vector signed short);
16479 vector unsigned short vec_andc (vector bool short, vector unsigned short);
16480 vector unsigned short vec_andc (vector unsigned short, vector bool short);
16481 vector unsigned short vec_andc (vector unsigned short, vector unsigned short);
16482 vector signed char vec_andc (vector bool char, vector signed char);
16483 vector bool char vec_andc (vector bool char, vector bool char);
16484 vector signed char vec_andc (vector signed char, vector bool char);
16485 vector signed char vec_andc (vector signed char, vector signed char);
16486 vector unsigned char vec_andc (vector bool char, vector unsigned char);
16487 vector unsigned char vec_andc (vector unsigned char, vector bool char);
16488 vector unsigned char vec_andc (vector unsigned char, vector unsigned char);
16489
17977 int vec_any_eq (vector signed char, vector bool char); 16490 int vec_any_eq (vector signed char, vector bool char);
17978 int vec_any_eq (vector signed char, vector signed char); 16491 int vec_any_eq (vector signed char, vector signed char);
17979 int vec_any_eq (vector unsigned char, vector bool char); 16492 int vec_any_eq (vector unsigned char, vector bool char);
17980 int vec_any_eq (vector unsigned char, vector unsigned char); 16493 int vec_any_eq (vector unsigned char, vector unsigned char);
17981 int vec_any_eq (vector bool char, vector bool char); 16494 int vec_any_eq (vector bool char, vector bool char);
18113 int vec_any_nlt (vector float, vector float); 16626 int vec_any_nlt (vector float, vector float);
18114 16627
18115 int vec_any_numeric (vector float); 16628 int vec_any_numeric (vector float);
18116 16629
18117 int vec_any_out (vector float, vector float); 16630 int vec_any_out (vector float, vector float);
18118 @end smallexample 16631
18119 16632 vector unsigned char vec_avg (vector unsigned char, vector unsigned char);
18120 If the vector/scalar (VSX) instruction set is available, the following 16633 vector signed char vec_avg (vector signed char, vector signed char);
18121 additional functions are available: 16634 vector unsigned short vec_avg (vector unsigned short, vector unsigned short);
18122 16635 vector signed short vec_avg (vector signed short, vector signed short);
18123 @smallexample 16636 vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
16637 vector signed int vec_avg (vector signed int, vector signed int);
16638
16639 vector float vec_ceil (vector float);
16640
16641 vector signed int vec_cmpb (vector float, vector float);
16642
16643 vector bool char vec_cmpeq (vector bool char, vector bool char);
16644 vector bool short vec_cmpeq (vector bool short, vector bool short);
16645 vector bool int vec_cmpeq (vector bool int, vector bool int);
16646 vector bool char vec_cmpeq (vector signed char, vector signed char);
16647 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
16648 vector bool short vec_cmpeq (vector signed short, vector signed short);
16649 vector bool short vec_cmpeq (vector unsigned short, vector unsigned short);
16650 vector bool int vec_cmpeq (vector signed int, vector signed int);
16651 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
16652 vector bool int vec_cmpeq (vector float, vector float);
16653
16654 vector bool int vec_cmpge (vector float, vector float);
16655
16656 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
16657 vector bool char vec_cmpgt (vector signed char, vector signed char);
16658 vector bool short vec_cmpgt (vector unsigned short, vector unsigned short);
16659 vector bool short vec_cmpgt (vector signed short, vector signed short);
16660 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
16661 vector bool int vec_cmpgt (vector signed int, vector signed int);
16662 vector bool int vec_cmpgt (vector float, vector float);
16663
16664 vector bool int vec_cmple (vector float, vector float);
16665
16666 vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
16667 vector bool char vec_cmplt (vector signed char, vector signed char);
16668 vector bool short vec_cmplt (vector unsigned short, vector unsigned short);
16669 vector bool short vec_cmplt (vector signed short, vector signed short);
16670 vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
16671 vector bool int vec_cmplt (vector signed int, vector signed int);
16672 vector bool int vec_cmplt (vector float, vector float);
16673
16674 vector float vec_cpsgn (vector float, vector float);
16675
16676 vector float vec_ctf (vector unsigned int, const int);
16677 vector float vec_ctf (vector signed int, const int);
16678
16679 vector signed int vec_cts (vector float, const int);
16680
16681 vector unsigned int vec_ctu (vector float, const int);
16682
16683 void vec_dss (const int);
16684
16685 void vec_dssall (void);
16686
16687 void vec_dst (const vector unsigned char *, int, const int);
16688 void vec_dst (const vector signed char *, int, const int);
16689 void vec_dst (const vector bool char *, int, const int);
16690 void vec_dst (const vector unsigned short *, int, const int);
16691 void vec_dst (const vector signed short *, int, const int);
16692 void vec_dst (const vector bool short *, int, const int);
16693 void vec_dst (const vector pixel *, int, const int);
16694 void vec_dst (const vector unsigned int *, int, const int);
16695 void vec_dst (const vector signed int *, int, const int);
16696 void vec_dst (const vector bool int *, int, const int);
16697 void vec_dst (const vector float *, int, const int);
16698 void vec_dst (const unsigned char *, int, const int);
16699 void vec_dst (const signed char *, int, const int);
16700 void vec_dst (const unsigned short *, int, const int);
16701 void vec_dst (const short *, int, const int);
16702 void vec_dst (const unsigned int *, int, const int);
16703 void vec_dst (const int *, int, const int);
16704 void vec_dst (const float *, int, const int);
16705
16706 void vec_dstst (const vector unsigned char *, int, const int);
16707 void vec_dstst (const vector signed char *, int, const int);
16708 void vec_dstst (const vector bool char *, int, const int);
16709 void vec_dstst (const vector unsigned short *, int, const int);
16710 void vec_dstst (const vector signed short *, int, const int);
16711 void vec_dstst (const vector bool short *, int, const int);
16712 void vec_dstst (const vector pixel *, int, const int);
16713 void vec_dstst (const vector unsigned int *, int, const int);
16714 void vec_dstst (const vector signed int *, int, const int);
16715 void vec_dstst (const vector bool int *, int, const int);
16716 void vec_dstst (const vector float *, int, const int);
16717 void vec_dstst (const unsigned char *, int, const int);
16718 void vec_dstst (const signed char *, int, const int);
16719 void vec_dstst (const unsigned short *, int, const int);
16720 void vec_dstst (const short *, int, const int);
16721 void vec_dstst (const unsigned int *, int, const int);
16722 void vec_dstst (const int *, int, const int);
16723 void vec_dstst (const unsigned long *, int, const int);
16724 void vec_dstst (const long *, int, const int);
16725 void vec_dstst (const float *, int, const int);
16726
16727 void vec_dststt (const vector unsigned char *, int, const int);
16728 void vec_dststt (const vector signed char *, int, const int);
16729 void vec_dststt (const vector bool char *, int, const int);
16730 void vec_dststt (const vector unsigned short *, int, const int);
16731 void vec_dststt (const vector signed short *, int, const int);
16732 void vec_dststt (const vector bool short *, int, const int);
16733 void vec_dststt (const vector pixel *, int, const int);
16734 void vec_dststt (const vector unsigned int *, int, const int);
16735 void vec_dststt (const vector signed int *, int, const int);
16736 void vec_dststt (const vector bool int *, int, const int);
16737 void vec_dststt (const vector float *, int, const int);
16738 void vec_dststt (const unsigned char *, int, const int);
16739 void vec_dststt (const signed char *, int, const int);
16740 void vec_dststt (const unsigned short *, int, const int);
16741 void vec_dststt (const short *, int, const int);
16742 void vec_dststt (const unsigned int *, int, const int);
16743 void vec_dststt (const int *, int, const int);
16744 void vec_dststt (const float *, int, const int);
16745
16746 void vec_dstt (const vector unsigned char *, int, const int);
16747 void vec_dstt (const vector signed char *, int, const int);
16748 void vec_dstt (const vector bool char *, int, const int);
16749 void vec_dstt (const vector unsigned short *, int, const int);
16750 void vec_dstt (const vector signed short *, int, const int);
16751 void vec_dstt (const vector bool short *, int, const int);
16752 void vec_dstt (const vector pixel *, int, const int);
16753 void vec_dstt (const vector unsigned int *, int, const int);
16754 void vec_dstt (const vector signed int *, int, const int);
16755 void vec_dstt (const vector bool int *, int, const int);
16756 void vec_dstt (const vector float *, int, const int);
16757 void vec_dstt (const unsigned char *, int, const int);
16758 void vec_dstt (const signed char *, int, const int);
16759 void vec_dstt (const unsigned short *, int, const int);
16760 void vec_dstt (const short *, int, const int);
16761 void vec_dstt (const unsigned int *, int, const int);
16762 void vec_dstt (const int *, int, const int);
16763 void vec_dstt (const float *, int, const int);
16764
16765 vector float vec_expte (vector float);
16766
16767 vector float vec_floor (vector float);
16768
16769 vector float vec_ld (int, const vector float *);
16770 vector float vec_ld (int, const float *);
16771 vector bool int vec_ld (int, const vector bool int *);
16772 vector signed int vec_ld (int, const vector signed int *);
16773 vector signed int vec_ld (int, const int *);
16774 vector unsigned int vec_ld (int, const vector unsigned int *);
16775 vector unsigned int vec_ld (int, const unsigned int *);
16776 vector bool short vec_ld (int, const vector bool short *);
16777 vector pixel vec_ld (int, const vector pixel *);
16778 vector signed short vec_ld (int, const vector signed short *);
16779 vector signed short vec_ld (int, const short *);
16780 vector unsigned short vec_ld (int, const vector unsigned short *);
16781 vector unsigned short vec_ld (int, const unsigned short *);
16782 vector bool char vec_ld (int, const vector bool char *);
16783 vector signed char vec_ld (int, const vector signed char *);
16784 vector signed char vec_ld (int, const signed char *);
16785 vector unsigned char vec_ld (int, const vector unsigned char *);
16786 vector unsigned char vec_ld (int, const unsigned char *);
16787
16788 vector signed char vec_lde (int, const signed char *);
16789 vector unsigned char vec_lde (int, const unsigned char *);
16790 vector signed short vec_lde (int, const short *);
16791 vector unsigned short vec_lde (int, const unsigned short *);
16792 vector float vec_lde (int, const float *);
16793 vector signed int vec_lde (int, const int *);
16794 vector unsigned int vec_lde (int, const unsigned int *);
16795
16796 vector float vec_ldl (int, const vector float *);
16797 vector float vec_ldl (int, const float *);
16798 vector bool int vec_ldl (int, const vector bool int *);
16799 vector signed int vec_ldl (int, const vector signed int *);
16800 vector signed int vec_ldl (int, const int *);
16801 vector unsigned int vec_ldl (int, const vector unsigned int *);
16802 vector unsigned int vec_ldl (int, const unsigned int *);
16803 vector bool short vec_ldl (int, const vector bool short *);
16804 vector pixel vec_ldl (int, const vector pixel *);
16805 vector signed short vec_ldl (int, const vector signed short *);
16806 vector signed short vec_ldl (int, const short *);
16807 vector unsigned short vec_ldl (int, const vector unsigned short *);
16808 vector unsigned short vec_ldl (int, const unsigned short *);
16809 vector bool char vec_ldl (int, const vector bool char *);
16810 vector signed char vec_ldl (int, const vector signed char *);
16811 vector signed char vec_ldl (int, const signed char *);
16812 vector unsigned char vec_ldl (int, const vector unsigned char *);
16813 vector unsigned char vec_ldl (int, const unsigned char *);
16814
16815 vector float vec_loge (vector float);
16816
16817 vector signed char vec_lvebx (int, char *);
16818 vector unsigned char vec_lvebx (int, unsigned char *);
16819
16820 vector signed short vec_lvehx (int, short *);
16821 vector unsigned short vec_lvehx (int, unsigned short *);
16822
16823 vector float vec_lvewx (int, float *);
16824 vector signed int vec_lvewx (int, int *);
16825 vector unsigned int vec_lvewx (int, unsigned int *);
16826
16827 vector unsigned char vec_lvsl (int, const unsigned char *);
16828 vector unsigned char vec_lvsl (int, const signed char *);
16829 vector unsigned char vec_lvsl (int, const unsigned short *);
16830 vector unsigned char vec_lvsl (int, const short *);
16831 vector unsigned char vec_lvsl (int, const unsigned int *);
16832 vector unsigned char vec_lvsl (int, const int *);
16833 vector unsigned char vec_lvsl (int, const float *);
16834
16835 vector unsigned char vec_lvsr (int, const unsigned char *);
16836 vector unsigned char vec_lvsr (int, const signed char *);
16837 vector unsigned char vec_lvsr (int, const unsigned short *);
16838 vector unsigned char vec_lvsr (int, const short *);
16839 vector unsigned char vec_lvsr (int, const unsigned int *);
16840 vector unsigned char vec_lvsr (int, const int *);
16841 vector unsigned char vec_lvsr (int, const float *);
16842
16843 vector float vec_madd (vector float, vector float, vector float);
16844
16845 vector signed short vec_madds (vector signed short, vector signed short,
16846 vector signed short);
16847
16848 vector unsigned char vec_max (vector bool char, vector unsigned char);
16849 vector unsigned char vec_max (vector unsigned char, vector bool char);
16850 vector unsigned char vec_max (vector unsigned char, vector unsigned char);
16851 vector signed char vec_max (vector bool char, vector signed char);
16852 vector signed char vec_max (vector signed char, vector bool char);
16853 vector signed char vec_max (vector signed char, vector signed char);
16854 vector unsigned short vec_max (vector bool short, vector unsigned short);
16855 vector unsigned short vec_max (vector unsigned short, vector bool short);
16856 vector unsigned short vec_max (vector unsigned short, vector unsigned short);
16857 vector signed short vec_max (vector bool short, vector signed short);
16858 vector signed short vec_max (vector signed short, vector bool short);
16859 vector signed short vec_max (vector signed short, vector signed short);
16860 vector unsigned int vec_max (vector bool int, vector unsigned int);
16861 vector unsigned int vec_max (vector unsigned int, vector bool int);
16862 vector unsigned int vec_max (vector unsigned int, vector unsigned int);
16863 vector signed int vec_max (vector bool int, vector signed int);
16864 vector signed int vec_max (vector signed int, vector bool int);
16865 vector signed int vec_max (vector signed int, vector signed int);
16866 vector float vec_max (vector float, vector float);
16867
16868 vector bool char vec_mergeh (vector bool char, vector bool char);
16869 vector signed char vec_mergeh (vector signed char, vector signed char);
16870 vector unsigned char vec_mergeh (vector unsigned char, vector unsigned char);
16871 vector bool short vec_mergeh (vector bool short, vector bool short);
16872 vector pixel vec_mergeh (vector pixel, vector pixel);
16873 vector signed short vec_mergeh (vector signed short, vector signed short);
16874 vector unsigned short vec_mergeh (vector unsigned short, vector unsigned short);
16875 vector float vec_mergeh (vector float, vector float);
16876 vector bool int vec_mergeh (vector bool int, vector bool int);
16877 vector signed int vec_mergeh (vector signed int, vector signed int);
16878 vector unsigned int vec_mergeh (vector unsigned int, vector unsigned int);
16879
16880 vector bool char vec_mergel (vector bool char, vector bool char);
16881 vector signed char vec_mergel (vector signed char, vector signed char);
16882 vector unsigned char vec_mergel (vector unsigned char, vector unsigned char);
16883 vector bool short vec_mergel (vector bool short, vector bool short);
16884 vector pixel vec_mergel (vector pixel, vector pixel);
16885 vector signed short vec_mergel (vector signed short, vector signed short);
16886 vector unsigned short vec_mergel (vector unsigned short, vector unsigned short);
16887 vector float vec_mergel (vector float, vector float);
16888 vector bool int vec_mergel (vector bool int, vector bool int);
16889 vector signed int vec_mergel (vector signed int, vector signed int);
16890 vector unsigned int vec_mergel (vector unsigned int, vector unsigned int);
16891
16892 vector unsigned short vec_mfvscr (void);
16893
16894 vector unsigned char vec_min (vector bool char, vector unsigned char);
16895 vector unsigned char vec_min (vector unsigned char, vector bool char);
16896 vector unsigned char vec_min (vector unsigned char, vector unsigned char);
16897 vector signed char vec_min (vector bool char, vector signed char);
16898 vector signed char vec_min (vector signed char, vector bool char);
16899 vector signed char vec_min (vector signed char, vector signed char);
16900 vector unsigned short vec_min (vector bool short, vector unsigned short);
16901 vector unsigned short vec_min (vector unsigned short, vector bool short);
16902 vector unsigned short vec_min (vector unsigned short, vector unsigned short);
16903 vector signed short vec_min (vector bool short, vector signed short);
16904 vector signed short vec_min (vector signed short, vector bool short);
16905 vector signed short vec_min (vector signed short, vector signed short);
16906 vector unsigned int vec_min (vector bool int, vector unsigned int);
16907 vector unsigned int vec_min (vector unsigned int, vector bool int);
16908 vector unsigned int vec_min (vector unsigned int, vector unsigned int);
16909 vector signed int vec_min (vector bool int, vector signed int);
16910 vector signed int vec_min (vector signed int, vector bool int);
16911 vector signed int vec_min (vector signed int, vector signed int);
16912 vector float vec_min (vector float, vector float);
16913
16914 vector signed short vec_mladd (vector signed short, vector signed short,
16915 vector signed short);
16916 vector signed short vec_mladd (vector signed short, vector unsigned short,
16917 vector unsigned short);
16918 vector signed short vec_mladd (vector unsigned short, vector signed short,
16919 vector signed short);
16920 vector unsigned short vec_mladd (vector unsigned short, vector unsigned short,
16921 vector unsigned short);
16922
16923 vector signed short vec_mradds (vector signed short, vector signed short,
16924 vector signed short);
16925
16926 vector unsigned int vec_msum (vector unsigned char, vector unsigned char,
16927 vector unsigned int);
16928 vector signed int vec_msum (vector signed char, vector unsigned char,
16929 vector signed int);
16930 vector unsigned int vec_msum (vector unsigned short, vector unsigned short,
16931 vector unsigned int);
16932 vector signed int vec_msum (vector signed short, vector signed short,
16933 vector signed int);
16934
16935 vector unsigned int vec_msums (vector unsigned short, vector unsigned short,
16936 vector unsigned int);
16937 vector signed int vec_msums (vector signed short, vector signed short,
16938 vector signed int);
16939
16940 void vec_mtvscr (vector signed int);
16941 void vec_mtvscr (vector unsigned int);
16942 void vec_mtvscr (vector bool int);
16943 void vec_mtvscr (vector signed short);
16944 void vec_mtvscr (vector unsigned short);
16945 void vec_mtvscr (vector bool short);
16946 void vec_mtvscr (vector pixel);
16947 void vec_mtvscr (vector signed char);
16948 void vec_mtvscr (vector unsigned char);
16949 void vec_mtvscr (vector bool char);
16950
16951 vector float vec_mul (vector float, vector float);
16952
16953 vector unsigned short vec_mule (vector unsigned char, vector unsigned char);
16954 vector signed short vec_mule (vector signed char, vector signed char);
16955 vector unsigned int vec_mule (vector unsigned short, vector unsigned short);
16956 vector signed int vec_mule (vector signed short, vector signed short);
16957
16958 vector unsigned short vec_mulo (vector unsigned char, vector unsigned char);
16959 vector signed short vec_mulo (vector signed char, vector signed char);
16960 vector unsigned int vec_mulo (vector unsigned short, vector unsigned short);
16961 vector signed int vec_mulo (vector signed short, vector signed short);
16962
16963 vector signed char vec_nabs (vector signed char);
16964 vector signed short vec_nabs (vector signed short);
16965 vector signed int vec_nabs (vector signed int);
16966 vector float vec_nabs (vector float);
16967
16968 vector float vec_nmsub (vector float, vector float, vector float);
16969
16970 vector float vec_nor (vector float, vector float);
16971 vector signed int vec_nor (vector signed int, vector signed int);
16972 vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
16973 vector bool int vec_nor (vector bool int, vector bool int);
16974 vector signed short vec_nor (vector signed short, vector signed short);
16975 vector unsigned short vec_nor (vector unsigned short, vector unsigned short);
16976 vector bool short vec_nor (vector bool short, vector bool short);
16977 vector signed char vec_nor (vector signed char, vector signed char);
16978 vector unsigned char vec_nor (vector unsigned char, vector unsigned char);
16979 vector bool char vec_nor (vector bool char, vector bool char);
16980
16981 vector float vec_or (vector float, vector float);
16982 vector float vec_or (vector float, vector bool int);
16983 vector float vec_or (vector bool int, vector float);
16984 vector bool int vec_or (vector bool int, vector bool int);
16985 vector signed int vec_or (vector bool int, vector signed int);
16986 vector signed int vec_or (vector signed int, vector bool int);
16987 vector signed int vec_or (vector signed int, vector signed int);
16988 vector unsigned int vec_or (vector bool int, vector unsigned int);
16989 vector unsigned int vec_or (vector unsigned int, vector bool int);
16990 vector unsigned int vec_or (vector unsigned int, vector unsigned int);
16991 vector bool short vec_or (vector bool short, vector bool short);
16992 vector signed short vec_or (vector bool short, vector signed short);
16993 vector signed short vec_or (vector signed short, vector bool short);
16994 vector signed short vec_or (vector signed short, vector signed short);
16995 vector unsigned short vec_or (vector bool short, vector unsigned short);
16996 vector unsigned short vec_or (vector unsigned short, vector bool short);
16997 vector unsigned short vec_or (vector unsigned short, vector unsigned short);
16998 vector signed char vec_or (vector bool char, vector signed char);
16999 vector bool char vec_or (vector bool char, vector bool char);
17000 vector signed char vec_or (vector signed char, vector bool char);
17001 vector signed char vec_or (vector signed char, vector signed char);
17002 vector unsigned char vec_or (vector bool char, vector unsigned char);
17003 vector unsigned char vec_or (vector unsigned char, vector bool char);
17004 vector unsigned char vec_or (vector unsigned char, vector unsigned char);
17005
17006 vector signed char vec_pack (vector signed short, vector signed short);
17007 vector unsigned char vec_pack (vector unsigned short, vector unsigned short);
17008 vector bool char vec_pack (vector bool short, vector bool short);
17009 vector signed short vec_pack (vector signed int, vector signed int);
17010 vector unsigned short vec_pack (vector unsigned int, vector unsigned int);
17011 vector bool short vec_pack (vector bool int, vector bool int);
17012
17013 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
17014
17015 vector unsigned char vec_packs (vector unsigned short, vector unsigned short);
17016 vector signed char vec_packs (vector signed short, vector signed short);
17017 vector unsigned short vec_packs (vector unsigned int, vector unsigned int);
17018 vector signed short vec_packs (vector signed int, vector signed int);
17019
17020 vector unsigned char vec_packsu (vector unsigned short, vector unsigned short);
17021 vector unsigned char vec_packsu (vector signed short, vector signed short);
17022 vector unsigned short vec_packsu (vector unsigned int, vector unsigned int);
17023 vector unsigned short vec_packsu (vector signed int, vector signed int);
17024
17025 vector float vec_perm (vector float, vector float, vector unsigned char);
17026 vector signed int vec_perm (vector signed int, vector signed int, vector unsigned char);
17027 vector unsigned int vec_perm (vector unsigned int, vector unsigned int,
17028 vector unsigned char);
17029 vector bool int vec_perm (vector bool int, vector bool int, vector unsigned char);
17030 vector signed short vec_perm (vector signed short, vector signed short,
17031 vector unsigned char);
17032 vector unsigned short vec_perm (vector unsigned short, vector unsigned short,
17033 vector unsigned char);
17034 vector bool short vec_perm (vector bool short, vector bool short, vector unsigned char);
17035 vector pixel vec_perm (vector pixel, vector pixel, vector unsigned char);
17036 vector signed char vec_perm (vector signed char, vector signed char,
17037 vector unsigned char);
17038 vector unsigned char vec_perm (vector unsigned char, vector unsigned char,
17039 vector unsigned char);
17040 vector bool char vec_perm (vector bool char, vector bool char, vector unsigned char);
17041
17042 vector float vec_re (vector float);
17043
17044 vector bool char vec_reve (vector bool char);
17045 vector signed char vec_reve (vector signed char);
17046 vector unsigned char vec_reve (vector unsigned char);
17047 vector bool int vec_reve (vector bool int);
17048 vector signed int vec_reve (vector signed int);
17049 vector unsigned int vec_reve (vector unsigned int);
17050 vector bool short vec_reve (vector bool short);
17051 vector signed short vec_reve (vector signed short);
17052 vector unsigned short vec_reve (vector unsigned short);
17053
17054 vector signed char vec_rl (vector signed char, vector unsigned char);
17055 vector unsigned char vec_rl (vector unsigned char, vector unsigned char);
17056 vector signed short vec_rl (vector signed short, vector unsigned short);
17057 vector unsigned short vec_rl (vector unsigned short, vector unsigned short);
17058 vector signed int vec_rl (vector signed int, vector unsigned int);
17059 vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
17060
17061 vector float vec_round (vector float);
17062
17063 vector float vec_rsqrt (vector float);
17064
17065 vector float vec_rsqrte (vector float);
17066
17067 vector float vec_sel (vector float, vector float, vector bool int);
17068 vector float vec_sel (vector float, vector float, vector unsigned int);
17069 vector signed int vec_sel (vector signed int, vector signed int, vector bool int);
17070 vector signed int vec_sel (vector signed int, vector signed int, vector unsigned int);
17071 vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector bool int);
17072 vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
17073 vector unsigned int);
17074 vector bool int vec_sel (vector bool int, vector bool int, vector bool int);
17075 vector bool int vec_sel (vector bool int, vector bool int, vector unsigned int);
17076 vector signed short vec_sel (vector signed short, vector signed short,
17077 vector bool short);
17078 vector signed short vec_sel (vector signed short, vector signed short,
17079 vector unsigned short);
17080 vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
17081 vector bool short);
17082 vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
17083 vector unsigned short);
17084 vector bool short vec_sel (vector bool short, vector bool short, vector bool short);
17085 vector bool short vec_sel (vector bool short, vector bool short, vector unsigned short);
17086 vector signed char vec_sel (vector signed char, vector signed char, vector bool char);
17087 vector signed char vec_sel (vector signed char, vector signed char,
17088 vector unsigned char);
17089 vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
17090 vector bool char);
17091 vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
17092 vector unsigned char);
17093 vector bool char vec_sel (vector bool char, vector bool char, vector bool char);
17094 vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char);
17095
17096 vector signed char vec_sl (vector signed char, vector unsigned char);
17097 vector unsigned char vec_sl (vector unsigned char, vector unsigned char);
17098 vector signed short vec_sl (vector signed short, vector unsigned short);
17099 vector unsigned short vec_sl (vector unsigned short, vector unsigned short);
17100 vector signed int vec_sl (vector signed int, vector unsigned int);
17101 vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
17102
17103 vector float vec_sld (vector float, vector float, const int);
17104 vector signed int vec_sld (vector signed int, vector signed int, const int);
17105 vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int);
17106 vector bool int vec_sld (vector bool int, vector bool int, const int);
17107 vector signed short vec_sld (vector signed short, vector signed short, const int);
17108 vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int);
17109 vector bool short vec_sld (vector bool short, vector bool short, const int);
17110 vector pixel vec_sld (vector pixel, vector pixel, const int);
17111 vector signed char vec_sld (vector signed char, vector signed char, const int);
17112 vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int);
17113 vector bool char vec_sld (vector bool char, vector bool char, const int);
17114
17115 vector signed int vec_sll (vector signed int, vector unsigned int);
17116 vector signed int vec_sll (vector signed int, vector unsigned short);
17117 vector signed int vec_sll (vector signed int, vector unsigned char);
17118 vector unsigned int vec_sll (vector unsigned int, vector unsigned int);
17119 vector unsigned int vec_sll (vector unsigned int, vector unsigned short);
17120 vector unsigned int vec_sll (vector unsigned int, vector unsigned char);
17121 vector bool int vec_sll (vector bool int, vector unsigned int);
17122 vector bool int vec_sll (vector bool int, vector unsigned short);
17123 vector bool int vec_sll (vector bool int, vector unsigned char);
17124 vector signed short vec_sll (vector signed short, vector unsigned int);
17125 vector signed short vec_sll (vector signed short, vector unsigned short);
17126 vector signed short vec_sll (vector signed short, vector unsigned char);
17127 vector unsigned short vec_sll (vector unsigned short, vector unsigned int);
17128 vector unsigned short vec_sll (vector unsigned short, vector unsigned short);
17129 vector unsigned short vec_sll (vector unsigned short, vector unsigned char);
17130 vector bool short vec_sll (vector bool short, vector unsigned int);
17131 vector bool short vec_sll (vector bool short, vector unsigned short);
17132 vector bool short vec_sll (vector bool short, vector unsigned char);
17133 vector pixel vec_sll (vector pixel, vector unsigned int);
17134 vector pixel vec_sll (vector pixel, vector unsigned short);
17135 vector pixel vec_sll (vector pixel, vector unsigned char);
17136 vector signed char vec_sll (vector signed char, vector unsigned int);
17137 vector signed char vec_sll (vector signed char, vector unsigned short);
17138 vector signed char vec_sll (vector signed char, vector unsigned char);
17139 vector unsigned char vec_sll (vector unsigned char, vector unsigned int);
17140 vector unsigned char vec_sll (vector unsigned char, vector unsigned short);
17141 vector unsigned char vec_sll (vector unsigned char, vector unsigned char);
17142 vector bool char vec_sll (vector bool char, vector unsigned int);
17143 vector bool char vec_sll (vector bool char, vector unsigned short);
17144 vector bool char vec_sll (vector bool char, vector unsigned char);
17145
17146 vector float vec_slo (vector float, vector signed char);
17147 vector float vec_slo (vector float, vector unsigned char);
17148 vector signed int vec_slo (vector signed int, vector signed char);
17149 vector signed int vec_slo (vector signed int, vector unsigned char);
17150 vector unsigned int vec_slo (vector unsigned int, vector signed char);
17151 vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
17152 vector signed short vec_slo (vector signed short, vector signed char);
17153 vector signed short vec_slo (vector signed short, vector unsigned char);
17154 vector unsigned short vec_slo (vector unsigned short, vector signed char);
17155 vector unsigned short vec_slo (vector unsigned short, vector unsigned char);
17156 vector pixel vec_slo (vector pixel, vector signed char);
17157 vector pixel vec_slo (vector pixel, vector unsigned char);
17158 vector signed char vec_slo (vector signed char, vector signed char);
17159 vector signed char vec_slo (vector signed char, vector unsigned char);
17160 vector unsigned char vec_slo (vector unsigned char, vector signed char);
17161 vector unsigned char vec_slo (vector unsigned char, vector unsigned char);
17162
17163 vector signed char vec_splat (vector signed char, const int);
17164 vector unsigned char vec_splat (vector unsigned char, const int);
17165 vector bool char vec_splat (vector bool char, const int);
17166 vector signed short vec_splat (vector signed short, const int);
17167 vector unsigned short vec_splat (vector unsigned short, const int);
17168 vector bool short vec_splat (vector bool short, const int);
17169 vector pixel vec_splat (vector pixel, const int);
17170 vector float vec_splat (vector float, const int);
17171 vector signed int vec_splat (vector signed int, const int);
17172 vector unsigned int vec_splat (vector unsigned int, const int);
17173 vector bool int vec_splat (vector bool int, const int);
17174
17175 vector signed short vec_splat_s16 (const int);
17176
17177 vector signed int vec_splat_s32 (const int);
17178
17179 vector signed char vec_splat_s8 (const int);
17180
17181 vector unsigned short vec_splat_u16 (const int);
17182
17183 vector unsigned int vec_splat_u32 (const int);
17184
17185 vector unsigned char vec_splat_u8 (const int);
17186
17187 vector signed char vec_splats (signed char);
17188 vector unsigned char vec_splats (unsigned char);
17189 vector signed short vec_splats (signed short);
17190 vector unsigned short vec_splats (unsigned short);
17191 vector signed int vec_splats (signed int);
17192 vector unsigned int vec_splats (unsigned int);
17193 vector float vec_splats (float);
17194
17195 vector signed char vec_sr (vector signed char, vector unsigned char);
17196 vector unsigned char vec_sr (vector unsigned char, vector unsigned char);
17197 vector signed short vec_sr (vector signed short, vector unsigned short);
17198 vector unsigned short vec_sr (vector unsigned short, vector unsigned short);
17199 vector signed int vec_sr (vector signed int, vector unsigned int);
17200 vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
17201
17202 vector signed char vec_sra (vector signed char, vector unsigned char);
17203 vector unsigned char vec_sra (vector unsigned char, vector unsigned char);
17204 vector signed short vec_sra (vector signed short, vector unsigned short);
17205 vector unsigned short vec_sra (vector unsigned short, vector unsigned short);
17206 vector signed int vec_sra (vector signed int, vector unsigned int);
17207 vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
17208
17209 vector signed int vec_srl (vector signed int, vector unsigned int);
17210 vector signed int vec_srl (vector signed int, vector unsigned short);
17211 vector signed int vec_srl (vector signed int, vector unsigned char);
17212 vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
17213 vector unsigned int vec_srl (vector unsigned int, vector unsigned short);
17214 vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
17215 vector bool int vec_srl (vector bool int, vector unsigned int);
17216 vector bool int vec_srl (vector bool int, vector unsigned short);
17217 vector bool int vec_srl (vector bool int, vector unsigned char);
17218 vector signed short vec_srl (vector signed short, vector unsigned int);
17219 vector signed short vec_srl (vector signed short, vector unsigned short);
17220 vector signed short vec_srl (vector signed short, vector unsigned char);
17221 vector unsigned short vec_srl (vector unsigned short, vector unsigned int);
17222 vector unsigned short vec_srl (vector unsigned short, vector unsigned short);
17223 vector unsigned short vec_srl (vector unsigned short, vector unsigned char);
17224 vector bool short vec_srl (vector bool short, vector unsigned int);
17225 vector bool short vec_srl (vector bool short, vector unsigned short);
17226 vector bool short vec_srl (vector bool short, vector unsigned char);
17227 vector pixel vec_srl (vector pixel, vector unsigned int);
17228 vector pixel vec_srl (vector pixel, vector unsigned short);
17229 vector pixel vec_srl (vector pixel, vector unsigned char);
17230 vector signed char vec_srl (vector signed char, vector unsigned int);
17231 vector signed char vec_srl (vector signed char, vector unsigned short);
17232 vector signed char vec_srl (vector signed char, vector unsigned char);
17233 vector unsigned char vec_srl (vector unsigned char, vector unsigned int);
17234 vector unsigned char vec_srl (vector unsigned char, vector unsigned short);
17235 vector unsigned char vec_srl (vector unsigned char, vector unsigned char);
17236 vector bool char vec_srl (vector bool char, vector unsigned int);
17237 vector bool char vec_srl (vector bool char, vector unsigned short);
17238 vector bool char vec_srl (vector bool char, vector unsigned char);
17239
17240 vector float vec_sro (vector float, vector signed char);
17241 vector float vec_sro (vector float, vector unsigned char);
17242 vector signed int vec_sro (vector signed int, vector signed char);
17243 vector signed int vec_sro (vector signed int, vector unsigned char);
17244 vector unsigned int vec_sro (vector unsigned int, vector signed char);
17245 vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
17246 vector signed short vec_sro (vector signed short, vector signed char);
17247 vector signed short vec_sro (vector signed short, vector unsigned char);
17248 vector unsigned short vec_sro (vector unsigned short, vector signed char);
17249 vector unsigned short vec_sro (vector unsigned short, vector unsigned char);
17250 vector pixel vec_sro (vector pixel, vector signed char);
17251 vector pixel vec_sro (vector pixel, vector unsigned char);
17252 vector signed char vec_sro (vector signed char, vector signed char);
17253 vector signed char vec_sro (vector signed char, vector unsigned char);
17254 vector unsigned char vec_sro (vector unsigned char, vector signed char);
17255 vector unsigned char vec_sro (vector unsigned char, vector unsigned char);
17256
17257 void vec_st (vector float, int, vector float *);
17258 void vec_st (vector float, int, float *);
17259 void vec_st (vector signed int, int, vector signed int *);
17260 void vec_st (vector signed int, int, int *);
17261 void vec_st (vector unsigned int, int, vector unsigned int *);
17262 void vec_st (vector unsigned int, int, unsigned int *);
17263 void vec_st (vector bool int, int, vector bool int *);
17264 void vec_st (vector bool int, int, unsigned int *);
17265 void vec_st (vector bool int, int, int *);
17266 void vec_st (vector signed short, int, vector signed short *);
17267 void vec_st (vector signed short, int, short *);
17268 void vec_st (vector unsigned short, int, vector unsigned short *);
17269 void vec_st (vector unsigned short, int, unsigned short *);
17270 void vec_st (vector bool short, int, vector bool short *);
17271 void vec_st (vector bool short, int, unsigned short *);
17272 void vec_st (vector pixel, int, vector pixel *);
17273 void vec_st (vector bool short, int, short *);
17274 void vec_st (vector signed char, int, vector signed char *);
17275 void vec_st (vector signed char, int, signed char *);
17276 void vec_st (vector unsigned char, int, vector unsigned char *);
17277 void vec_st (vector unsigned char, int, unsigned char *);
17278 void vec_st (vector bool char, int, vector bool char *);
17279 void vec_st (vector bool char, int, unsigned char *);
17280 void vec_st (vector bool char, int, signed char *);
17281
17282 void vec_ste (vector signed char, int, signed char *);
17283 void vec_ste (vector unsigned char, int, unsigned char *);
17284 void vec_ste (vector bool char, int, signed char *);
17285 void vec_ste (vector bool char, int, unsigned char *);
17286 void vec_ste (vector signed short, int, short *);
17287 void vec_ste (vector unsigned short, int, unsigned short *);
17288 void vec_ste (vector bool short, int, short *);
17289 void vec_ste (vector bool short, int, unsigned short *);
17290 void vec_ste (vector pixel, int, short *);
17291 void vec_ste (vector pixel, int, unsigned short *);
17292 void vec_ste (vector float, int, float *);
17293 void vec_ste (vector signed int, int, int *);
17294 void vec_ste (vector unsigned int, int, unsigned int *);
17295 void vec_ste (vector bool int, int, int *);
17296 void vec_ste (vector bool int, int, unsigned int *);
17297
17298 void vec_stl (vector float, int, vector float *);
17299 void vec_stl (vector float, int, float *);
17300 void vec_stl (vector signed int, int, vector signed int *);
17301 void vec_stl (vector signed int, int, int *);
17302 void vec_stl (vector unsigned int, int, vector unsigned int *);
17303 void vec_stl (vector unsigned int, int, unsigned int *);
17304 void vec_stl (vector bool int, int, vector bool int *);
17305 void vec_stl (vector bool int, int, unsigned int *);
17306 void vec_stl (vector bool int, int, int *);
17307 void vec_stl (vector signed short, int, vector signed short *);
17308 void vec_stl (vector signed short, int, short *);
17309 void vec_stl (vector unsigned short, int, vector unsigned short *);
17310 void vec_stl (vector unsigned short, int, unsigned short *);
17311 void vec_stl (vector bool short, int, vector bool short *);
17312 void vec_stl (vector bool short, int, unsigned short *);
17313 void vec_stl (vector bool short, int, short *);
17314 void vec_stl (vector pixel, int, vector pixel *);
17315 void vec_stl (vector signed char, int, vector signed char *);
17316 void vec_stl (vector signed char, int, signed char *);
17317 void vec_stl (vector unsigned char, int, vector unsigned char *);
17318 void vec_stl (vector unsigned char, int, unsigned char *);
17319 void vec_stl (vector bool char, int, vector bool char *);
17320 void vec_stl (vector bool char, int, unsigned char *);
17321 void vec_stl (vector bool char, int, signed char *);
17322
17323 void vec_stvebx (vector signed char, int, signed char *);
17324 void vec_stvebx (vector unsigned char, int, unsigned char *);
17325 void vec_stvebx (vector bool char, int, signed char *);
17326 void vec_stvebx (vector bool char, int, unsigned char *);
17327
17328 void vec_stvehx (vector signed short, int, short *);
17329 void vec_stvehx (vector unsigned short, int, unsigned short *);
17330 void vec_stvehx (vector bool short, int, short *);
17331 void vec_stvehx (vector bool short, int, unsigned short *);
17332
17333 void vec_stvewx (vector float, int, float *);
17334 void vec_stvewx (vector signed int, int, int *);
17335 void vec_stvewx (vector unsigned int, int, unsigned int *);
17336 void vec_stvewx (vector bool int, int, int *);
17337 void vec_stvewx (vector bool int, int, unsigned int *);
17338
17339 vector signed char vec_sub (vector bool char, vector signed char);
17340 vector signed char vec_sub (vector signed char, vector bool char);
17341 vector signed char vec_sub (vector signed char, vector signed char);
17342 vector unsigned char vec_sub (vector bool char, vector unsigned char);
17343 vector unsigned char vec_sub (vector unsigned char, vector bool char);
17344 vector unsigned char vec_sub (vector unsigned char, vector unsigned char);
17345 vector signed short vec_sub (vector bool short, vector signed short);
17346 vector signed short vec_sub (vector signed short, vector bool short);
17347 vector signed short vec_sub (vector signed short, vector signed short);
17348 vector unsigned short vec_sub (vector bool short, vector unsigned short);
17349 vector unsigned short vec_sub (vector unsigned short, vector bool short);
17350 vector unsigned short vec_sub (vector unsigned short, vector unsigned short);
17351 vector signed int vec_sub (vector bool int, vector signed int);
17352 vector signed int vec_sub (vector signed int, vector bool int);
17353 vector signed int vec_sub (vector signed int, vector signed int);
17354 vector unsigned int vec_sub (vector bool int, vector unsigned int);
17355 vector unsigned int vec_sub (vector unsigned int, vector bool int);
17356 vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
17357 vector float vec_sub (vector float, vector float);
17358
17359 vector signed int vec_subc (vector signed int, vector signed int);
17360 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
17361
17362 vector signed int vec_sube (vector signed int, vector signed int,
17363 vector signed int);
17364 vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
17365 vector unsigned int);
17366
17367 vector signed int vec_subec (vector signed int, vector signed int,
17368 vector signed int);
17369 vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
17370 vector unsigned int);
17371
17372 vector unsigned char vec_subs (vector bool char, vector unsigned char);
17373 vector unsigned char vec_subs (vector unsigned char, vector bool char);
17374 vector unsigned char vec_subs (vector unsigned char, vector unsigned char);
17375 vector signed char vec_subs (vector bool char, vector signed char);
17376 vector signed char vec_subs (vector signed char, vector bool char);
17377 vector signed char vec_subs (vector signed char, vector signed char);
17378 vector unsigned short vec_subs (vector bool short, vector unsigned short);
17379 vector unsigned short vec_subs (vector unsigned short, vector bool short);
17380 vector unsigned short vec_subs (vector unsigned short, vector unsigned short);
17381 vector signed short vec_subs (vector bool short, vector signed short);
17382 vector signed short vec_subs (vector signed short, vector bool short);
17383 vector signed short vec_subs (vector signed short, vector signed short);
17384 vector unsigned int vec_subs (vector bool int, vector unsigned int);
17385 vector unsigned int vec_subs (vector unsigned int, vector bool int);
17386 vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
17387 vector signed int vec_subs (vector bool int, vector signed int);
17388 vector signed int vec_subs (vector signed int, vector bool int);
17389 vector signed int vec_subs (vector signed int, vector signed int);
17390
17391 vector signed int vec_sum2s (vector signed int, vector signed int);
17392
17393 vector unsigned int vec_sum4s (vector unsigned char, vector unsigned int);
17394 vector signed int vec_sum4s (vector signed char, vector signed int);
17395 vector signed int vec_sum4s (vector signed short, vector signed int);
17396
17397 vector signed int vec_sums (vector signed int, vector signed int);
17398
17399 vector float vec_trunc (vector float);
17400
17401 vector signed short vec_unpackh (vector signed char);
17402 vector bool short vec_unpackh (vector bool char);
17403 vector signed int vec_unpackh (vector signed short);
17404 vector bool int vec_unpackh (vector bool short);
17405 vector unsigned int vec_unpackh (vector pixel);
17406
17407 vector signed short vec_unpackl (vector signed char);
17408 vector bool short vec_unpackl (vector bool char);
17409 vector unsigned int vec_unpackl (vector pixel);
17410 vector signed int vec_unpackl (vector signed short);
17411 vector bool int vec_unpackl (vector bool short);
17412
17413 vector float vec_vaddfp (vector float, vector float);
17414
17415 vector signed char vec_vaddsbs (vector bool char, vector signed char);
17416 vector signed char vec_vaddsbs (vector signed char, vector bool char);
17417 vector signed char vec_vaddsbs (vector signed char, vector signed char);
17418
17419 vector signed short vec_vaddshs (vector bool short, vector signed short);
17420 vector signed short vec_vaddshs (vector signed short, vector bool short);
17421 vector signed short vec_vaddshs (vector signed short, vector signed short);
17422
17423 vector signed int vec_vaddsws (vector bool int, vector signed int);
17424 vector signed int vec_vaddsws (vector signed int, vector bool int);
17425 vector signed int vec_vaddsws (vector signed int, vector signed int);
17426
17427 vector signed char vec_vaddubm (vector bool char, vector signed char);
17428 vector signed char vec_vaddubm (vector signed char, vector bool char);
17429 vector signed char vec_vaddubm (vector signed char, vector signed char);
17430 vector unsigned char vec_vaddubm (vector bool char, vector unsigned char);
17431 vector unsigned char vec_vaddubm (vector unsigned char, vector bool char);
17432 vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char);
17433
17434 vector unsigned char vec_vaddubs (vector bool char, vector unsigned char);
17435 vector unsigned char vec_vaddubs (vector unsigned char, vector bool char);
17436 vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char);
17437
17438 vector signed short vec_vadduhm (vector bool short, vector signed short);
17439 vector signed short vec_vadduhm (vector signed short, vector bool short);
17440 vector signed short vec_vadduhm (vector signed short, vector signed short);
17441 vector unsigned short vec_vadduhm (vector bool short, vector unsigned short);
17442 vector unsigned short vec_vadduhm (vector unsigned short, vector bool short);
17443 vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short);
17444
17445 vector unsigned short vec_vadduhs (vector bool short, vector unsigned short);
17446 vector unsigned short vec_vadduhs (vector unsigned short, vector bool short);
17447 vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short);
17448
17449 vector signed int vec_vadduwm (vector bool int, vector signed int);
17450 vector signed int vec_vadduwm (vector signed int, vector bool int);
17451 vector signed int vec_vadduwm (vector signed int, vector signed int);
17452 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
17453 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
17454 vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int);
17455
17456 vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
17457 vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
17458 vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int);
17459
17460 vector signed char vec_vavgsb (vector signed char, vector signed char);
17461
17462 vector signed short vec_vavgsh (vector signed short, vector signed short);
17463
17464 vector signed int vec_vavgsw (vector signed int, vector signed int);
17465
17466 vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char);
17467
17468 vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short);
17469
17470 vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int);
17471
17472 vector float vec_vcfsx (vector signed int, const int);
17473
17474 vector float vec_vcfux (vector unsigned int, const int);
17475
17476 vector bool int vec_vcmpeqfp (vector float, vector float);
17477
17478 vector bool char vec_vcmpequb (vector signed char, vector signed char);
17479 vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char);
17480
17481 vector bool short vec_vcmpequh (vector signed short, vector signed short);
17482 vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short);
17483
17484 vector bool int vec_vcmpequw (vector signed int, vector signed int);
17485 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
17486
17487 vector bool int vec_vcmpgtfp (vector float, vector float);
17488
17489 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
17490
17491 vector bool short vec_vcmpgtsh (vector signed short, vector signed short);
17492
17493 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
17494
17495 vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char);
17496
17497 vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short);
17498
17499 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
17500
17501 vector float vec_vmaxfp (vector float, vector float);
17502
17503 vector signed char vec_vmaxsb (vector bool char, vector signed char);
17504 vector signed char vec_vmaxsb (vector signed char, vector bool char);
17505 vector signed char vec_vmaxsb (vector signed char, vector signed char);
17506
17507 vector signed short vec_vmaxsh (vector bool short, vector signed short);
17508 vector signed short vec_vmaxsh (vector signed short, vector bool short);
17509 vector signed short vec_vmaxsh (vector signed short, vector signed short);
17510
17511 vector signed int vec_vmaxsw (vector bool int, vector signed int);
17512 vector signed int vec_vmaxsw (vector signed int, vector bool int);
17513 vector signed int vec_vmaxsw (vector signed int, vector signed int);
17514
17515 vector unsigned char vec_vmaxub (vector bool char, vector unsigned char);
17516 vector unsigned char vec_vmaxub (vector unsigned char, vector bool char);
17517 vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char);
17518
17519 vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short);
17520 vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short);
17521 vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short);
17522
17523 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
17524 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
17525 vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int);
17526
17527 vector float vec_vminfp (vector float, vector float);
17528
17529 vector signed char vec_vminsb (vector bool char, vector signed char);
17530 vector signed char vec_vminsb (vector signed char, vector bool char);
17531 vector signed char vec_vminsb (vector signed char, vector signed char);
17532
17533 vector signed short vec_vminsh (vector bool short, vector signed short);
17534 vector signed short vec_vminsh (vector signed short, vector bool short);
17535 vector signed short vec_vminsh (vector signed short, vector signed short);
17536
17537 vector signed int vec_vminsw (vector bool int, vector signed int);
17538 vector signed int vec_vminsw (vector signed int, vector bool int);
17539 vector signed int vec_vminsw (vector signed int, vector signed int);
17540
17541 vector unsigned char vec_vminub (vector bool char, vector unsigned char);
17542 vector unsigned char vec_vminub (vector unsigned char, vector bool char);
17543 vector unsigned char vec_vminub (vector unsigned char, vector unsigned char);
17544
17545 vector unsigned short vec_vminuh (vector bool short, vector unsigned short);
17546 vector unsigned short vec_vminuh (vector unsigned short, vector bool short);
17547 vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short);
17548
17549 vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
17550 vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
17551 vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int);
17552
17553 vector bool char vec_vmrghb (vector bool char, vector bool char);
17554 vector signed char vec_vmrghb (vector signed char, vector signed char);
17555 vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char);
17556
17557 vector bool short vec_vmrghh (vector bool short, vector bool short);
17558 vector signed short vec_vmrghh (vector signed short, vector signed short);
17559 vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short);
17560 vector pixel vec_vmrghh (vector pixel, vector pixel);
17561
17562 vector float vec_vmrghw (vector float, vector float);
17563 vector bool int vec_vmrghw (vector bool int, vector bool int);
17564 vector signed int vec_vmrghw (vector signed int, vector signed int);
17565 vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int);
17566
17567 vector bool char vec_vmrglb (vector bool char, vector bool char);
17568 vector signed char vec_vmrglb (vector signed char, vector signed char);
17569 vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char);
17570
17571 vector bool short vec_vmrglh (vector bool short, vector bool short);
17572 vector signed short vec_vmrglh (vector signed short, vector signed short);
17573 vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short);
17574 vector pixel vec_vmrglh (vector pixel, vector pixel);
17575
17576 vector float vec_vmrglw (vector float, vector float);
17577 vector signed int vec_vmrglw (vector signed int, vector signed int);
17578 vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int);
17579 vector bool int vec_vmrglw (vector bool int, vector bool int);
17580
17581 vector signed int vec_vmsummbm (vector signed char, vector unsigned char,
17582 vector signed int);
17583
17584 vector signed int vec_vmsumshm (vector signed short, vector signed short,
17585 vector signed int);
17586
17587 vector signed int vec_vmsumshs (vector signed short, vector signed short,
17588 vector signed int);
17589
17590 vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char,
17591 vector unsigned int);
17592
17593 vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short,
17594 vector unsigned int);
17595
17596 vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short,
17597 vector unsigned int);
17598
17599 vector signed short vec_vmulesb (vector signed char, vector signed char);
17600
17601 vector signed int vec_vmulesh (vector signed short, vector signed short);
17602
17603 vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char);
17604
17605 vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short);
17606
17607 vector signed short vec_vmulosb (vector signed char, vector signed char);
17608
17609 vector signed int vec_vmulosh (vector signed short, vector signed short);
17610
17611 vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char);
17612
17613 vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short);
17614
17615 vector signed char vec_vpkshss (vector signed short, vector signed short);
17616
17617 vector unsigned char vec_vpkshus (vector signed short, vector signed short);
17618
17619 vector signed short vec_vpkswss (vector signed int, vector signed int);
17620
17621 vector unsigned short vec_vpkswus (vector signed int, vector signed int);
17622
17623 vector bool char vec_vpkuhum (vector bool short, vector bool short);
17624 vector signed char vec_vpkuhum (vector signed short, vector signed short);
17625 vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short);
17626
17627 vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short);
17628
17629 vector bool short vec_vpkuwum (vector bool int, vector bool int);
17630 vector signed short vec_vpkuwum (vector signed int, vector signed int);
17631 vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int);
17632
17633 vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int);
17634
17635 vector signed char vec_vrlb (vector signed char, vector unsigned char);
17636 vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char);
17637
17638 vector signed short vec_vrlh (vector signed short, vector unsigned short);
17639 vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short);
17640
17641 vector signed int vec_vrlw (vector signed int, vector unsigned int);
17642 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
17643
17644 vector signed char vec_vslb (vector signed char, vector unsigned char);
17645 vector unsigned char vec_vslb (vector unsigned char, vector unsigned char);
17646
17647 vector signed short vec_vslh (vector signed short, vector unsigned short);
17648 vector unsigned short vec_vslh (vector unsigned short, vector unsigned short);
17649
17650 vector signed int vec_vslw (vector signed int, vector unsigned int);
17651 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
17652
17653 vector signed char vec_vspltb (vector signed char, const int);
17654 vector unsigned char vec_vspltb (vector unsigned char, const int);
17655 vector bool char vec_vspltb (vector bool char, const int);
17656
17657 vector bool short vec_vsplth (vector bool short, const int);
17658 vector signed short vec_vsplth (vector signed short, const int);
17659 vector unsigned short vec_vsplth (vector unsigned short, const int);
17660 vector pixel vec_vsplth (vector pixel, const int);
17661
17662 vector float vec_vspltw (vector float, const int);
17663 vector signed int vec_vspltw (vector signed int, const int);
17664 vector unsigned int vec_vspltw (vector unsigned int, const int);
17665 vector bool int vec_vspltw (vector bool int, const int);
17666
17667 vector signed char vec_vsrab (vector signed char, vector unsigned char);
17668 vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char);
17669
17670 vector signed short vec_vsrah (vector signed short, vector unsigned short);
17671 vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short);
17672
17673 vector signed int vec_vsraw (vector signed int, vector unsigned int);
17674 vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int);
17675
17676 vector signed char vec_vsrb (vector signed char, vector unsigned char);
17677 vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char);
17678
17679 vector signed short vec_vsrh (vector signed short, vector unsigned short);
17680 vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short);
17681
17682 vector signed int vec_vsrw (vector signed int, vector unsigned int);
17683 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
17684
17685 vector float vec_vsubfp (vector float, vector float);
17686
17687 vector signed char vec_vsubsbs (vector bool char, vector signed char);
17688 vector signed char vec_vsubsbs (vector signed char, vector bool char);
17689 vector signed char vec_vsubsbs (vector signed char, vector signed char);
17690
17691 vector signed short vec_vsubshs (vector bool short, vector signed short);
17692 vector signed short vec_vsubshs (vector signed short, vector bool short);
17693 vector signed short vec_vsubshs (vector signed short, vector signed short);
17694
17695 vector signed int vec_vsubsws (vector bool int, vector signed int);
17696 vector signed int vec_vsubsws (vector signed int, vector bool int);
17697 vector signed int vec_vsubsws (vector signed int, vector signed int);
17698
17699 vector signed char vec_vsububm (vector bool char, vector signed char);
17700 vector signed char vec_vsububm (vector signed char, vector bool char);
17701 vector signed char vec_vsububm (vector signed char, vector signed char);
17702 vector unsigned char vec_vsububm (vector bool char, vector unsigned char);
17703 vector unsigned char vec_vsububm (vector unsigned char, vector bool char);
17704 vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char);
17705
17706 vector unsigned char vec_vsububs (vector bool char, vector unsigned char);
17707 vector unsigned char vec_vsububs (vector unsigned char, vector bool char);
17708 vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char);
17709
17710 vector signed short vec_vsubuhm (vector bool short, vector signed short);
17711 vector signed short vec_vsubuhm (vector signed short, vector bool short);
17712 vector signed short vec_vsubuhm (vector signed short, vector signed short);
17713 vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short);
17714 vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short);
17715 vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short);
17716
17717 vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short);
17718 vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short);
17719 vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short);
17720
17721 vector signed int vec_vsubuwm (vector bool int, vector signed int);
17722 vector signed int vec_vsubuwm (vector signed int, vector bool int);
17723 vector signed int vec_vsubuwm (vector signed int, vector signed int);
17724 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
17725 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
17726 vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int);
17727
17728 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
17729 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
17730 vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int);
17731
17732 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
17733
17734 vector signed int vec_vsum4shs (vector signed short, vector signed int);
17735
17736 vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int);
17737
17738 vector unsigned int vec_vupkhpx (vector pixel);
17739
17740 vector bool short vec_vupkhsb (vector bool char);
17741 vector signed short vec_vupkhsb (vector signed char);
17742
17743 vector bool int vec_vupkhsh (vector bool short);
17744 vector signed int vec_vupkhsh (vector signed short);
17745
17746 vector unsigned int vec_vupklpx (vector pixel);
17747
17748 vector bool short vec_vupklsb (vector bool char);
17749 vector signed short vec_vupklsb (vector signed char);
17750
17751 vector bool int vec_vupklsh (vector bool short);
17752 vector signed int vec_vupklsh (vector signed short);
17753
17754 vector float vec_xor (vector float, vector float);
17755 vector float vec_xor (vector float, vector bool int);
17756 vector float vec_xor (vector bool int, vector float);
17757 vector bool int vec_xor (vector bool int, vector bool int);
17758 vector signed int vec_xor (vector bool int, vector signed int);
17759 vector signed int vec_xor (vector signed int, vector bool int);
17760 vector signed int vec_xor (vector signed int, vector signed int);
17761 vector unsigned int vec_xor (vector bool int, vector unsigned int);
17762 vector unsigned int vec_xor (vector unsigned int, vector bool int);
17763 vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
17764 vector bool short vec_xor (vector bool short, vector bool short);
17765 vector signed short vec_xor (vector bool short, vector signed short);
17766 vector signed short vec_xor (vector signed short, vector bool short);
17767 vector signed short vec_xor (vector signed short, vector signed short);
17768 vector unsigned short vec_xor (vector bool short, vector unsigned short);
17769 vector unsigned short vec_xor (vector unsigned short, vector bool short);
17770 vector unsigned short vec_xor (vector unsigned short, vector unsigned short);
17771 vector signed char vec_xor (vector bool char, vector signed char);
17772 vector bool char vec_xor (vector bool char, vector bool char);
17773 vector signed char vec_xor (vector signed char, vector bool char);
17774 vector signed char vec_xor (vector signed char, vector signed char);
17775 vector unsigned char vec_xor (vector bool char, vector unsigned char);
17776 vector unsigned char vec_xor (vector unsigned char, vector bool char);
17777 vector unsigned char vec_xor (vector unsigned char, vector unsigned char);
17778 @end smallexample
17779
17780 @node PowerPC AltiVec Built-in Functions Available on ISA 2.06
17781 @subsubsection PowerPC AltiVec Built-in Functions Available on ISA 2.06
17782
17783 The AltiVec built-in functions described in this section are
17784 available on the PowerPC family of processors starting with ISA 2.06
17785 or later. These are normally enabled by adding @option{-mvsx} to the
17786 command line.
17787
17788 When @option{-mvsx} is used, the following additional vector types are
17789 implemented.
17790
17791 @smallexample
17792 vector unsigned __int128
17793 vector signed __int128
17794 vector unsigned long long int
17795 vector signed long long int
17796 vector double
17797 @end smallexample
17798
17799 The long long types are only implemented for 64-bit code generation.
17800
17801 @smallexample
17802
17803 vector bool long long vec_and (vector bool long long int, vector bool long long);
17804
17805 vector double vec_ctf (vector unsigned long, const int);
17806 vector double vec_ctf (vector signed long, const int);
17807
17808 vector signed long vec_cts (vector double, const int);
17809
17810 vector unsigned long vec_ctu (vector double, const int);
17811
17812 void vec_dst (const unsigned long *, int, const int);
17813 void vec_dst (const long *, int, const int);
17814
17815 void vec_dststt (const unsigned long *, int, const int);
17816 void vec_dststt (const long *, int, const int);
17817
17818 void vec_dstt (const unsigned long *, int, const int);
17819 void vec_dstt (const long *, int, const int);
17820
17821 vector unsigned char vec_lvsl (int, const unsigned long *);
17822 vector unsigned char vec_lvsl (int, const long *);
17823
17824 vector unsigned char vec_lvsr (int, const unsigned long *);
17825 vector unsigned char vec_lvsr (int, const long *);
17826
17827 vector double vec_mul (vector double, vector double);
17828 vector long vec_mul (vector long, vector long);
17829 vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
17830
17831 vector unsigned long long vec_mule (vector unsigned int, vector unsigned int);
17832 vector signed long long vec_mule (vector signed int, vector signed int);
17833
17834 vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int);
17835 vector signed long long vec_mulo (vector signed int, vector signed int);
17836
17837 vector double vec_nabs (vector double);
17838
17839 vector bool long long vec_reve (vector bool long long);
17840 vector signed long long vec_reve (vector signed long long);
17841 vector unsigned long long vec_reve (vector unsigned long long);
17842 vector double vec_sld (vector double, vector double, const int);
17843
17844 vector bool long long int vec_sld (vector bool long long int,
17845 vector bool long long int, const int);
17846 vector long long int vec_sld (vector long long int, vector long long int, const int);
17847 vector unsigned long long int vec_sld (vector unsigned long long int,
17848 vector unsigned long long int, const int);
17849
17850 vector long long int vec_sll (vector long long int, vector unsigned char);
17851 vector unsigned long long int vec_sll (vector unsigned long long int,
17852 vector unsigned char);
17853
17854 vector signed long long vec_slo (vector signed long long, vector signed char);
17855 vector signed long long vec_slo (vector signed long long, vector unsigned char);
17856 vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
17857 vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
17858
17859 vector signed long vec_splat (vector signed long, const int);
17860 vector unsigned long vec_splat (vector unsigned long, const int);
17861
17862 vector long long int vec_srl (vector long long int, vector unsigned char);
17863 vector unsigned long long int vec_srl (vector unsigned long long int,
17864 vector unsigned char);
17865
17866 vector long long int vec_sro (vector long long int, vector char);
17867 vector long long int vec_sro (vector long long int, vector unsigned char);
17868 vector unsigned long long int vec_sro (vector unsigned long long int, vector char);
17869 vector unsigned long long int vec_sro (vector unsigned long long int,
17870 vector unsigned char);
17871
17872 vector signed __int128 vec_subc (vector signed __int128, vector signed __int128);
17873 vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128);
17874
17875 vector signed __int128 vec_sube (vector signed __int128, vector signed __int128,
17876 vector signed __int128);
17877 vector unsigned __int128 vec_sube (vector unsigned __int128, vector unsigned __int128,
17878 vector unsigned __int128);
17879
17880 vector signed __int128 vec_subec (vector signed __int128, vector signed __int128,
17881 vector signed __int128);
17882 vector unsigned __int128 vec_subec (vector unsigned __int128, vector unsigned __int128,
17883 vector unsigned __int128);
17884
17885 vector double vec_unpackh (vector float);
17886
17887 vector double vec_unpackl (vector float);
17888
17889 vector double vec_doublee (vector float);
17890 vector double vec_doublee (vector signed int);
17891 vector double vec_doublee (vector unsigned int);
17892
17893 vector double vec_doubleo (vector float);
17894 vector double vec_doubleo (vector signed int);
17895 vector double vec_doubleo (vector unsigned int);
17896
17897 vector double vec_doubleh (vector float);
17898 vector double vec_doubleh (vector signed int);
17899 vector double vec_doubleh (vector unsigned int);
17900
17901 vector double vec_doublel (vector float);
17902 vector double vec_doublel (vector signed int);
17903 vector double vec_doublel (vector unsigned int);
17904
17905 vector float vec_float (vector signed int);
17906 vector float vec_float (vector unsigned int);
17907
17908 vector float vec_float2 (vector signed long long, vector signed long long);
17909 vector float vec_float2 (vector unsigned long long, vector signed long long);
17910
17911 vector float vec_floate (vector double);
17912 vector float vec_floate (vector signed long long);
17913 vector float vec_floate (vector unsigned long long);
17914
17915 vector float vec_floato (vector double);
17916 vector float vec_floato (vector signed long long);
17917 vector float vec_floato (vector unsigned long long);
17918
17919 vector signed long long vec_signed (vector double);
17920 vector signed int vec_signed (vector float);
17921
17922 vector signed int vec_signede (vector double);
17923
17924 vector signed int vec_signedo (vector double);
17925
17926 vector signed char vec_sldw (vector signed char, vector signed char, const int);
17927 vector unsigned char vec_sldw (vector unsigned char, vector unsigned char, const int);
17928 vector signed short vec_sldw (vector signed short, vector signed short, const int);
17929 vector unsigned short vec_sldw (vector unsigned short,
17930 vector unsigned short, const int);
17931 vector signed int vec_sldw (vector signed int, vector signed int, const int);
17932 vector unsigned int vec_sldw (vector unsigned int, vector unsigned int, const int);
17933 vector signed long long vec_sldw (vector signed long long,
17934 vector signed long long, const int);
17935 vector unsigned long long vec_sldw (vector unsigned long long,
17936 vector unsigned long long, const int);
17937
17938 vector signed long long vec_unsigned (vector double);
17939 vector signed int vec_unsigned (vector float);
17940
17941 vector signed int vec_unsignede (vector double);
17942
17943 vector signed int vec_unsignedo (vector double);
17944
18124 vector double vec_abs (vector double); 17945 vector double vec_abs (vector double);
18125 vector double vec_add (vector double, vector double); 17946 vector double vec_add (vector double, vector double);
18126 vector double vec_and (vector double, vector double); 17947 vector double vec_and (vector double, vector double);
18127 vector double vec_and (vector double, vector bool long); 17948 vector double vec_and (vector double, vector bool long);
18128 vector double vec_and (vector bool long, vector double); 17949 vector double vec_and (vector bool long, vector double);
18151 vector float vec_div (vector float, vector float); 17972 vector float vec_div (vector float, vector float);
18152 vector double vec_div (vector double, vector double); 17973 vector double vec_div (vector double, vector double);
18153 vector long vec_div (vector long, vector long); 17974 vector long vec_div (vector long, vector long);
18154 vector unsigned long vec_div (vector unsigned long, vector unsigned long); 17975 vector unsigned long vec_div (vector unsigned long, vector unsigned long);
18155 vector double vec_floor (vector double); 17976 vector double vec_floor (vector double);
17977 vector __int128 vec_ld (int, const vector __int128 *);
17978 vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
17979 vector __int128 vec_ld (int, const __int128 *);
17980 vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
18156 vector double vec_ld (int, const vector double *); 17981 vector double vec_ld (int, const vector double *);
18157 vector double vec_ld (int, const double *); 17982 vector double vec_ld (int, const double *);
18158 vector double vec_ldl (int, const vector double *); 17983 vector double vec_ldl (int, const vector double *);
18159 vector double vec_ldl (int, const double *); 17984 vector double vec_ldl (int, const double *);
18160 vector unsigned char vec_lvsl (int, const volatile double *); 17985 vector unsigned char vec_lvsl (int, const double *);
18161 vector unsigned char vec_lvsr (int, const volatile double *); 17986 vector unsigned char vec_lvsr (int, const double *);
18162 vector double vec_madd (vector double, vector double, vector double); 17987 vector double vec_madd (vector double, vector double, vector double);
18163 vector double vec_max (vector double, vector double); 17988 vector double vec_max (vector double, vector double);
18164 vector signed long vec_mergeh (vector signed long, vector signed long); 17989 vector signed long vec_mergeh (vector signed long, vector signed long);
18165 vector signed long vec_mergeh (vector signed long, vector bool long); 17990 vector signed long vec_mergeh (vector signed long, vector bool long);
18166 vector signed long vec_mergeh (vector bool long, vector signed long); 17991 vector signed long vec_mergeh (vector bool long, vector signed long);
18174 vector unsigned long vec_mergel (vector unsigned long, vector bool long); 17999 vector unsigned long vec_mergel (vector unsigned long, vector bool long);
18175 vector unsigned long vec_mergel (vector bool long, vector unsigned long); 18000 vector unsigned long vec_mergel (vector bool long, vector unsigned long);
18176 vector double vec_min (vector double, vector double); 18001 vector double vec_min (vector double, vector double);
18177 vector float vec_msub (vector float, vector float, vector float); 18002 vector float vec_msub (vector float, vector float, vector float);
18178 vector double vec_msub (vector double, vector double, vector double); 18003 vector double vec_msub (vector double, vector double, vector double);
18179 vector float vec_mul (vector float, vector float);
18180 vector double vec_mul (vector double, vector double);
18181 vector long vec_mul (vector long, vector long);
18182 vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
18183 vector float vec_nearbyint (vector float); 18004 vector float vec_nearbyint (vector float);
18184 vector double vec_nearbyint (vector double); 18005 vector double vec_nearbyint (vector double);
18185 vector float vec_nmadd (vector float, vector float, vector float); 18006 vector float vec_nmadd (vector float, vector float, vector float);
18186 vector double vec_nmadd (vector double, vector double, vector double); 18007 vector double vec_nmadd (vector double, vector double, vector double);
18187 vector double vec_nmsub (vector double, vector double, vector double); 18008 vector double vec_nmsub (vector double, vector double, vector double);
18203 vector unsigned long vec_or (vector bool long, vector unsigned long); 18024 vector unsigned long vec_or (vector bool long, vector unsigned long);
18204 vector double vec_perm (vector double, vector double, vector unsigned char); 18025 vector double vec_perm (vector double, vector double, vector unsigned char);
18205 vector long vec_perm (vector long, vector long, vector unsigned char); 18026 vector long vec_perm (vector long, vector long, vector unsigned char);
18206 vector unsigned long vec_perm (vector unsigned long, vector unsigned long, 18027 vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
18207 vector unsigned char); 18028 vector unsigned char);
18029 vector bool char vec_permxor (vector bool char, vector bool char,
18030 vector bool char);
18031 vector unsigned char vec_permxor (vector signed char, vector signed char,
18032 vector signed char);
18033 vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
18034 vector unsigned char);
18208 vector double vec_rint (vector double); 18035 vector double vec_rint (vector double);
18209 vector double vec_recip (vector double, vector double); 18036 vector double vec_recip (vector double, vector double);
18210 vector double vec_rsqrt (vector double); 18037 vector double vec_rsqrt (vector double);
18211 vector double vec_rsqrte (vector double); 18038 vector double vec_rsqrte (vector double);
18212 vector double vec_sel (vector double, vector double, vector bool long); 18039 vector double vec_sel (vector double, vector double, vector bool long);
18374 generate the AltiVec @samp{LVX} and @samp{STVX} instructions even 18201 generate the AltiVec @samp{LVX} and @samp{STVX} instructions even
18375 if the VSX instruction set is available. The @samp{vec_vsx_ld} and 18202 if the VSX instruction set is available. The @samp{vec_vsx_ld} and
18376 @samp{vec_vsx_st} built-in functions always generate the VSX @samp{LXVD2X}, 18203 @samp{vec_vsx_st} built-in functions always generate the VSX @samp{LXVD2X},
18377 @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions. 18204 @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions.
18378 18205
18206 @node PowerPC AltiVec Built-in Functions Available on ISA 2.07
18207 @subsubsection PowerPC AltiVec Built-in Functions Available on ISA 2.07
18208
18379 If the ISA 2.07 additions to the vector/scalar (power8-vector) 18209 If the ISA 2.07 additions to the vector/scalar (power8-vector)
18380 instruction set are available, the following additional functions are 18210 instruction set are available, the following additional functions are
18381 available for both 32-bit and 64-bit targets. For 64-bit targets, you 18211 available for both 32-bit and 64-bit targets. For 64-bit targets, you
18382 can use @var{vector long} instead of @var{vector long long}, 18212 can use @var{vector long} instead of @var{vector long long},
18383 @var{vector bool long} instead of @var{vector bool long long}, and 18213 @var{vector bool long} instead of @var{vector bool long long}, and
18384 @var{vector unsigned long} instead of @var{vector unsigned long long}. 18214 @var{vector unsigned long} instead of @var{vector unsigned long long}.
18385 18215
18386 @smallexample 18216 @smallexample
18217 vector signed char vec_neg (vector signed char);
18218 vector signed short vec_neg (vector signed short);
18219 vector signed int vec_neg (vector signed int);
18220 vector signed long long vec_neg (vector signed long long);
18221 vector float char vec_neg (vector float);
18222 vector double vec_neg (vector double);
18223
18224 vector signed int vec_signed2 (vector double, vector double);
18225
18226 vector signed int vec_unsigned2 (vector double, vector double);
18227
18387 vector long long vec_abs (vector long long); 18228 vector long long vec_abs (vector long long);
18388 18229
18389 vector long long vec_add (vector long long, vector long long); 18230 vector long long vec_add (vector long long, vector long long);
18390 vector unsigned long long vec_add (vector unsigned long long, 18231 vector unsigned long long vec_add (vector unsigned long long,
18391 vector unsigned long long); 18232 vector unsigned long long);
18419 vector bool long long vec_cmpeq (vector bool long long, vector bool long long); 18260 vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
18420 18261
18421 vector long long vec_eqv (vector long long, vector long long); 18262 vector long long vec_eqv (vector long long, vector long long);
18422 vector long long vec_eqv (vector bool long long, vector long long); 18263 vector long long vec_eqv (vector bool long long, vector long long);
18423 vector long long vec_eqv (vector long long, vector bool long long); 18264 vector long long vec_eqv (vector long long, vector bool long long);
18424 vector unsigned long long vec_eqv (vector unsigned long long, 18265 vector unsigned long long vec_eqv (vector unsigned long long, vector unsigned long long);
18425 vector unsigned long long); 18266 vector unsigned long long vec_eqv (vector bool long long, vector unsigned long long);
18426 vector unsigned long long vec_eqv (vector bool long long,
18427 vector unsigned long long);
18428 vector unsigned long long vec_eqv (vector unsigned long long, 18267 vector unsigned long long vec_eqv (vector unsigned long long,
18429 vector bool long long); 18268 vector bool long long);
18430 vector int vec_eqv (vector int, vector int); 18269 vector int vec_eqv (vector int, vector int);
18431 vector int vec_eqv (vector bool int, vector int); 18270 vector int vec_eqv (vector bool int, vector int);
18432 vector int vec_eqv (vector int, vector bool int); 18271 vector int vec_eqv (vector int, vector bool int);
18433 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 18272 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
18434 vector unsigned int vec_eqv (vector bool unsigned int, 18273 vector unsigned int vec_eqv (vector bool unsigned int, vector unsigned int);
18435 vector unsigned int); 18274 vector unsigned int vec_eqv (vector unsigned int, vector bool unsigned int);
18436 vector unsigned int vec_eqv (vector unsigned int,
18437 vector bool unsigned int);
18438 vector short vec_eqv (vector short, vector short); 18275 vector short vec_eqv (vector short, vector short);
18439 vector short vec_eqv (vector bool short, vector short); 18276 vector short vec_eqv (vector bool short, vector short);
18440 vector short vec_eqv (vector short, vector bool short); 18277 vector short vec_eqv (vector short, vector bool short);
18441 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 18278 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
18442 vector unsigned short vec_eqv (vector bool unsigned short, 18279 vector unsigned short vec_eqv (vector bool unsigned short, vector unsigned short);
18443 vector unsigned short); 18280 vector unsigned short vec_eqv (vector unsigned short, vector bool unsigned short);
18444 vector unsigned short vec_eqv (vector unsigned short,
18445 vector bool unsigned short);
18446 vector signed char vec_eqv (vector signed char, vector signed char); 18281 vector signed char vec_eqv (vector signed char, vector signed char);
18447 vector signed char vec_eqv (vector bool signed char, vector signed char); 18282 vector signed char vec_eqv (vector bool signed char, vector signed char);
18448 vector signed char vec_eqv (vector signed char, vector bool signed char); 18283 vector signed char vec_eqv (vector signed char, vector bool signed char);
18449 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 18284 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
18450 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 18285 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
18471 vector long long vec_nand (vector long long, vector long long); 18306 vector long long vec_nand (vector long long, vector long long);
18472 vector long long vec_nand (vector bool long long, vector long long); 18307 vector long long vec_nand (vector bool long long, vector long long);
18473 vector long long vec_nand (vector long long, vector bool long long); 18308 vector long long vec_nand (vector long long, vector bool long long);
18474 vector unsigned long long vec_nand (vector unsigned long long, 18309 vector unsigned long long vec_nand (vector unsigned long long,
18475 vector unsigned long long); 18310 vector unsigned long long);
18476 vector unsigned long long vec_nand (vector bool long long, 18311 vector unsigned long long vec_nand (vector bool long long, vector unsigned long long);
18477 vector unsigned long long); 18312 vector unsigned long long vec_nand (vector unsigned long long, vector bool long long);
18478 vector unsigned long long vec_nand (vector unsigned long long,
18479 vector bool long long);
18480 vector int vec_nand (vector int, vector int); 18313 vector int vec_nand (vector int, vector int);
18481 vector int vec_nand (vector bool int, vector int); 18314 vector int vec_nand (vector bool int, vector int);
18482 vector int vec_nand (vector int, vector bool int); 18315 vector int vec_nand (vector int, vector bool int);
18483 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 18316 vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
18484 vector unsigned int vec_nand (vector bool unsigned int, 18317 vector unsigned int vec_nand (vector bool unsigned int, vector unsigned int);
18485 vector unsigned int); 18318 vector unsigned int vec_nand (vector unsigned int, vector bool unsigned int);
18486 vector unsigned int vec_nand (vector unsigned int,
18487 vector bool unsigned int);
18488 vector short vec_nand (vector short, vector short); 18319 vector short vec_nand (vector short, vector short);
18489 vector short vec_nand (vector bool short, vector short); 18320 vector short vec_nand (vector bool short, vector short);
18490 vector short vec_nand (vector short, vector bool short); 18321 vector short vec_nand (vector short, vector bool short);
18491 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 18322 vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
18492 vector unsigned short vec_nand (vector bool unsigned short, 18323 vector unsigned short vec_nand (vector bool unsigned short, vector unsigned short);
18493 vector unsigned short); 18324 vector unsigned short vec_nand (vector unsigned short, vector bool unsigned short);
18494 vector unsigned short vec_nand (vector unsigned short,
18495 vector bool unsigned short);
18496 vector signed char vec_nand (vector signed char, vector signed char); 18325 vector signed char vec_nand (vector signed char, vector signed char);
18497 vector signed char vec_nand (vector bool signed char, vector signed char); 18326 vector signed char vec_nand (vector bool signed char, vector signed char);
18498 vector signed char vec_nand (vector signed char, vector bool signed char); 18327 vector signed char vec_nand (vector signed char, vector bool signed char);
18499 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 18328 vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
18500 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 18329 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
18503 vector long long vec_orc (vector long long, vector long long); 18332 vector long long vec_orc (vector long long, vector long long);
18504 vector long long vec_orc (vector bool long long, vector long long); 18333 vector long long vec_orc (vector bool long long, vector long long);
18505 vector long long vec_orc (vector long long, vector bool long long); 18334 vector long long vec_orc (vector long long, vector bool long long);
18506 vector unsigned long long vec_orc (vector unsigned long long, 18335 vector unsigned long long vec_orc (vector unsigned long long,
18507 vector unsigned long long); 18336 vector unsigned long long);
18508 vector unsigned long long vec_orc (vector bool long long, 18337 vector unsigned long long vec_orc (vector bool long long, vector unsigned long long);
18509 vector unsigned long long); 18338 vector unsigned long long vec_orc (vector unsigned long long, vector bool long long);
18510 vector unsigned long long vec_orc (vector unsigned long long,
18511 vector bool long long);
18512 vector int vec_orc (vector int, vector int); 18339 vector int vec_orc (vector int, vector int);
18513 vector int vec_orc (vector bool int, vector int); 18340 vector int vec_orc (vector bool int, vector int);
18514 vector int vec_orc (vector int, vector bool int); 18341 vector int vec_orc (vector int, vector bool int);
18515 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 18342 vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
18516 vector unsigned int vec_orc (vector bool unsigned int, 18343 vector unsigned int vec_orc (vector bool unsigned int, vector unsigned int);
18517 vector unsigned int); 18344 vector unsigned int vec_orc (vector unsigned int, vector bool unsigned int);
18518 vector unsigned int vec_orc (vector unsigned int,
18519 vector bool unsigned int);
18520 vector short vec_orc (vector short, vector short); 18345 vector short vec_orc (vector short, vector short);
18521 vector short vec_orc (vector bool short, vector short); 18346 vector short vec_orc (vector bool short, vector short);
18522 vector short vec_orc (vector short, vector bool short); 18347 vector short vec_orc (vector short, vector bool short);
18523 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 18348 vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
18524 vector unsigned short vec_orc (vector bool unsigned short, 18349 vector unsigned short vec_orc (vector bool unsigned short, vector unsigned short);
18525 vector unsigned short); 18350 vector unsigned short vec_orc (vector unsigned short, vector bool unsigned short);
18526 vector unsigned short vec_orc (vector unsigned short,
18527 vector bool unsigned short);
18528 vector signed char vec_orc (vector signed char, vector signed char); 18351 vector signed char vec_orc (vector signed char, vector signed char);
18529 vector signed char vec_orc (vector bool signed char, vector signed char); 18352 vector signed char vec_orc (vector bool signed char, vector signed char);
18530 vector signed char vec_orc (vector signed char, vector bool signed char); 18353 vector signed char vec_orc (vector signed char, vector bool signed char);
18531 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 18354 vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
18532 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 18355 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
18533 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 18356 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
18534 18357
18535 vector int vec_pack (vector long long, vector long long); 18358 vector int vec_pack (vector long long, vector long long);
18536 vector unsigned int vec_pack (vector unsigned long long, 18359 vector unsigned int vec_pack (vector unsigned long long, vector unsigned long long);
18537 vector unsigned long long);
18538 vector bool int vec_pack (vector bool long long, vector bool long long); 18360 vector bool int vec_pack (vector bool long long, vector bool long long);
18539 vector float vec_pack (vector double, vector double); 18361 vector float vec_pack (vector double, vector double);
18540 18362
18541 vector int vec_packs (vector long long, vector long long); 18363 vector int vec_packs (vector long long, vector long long);
18542 vector unsigned int vec_packs (vector unsigned long long, 18364 vector unsigned int vec_packs (vector unsigned long long, vector unsigned long long);
18543 vector unsigned long long); 18365
18544 18366 vector unsigned char vec_packsu (vector signed short, vector signed short)
18367 vector unsigned char vec_packsu (vector unsigned short, vector unsigned short)
18368 vector unsigned short int vec_packsu (vector signed int, vector signed int);
18369 vector unsigned short int vec_packsu (vector unsigned int, vector unsigned int);
18545 vector unsigned int vec_packsu (vector long long, vector long long); 18370 vector unsigned int vec_packsu (vector long long, vector long long);
18546 vector unsigned int vec_packsu (vector unsigned long long, 18371 vector unsigned int vec_packsu (vector unsigned long long, vector unsigned long long);
18547 vector unsigned long long); 18372 vector unsigned int vec_packsu (vector signed long long, vector signed long long);
18548 18373
18549 vector unsigned char vec_popcnt (vector signed char); 18374 vector unsigned char vec_popcnt (vector signed char);
18550 vector unsigned char vec_popcnt (vector unsigned char); 18375 vector unsigned char vec_popcnt (vector unsigned char);
18551 vector unsigned short vec_popcnt (vector signed short); 18376 vector unsigned short vec_popcnt (vector signed short);
18552 vector unsigned short vec_popcnt (vector unsigned short); 18377 vector unsigned short vec_popcnt (vector unsigned short);
18553 vector unsigned int vec_popcnt (vector signed int); 18378 vector unsigned int vec_popcnt (vector signed int);
18554 vector unsigned int vec_popcnt (vector unsigned int); 18379 vector unsigned int vec_popcnt (vector unsigned int);
18555 vector unsigned long long vec_popcnt (vector signed long long); 18380 vector unsigned long long vec_popcnt (vector signed long long);
18556 vector unsigned long long vec_popcnt (vector unsigned long long); 18381 vector unsigned long long vec_popcnt (vector unsigned long long);
18557 18382
18558 vector long long vec_rl (vector long long, 18383 vector long long vec_rl (vector long long, vector unsigned long long);
18559 vector unsigned long long); 18384 vector long long vec_rl (vector unsigned long long, vector unsigned long long);
18560 vector long long vec_rl (vector unsigned long long,
18561 vector unsigned long long);
18562 18385
18563 vector long long vec_sl (vector long long, vector unsigned long long); 18386 vector long long vec_sl (vector long long, vector unsigned long long);
18564 vector long long vec_sl (vector unsigned long long, 18387 vector long long vec_sl (vector unsigned long long, vector unsigned long long);
18565 vector unsigned long long);
18566 18388
18567 vector long long vec_sr (vector long long, vector unsigned long long); 18389 vector long long vec_sr (vector long long, vector unsigned long long);
18568 vector unsigned long long char vec_sr (vector unsigned long long, 18390 vector unsigned long long char vec_sr (vector unsigned long long,
18569 vector unsigned long long); 18391 vector unsigned long long);
18570 18392
18594 18416
18595 vector long long vec_vbpermq (vector signed char, vector signed char); 18417 vector long long vec_vbpermq (vector signed char, vector signed char);
18596 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 18418 vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
18597 18419
18598 vector unsigned char vec_bperm (vector unsigned char, vector unsigned char); 18420 vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
18599 vector unsigned char vec_bperm (vector unsigned long long, 18421 vector unsigned char vec_bperm (vector unsigned long long, vector unsigned char);
18600 vector unsigned char); 18422 vector unsigned long long vec_bperm (vector unsigned __int128, vector unsigned char);
18601 vector unsigned long long vec_bperm (vector unsigned __int128,
18602 vector unsigned char);
18603 18423
18604 vector long long vec_cntlz (vector long long); 18424 vector long long vec_cntlz (vector long long);
18605 vector unsigned long long vec_cntlz (vector unsigned long long); 18425 vector unsigned long long vec_cntlz (vector unsigned long long);
18606 vector int vec_cntlz (vector int); 18426 vector int vec_cntlz (vector int);
18607 vector unsigned int vec_cntlz (vector int); 18427 vector unsigned int vec_cntlz (vector int);
18639 vector unsigned long long vec_vmaxud (vector unsigned long long, 18459 vector unsigned long long vec_vmaxud (vector unsigned long long,
18640 unsigned vector long long); 18460 unsigned vector long long);
18641 18461
18642 vector long long vec_vminsd (vector long long, vector long long); 18462 vector long long vec_vminsd (vector long long, vector long long);
18643 18463
18644 vector unsigned long long vec_vminud (vector long long, 18464 vector unsigned long long vec_vminud (vector long long, vector long long);
18645 vector long long);
18646 18465
18647 vector int vec_vpksdss (vector long long, vector long long); 18466 vector int vec_vpksdss (vector long long, vector long long);
18648 vector unsigned int vec_vpksdss (vector long long, vector long long); 18467 vector unsigned int vec_vpksdss (vector long long, vector long long);
18649 18468
18650 vector unsigned int vec_vpkudus (vector unsigned long long, 18469 vector unsigned int vec_vpkudus (vector unsigned long long,
18710 @end smallexample 18529 @end smallexample
18711 18530
18712 If the ISA 2.07 additions to the vector/scalar (power8-vector) 18531 If the ISA 2.07 additions to the vector/scalar (power8-vector)
18713 instruction set are available, the following additional functions are 18532 instruction set are available, the following additional functions are
18714 available for 64-bit targets. New vector types 18533 available for 64-bit targets. New vector types
18715 (@var{vector __int128_t} and @var{vector __uint128_t}) are available 18534 (@var{vector __int128} and @var{vector __uint128}) are available
18716 to hold the @var{__int128_t} and @var{__uint128_t} types to use these 18535 to hold the @var{__int128} and @var{__uint128} types to use these
18717 builtins. 18536 builtins.
18718 18537
18719 The normal vector extract, and set operations work on 18538 The normal vector extract, and set operations work on
18720 @var{vector __int128_t} and @var{vector __uint128_t} types, 18539 @var{vector __int128} and @var{vector __uint128} types,
18721 but the index value must be 0. 18540 but the index value must be 0.
18722 18541
18723 @smallexample 18542 @smallexample
18724 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 18543 vector __int128 vec_vaddcuq (vector __int128, vector __int128);
18725 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 18544 vector __uint128 vec_vaddcuq (vector __uint128, vector __uint128);
18726 18545
18727 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 18546 vector __int128 vec_vadduqm (vector __int128, vector __int128);
18728 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 18547 vector __uint128 vec_vadduqm (vector __uint128, vector __uint128);
18729 18548
18730 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 18549 vector __int128 vec_vaddecuq (vector __int128, vector __int128,
18731 vector __int128_t); 18550 vector __int128);
18732 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 18551 vector __uint128 vec_vaddecuq (vector __uint128, vector __uint128,
18733 vector __uint128_t); 18552 vector __uint128);
18734 18553
18735 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 18554 vector __int128 vec_vaddeuqm (vector __int128, vector __int128,
18736 vector __int128_t); 18555 vector __int128);
18737 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 18556 vector __uint128 vec_vaddeuqm (vector __uint128, vector __uint128,
18738 vector __uint128_t); 18557 vector __uint128);
18739 18558
18740 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 18559 vector __int128 vec_vsubecuq (vector __int128, vector __int128,
18741 vector __int128_t); 18560 vector __int128);
18742 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 18561 vector __uint128 vec_vsubecuq (vector __uint128, vector __uint128,
18743 vector __uint128_t); 18562 vector __uint128);
18744 18563
18745 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 18564 vector __int128 vec_vsubeuqm (vector __int128, vector __int128,
18746 vector __int128_t); 18565 vector __int128);
18747 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 18566 vector __uint128 vec_vsubeuqm (vector __uint128, vector __uint128,
18748 vector __uint128_t); 18567 vector __uint128);
18749 18568
18750 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 18569 vector __int128 vec_vsubcuq (vector __int128, vector __int128);
18751 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 18570 vector __uint128 vec_vsubcuq (vector __uint128, vector __uint128);
18752 18571
18753 __int128_t vec_vsubuqm (__int128_t, __int128_t); 18572 __int128 vec_vsubuqm (__int128, __int128);
18754 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 18573 __uint128 vec_vsubuqm (__uint128, __uint128);
18755 18574
18756 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 18575 vector __int128 __builtin_bcdadd (vector __int128, vector __int128, const int);
18757 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 18576 int __builtin_bcdadd_lt (vector __int128, vector __int128, const int);
18758 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 18577 int __builtin_bcdadd_eq (vector __int128, vector __int128, const int);
18759 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 18578 int __builtin_bcdadd_gt (vector __int128, vector __int128, const int);
18760 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 18579 int __builtin_bcdadd_ov (vector __int128, vector __int128, const int);
18761 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 18580 vector __int128 __builtin_bcdsub (vector __int128, vector __int128, const int);
18762 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 18581 int __builtin_bcdsub_lt (vector __int128, vector __int128, const int);
18763 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 18582 int __builtin_bcdsub_eq (vector __int128, vector __int128, const int);
18764 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 18583 int __builtin_bcdsub_gt (vector __int128, vector __int128, const int);
18765 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 18584 int __builtin_bcdsub_ov (vector __int128, vector __int128, const int);
18766 @end smallexample 18585 @end smallexample
18586
18587 @node PowerPC AltiVec Built-in Functions Available on ISA 3.0
18588 @subsubsection PowerPC AltiVec Built-in Functions Available on ISA 3.0
18589
18590 The following additional built-in functions are also available for the
18591 PowerPC family of processors, starting with ISA 3.0
18592 (@option{-mcpu=power9}) or later:
18593 @smallexample
18594 unsigned int scalar_extract_exp (double source);
18595 unsigned long long int scalar_extract_exp (__ieee128 source);
18596
18597 unsigned long long int scalar_extract_sig (double source);
18598 unsigned __int128 scalar_extract_sig (__ieee128 source);
18599
18600 double scalar_insert_exp (unsigned long long int significand,
18601 unsigned long long int exponent);
18602 double scalar_insert_exp (double significand, unsigned long long int exponent);
18603
18604 ieee_128 scalar_insert_exp (unsigned __int128 significand,
18605 unsigned long long int exponent);
18606 ieee_128 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
18607
18608 int scalar_cmp_exp_gt (double arg1, double arg2);
18609 int scalar_cmp_exp_lt (double arg1, double arg2);
18610 int scalar_cmp_exp_eq (double arg1, double arg2);
18611 int scalar_cmp_exp_unordered (double arg1, double arg2);
18612
18613 bool scalar_test_data_class (float source, const int condition);
18614 bool scalar_test_data_class (double source, const int condition);
18615 bool scalar_test_data_class (__ieee128 source, const int condition);
18616
18617 bool scalar_test_neg (float source);
18618 bool scalar_test_neg (double source);
18619 bool scalar_test_neg (__ieee128 source);
18620 @end smallexample
18621
18622 The @code{scalar_extract_exp} and @code{scalar_extract_sig}
18623 functions require a 64-bit environment supporting ISA 3.0 or later.
18624 The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in
18625 functions return the significand and the biased exponent value
18626 respectively of their @code{source} arguments.
18627 When supplied with a 64-bit @code{source} argument, the
18628 result returned by @code{scalar_extract_sig} has
18629 the @code{0x0010000000000000} bit set if the
18630 function's @code{source} argument is in normalized form.
18631 Otherwise, this bit is set to 0.
18632 When supplied with a 128-bit @code{source} argument, the
18633 @code{0x00010000000000000000000000000000} bit of the result is
18634 treated similarly.
18635 Note that the sign of the significand is not represented in the result
18636 returned from the @code{scalar_extract_sig} function. Use the
18637 @code{scalar_test_neg} function to test the sign of its @code{double}
18638 argument.
18639
18640 The @code{scalar_insert_exp}
18641 functions require a 64-bit environment supporting ISA 3.0 or later.
18642 When supplied with a 64-bit first argument, the
18643 @code{scalar_insert_exp} built-in function returns a double-precision
18644 floating point value that is constructed by assembling the values of its
18645 @code{significand} and @code{exponent} arguments. The sign of the
18646 result is copied from the most significant bit of the
18647 @code{significand} argument. The significand and exponent components
18648 of the result are composed of the least significant 11 bits of the
18649 @code{exponent} argument and the least significant 52 bits of the
18650 @code{significand} argument respectively.
18651
18652 When supplied with a 128-bit first argument, the
18653 @code{scalar_insert_exp} built-in function returns a quad-precision
18654 ieee floating point value. The sign bit of the result is copied from
18655 the most significant bit of the @code{significand} argument.
18656 The significand and exponent components of the result are composed of
18657 the least significant 15 bits of the @code{exponent} argument and the
18658 least significant 112 bits of the @code{significand} argument respectively.
18659
18660 The @code{scalar_cmp_exp_gt}, @code{scalar_cmp_exp_lt},
18661 @code{scalar_cmp_exp_eq}, and @code{scalar_cmp_exp_unordered} built-in
18662 functions return a non-zero value if @code{arg1} is greater than, less
18663 than, equal to, or not comparable to @code{arg2} respectively. The
18664 arguments are not comparable if one or the other equals NaN (not a
18665 number).
18666
18667 The @code{scalar_test_data_class} built-in function returns 1
18668 if any of the condition tests enabled by the value of the
18669 @code{condition} variable are true, and 0 otherwise. The
18670 @code{condition} argument must be a compile-time constant integer with
18671 value not exceeding 127. The
18672 @code{condition} argument is encoded as a bitmask with each bit
18673 enabling the testing of a different condition, as characterized by the
18674 following:
18675 @smallexample
18676 0x40 Test for NaN
18677 0x20 Test for +Infinity
18678 0x10 Test for -Infinity
18679 0x08 Test for +Zero
18680 0x04 Test for -Zero
18681 0x02 Test for +Denormal
18682 0x01 Test for -Denormal
18683 @end smallexample
18684
18685 The @code{scalar_test_neg} built-in function returns 1 if its
18686 @code{source} argument holds a negative value, 0 otherwise.
18687
18688 The following built-in functions are also available for the PowerPC family
18689 of processors, starting with ISA 3.0 or later
18690 (@option{-mcpu=power9}). These string functions are described
18691 separately in order to group the descriptions closer to the function
18692 prototypes:
18693 @smallexample
18694 int vec_all_nez (vector signed char, vector signed char);
18695 int vec_all_nez (vector unsigned char, vector unsigned char);
18696 int vec_all_nez (vector signed short, vector signed short);
18697 int vec_all_nez (vector unsigned short, vector unsigned short);
18698 int vec_all_nez (vector signed int, vector signed int);
18699 int vec_all_nez (vector unsigned int, vector unsigned int);
18700
18701 int vec_any_eqz (vector signed char, vector signed char);
18702 int vec_any_eqz (vector unsigned char, vector unsigned char);
18703 int vec_any_eqz (vector signed short, vector signed short);
18704 int vec_any_eqz (vector unsigned short, vector unsigned short);
18705 int vec_any_eqz (vector signed int, vector signed int);
18706 int vec_any_eqz (vector unsigned int, vector unsigned int);
18707
18708 vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
18709 vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
18710 vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
18711 vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
18712 vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
18713 vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
18714
18715 vector signed char vec_cnttz (vector signed char);
18716 vector unsigned char vec_cnttz (vector unsigned char);
18717 vector signed short vec_cnttz (vector signed short);
18718 vector unsigned short vec_cnttz (vector unsigned short);
18719 vector signed int vec_cnttz (vector signed int);
18720 vector unsigned int vec_cnttz (vector unsigned int);
18721 vector signed long long vec_cnttz (vector signed long long);
18722 vector unsigned long long vec_cnttz (vector unsigned long long);
18723
18724 signed int vec_cntlz_lsbb (vector signed char);
18725 signed int vec_cntlz_lsbb (vector unsigned char);
18726
18727 signed int vec_cnttz_lsbb (vector signed char);
18728 signed int vec_cnttz_lsbb (vector unsigned char);
18729
18730 unsigned int vec_first_match_index (vector signed char, vector signed char);
18731 unsigned int vec_first_match_index (vector unsigned char, vector unsigned char);
18732 unsigned int vec_first_match_index (vector signed int, vector signed int);
18733 unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
18734 unsigned int vec_first_match_index (vector signed short, vector signed short);
18735 unsigned int vec_first_match_index (vector unsigned short, vector unsigned short);
18736 unsigned int vec_first_match_or_eos_index (vector signed char, vector signed char);
18737 unsigned int vec_first_match_or_eos_index (vector unsigned char, vector unsigned char);
18738 unsigned int vec_first_match_or_eos_index (vector signed int, vector signed int);
18739 unsigned int vec_first_match_or_eos_index (vector unsigned int, vector unsigned int);
18740 unsigned int vec_first_match_or_eos_index (vector signed short, vector signed short);
18741 unsigned int vec_first_match_or_eos_index (vector unsigned short,
18742 vector unsigned short);
18743 unsigned int vec_first_mismatch_index (vector signed char, vector signed char);
18744 unsigned int vec_first_mismatch_index (vector unsigned char, vector unsigned char);
18745 unsigned int vec_first_mismatch_index (vector signed int, vector signed int);
18746 unsigned int vec_first_mismatch_index (vector unsigned int, vector unsigned int);
18747 unsigned int vec_first_mismatch_index (vector signed short, vector signed short);
18748 unsigned int vec_first_mismatch_index (vector unsigned short, vector unsigned short);
18749 unsigned int vec_first_mismatch_or_eos_index (vector signed char, vector signed char);
18750 unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
18751 vector unsigned char);
18752 unsigned int vec_first_mismatch_or_eos_index (vector signed int, vector signed int);
18753 unsigned int vec_first_mismatch_or_eos_index (vector unsigned int, vector unsigned int);
18754 unsigned int vec_first_mismatch_or_eos_index (vector signed short, vector signed short);
18755 unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
18756 vector unsigned short);
18757
18758 vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
18759
18760 vector signed char vec_xl_be (signed long long, signed char *);
18761 vector unsigned char vec_xl_be (signed long long, unsigned char *);
18762 vector signed int vec_xl_be (signed long long, signed int *);
18763 vector unsigned int vec_xl_be (signed long long, unsigned int *);
18764 vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
18765 vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
18766 vector signed long long vec_xl_be (signed long long, signed long long *);
18767 vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
18768 vector signed short vec_xl_be (signed long long, signed short *);
18769 vector unsigned short vec_xl_be (signed long long, unsigned short *);
18770 vector double vec_xl_be (signed long long, double *);
18771 vector float vec_xl_be (signed long long, float *);
18772
18773 vector signed char vec_xl_len (signed char *addr, size_t len);
18774 vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
18775 vector signed int vec_xl_len (signed int *addr, size_t len);
18776 vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
18777 vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
18778 vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
18779 vector signed long long vec_xl_len (signed long long *addr, size_t len);
18780 vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
18781 vector signed short vec_xl_len (signed short *addr, size_t len);
18782 vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
18783 vector double vec_xl_len (double *addr, size_t len);
18784 vector float vec_xl_len (float *addr, size_t len);
18785
18786 vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
18787
18788 void vec_xst_len (vector signed char data, signed char *addr, size_t len);
18789 void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
18790 void vec_xst_len (vector signed int data, signed int *addr, size_t len);
18791 void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
18792 void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
18793 void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
18794 void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
18795 void vec_xst_len (vector signed short data, signed short *addr, size_t len);
18796 void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
18797 void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
18798 void vec_xst_len (vector double data, double *addr, size_t len);
18799 void vec_xst_len (vector float data, float *addr, size_t len);
18800
18801 void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
18802
18803 signed char vec_xlx (unsigned int index, vector signed char data);
18804 unsigned char vec_xlx (unsigned int index, vector unsigned char data);
18805 signed short vec_xlx (unsigned int index, vector signed short data);
18806 unsigned short vec_xlx (unsigned int index, vector unsigned short data);
18807 signed int vec_xlx (unsigned int index, vector signed int data);
18808 unsigned int vec_xlx (unsigned int index, vector unsigned int data);
18809 float vec_xlx (unsigned int index, vector float data);
18810
18811 signed char vec_xrx (unsigned int index, vector signed char data);
18812 unsigned char vec_xrx (unsigned int index, vector unsigned char data);
18813 signed short vec_xrx (unsigned int index, vector signed short data);
18814 unsigned short vec_xrx (unsigned int index, vector unsigned short data);
18815 signed int vec_xrx (unsigned int index, vector signed int data);
18816 unsigned int vec_xrx (unsigned int index, vector unsigned int data);
18817 float vec_xrx (unsigned int index, vector float data);
18818 @end smallexample
18819
18820 The @code{vec_all_nez}, @code{vec_any_eqz}, and @code{vec_cmpnez}
18821 perform pairwise comparisons between the elements at the same
18822 positions within their two vector arguments.
18823 The @code{vec_all_nez} function returns a
18824 non-zero value if and only if all pairwise comparisons are not
18825 equal and no element of either vector argument contains a zero.
18826 The @code{vec_any_eqz} function returns a
18827 non-zero value if and only if at least one pairwise comparison is equal
18828 or if at least one element of either vector argument contains a zero.
18829 The @code{vec_cmpnez} function returns a vector of the same type as
18830 its two arguments, within which each element consists of all ones to
18831 denote that either the corresponding elements of the incoming arguments are
18832 not equal or that at least one of the corresponding elements contains
18833 zero. Otherwise, the element of the returned vector contains all zeros.
18834
18835 The @code{vec_cntlz_lsbb} function returns the count of the number of
18836 consecutive leading byte elements (starting from position 0 within the
18837 supplied vector argument) for which the least-significant bit
18838 equals zero. The @code{vec_cnttz_lsbb} function returns the count of
18839 the number of consecutive trailing byte elements (starting from
18840 position 15 and counting backwards within the supplied vector
18841 argument) for which the least-significant bit equals zero.
18842
18843 The @code{vec_xl_len} and @code{vec_xst_len} functions require a
18844 64-bit environment supporting ISA 3.0 or later. The @code{vec_xl_len}
18845 function loads a variable length vector from memory. The
18846 @code{vec_xst_len} function stores a variable length vector to memory.
18847 With both the @code{vec_xl_len} and @code{vec_xst_len} functions, the
18848 @code{addr} argument represents the memory address to or from which
18849 data will be transferred, and the
18850 @code{len} argument represents the number of bytes to be
18851 transferred, as computed by the C expression @code{min((len & 0xff), 16)}.
18852 If this expression's value is not a multiple of the vector element's
18853 size, the behavior of this function is undefined.
18854 In the case that the underlying computer is configured to run in
18855 big-endian mode, the data transfer moves bytes 0 to @code{(len - 1)} of
18856 the corresponding vector. In little-endian mode, the data transfer
18857 moves bytes @code{(16 - len)} to @code{15} of the corresponding
18858 vector. For the load function, any bytes of the result vector that
18859 are not loaded from memory are set to zero.
18860 The value of the @code{addr} argument need not be aligned on a
18861 multiple of the vector's element size.
18862
18863 The @code{vec_xlx} and @code{vec_xrx} functions extract the single
18864 element selected by the @code{index} argument from the vector
18865 represented by the @code{data} argument. The @code{index} argument
18866 always specifies a byte offset, regardless of the size of the vector
18867 element. With @code{vec_xlx}, @code{index} is the offset of the first
18868 byte of the element to be extracted. With @code{vec_xrx}, @code{index}
18869 represents the last byte of the element to be extracted, measured
18870 from the right end of the vector. In other words, the last byte of
18871 the element to be extracted is found at position @code{(15 - index)}.
18872 There is no requirement that @code{index} be a multiple of the vector
18873 element size. However, if the size of the vector element added to
18874 @code{index} is greater than 15, the content of the returned value is
18875 undefined.
18767 18876
18768 If the ISA 3.0 instruction set additions (@option{-mcpu=power9}) 18877 If the ISA 3.0 instruction set additions (@option{-mcpu=power9})
18769 are available: 18878 are available:
18770 18879
18771 @smallexample 18880 @smallexample
18772 vector unsigned long long vec_bperm (vector unsigned long long, 18881 vector unsigned long long vec_bperm (vector unsigned long long, vector unsigned char);
18773 vector unsigned char);
18774 18882
18775 vector bool char vec_cmpne (vector bool char, vector bool char); 18883 vector bool char vec_cmpne (vector bool char, vector bool char);
18884 vector bool char vec_cmpne (vector signed char, vector signed char);
18885 vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
18886 vector bool int vec_cmpne (vector bool int, vector bool int);
18887 vector bool int vec_cmpne (vector signed int, vector signed int);
18888 vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
18889 vector bool long long vec_cmpne (vector bool long long, vector bool long long);
18890 vector bool long long vec_cmpne (vector signed long long, vector signed long long);
18891 vector bool long long vec_cmpne (vector unsigned long long, vector unsigned long long);
18776 vector bool short vec_cmpne (vector bool short, vector bool short); 18892 vector bool short vec_cmpne (vector bool short, vector bool short);
18777 vector bool int vec_cmpne (vector bool int, vector bool int); 18893 vector bool short vec_cmpne (vector signed short, vector signed short);
18778 vector bool long long vec_cmpne (vector bool long long, vector bool long long); 18894 vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
18895 vector bool long long vec_cmpne (vector double, vector double);
18896 vector bool int vec_cmpne (vector float, vector float);
18779 18897
18780 vector float vec_extract_fp32_from_shorth (vector unsigned short); 18898 vector float vec_extract_fp32_from_shorth (vector unsigned short);
18781 vector float vec_extract_fp32_from_shortl (vector unsigned short); 18899 vector float vec_extract_fp32_from_shortl (vector unsigned short);
18782 18900
18783 vector long long vec_vctz (vector long long); 18901 vector long long vec_vctz (vector long long);
18799 vector unsigned short vec_vctzh (vector unsigned short); 18917 vector unsigned short vec_vctzh (vector unsigned short);
18800 18918
18801 vector int vec_vctzw (vector int); 18919 vector int vec_vctzw (vector int);
18802 vector unsigned int vec_vctzw (vector int); 18920 vector unsigned int vec_vctzw (vector int);
18803 18921
18804 long long vec_vextract4b (const vector signed char, const int); 18922 vector unsigned long long vec_extract4b (vector unsigned char, const int);
18805 long long vec_vextract4b (const vector unsigned char, const int); 18923
18806 18924 vector unsigned char vec_insert4b (vector signed int, vector unsigned char,
18807 vector signed char vec_insert4b (vector int, vector signed char, const int); 18925 const int);
18808 vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char, 18926 vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
18809 const int); 18927 const int);
18810 vector signed char vec_insert4b (long long, vector signed char, const int);
18811 vector unsigned char vec_insert4b (long long, vector unsigned char, const int);
18812 18928
18813 vector unsigned int vec_parity_lsbb (vector signed int); 18929 vector unsigned int vec_parity_lsbb (vector signed int);
18814 vector unsigned int vec_parity_lsbb (vector unsigned int); 18930 vector unsigned int vec_parity_lsbb (vector unsigned int);
18815 vector unsigned __int128 vec_parity_lsbb (vector signed __int128); 18931 vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
18816 vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128); 18932 vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
18833 are available: 18949 are available:
18834 18950
18835 @smallexample 18951 @smallexample
18836 vector long vec_vprtyb (vector long); 18952 vector long vec_vprtyb (vector long);
18837 vector unsigned long vec_vprtyb (vector unsigned long); 18953 vector unsigned long vec_vprtyb (vector unsigned long);
18838 vector __int128_t vec_vprtyb (vector __int128_t); 18954 vector __int128 vec_vprtyb (vector __int128);
18839 vector __uint128_t vec_vprtyb (vector __uint128_t); 18955 vector __uint128 vec_vprtyb (vector __uint128);
18840 18956
18841 vector long vec_vprtybd (vector long); 18957 vector long vec_vprtybd (vector long);
18842 vector unsigned long vec_vprtybd (vector unsigned long); 18958 vector unsigned long vec_vprtybd (vector unsigned long);
18843 18959
18844 vector __int128_t vec_vprtybq (vector __int128_t); 18960 vector __int128 vec_vprtybq (vector __int128);
18845 vector __uint128_t vec_vprtybd (vector __uint128_t); 18961 vector __uint128 vec_vprtybd (vector __uint128);
18846 @end smallexample 18962 @end smallexample
18847 18963
18848 The following built-in vector functions are available for the PowerPC family 18964 The following built-in vector functions are available for the PowerPC family
18849 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}): 18965 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
18850 @smallexample 18966 @smallexample
18903 elements of the vector result. 19019 elements of the vector result.
18904 19020
18905 The following built-in functions are available for the PowerPC family 19021 The following built-in functions are available for the PowerPC family
18906 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}): 19022 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
18907 @smallexample 19023 @smallexample
18908 __vector unsigned int 19024 __vector unsigned int vec_extract_exp (__vector float source);
18909 vec_extract_exp (__vector float source); 19025 __vector unsigned long long int vec_extract_exp (__vector double source);
18910 __vector unsigned long long int 19026
18911 vec_extract_exp (__vector double source); 19027 __vector unsigned int vec_extract_sig (__vector float source);
18912 19028 __vector unsigned long long int vec_extract_sig (__vector double source);
18913 __vector unsigned int 19029
18914 vec_extract_sig (__vector float source); 19030 __vector float vec_insert_exp (__vector unsigned int significands,
18915 __vector unsigned long long int 19031 __vector unsigned int exponents);
18916 vec_extract_sig (__vector double source); 19032 __vector float vec_insert_exp (__vector unsigned float significands,
18917 19033 __vector unsigned int exponents);
18918 __vector float 19034 __vector double vec_insert_exp (__vector unsigned long long int significands,
18919 vec_insert_exp (__vector unsigned int significands, 19035 __vector unsigned long long int exponents);
18920 __vector unsigned int exponents); 19036 __vector double vec_insert_exp (__vector unsigned double significands,
18921 __vector float 19037 __vector unsigned long long int exponents);
18922 vec_insert_exp (__vector unsigned float significands, 19038
18923 __vector unsigned int exponents); 19039 __vector bool int vec_test_data_class (__vector float source, const int condition);
18924 __vector double
18925 vec_insert_exp (__vector unsigned long long int significands,
18926 __vector unsigned long long int exponents);
18927 __vector double
18928 vec_insert_exp (__vector unsigned double significands,
18929 __vector unsigned long long int exponents);
18930
18931 __vector bool int vec_test_data_class (__vector float source,
18932 const int condition);
18933 __vector bool long long int vec_test_data_class (__vector double source, 19040 __vector bool long long int vec_test_data_class (__vector double source,
18934 const int condition); 19041 const int condition);
18935 @end smallexample 19042 @end smallexample
18936 19043
18937 The @code{vec_extract_sig} and @code{vec_extract_exp} built-in 19044 The @code{vec_extract_sig} and @code{vec_extract_exp} built-in
19051 On 64-bit targets, if the ISA 3.0 additions (@option{-mcpu=power9}) 19158 On 64-bit targets, if the ISA 3.0 additions (@option{-mcpu=power9})
19052 are available: 19159 are available:
19053 @smallexample 19160 @smallexample
19054 vector long vec_revb (vector long); 19161 vector long vec_revb (vector long);
19055 vector unsigned long vec_revb (vector unsigned long); 19162 vector unsigned long vec_revb (vector unsigned long);
19056 vector __int128_t vec_revb (vector __int128_t); 19163 vector __int128 vec_revb (vector __int128);
19057 vector __uint128_t vec_revb (vector __uint128_t); 19164 vector __uint128 vec_revb (vector __uint128);
19058 @end smallexample 19165 @end smallexample
19059 19166
19060 The @code{vec_revb} built-in function reverses the bytes on an element 19167 The @code{vec_revb} built-in function reverses the bytes on an element
19061 by element basis. A vector of @code{vector unsigned char} or 19168 by element basis. A vector of @code{vector unsigned char} or
19062 @code{vector signed char} reverses the bytes in the whole word. 19169 @code{vector signed char} reverses the bytes in the whole word.
19075 vector unsigned long long); 19182 vector unsigned long long);
19076 19183
19077 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 19184 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
19078 vector unsigned long long); 19185 vector unsigned long long);
19079 19186
19080 vector unsigned long long __builtin_crypto_vncipherlast 19187 vector unsigned long long __builtin_crypto_vncipherlast (vector unsigned long long,
19081 (vector unsigned long long, 19188 vector unsigned long long);
19082 vector unsigned long long);
19083 19189
19084 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 19190 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
19085 vector unsigned char, 19191 vector unsigned char,
19086 vector unsigned char); 19192 vector unsigned char);
19087 19193
19107 vector unsigned int); 19213 vector unsigned int);
19108 19214
19109 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 19215 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
19110 vector unsigned long long); 19216 vector unsigned long long);
19111 19217
19112 vector unsigned long long __builtin_crypto_vshasigmad 19218 vector unsigned long long __builtin_crypto_vshasigmad (vector unsigned long long,
19113 (vector unsigned long long, int, int); 19219 int, int);
19114 19220
19115 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 19221 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, int, int);
19116 int, int);
19117 @end smallexample 19222 @end smallexample
19118 19223
19119 The second argument to @var{__builtin_crypto_vshasigmad} and 19224 The second argument to @var{__builtin_crypto_vshasigmad} and
19120 @var{__builtin_crypto_vshasigmaw} must be a constant 19225 @var{__builtin_crypto_vshasigmaw} must be a constant
19121 integer that is 0 or 1. The third argument to these built-in functions 19226 integer that is 0 or 1. The third argument to these built-in functions
19122 must be a constant integer in the range of 0 to 15. 19227 must be a constant integer in the range of 0 to 15.
19123 19228
19124 If the ISA 3.0 instruction set additions 19229 If the ISA 3.0 instruction set additions
19125 are enabled (@option{-mcpu=power9}), the following additional 19230 are enabled (@option{-mcpu=power9}), the following additional
19126 functions are available for both 32-bit and 64-bit targets. 19231 functions are available for both 32-bit and 64-bit targets.
19127 19232 @smallexample
19128 vector short vec_xl (int, vector short *); 19233 vector short vec_xl (int, vector short *);
19129 vector short vec_xl (int, short *); 19234 vector short vec_xl (int, short *);
19130 vector unsigned short vec_xl (int, vector unsigned short *); 19235 vector unsigned short vec_xl (int, vector unsigned short *);
19131 vector unsigned short vec_xl (int, unsigned short *); 19236 vector unsigned short vec_xl (int, unsigned short *);
19132 vector char vec_xl (int, vector char *); 19237 vector char vec_xl (int, vector char *);
19140 void vec_xst (vector unsigned short, int, unsigned short *); 19245 void vec_xst (vector unsigned short, int, unsigned short *);
19141 void vec_xst (vector char, int, vector char *); 19246 void vec_xst (vector char, int, vector char *);
19142 void vec_xst (vector char, int, char *); 19247 void vec_xst (vector char, int, char *);
19143 void vec_xst (vector unsigned char, int, vector unsigned char *); 19248 void vec_xst (vector unsigned char, int, vector unsigned char *);
19144 void vec_xst (vector unsigned char, int, unsigned char *); 19249 void vec_xst (vector unsigned char, int, unsigned char *);
19145 19250 @end smallexample
19146 @node PowerPC Hardware Transactional Memory Built-in Functions 19251 @node PowerPC Hardware Transactional Memory Built-in Functions
19147 @subsection PowerPC Hardware Transactional Memory Built-in Functions 19252 @subsection PowerPC Hardware Transactional Memory Built-in Functions
19148 GCC provides two interfaces for accessing the Hardware Transactional 19253 GCC provides two interfaces for accessing the Hardware Transactional
19149 Memory (HTM) instructions available on some of the PowerPC family 19254 Memory (HTM) instructions available on some of the PowerPC family
19150 of processors (eg, POWER8). The two interfaces come in a low level 19255 of processors (eg, POWER8). The two interfaces come in a low level
21517 @smallexample 21622 @smallexample
21518 void __builtin_ia32_wrpkru (unsigned int) 21623 void __builtin_ia32_wrpkru (unsigned int)
21519 unsigned int __builtin_ia32_rdpkru () 21624 unsigned int __builtin_ia32_rdpkru ()
21520 @end smallexample 21625 @end smallexample
21521 21626
21522 The following built-in functions are available when @option{-mcet} is used. 21627 The following built-in functions are available when @option{-mcet} or
21523 They are used to support Intel Control-flow Enforcment Technology (CET). 21628 @option{-mshstk} option is used. They support shadow stack
21524 Each built-in function generates the machine instruction that is part of the 21629 machine instructions from Intel Control-flow Enforcement Technology (CET).
21525 function's name. 21630 Each built-in function generates the machine instruction that is part
21526 @smallexample 21631 of the function's name. These are the internal low-level functions.
21527 unsigned int __builtin_ia32_rdsspd (unsigned int) 21632 Normally the functions in @ref{x86 control-flow protection intrinsics}
21528 unsigned long long __builtin_ia32_rdsspq (unsigned long long) 21633 should be used instead.
21634
21635 @smallexample
21636 unsigned int __builtin_ia32_rdsspd (void)
21637 unsigned long long __builtin_ia32_rdsspq (void)
21529 void __builtin_ia32_incsspd (unsigned int) 21638 void __builtin_ia32_incsspd (unsigned int)
21530 void __builtin_ia32_incsspq (unsigned long long) 21639 void __builtin_ia32_incsspq (unsigned long long)
21531 void __builtin_ia32_saveprevssp(void); 21640 void __builtin_ia32_saveprevssp(void);
21532 void __builtin_ia32_rstorssp(void *); 21641 void __builtin_ia32_rstorssp(void *);
21533 void __builtin_ia32_wrssd(unsigned int, void *); 21642 void __builtin_ia32_wrssd(unsigned int, void *);
21558 Start a RTM (Restricted Transactional Memory) transaction. 21667 Start a RTM (Restricted Transactional Memory) transaction.
21559 Returns @code{_XBEGIN_STARTED} when the transaction 21668 Returns @code{_XBEGIN_STARTED} when the transaction
21560 started successfully (note this is not 0, so the constant has to be 21669 started successfully (note this is not 0, so the constant has to be
21561 explicitly tested). 21670 explicitly tested).
21562 21671
21563 If the transaction aborts, all side-effects 21672 If the transaction aborts, all side effects
21564 are undone and an abort code encoded as a bit mask is returned. 21673 are undone and an abort code encoded as a bit mask is returned.
21565 The following macros are defined: 21674 The following macros are defined:
21566 21675
21567 @table @code 21676 @table @code
21568 @item _XABORT_EXPLICIT 21677 @item _XABORT_EXPLICIT
21585 fallback path. 21694 fallback path.
21586 @end deftypefn 21695 @end deftypefn
21587 21696
21588 @deftypefn {RTM Function} {void} _xend () 21697 @deftypefn {RTM Function} {void} _xend ()
21589 Commit the current transaction. When no transaction is active this faults. 21698 Commit the current transaction. When no transaction is active this faults.
21590 All memory side-effects of the transaction become visible 21699 All memory side effects of the transaction become visible
21591 to other threads in an atomic manner. 21700 to other threads in an atomic manner.
21592 @end deftypefn 21701 @end deftypefn
21593 21702
21594 @deftypefn {RTM Function} {int} _xtest () 21703 @deftypefn {RTM Function} {int} _xtest ()
21595 Return a nonzero value if a transaction is currently active, otherwise 0. 21704 Return a nonzero value if a transaction is currently active, otherwise 0.
21629 @end smallexample 21738 @end smallexample
21630 21739
21631 @noindent 21740 @noindent
21632 Note that, in most cases, the transactional and non-transactional code 21741 Note that, in most cases, the transactional and non-transactional code
21633 must synchronize together to ensure consistency. 21742 must synchronize together to ensure consistency.
21743
21744 @node x86 control-flow protection intrinsics
21745 @subsection x86 Control-Flow Protection Intrinsics
21746
21747 @deftypefn {CET Function} {ret_type} _get_ssp (void)
21748 Get the current value of shadow stack pointer if shadow stack support
21749 from Intel CET is enabled in the hardware or @code{0} otherwise.
21750 The @code{ret_type} is @code{unsigned long long} for 64-bit targets
21751 and @code{unsigned int} for 32-bit targets.
21752 @end deftypefn
21753
21754 @deftypefn {CET Function} void _inc_ssp (unsigned int)
21755 Increment the current shadow stack pointer by the size specified by the
21756 function argument. The argument is masked to a byte value for security
21757 reasons, so to increment by more than 255 bytes you must call the function
21758 multiple times.
21759 @end deftypefn
21760
21761 The shadow stack unwind code looks like:
21762
21763 @smallexample
21764 #include <immintrin.h>
21765
21766 /* Unwind the shadow stack for EH. */
21767 #define _Unwind_Frames_Extra(x) \
21768 do \
21769 @{ \
21770 _Unwind_Word ssp = _get_ssp (); \
21771 if (ssp != 0) \
21772 @{ \
21773 _Unwind_Word tmp = (x); \
21774 while (tmp > 255) \
21775 @{ \
21776 _inc_ssp (tmp); \
21777 tmp -= 255; \
21778 @} \
21779 _inc_ssp (tmp); \
21780 @} \
21781 @} \
21782 while (0)
21783 @end smallexample
21784
21785 @noindent
21786 This code runs unconditionally on all 64-bit processors. For 32-bit
21787 processors the code runs on those that support multi-byte NOP instructions.
21634 21788
21635 @node Target Format Checks 21789 @node Target Format Checks
21636 @section Format Checks Specific to Particular Target Machines 21790 @section Format Checks Specific to Particular Target Machines
21637 21791
21638 For some target machines, GCC supports additional options to the 21792 For some target machines, GCC supports additional options to the
22117 @table @code 22271 @table @code
22118 @item #pragma message @var{string} 22272 @item #pragma message @var{string}
22119 @cindex pragma, diagnostic 22273 @cindex pragma, diagnostic
22120 22274
22121 Prints @var{string} as a compiler message on compilation. The message 22275 Prints @var{string} as a compiler message on compilation. The message
22122 is informational only, and is neither a compilation warning nor an error. 22276 is informational only, and is neither a compilation warning nor an
22277 error. Newlines can be included in the string by using the @samp{\n}
22278 escape sequence.
22123 22279
22124 @smallexample 22280 @smallexample
22125 #pragma message "Compiling " __FILE__ "..." 22281 #pragma message "Compiling " __FILE__ "..."
22126 @end smallexample 22282 @end smallexample
22127 22283
22136 @end smallexample 22292 @end smallexample
22137 22293
22138 @noindent 22294 @noindent
22139 prints @samp{/tmp/file.c:4: note: #pragma message: 22295 prints @samp{/tmp/file.c:4: note: #pragma message:
22140 TODO - Remember to fix this}. 22296 TODO - Remember to fix this}.
22297
22298 @item #pragma GCC error @var{message}
22299 @cindex pragma, diagnostic
22300 Generates an error message. This pragma @emph{is} considered to
22301 indicate an error in the compilation, and it will be treated as such.
22302
22303 Newlines can be included in the string by using the @samp{\n}
22304 escape sequence. They will be displayed as newlines even if the
22305 @option{-fmessage-length} option is set to zero.
22306
22307 The error is only generated if the pragma is present in the code after
22308 pre-processing has been completed. It does not matter however if the
22309 code containing the pragma is unreachable:
22310
22311 @smallexample
22312 #if 0
22313 #pragma GCC error "this error is not seen"
22314 #endif
22315 void foo (void)
22316 @{
22317 return;
22318 #pragma GCC error "this error is seen"
22319 @}
22320 @end smallexample
22321
22322 @item #pragma GCC warning @var{message}
22323 @cindex pragma, diagnostic
22324 This is just like @samp{pragma GCC error} except that a warning
22325 message is issued instead of an error message. Unless
22326 @option{-Werror} is in effect, in which case this pragma will generate
22327 an error as well.
22141 22328
22142 @end table 22329 @end table
22143 22330
22144 @node Visibility Pragmas 22331 @node Visibility Pragmas
22145 @subsection Visibility Pragmas 22332 @subsection Visibility Pragmas
22211 @xref{Function Attributes}, for more information about the 22398 @xref{Function Attributes}, for more information about the
22212 @code{target} attribute and the attribute syntax. 22399 @code{target} attribute and the attribute syntax.
22213 22400
22214 The @code{#pragma GCC target} pragma is presently implemented for 22401 The @code{#pragma GCC target} pragma is presently implemented for
22215 x86, ARM, AArch64, PowerPC, S/390, and Nios II targets only. 22402 x86, ARM, AArch64, PowerPC, S/390, and Nios II targets only.
22216 @end table 22403
22217
22218 @table @code
22219 @item #pragma GCC optimize (@var{"string"}...) 22404 @item #pragma GCC optimize (@var{"string"}...)
22220 @cindex pragma GCC optimize 22405 @cindex pragma GCC optimize
22221 22406
22222 This pragma allows you to set global optimization options for functions 22407 This pragma allows you to set global optimization options for functions
22223 defined later in the source file. One or more strings can be 22408 defined later in the source file. One or more strings can be
22224 specified. Each function that is defined after this point is as 22409 specified. Each function that is defined after this point is as
22225 if @code{attribute((optimize("STRING")))} was specified for that 22410 if @code{attribute((optimize("STRING")))} was specified for that
22226 function. The parenthesis around the options is optional. 22411 function. The parenthesis around the options is optional.
22227 @xref{Function Attributes}, for more information about the 22412 @xref{Function Attributes}, for more information about the
22228 @code{optimize} attribute and the attribute syntax. 22413 @code{optimize} attribute and the attribute syntax.
22229 @end table 22414
22230
22231 @table @code
22232 @item #pragma GCC push_options 22415 @item #pragma GCC push_options
22233 @itemx #pragma GCC pop_options 22416 @itemx #pragma GCC pop_options
22234 @cindex pragma GCC push_options 22417 @cindex pragma GCC push_options
22235 @cindex pragma GCC pop_options 22418 @cindex pragma GCC pop_options
22236 22419
22237 These pragmas maintain a stack of the current target and optimization 22420 These pragmas maintain a stack of the current target and optimization
22238 options. It is intended for include files where you temporarily want 22421 options. It is intended for include files where you temporarily want
22239 to switch to using a different @samp{#pragma GCC target} or 22422 to switch to using a different @samp{#pragma GCC target} or
22240 @samp{#pragma GCC optimize} and then to pop back to the previous 22423 @samp{#pragma GCC optimize} and then to pop back to the previous
22241 options. 22424 options.
22242 @end table 22425
22243
22244 @table @code
22245 @item #pragma GCC reset_options 22426 @item #pragma GCC reset_options
22246 @cindex pragma GCC reset_options 22427 @cindex pragma GCC reset_options
22247 22428
22248 This pragma clears the current @code{#pragma GCC target} and 22429 This pragma clears the current @code{#pragma GCC target} and
22249 @code{#pragma GCC optimize} to use the default switches as specified 22430 @code{#pragma GCC optimize} to use the default switches as specified
22250 on the command line. 22431 on the command line.
22432
22251 @end table 22433 @end table
22252 22434
22253 @node Loop-Specific Pragmas 22435 @node Loop-Specific Pragmas
22254 @subsection Loop-Specific Pragmas 22436 @subsection Loop-Specific Pragmas
22255 22437
22256 @table @code 22438 @table @code
22257 @item #pragma GCC ivdep 22439 @item #pragma GCC ivdep
22258 @cindex pragma GCC ivdep 22440 @cindex pragma GCC ivdep
22259 @end table
22260 22441
22261 With this pragma, the programmer asserts that there are no loop-carried 22442 With this pragma, the programmer asserts that there are no loop-carried
22262 dependencies which would prevent consecutive iterations of 22443 dependencies which would prevent consecutive iterations of
22263 the following loop from executing concurrently with SIMD 22444 the following loop from executing concurrently with SIMD
22264 (single instruction multiple data) instructions. 22445 (single instruction multiple data) instructions.
22289 for (int i = 0; i < m; i++) 22470 for (int i = 0; i < m; i++)
22290 a[i] = a[i + k] * c; 22471 a[i] = a[i + k] * c;
22291 @} 22472 @}
22292 @end smallexample 22473 @end smallexample
22293 22474
22475 @item #pragma GCC unroll @var{n}
22476 @cindex pragma GCC unroll @var{n}
22477
22478 You can use this pragma to control how many times a loop should be unrolled.
22479 It must be placed immediately before a @code{for}, @code{while} or @code{do}
22480 loop or a @code{#pragma GCC ivdep}, and applies only to the loop that follows.
22481 @var{n} is an integer constant expression specifying the unrolling factor.
22482 The values of @math{0} and @math{1} block any unrolling of the loop.
22483
22484 @end table
22294 22485
22295 @node Unnamed Fields 22486 @node Unnamed Fields
22296 @section Unnamed Structure and Union Fields 22487 @section Unnamed Structure and Union Fields
22297 @cindex @code{struct} 22488 @cindex @code{struct}
22298 @cindex @code{union} 22489 @cindex @code{union}
23500 the C++ standard is complete, some of those features are superseded by 23691 the C++ standard is complete, some of those features are superseded by
23501 superior alternatives. Using the old features might cause a warning in 23692 superior alternatives. Using the old features might cause a warning in
23502 some cases that the feature will be dropped in the future. In other 23693 some cases that the feature will be dropped in the future. In other
23503 cases, the feature might be gone already. 23694 cases, the feature might be gone already.
23504 23695
23505 While the list below is not exhaustive, it documents some of the options
23506 that are now deprecated:
23507
23508 @table @code
23509 @item -fexternal-templates
23510 @itemx -falt-external-templates
23511 These are two of the many ways for G++ to implement template
23512 instantiation. @xref{Template Instantiation}. The C++ standard clearly
23513 defines how template definitions have to be organized across
23514 implementation units. G++ has an implicit instantiation mechanism that
23515 should work just fine for standard-conforming code.
23516
23517 @item -fstrict-prototype
23518 @itemx -fno-strict-prototype
23519 Previously it was possible to use an empty prototype parameter list to
23520 indicate an unspecified number of parameters (like C), rather than no
23521 parameters, as C++ demands. This feature has been removed, except where
23522 it is required for backwards compatibility. @xref{Backwards Compatibility}.
23523 @end table
23524
23525 G++ allows a virtual function returning @samp{void *} to be overridden 23696 G++ allows a virtual function returning @samp{void *} to be overridden
23526 by one returning a different pointer type. This extension to the 23697 by one returning a different pointer type. This extension to the
23527 covariant return type rules is now deprecated and will be removed from a 23698 covariant return type rules is now deprecated and will be removed from a
23528 future version. 23699 future version.
23529
23530 The G++ minimum and maximum operators (@samp{<?} and @samp{>?}) and
23531 their compound forms (@samp{<?=}) and @samp{>?=}) have been deprecated
23532 and are now removed from G++. Code using these operators should be
23533 modified to use @code{std::min} and @code{std::max} instead.
23534
23535 The named return value extension has been deprecated, and is now
23536 removed from G++.
23537
23538 The use of initializer lists with new expressions has been deprecated,
23539 and is now removed from G++.
23540
23541 Floating and complex non-type template parameters have been deprecated,
23542 and are now removed from G++.
23543
23544 The implicit typename extension has been deprecated and is now
23545 removed from G++.
23546 23700
23547 The use of default arguments in function pointers, function typedefs 23701 The use of default arguments in function pointers, function typedefs
23548 and other places where they are not permitted by the standard is 23702 and other places where they are not permitted by the standard is
23549 deprecated and will be removed from a future version of G++. 23703 deprecated and will be removed from a future version of G++.
23550 23704
23555 G++ allows static data members of const floating-point type to be declared 23709 G++ allows static data members of const floating-point type to be declared
23556 with an initializer in a class definition. The standard only allows 23710 with an initializer in a class definition. The standard only allows
23557 initializers for static members of const integral types and const 23711 initializers for static members of const integral types and const
23558 enumeration types so this extension has been deprecated and will be removed 23712 enumeration types so this extension has been deprecated and will be removed
23559 from a future version. 23713 from a future version.
23714
23715 G++ allows attributes to follow a parenthesized direct initializer,
23716 e.g.@: @samp{ int f (0) __attribute__ ((something)); } This extension
23717 has been ignored since G++ 3.3 and is deprecated.
23718
23719 G++ allows anonymous structs and unions to have members that are not
23720 public non-static data members (i.e.@: fields). These extensions are
23721 deprecated.
23560 23722
23561 @node Backwards Compatibility 23723 @node Backwards Compatibility
23562 @section Backwards Compatibility 23724 @section Backwards Compatibility
23563 @cindex Backwards Compatibility 23725 @cindex Backwards Compatibility
23564 @cindex ARM [Annotated C++ Reference Manual] 23726 @cindex ARM [Annotated C++ Reference Manual]
23571 compatibilities. @emph{All such backwards compatibility features are 23733 compatibilities. @emph{All such backwards compatibility features are
23572 liable to disappear in future versions of G++.} They should be considered 23734 liable to disappear in future versions of G++.} They should be considered
23573 deprecated. @xref{Deprecated Features}. 23735 deprecated. @xref{Deprecated Features}.
23574 23736
23575 @table @code 23737 @table @code
23576 @item For scope
23577 If a variable is declared at for scope, it used to remain in scope until
23578 the end of the scope that contained the for statement (rather than just
23579 within the for scope). G++ retains this, but issues a warning, if such a
23580 variable is accessed outside the for scope.
23581 23738
23582 @item Implicit C language 23739 @item Implicit C language
23583 Old C system header files did not contain an @code{extern "C" @{@dots{}@}} 23740 Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
23584 scope to set the language. On such systems, all header files are 23741 scope to set the language. On such systems, all system header files are
23585 implicitly scoped inside a C language scope. Also, an empty prototype 23742 implicitly scoped inside a C language scope. Such headers must
23586 @code{()} is treated as an unspecified number of arguments, rather 23743 correctly prototype function argument types, there is no leeway for
23587 than no arguments, as C++ demands. 23744 @code{()} to indicate an unspecified set of arguments.
23745
23588 @end table 23746 @end table
23589 23747
23590 @c LocalWords: emph deftypefn builtin ARCv2EM SIMD builtins msimd 23748 @c LocalWords: emph deftypefn builtin ARCv2EM SIMD builtins msimd
23591 @c LocalWords: typedef v4si v8hi DMA dma vdiwr vdowr 23749 @c LocalWords: typedef v4si v8hi DMA dma vdiwr vdowr