This is gccint.info, produced by makeinfo version 7.1 from gccint.texi. Copyright © 1988-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "Funding Free Software", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled "GNU Free Documentation License". (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. INFO-DIR-SECTION Software development START-INFO-DIR-ENTRY * gccint: (gccint). Internals of the GNU Compiler Collection. END-INFO-DIR-ENTRY This file documents the internals of the GNU compilers. Copyright © 1988-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "Funding Free Software", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled "GNU Free Documentation License". (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.  File: gccint.info, Node: Top, Next: Contributing, Up: (dir) Introduction ************ This manual documents the internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages. It corresponds to the compilers (GCC) version 13.0.1-texinfostuff. The use of the GNU compilers is documented in a separate manual. *Note Introduction: (gcc)Top. This manual is mainly a reference manual rather than a tutorial. It discusses how to contribute to GCC (*note Contributing::), the characteristics of the machines supported by GCC as hosts and targets (*note Portability::), how GCC relates to the ABIs on such systems (*note Interface::), and the characteristics of the languages for which GCC front ends are written (*note Languages::). It then describes the GCC source tree structure and build system, some of the interfaces to GCC front ends, and how support for a target system is implemented in GCC. Additional tutorial information is linked to from . * Menu: * Contributing:: How to contribute to testing and developing GCC. * Portability:: Goals of GCC's portability features. * Interface:: Function-call interface of GCC output. * Libgcc:: Low-level runtime library used by GCC. * Languages:: Languages for which GCC front ends are written. * Source Tree:: GCC source tree structure and build system. * Testsuites:: GCC testsuites. * Options:: Option specification files. * Passes:: Order of passes, what they do, and what each file is for. * poly_int:: Representation of runtime sizes and offsets. * GENERIC:: Language-independent representation generated by Front Ends * GIMPLE:: Tuple representation used by Tree SSA optimizers * Tree SSA:: Analysis and optimization of GIMPLE * RTL:: Machine-dependent low-level intermediate representation. * Control Flow:: Maintaining and manipulating the control flow graph. * Loop Analysis and Representation:: Analysis and representation of loops * Machine Desc:: How to write machine description instruction patterns. * Target Macros:: How to write the machine description C macros and functions. * Host Config:: Writing the ‘xm-MACHINE.h’ file. * Fragments:: Writing the ‘t-TARGET’ and ‘x-HOST’ files. * Collect2:: How ‘collect2’ works; how it finds ‘ld’. * Header Dirs:: Understanding the standard header file directories. * Type Information:: GCC's memory management; generating type information. * Plugins:: Extending the compiler with plugins. * LTO:: Using Link-Time Optimization. * Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC * Static Analyzer:: Working with the static analyzer. * User Experience Guidelines:: Guidelines for implementing diagnostics and options. * Funding:: How to help assure funding for free software. * GNU Project:: The GNU Project and GNU/Linux. * Copying:: GNU General Public License says how you can copy and share GCC. * GNU Free Documentation License:: How you can copy and share this manual. * Contributors:: People who have contributed to GCC. * Option Index:: Index to command line options. * Concept Index:: Index of concepts and symbol names.  File: gccint.info, Node: Contributing, Next: Portability, Up: Top 1 Contributing to GCC Development ********************************* If you would like to help pretest GCC releases to assure they work well, current development sources are available via Git (see ). Source and binary snapshots are also available for FTP; see . If you would like to work on improvements to GCC, please read the advice at these URLs: for information on how to make useful contributions and avoid duplication of effort. Suggested projects are listed at .  File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 2 GCC and Portability ********************* GCC itself aims to be portable to any machine where ‘int’ is at least a 32-bit type. It aims to target machines with a flat (non-segmented) byte addressed data address space (the code address space can be separate). Target ABIs may have 8, 16, 32 or 64-bit ‘int’ type. ‘char’ can be wider than 8 bits. GCC gets most of the information about the target machine from a machine description which gives an algebraic formula for each of the machine's instructions. This is a very clean way to describe the target. But when the compiler needs information that is difficult to express in this fashion, ad-hoc parameters have been defined for machine descriptions. The purpose of portability is to reduce the total work needed on the compiler; it was not of interest for its own sake. GCC does not contain machine dependent code, but it does contain code that depends on machine parameters such as endianness (whether the most significant byte has the highest or lowest address of the bytes in a word) and the availability of autoincrement addressing. In the RTL-generation pass, it is often necessary to have multiple strategies for generating code for a particular kind of syntax tree, strategies that are usable for different combinations of parameters. Often, not all possible cases have been addressed, but only the common ones or only the ones that have been encountered. As a result, a new target may require additional strategies. You will know if this happens because the compiler will call ‘abort’. Fortunately, the new strategies can be added in a machine-independent fashion, and will affect only the target machines that need them.  File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 3 Interfacing to GCC Output *************************** GCC is normally configured to use the same function calling convention normally in use on the target system. This is done with the machine-description macros described (*note Target Macros::). However, returning of structure and union values is done differently on some target machines. As a result, functions compiled with PCC returning such types cannot be called from code compiled with GCC, and vice versa. This does not cause trouble often because few Unix library routines return structures or unions. GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long in the same registers used for ‘int’ or ‘double’ return values. (GCC typically allocates variables of such types in registers also.) Structures and unions of other sizes are returned by storing them into an address passed by the caller (usually in a register). The target hook ‘TARGET_STRUCT_VALUE_RTX’ tells GCC where to pass this address. By contrast, PCC on most target machines returns structures and unions of any size by copying the data into an area of static storage, and then returning the address of that storage as if it were a pointer value. The caller must copy the data from that memory area to the place where the value is wanted. This is slower than the method used by GCC, and fails to be reentrant. On some target machines, such as RISC machines and the 80386, the standard system convention is to pass to the subroutine the address of where to return the value. On these machines, GCC has been configured to be compatible with the standard compiler, when this method is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes. GCC uses the system's standard convention for passing arguments. On some machines, the first few arguments are passed in registers; in others, all are passed on the stack. It would be possible to use registers for argument passing on any machine, and this would probably result in a significant speedup. But the result would be complete incompatibility with code that follows the standard convention. So this change is practical only if you are switching to GCC as the sole C compiler for the system. We may implement register argument passing on certain machines once we have a complete GNU system so that we can compile the libraries with GCC. On some machines (particularly the SPARC), certain types of arguments are passed "by invisible reference". This means that the value is stored in memory, and the address of the memory location is passed to the subroutine. If you use ‘longjmp’, beware of automatic variables. ISO C says that automatic variables that are not declared ‘volatile’ have undefined values after a ‘longjmp’. And this is all GCC promises to do, because it is very difficult to restore register variables correctly, and one of GCC's features is that it can put variables in registers without your asking it to.  File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 4 The GCC low-level runtime library *********************************** GCC provides a low-level runtime library, ‘libgcc.a’ or ‘libgcc_s.so.1’ on some platforms. GCC generates calls to routines in this library automatically, whenever it needs to perform some operation that is too complicated to emit inline code for. Most of the routines in ‘libgcc’ handle arithmetic operations that the target processor cannot perform directly. This includes integer multiply and divide on some machines, and all floating-point and fixed-point operations on other machines. ‘libgcc’ also includes routines for exception handling, and a handful of miscellaneous operations. Some of these routines can be defined in mostly machine-independent C. Others must be hand-written in assembly language for each processor that needs them. GCC will also generate calls to C library routines, such as ‘memcpy’ and ‘memset’, in some cases. The set of routines that GCC may possibly use is documented in *note (gcc)Other Builtins::. These routines take arguments and return values of a specific machine mode, not a specific C type. *Note Machine Modes::, for an explanation of this concept. For illustrative purposes, in this chapter the floating point type ‘float’ is assumed to correspond to ‘SFmode’; ‘double’ to ‘DFmode’; and ‘long double’ to both ‘TFmode’ and ‘XFmode’. Similarly, the integer types ‘int’ and ‘unsigned int’ correspond to ‘SImode’; ‘long’ and ‘unsigned long’ to ‘DImode’; and ‘long long’ and ‘unsigned long long’ to ‘TImode’. * Menu: * Integer library routines:: * Soft float library routines:: * Decimal float library routines:: * Fixed-point fractional library routines:: * Exception handling routines:: * Miscellaneous routines::  File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 4.1 Routines for integer arithmetic =================================== The integer arithmetic routines are used on platforms that don't provide hardware support for arithmetic operations on some modes. 4.1.1 Arithmetic functions -------------------------- -- Runtime Function: int __ashlsi3 (int A, int B) -- Runtime Function: long __ashldi3 (long A, int B) -- Runtime Function: long long __ashlti3 (long long A, int B) These functions return the result of shifting A left by B bits. -- Runtime Function: int __ashrsi3 (int A, int B) -- Runtime Function: long __ashrdi3 (long A, int B) -- Runtime Function: long long __ashrti3 (long long A, int B) These functions return the result of arithmetically shifting A right by B bits. -- Runtime Function: int __divsi3 (int A, int B) -- Runtime Function: long __divdi3 (long A, long B) -- Runtime Function: long long __divti3 (long long A, long long B) These functions return the quotient of the signed division of A and B. -- Runtime Function: int __lshrsi3 (int A, int B) -- Runtime Function: long __lshrdi3 (long A, int B) -- Runtime Function: long long __lshrti3 (long long A, int B) These functions return the result of logically shifting A right by B bits. -- Runtime Function: int __modsi3 (int A, int B) -- Runtime Function: long __moddi3 (long A, long B) -- Runtime Function: long long __modti3 (long long A, long long B) These functions return the remainder of the signed division of A and B. -- Runtime Function: int __mulsi3 (int A, int B) -- Runtime Function: long __muldi3 (long A, long B) -- Runtime Function: long long __multi3 (long long A, long long B) These functions return the product of A and B. -- Runtime Function: long __negdi2 (long A) -- Runtime Function: long long __negti2 (long long A) These functions return the negation of A. -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned int B) -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned long B) -- Runtime Function: unsigned long long __udivti3 (unsigned long long A, unsigned long long B) These functions return the quotient of the unsigned division of A and B. -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, unsigned long B, unsigned long *C) -- Runtime Function: unsigned long long __udivmodti4 (unsigned long long A, unsigned long long B, unsigned long long *C) These functions calculate both the quotient and remainder of the unsigned division of A and B. The return value is the quotient, and the remainder is placed in variable pointed to by C. -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned int B) -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned long B) -- Runtime Function: unsigned long long __umodti3 (unsigned long long A, unsigned long long B) These functions return the remainder of the unsigned division of A and B. 4.1.2 Comparison functions -------------------------- The following functions implement integral comparisons. These functions implement a low-level compare, upon which the higher level comparison operators (such as less than and greater than or equal to) can be constructed. The returned values lie in the range zero to two, to allow the high-level operators to be implemented by testing the returned result using either signed or unsigned comparison. -- Runtime Function: int __cmpdi2 (long A, long B) -- Runtime Function: int __cmpti2 (long long A, long long B) These functions perform a signed comparison of A and B. If A is less than B, they return 0; if A is greater than B, they return 2; and if A and B are equal they return 1. -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long long B) These functions perform an unsigned comparison of A and B. If A is less than B, they return 0; if A is greater than B, they return 2; and if A and B are equal they return 1. 4.1.3 Trapping arithmetic functions ----------------------------------- The following functions implement trapping arithmetic. These functions call the libc function ‘abort’ upon signed arithmetic overflow. -- Runtime Function: int __absvsi2 (int A) -- Runtime Function: long __absvdi2 (long A) These functions return the absolute value of A. -- Runtime Function: int __addvsi3 (int A, int B) -- Runtime Function: long __addvdi3 (long A, long B) These functions return the sum of A and B; that is ‘A + B’. -- Runtime Function: int __mulvsi3 (int A, int B) -- Runtime Function: long __mulvdi3 (long A, long B) The functions return the product of A and B; that is ‘A * B’. -- Runtime Function: int __negvsi2 (int A) -- Runtime Function: long __negvdi2 (long A) These functions return the negation of A; that is ‘-A’. -- Runtime Function: int __subvsi3 (int A, int B) -- Runtime Function: long __subvdi3 (long A, long B) These functions return the difference between B and A; that is ‘A - B’. 4.1.4 Bit operations -------------------- -- Runtime Function: int __clzsi2 (unsigned int A) -- Runtime Function: int __clzdi2 (unsigned long A) -- Runtime Function: int __clzti2 (unsigned long long A) These functions return the number of leading 0-bits in A, starting at the most significant bit position. If A is zero, the result is undefined. -- Runtime Function: int __ctzsi2 (unsigned int A) -- Runtime Function: int __ctzdi2 (unsigned long A) -- Runtime Function: int __ctzti2 (unsigned long long A) These functions return the number of trailing 0-bits in A, starting at the least significant bit position. If A is zero, the result is undefined. -- Runtime Function: int __ffsdi2 (unsigned long A) -- Runtime Function: int __ffsti2 (unsigned long long A) These functions return the index of the least significant 1-bit in A, or the value zero if A is zero. The least significant bit is index one. -- Runtime Function: int __paritysi2 (unsigned int A) -- Runtime Function: int __paritydi2 (unsigned long A) -- Runtime Function: int __parityti2 (unsigned long long A) These functions return the value zero if the number of bits set in A is even, and the value one otherwise. -- Runtime Function: int __popcountsi2 (unsigned int A) -- Runtime Function: int __popcountdi2 (unsigned long A) -- Runtime Function: int __popcountti2 (unsigned long long A) These functions return the number of bits set in A. -- Runtime Function: int32_t __bswapsi2 (int32_t A) -- Runtime Function: int64_t __bswapdi2 (int64_t A) These functions return the A byteswapped. 4.1.5 Bit-precise integer arithmetic functions ---------------------------------------------- ‘_BitInt(N)’ library functions operate on arrays of limbs, where each limb has ‘__LIBGCC_BITINT_LIMB_WIDTH__’ bits and the limbs are ordered according to ‘__LIBGCC_BITINT_ORDER__’ ordering. The most significant limb if N is not divisible by ‘__LIBGCC_BITINT_LIMB_WIDTH__’ contains padding bits which should be ignored on read (sign or zero extended), but extended on write. For the library functions, all bit-precise integers regardless of N are represented like that, even when the target ABI says that for some small N they should be represented differently in memory. A pointer to the array of limbs argument is always accompanied with a bit size argument. If that argument is positive, it is number of bits and the number is assumed to be zero-extended to infinite precision, if that argument is negative, it is negated number of bits above which all bits are assumed to be sign-extended to infinite precision. These number of bits arguments don't need to match actual N for the operation used in the source, they could be lowered because of sign or zero extensions on the input or because value-range optimization figures value will need certain lower number of bits. For big-endian ordering of limbs, when lowering the bit size argument the pointer argument needs to be adjusted as well. Negative bit size argument should be always smaller or equal to ‘-2’, because ‘signed _BitInt(1)’ is not valid. For output arguments, either the corresponding bit size argument should be always positive (for multiplication and division), or is negative when the output of conversion from floating-point value is signed and positive when unsigned. The arrays of limbs output arguments point to should not overlap any inputs, while input arrays of limbs can overlap. ‘UBILtype’ below stands for unsigned integer type with ‘__LIBGCC_BITINT_LIMB_WIDTH__’ bit precision. -- Runtime Function: void __mulbitint3 (UBILtype *RET, int32_t RETPREC, const UBILtype *u, int32_t UPREC, const UBILtype *v, int32_t VPREC) This function multiplies bit-precise integer operands U and V and stores result into RETPREC precision bit-precise integer result RET. -- Runtime Function: void __divmodbitint4 (UBILtype *Q, int32_t QPREC, UBILtype *R, int32_t RPREC, const UBILtype *u, int32_t UPREC, const UBILtype *v, int32_t VPREC) This function divides bit-precise integer operands U and V and stores quotient into QPREC precision bit-precise integer result Q (unless Q is ‘NULL’ and QPREC is 0, in that case quotient is not stored anywhere) and remainder into RPREC precision bit-precise integer result R (similarly, unless R is ‘NULL’ and RPREC is 0).  File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 4.2 Routines for floating point emulation ========================================= The software floating point library is used on machines which do not have hardware support for floating point. It is also used whenever ‘-msoft-float’ is used to disable generation of floating point instructions. (Not all targets support this switch.) For compatibility with other compilers, the floating point emulation routines can be renamed with the ‘DECLARE_LIBRARY_RENAMES’ macro (*note Library Calls::). In this section, the default names are used. Presently the library does not support ‘XFmode’, which is used for ‘long double’ on some architectures. 4.2.1 Arithmetic functions -------------------------- -- Runtime Function: float __addsf3 (float A, float B) -- Runtime Function: double __adddf3 (double A, double B) -- Runtime Function: long double __addtf3 (long double A, long double B) -- Runtime Function: long double __addxf3 (long double A, long double B) These functions return the sum of A and B. -- Runtime Function: float __subsf3 (float A, float B) -- Runtime Function: double __subdf3 (double A, double B) -- Runtime Function: long double __subtf3 (long double A, long double B) -- Runtime Function: long double __subxf3 (long double A, long double B) These functions return the difference between B and A; that is, A - B. -- Runtime Function: float __mulsf3 (float A, float B) -- Runtime Function: double __muldf3 (double A, double B) -- Runtime Function: long double __multf3 (long double A, long double B) -- Runtime Function: long double __mulxf3 (long double A, long double B) These functions return the product of A and B. -- Runtime Function: float __divsf3 (float A, float B) -- Runtime Function: double __divdf3 (double A, double B) -- Runtime Function: long double __divtf3 (long double A, long double B) -- Runtime Function: long double __divxf3 (long double A, long double B) These functions return the quotient of A and B; that is, A / B. -- Runtime Function: float __negsf2 (float A) -- Runtime Function: double __negdf2 (double A) -- Runtime Function: long double __negtf2 (long double A) -- Runtime Function: long double __negxf2 (long double A) These functions return the negation of A. They simply flip the sign bit, so they can produce negative zero and negative NaN. 4.2.2 Conversion functions -------------------------- -- Runtime Function: double __extendsfdf2 (float A) -- Runtime Function: long double __extendsftf2 (float A) -- Runtime Function: long double __extendsfxf2 (float A) -- Runtime Function: long double __extenddftf2 (double A) -- Runtime Function: long double __extenddfxf2 (double A) These functions extend A to the wider mode of their return type. -- Runtime Function: double __truncxfdf2 (long double A) -- Runtime Function: double __trunctfdf2 (long double A) -- Runtime Function: float __truncxfsf2 (long double A) -- Runtime Function: float __trunctfsf2 (long double A) -- Runtime Function: float __truncdfsf2 (double A) These functions truncate A to the narrower mode of their return type, rounding toward zero. -- Runtime Function: int __fixsfsi (float A) -- Runtime Function: int __fixdfsi (double A) -- Runtime Function: int __fixtfsi (long double A) -- Runtime Function: int __fixxfsi (long double A) These functions convert A to a signed integer, rounding toward zero. -- Runtime Function: long __fixsfdi (float A) -- Runtime Function: long __fixdfdi (double A) -- Runtime Function: long __fixtfdi (long double A) -- Runtime Function: long __fixxfdi (long double A) These functions convert A to a signed long, rounding toward zero. -- Runtime Function: long long __fixsfti (float A) -- Runtime Function: long long __fixdfti (double A) -- Runtime Function: long long __fixtfti (long double A) -- Runtime Function: long long __fixxfti (long double A) These functions convert A to a signed long long, rounding toward zero. -- Runtime Function: unsigned int __fixunssfsi (float A) -- Runtime Function: unsigned int __fixunsdfsi (double A) -- Runtime Function: unsigned int __fixunstfsi (long double A) -- Runtime Function: unsigned int __fixunsxfsi (long double A) These functions convert A to an unsigned integer, rounding toward zero. Negative values all become zero. -- Runtime Function: unsigned long __fixunssfdi (float A) -- Runtime Function: unsigned long __fixunsdfdi (double A) -- Runtime Function: unsigned long __fixunstfdi (long double A) -- Runtime Function: unsigned long __fixunsxfdi (long double A) These functions convert A to an unsigned long, rounding toward zero. Negative values all become zero. -- Runtime Function: unsigned long long __fixunssfti (float A) -- Runtime Function: unsigned long long __fixunsdfti (double A) -- Runtime Function: unsigned long long __fixunstfti (long double A) -- Runtime Function: unsigned long long __fixunsxfti (long double A) These functions convert A to an unsigned long long, rounding toward zero. Negative values all become zero. -- Runtime Function: float __floatsisf (int I) -- Runtime Function: double __floatsidf (int I) -- Runtime Function: long double __floatsitf (int I) -- Runtime Function: long double __floatsixf (int I) These functions convert I, a signed integer, to floating point. -- Runtime Function: float __floatdisf (long I) -- Runtime Function: double __floatdidf (long I) -- Runtime Function: long double __floatditf (long I) -- Runtime Function: long double __floatdixf (long I) These functions convert I, a signed long, to floating point. -- Runtime Function: float __floattisf (long long I) -- Runtime Function: double __floattidf (long long I) -- Runtime Function: long double __floattitf (long long I) -- Runtime Function: long double __floattixf (long long I) These functions convert I, a signed long long, to floating point. -- Runtime Function: float __floatunsisf (unsigned int I) -- Runtime Function: double __floatunsidf (unsigned int I) -- Runtime Function: long double __floatunsitf (unsigned int I) -- Runtime Function: long double __floatunsixf (unsigned int I) These functions convert I, an unsigned integer, to floating point. -- Runtime Function: float __floatundisf (unsigned long I) -- Runtime Function: double __floatundidf (unsigned long I) -- Runtime Function: long double __floatunditf (unsigned long I) -- Runtime Function: long double __floatundixf (unsigned long I) These functions convert I, an unsigned long, to floating point. -- Runtime Function: float __floatuntisf (unsigned long long I) -- Runtime Function: double __floatuntidf (unsigned long long I) -- Runtime Function: long double __floatuntitf (unsigned long long I) -- Runtime Function: long double __floatuntixf (unsigned long long I) These functions convert I, an unsigned long long, to floating point. -- Runtime Function: void __fixsfbitint (UBILtype *R, int32_t RPREC, float A) -- Runtime Function: void __fixdfbitint (UBILtype *R, int32_t RPREC, double A) -- Runtime Function: void __fixxfbitint (UBILtype *R, int32_t RPREC, __float80 A) -- Runtime Function: void __fixtfbitint (UBILtype *R, int32_t RPREC, _Float128 A) These functions convert A to bit-precise integer R, rounding toward zero. If RPREC is positive, it converts to unsigned bit-precise integer and negative values all become zero, if RPREC is negative, it converts to signed bit-precise integer. -- Runtime Function: float __floatbitintsf (UBILtype *I, int32_t IPREC) -- Runtime Function: double __floatbitintdf (UBILtype *I, int32_t IPREC) -- Runtime Function: __float80 __floatbitintxf (UBILtype *I, int32_t IPREC) -- Runtime Function: _Float128 __floatbitinttf (UBILtype *I, int32_t IPREC) -- Runtime Function: _Float16 __floatbitinthf (UBILtype *I, int32_t IPREC) -- Runtime Function: __bf16 __floatbitintbf (UBILtype *I, int32_t IPREC) These functions convert bit-precise integer I to floating point. If IPREC is positive, it is conversion from unsigned bit-precise integer, otherwise from signed bit-precise integer. 4.2.3 Comparison functions -------------------------- There are two sets of basic comparison functions. -- Runtime Function: int __cmpsf2 (float A, float B) -- Runtime Function: int __cmpdf2 (double A, double B) -- Runtime Function: int __cmptf2 (long double A, long double B) These functions calculate a <=> b. That is, if A is less than B, they return −1; if A is greater than B, they return 1; and if A and B are equal they return 0. If either argument is NaN they return 1, but you should not rely on this; if NaN is a possibility, use one of the higher-level comparison functions. -- Runtime Function: int __unordsf2 (float A, float B) -- Runtime Function: int __unorddf2 (double A, double B) -- Runtime Function: int __unordtf2 (long double A, long double B) These functions return a nonzero value if either argument is NaN, otherwise 0. There is also a complete group of higher level functions which correspond directly to comparison operators. They implement the ISO C semantics for floating-point comparisons, taking NaN into account. Pay careful attention to the return values defined for each set. Under the hood, all of these routines are implemented as if (__unordXf2 (a, b)) return E; return __cmpXf2 (a, b); where E is a constant chosen to give the proper behavior for NaN. Thus, the meaning of the return value is different for each set. Do not rely on this implementation; only the semantics documented below are guaranteed. -- Runtime Function: int __eqsf2 (float A, float B) -- Runtime Function: int __eqdf2 (double A, double B) -- Runtime Function: int __eqtf2 (long double A, long double B) These functions return zero if neither argument is NaN, and A and B are equal. -- Runtime Function: int __nesf2 (float A, float B) -- Runtime Function: int __nedf2 (double A, double B) -- Runtime Function: int __netf2 (long double A, long double B) These functions return a nonzero value if either argument is NaN, or if A and B are unequal. -- Runtime Function: int __gesf2 (float A, float B) -- Runtime Function: int __gedf2 (double A, double B) -- Runtime Function: int __getf2 (long double A, long double B) These functions return a value greater than or equal to zero if neither argument is NaN, and A is greater than or equal to B. -- Runtime Function: int __ltsf2 (float A, float B) -- Runtime Function: int __ltdf2 (double A, double B) -- Runtime Function: int __lttf2 (long double A, long double B) These functions return a value less than zero if neither argument is NaN, and A is strictly less than B. -- Runtime Function: int __lesf2 (float A, float B) -- Runtime Function: int __ledf2 (double A, double B) -- Runtime Function: int __letf2 (long double A, long double B) These functions return a value less than or equal to zero if neither argument is NaN, and A is less than or equal to B. -- Runtime Function: int __gtsf2 (float A, float B) -- Runtime Function: int __gtdf2 (double A, double B) -- Runtime Function: int __gttf2 (long double A, long double B) These functions return a value greater than zero if neither argument is NaN, and A is strictly greater than B. 4.2.4 Other floating-point functions ------------------------------------ -- Runtime Function: float __powisf2 (float A, int B) -- Runtime Function: double __powidf2 (double A, int B) -- Runtime Function: long double __powitf2 (long double A, int B) -- Runtime Function: long double __powixf2 (long double A, int B) These functions convert raise A to the power B. -- Runtime Function: complex float __mulsc3 (float A, float B, float C, float D) -- Runtime Function: complex double __muldc3 (double A, double B, double C, double D) -- Runtime Function: complex long double __multc3 (long double A, long double B, long double C, long double D) -- Runtime Function: complex long double __mulxc3 (long double A, long double B, long double C, long double D) These functions return the product of A + iB and C + iD, following the rules of C99 Annex G. -- Runtime Function: complex float __divsc3 (float A, float B, float C, float D) -- Runtime Function: complex double __divdc3 (double A, double B, double C, double D) -- Runtime Function: complex long double __divtc3 (long double A, long double B, long double C, long double D) -- Runtime Function: complex long double __divxc3 (long double A, long double B, long double C, long double D) These functions return the quotient of A + iB and C + iD (i.e., (A + iB) / (C + iD)), following the rules of C99 Annex G.  File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 4.3 Routines for decimal floating point emulation ================================================= The software decimal floating point library implements IEEE 754-2008 decimal floating point arithmetic and is only activated on selected targets. The software decimal floating point library supports either DPD (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as selected at configure time. 4.3.1 Arithmetic functions -------------------------- -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, _Decimal128 B) -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, _Decimal128 B) These functions return the sum of A and B. -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, _Decimal128 B) -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, _Decimal128 B) These functions return the difference between B and A; that is, A - B. -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, _Decimal128 B) -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, _Decimal128 B) These functions return the product of A and B. -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 B) -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 B) -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, _Decimal128 B) -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, _Decimal128 B) These functions return the quotient of A and B; that is, A / B. -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) These functions return the negation of A. They simply flip the sign bit, so they can produce negative zero and negative NaN. 4.3.2 Conversion functions -------------------------- -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) These functions convert the value A from one decimal floating type to another. -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) -- Runtime Function: _Decimal128 __bid_extendsftd (float A) -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) -- Runtime Function: _Decimal128 __bid_extenddftd (double A) -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) These functions convert the value of A from a binary floating type to a decimal floating type of a different size. -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) -- Runtime Function: float __bid_truncddsf (_Decimal64 A) -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) -- Runtime Function: double __bid_extendsddf (_Decimal32 A) -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) -- Runtime Function: double __bid_trunctddf (_Decimal128 A) -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) These functions convert the value of A from a decimal floating type to a binary floating type of a different size. -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) -- Runtime Function: double __bid_truncdddf (_Decimal64 A) -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) These functions convert the value of A between decimal and binary floating types of the same size. -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) -- Runtime Function: int __bid_fixddsi (_Decimal64 A) -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) These functions convert A to a signed integer. -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) -- Runtime Function: long __bid_fixsddi (_Decimal32 A) -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) -- Runtime Function: long __bid_fixdddi (_Decimal64 A) -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) -- Runtime Function: long __bid_fixtddi (_Decimal128 A) These functions convert A to a signed long. -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) These functions convert A to an unsigned integer. Negative values all become zero. -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) These functions convert A to an unsigned long. Negative values all become zero. -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) -- Runtime Function: _Decimal32 __bid_floatsisd (int I) -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) -- Runtime Function: _Decimal64 __bid_floatsidd (int I) -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) -- Runtime Function: _Decimal128 __bid_floatsitd (int I) These functions convert I, a signed integer, to decimal floating point. -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) -- Runtime Function: _Decimal32 __bid_floatdisd (long I) -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) -- Runtime Function: _Decimal64 __bid_floatdidd (long I) -- Runtime Function: _Decimal128 __dpd_floatditd (long I) -- Runtime Function: _Decimal128 __bid_floatditd (long I) These functions convert I, a signed long, to decimal floating point. -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) These functions convert I, an unsigned integer, to decimal floating point. -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) These functions convert I, an unsigned long, to decimal floating point. -- Runtime Function: void __bid_fixsdbitint (UBILtype *R, int32_t RPREC, _Decimal32 A) -- Runtime Function: void __bid_fixddbitint (UBILtype *R, int32_t RPREC, _Decimal64 A) -- Runtime Function: void __bid_fixtdbitint (UBILtype *R, int32_t RPREC, _Decimal128 A) These functions convert A to bit-precise integer R, rounding toward zero. If RPREC is positive, it converts to unsigned bit-precise integer and negative values all become zero, if RPREC is negative, it converts to signed bit-precise integer. So far implemented for BID format only. -- Runtime Function: _Decimal32 __bid_floatbitintsd (UBILtype *I, int32_t IPREC) -- Runtime Function: _Decimal64 __bid_floatbitintdd (UBILtype *I, int32_t IPREC) -- Runtime Function: _Decimal128 __bid_floatbitinttd (UBILtype *I, int32_t IPREC) These functions convert bit-precise integer I to decimal floating point. If IPREC is positive, it is conversion from unsigned bit-precise integer, otherwise from signed bit-precise integer. So far implemented for BID format only. 4.3.3 Comparison functions -------------------------- -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) These functions return a nonzero value if either argument is NaN, otherwise 0. There is also a complete group of higher level functions which correspond directly to comparison operators. They implement the ISO C semantics for floating-point comparisons, taking NaN into account. Pay careful attention to the return values defined for each set. Under the hood, all of these routines are implemented as if (__bid_unordXd2 (a, b)) return E; return __bid_cmpXd2 (a, b); where E is a constant chosen to give the proper behavior for NaN. Thus, the meaning of the return value is different for each set. Do not rely on this implementation; only the semantics documented below are guaranteed. -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) These functions return zero if neither argument is NaN, and A and B are equal. -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) These functions return a nonzero value if either argument is NaN, or if A and B are unequal. -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) These functions return a value greater than or equal to zero if neither argument is NaN, and A is greater than or equal to B. -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) These functions return a value less than zero if neither argument is NaN, and A is strictly less than B. -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) These functions return a value less than or equal to zero if neither argument is NaN, and A is less than or equal to B. -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) These functions return a value greater than zero if neither argument is NaN, and A is strictly greater than B.  File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 4.4 Routines for fixed-point fractional emulation ================================================= The software fixed-point library implements fixed-point fractional arithmetic, and is only activated on selected targets. For ease of comprehension ‘fract’ is an alias for the ‘_Fract’ type, ‘accum’ an alias for ‘_Accum’, and ‘sat’ an alias for ‘_Sat’. For illustrative purposes, in this section the fixed-point fractional type ‘short fract’ is assumed to correspond to machine mode ‘QQmode’; ‘unsigned short fract’ to ‘UQQmode’; ‘fract’ to ‘HQmode’; ‘unsigned fract’ to ‘UHQmode’; ‘long fract’ to ‘SQmode’; ‘unsigned long fract’ to ‘USQmode’; ‘long long fract’ to ‘DQmode’; and ‘unsigned long long fract’ to ‘UDQmode’. Similarly the fixed-point accumulator type ‘short accum’ corresponds to ‘HAmode’; ‘unsigned short accum’ to ‘UHAmode’; ‘accum’ to ‘SAmode’; ‘unsigned accum’ to ‘USAmode’; ‘long accum’ to ‘DAmode’; ‘unsigned long accum’ to ‘UDAmode’; ‘long long accum’ to ‘TAmode’; and ‘unsigned long long accum’ to ‘UTAmode’. 4.4.1 Arithmetic functions -------------------------- -- Runtime Function: short fract __addqq3 (short fract A, short fract B) -- Runtime Function: fract __addhq3 (fract A, fract B) -- Runtime Function: long fract __addsq3 (long fract A, long fract B) -- Runtime Function: long long fract __adddq3 (long long fract A, long long fract B) -- Runtime Function: unsigned short fract __adduqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __addudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: short accum __addha3 (short accum A, short accum B) -- Runtime Function: accum __addsa3 (accum A, accum B) -- Runtime Function: long accum __addda3 (long accum A, long accum B) -- Runtime Function: long long accum __addta3 (long long accum A, long long accum B) -- Runtime Function: unsigned short accum __adduha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __adduta3 (unsigned long long accum A, unsigned long long accum B) These functions return the sum of A and B. -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract B) -- Runtime Function: fract __ssaddhq3 (fract A, fract B) -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) -- Runtime Function: long long fract __ssadddq3 (long long fract A, long long fract B) -- Runtime Function: short accum __ssaddha3 (short accum A, short accum B) -- Runtime Function: accum __ssaddsa3 (accum A, accum B) -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) -- Runtime Function: long long accum __ssaddta3 (long long accum A, long long accum B) These functions return the sum of A and B with signed saturation. -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: unsigned short accum __usadduha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __usadduda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __usadduta3 (unsigned long long accum A, unsigned long long accum B) These functions return the sum of A and B with unsigned saturation. -- Runtime Function: short fract __subqq3 (short fract A, short fract B) -- Runtime Function: fract __subhq3 (fract A, fract B) -- Runtime Function: long fract __subsq3 (long fract A, long fract B) -- Runtime Function: long long fract __subdq3 (long long fract A, long long fract B) -- Runtime Function: unsigned short fract __subuqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __subudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: short accum __subha3 (short accum A, short accum B) -- Runtime Function: accum __subsa3 (accum A, accum B) -- Runtime Function: long accum __subda3 (long accum A, long accum B) -- Runtime Function: long long accum __subta3 (long long accum A, long long accum B) -- Runtime Function: unsigned short accum __subuha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __subuta3 (unsigned long long accum A, unsigned long long accum B) These functions return the difference of A and B; that is, ‘A - B’. -- Runtime Function: short fract __sssubqq3 (short fract A, short fract B) -- Runtime Function: fract __sssubhq3 (fract A, fract B) -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) -- Runtime Function: long long fract __sssubdq3 (long long fract A, long long fract B) -- Runtime Function: short accum __sssubha3 (short accum A, short accum B) -- Runtime Function: accum __sssubsa3 (accum A, accum B) -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) -- Runtime Function: long long accum __sssubta3 (long long accum A, long long accum B) These functions return the difference of A and B with signed saturation; that is, ‘A - B’. -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned long long accum A, unsigned long long accum B) These functions return the difference of A and B with unsigned saturation; that is, ‘A - B’. -- Runtime Function: short fract __mulqq3 (short fract A, short fract B) -- Runtime Function: fract __mulhq3 (fract A, fract B) -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) -- Runtime Function: long long fract __muldq3 (long long fract A, long long fract B) -- Runtime Function: unsigned short fract __muluqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __muludq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: short accum __mulha3 (short accum A, short accum B) -- Runtime Function: accum __mulsa3 (accum A, accum B) -- Runtime Function: long accum __mulda3 (long accum A, long accum B) -- Runtime Function: long long accum __multa3 (long long accum A, long long accum B) -- Runtime Function: unsigned short accum __muluha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __muluta3 (unsigned long long accum A, unsigned long long accum B) These functions return the product of A and B. -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract B) -- Runtime Function: fract __ssmulhq3 (fract A, fract B) -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) -- Runtime Function: long long fract __ssmuldq3 (long long fract A, long long fract B) -- Runtime Function: short accum __ssmulha3 (short accum A, short accum B) -- Runtime Function: accum __ssmulsa3 (accum A, accum B) -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) -- Runtime Function: long long accum __ssmulta3 (long long accum A, long long accum B) These functions return the product of A and B with signed saturation. -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned long long accum A, unsigned long long accum B) These functions return the product of A and B with unsigned saturation. -- Runtime Function: short fract __divqq3 (short fract A, short fract B) -- Runtime Function: fract __divhq3 (fract A, fract B) -- Runtime Function: long fract __divsq3 (long fract A, long fract B) -- Runtime Function: long long fract __divdq3 (long long fract A, long long fract B) -- Runtime Function: short accum __divha3 (short accum A, short accum B) -- Runtime Function: accum __divsa3 (accum A, accum B) -- Runtime Function: long accum __divda3 (long accum A, long accum B) -- Runtime Function: long long accum __divta3 (long long accum A, long long accum B) These functions return the quotient of the signed division of A and B. -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __udivusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: unsigned short accum __udivuha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __udivuda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long long accum A, unsigned long long accum B) These functions return the quotient of the unsigned division of A and B. -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract B) -- Runtime Function: fract __ssdivhq3 (fract A, fract B) -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) -- Runtime Function: long long fract __ssdivdq3 (long long fract A, long long fract B) -- Runtime Function: short accum __ssdivha3 (short accum A, short accum B) -- Runtime Function: accum __ssdivsa3 (accum A, accum B) -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) -- Runtime Function: long long accum __ssdivta3 (long long accum A, long long accum B) These functions return the quotient of the signed division of A and B with signed saturation. -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short fract A, unsigned short fract B) -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, unsigned fract B) -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long fract A, unsigned long fract B) -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short accum A, unsigned short accum B) -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, unsigned accum B) -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long accum A, unsigned long accum B) -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned long long accum A, unsigned long long accum B) These functions return the quotient of the unsigned division of A and B with unsigned saturation. -- Runtime Function: short fract __negqq2 (short fract A) -- Runtime Function: fract __neghq2 (fract A) -- Runtime Function: long fract __negsq2 (long fract A) -- Runtime Function: long long fract __negdq2 (long long fract A) -- Runtime Function: unsigned short fract __neguqq2 (unsigned short fract A) -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract A) -- Runtime Function: unsigned long long fract __negudq2 (unsigned long long fract A) -- Runtime Function: short accum __negha2 (short accum A) -- Runtime Function: accum __negsa2 (accum A) -- Runtime Function: long accum __negda2 (long accum A) -- Runtime Function: long long accum __negta2 (long long accum A) -- Runtime Function: unsigned short accum __neguha2 (unsigned short accum A) -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum A) -- Runtime Function: unsigned long long accum __neguta2 (unsigned long long accum A) These functions return the negation of A. -- Runtime Function: short fract __ssnegqq2 (short fract A) -- Runtime Function: fract __ssneghq2 (fract A) -- Runtime Function: long fract __ssnegsq2 (long fract A) -- Runtime Function: long long fract __ssnegdq2 (long long fract A) -- Runtime Function: short accum __ssnegha2 (short accum A) -- Runtime Function: accum __ssnegsa2 (accum A) -- Runtime Function: long accum __ssnegda2 (long accum A) -- Runtime Function: long long accum __ssnegta2 (long long accum A) These functions return the negation of A with signed saturation. -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short fract A) -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long fract A) -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned long long fract A) -- Runtime Function: unsigned short accum __usneguha2 (unsigned short accum A) -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) -- Runtime Function: unsigned long accum __usneguda2 (unsigned long accum A) -- Runtime Function: unsigned long long accum __usneguta2 (unsigned long long accum A) These functions return the negation of A with unsigned saturation. -- Runtime Function: short fract __ashlqq3 (short fract A, int B) -- Runtime Function: fract __ashlhq3 (fract A, int B) -- Runtime Function: long fract __ashlsq3 (long fract A, int B) -- Runtime Function: long long fract __ashldq3 (long long fract A, int B) -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short fract A, int B) -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int B) -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long fract A, int B) -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long long fract A, int B) -- Runtime Function: short accum __ashlha3 (short accum A, int B) -- Runtime Function: accum __ashlsa3 (accum A, int B) -- Runtime Function: long accum __ashlda3 (long accum A, int B) -- Runtime Function: long long accum __ashlta3 (long long accum A, int B) -- Runtime Function: unsigned short accum __ashluha3 (unsigned short accum A, int B) -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int B) -- Runtime Function: unsigned long accum __ashluda3 (unsigned long accum A, int B) -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long long accum A, int B) These functions return the result of shifting A left by B bits. -- Runtime Function: short fract __ashrqq3 (short fract A, int B) -- Runtime Function: fract __ashrhq3 (fract A, int B) -- Runtime Function: long fract __ashrsq3 (long fract A, int B) -- Runtime Function: long long fract __ashrdq3 (long long fract A, int B) -- Runtime Function: short accum __ashrha3 (short accum A, int B) -- Runtime Function: accum __ashrsa3 (accum A, int B) -- Runtime Function: long accum __ashrda3 (long accum A, int B) -- Runtime Function: long long accum __ashrta3 (long long accum A, int B) These functions return the result of arithmetically shifting A right by B bits. -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short fract A, int B) -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int B) -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long fract A, int B) -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long long fract A, int B) -- Runtime Function: unsigned short accum __lshruha3 (unsigned short accum A, int B) -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int B) -- Runtime Function: unsigned long accum __lshruda3 (unsigned long accum A, int B) -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long long accum A, int B) These functions return the result of logically shifting A right by B bits. -- Runtime Function: fract __ssashlhq3 (fract A, int B) -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) -- Runtime Function: long long fract __ssashldq3 (long long fract A, int B) -- Runtime Function: short accum __ssashlha3 (short accum A, int B) -- Runtime Function: accum __ssashlsa3 (accum A, int B) -- Runtime Function: long accum __ssashlda3 (long accum A, int B) -- Runtime Function: long long accum __ssashlta3 (long long accum A, int B) These functions return the result of shifting A left by B bits with signed saturation. -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short fract A, int B) -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int B) -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long fract A, int B) -- Runtime Function: unsigned long long fract __usashludq3 (unsigned long long fract A, int B) -- Runtime Function: unsigned short accum __usashluha3 (unsigned short accum A, int B) -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int B) -- Runtime Function: unsigned long accum __usashluda3 (unsigned long accum A, int B) -- Runtime Function: unsigned long long accum __usashluta3 (unsigned long long accum A, int B) These functions return the result of shifting A left by B bits with unsigned saturation. 4.4.2 Comparison functions -------------------------- The following functions implement fixed-point comparisons. These functions implement a low-level compare, upon which the higher level comparison operators (such as less than and greater than or equal to) can be constructed. The returned values lie in the range zero to two, to allow the high-level operators to be implemented by testing the returned result using either signed or unsigned comparison. -- Runtime Function: int __cmpqq2 (short fract A, short fract B) -- Runtime Function: int __cmphq2 (fract A, fract B) -- Runtime Function: int __cmpsq2 (long fract A, long fract B) -- Runtime Function: int __cmpdq2 (long long fract A, long long fract B) -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned short fract B) -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned long fract B) -- Runtime Function: int __cmpudq2 (unsigned long long fract A, unsigned long long fract B) -- Runtime Function: int __cmpha2 (short accum A, short accum B) -- Runtime Function: int __cmpsa2 (accum A, accum B) -- Runtime Function: int __cmpda2 (long accum A, long accum B) -- Runtime Function: int __cmpta2 (long long accum A, long long accum B) -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned short accum B) -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned long accum B) -- Runtime Function: int __cmputa2 (unsigned long long accum A, unsigned long long accum B) These functions perform a signed or unsigned comparison of A and B (depending on the selected machine mode). If A is less than B, they return 0; if A is greater than B, they return 2; and if A and B are equal they return 1. 4.4.3 Conversion functions -------------------------- -- Runtime Function: fract __fractqqhq2 (short fract A) -- Runtime Function: long fract __fractqqsq2 (short fract A) -- Runtime Function: long long fract __fractqqdq2 (short fract A) -- Runtime Function: short accum __fractqqha (short fract A) -- Runtime Function: accum __fractqqsa (short fract A) -- Runtime Function: long accum __fractqqda (short fract A) -- Runtime Function: long long accum __fractqqta (short fract A) -- Runtime Function: unsigned short fract __fractqquqq (short fract A) -- Runtime Function: unsigned fract __fractqquhq (short fract A) -- Runtime Function: unsigned long fract __fractqqusq (short fract A) -- Runtime Function: unsigned long long fract __fractqqudq (short fract A) -- Runtime Function: unsigned short accum __fractqquha (short fract A) -- Runtime Function: unsigned accum __fractqqusa (short fract A) -- Runtime Function: unsigned long accum __fractqquda (short fract A) -- Runtime Function: unsigned long long accum __fractqquta (short fract A) -- Runtime Function: signed char __fractqqqi (short fract A) -- Runtime Function: short __fractqqhi (short fract A) -- Runtime Function: int __fractqqsi (short fract A) -- Runtime Function: long __fractqqdi (short fract A) -- Runtime Function: long long __fractqqti (short fract A) -- Runtime Function: float __fractqqsf (short fract A) -- Runtime Function: double __fractqqdf (short fract A) -- Runtime Function: short fract __fracthqqq2 (fract A) -- Runtime Function: long fract __fracthqsq2 (fract A) -- Runtime Function: long long fract __fracthqdq2 (fract A) -- Runtime Function: short accum __fracthqha (fract A) -- Runtime Function: accum __fracthqsa (fract A) -- Runtime Function: long accum __fracthqda (fract A) -- Runtime Function: long long accum __fracthqta (fract A) -- Runtime Function: unsigned short fract __fracthquqq (fract A) -- Runtime Function: unsigned fract __fracthquhq (fract A) -- Runtime Function: unsigned long fract __fracthqusq (fract A) -- Runtime Function: unsigned long long fract __fracthqudq (fract A) -- Runtime Function: unsigned short accum __fracthquha (fract A) -- Runtime Function: unsigned accum __fracthqusa (fract A) -- Runtime Function: unsigned long accum __fracthquda (fract A) -- Runtime Function: unsigned long long accum __fracthquta (fract A) -- Runtime Function: signed char __fracthqqi (fract A) -- Runtime Function: short __fracthqhi (fract A) -- Runtime Function: int __fracthqsi (fract A) -- Runtime Function: long __fracthqdi (fract A) -- Runtime Function: long long __fracthqti (fract A) -- Runtime Function: float __fracthqsf (fract A) -- Runtime Function: double __fracthqdf (fract A) -- Runtime Function: short fract __fractsqqq2 (long fract A) -- Runtime Function: fract __fractsqhq2 (long fract A) -- Runtime Function: long long fract __fractsqdq2 (long fract A) -- Runtime Function: short accum __fractsqha (long fract A) -- Runtime Function: accum __fractsqsa (long fract A) -- Runtime Function: long accum __fractsqda (long fract A) -- Runtime Function: long long accum __fractsqta (long fract A) -- Runtime Function: unsigned short fract __fractsquqq (long fract A) -- Runtime Function: unsigned fract __fractsquhq (long fract A) -- Runtime Function: unsigned long fract __fractsqusq (long fract A) -- Runtime Function: unsigned long long fract __fractsqudq (long fract A) -- Runtime Function: unsigned short accum __fractsquha (long fract A) -- Runtime Function: unsigned accum __fractsqusa (long fract A) -- Runtime Function: unsigned long accum __fractsquda (long fract A) -- Runtime Function: unsigned long long accum __fractsquta (long fract A) -- Runtime Function: signed char __fractsqqi (long fract A) -- Runtime Function: short __fractsqhi (long fract A) -- Runtime Function: int __fractsqsi (long fract A) -- Runtime Function: long __fractsqdi (long fract A) -- Runtime Function: long long __fractsqti (long fract A) -- Runtime Function: float __fractsqsf (long fract A) -- Runtime Function: double __fractsqdf (long fract A) -- Runtime Function: short fract __fractdqqq2 (long long fract A) -- Runtime Function: fract __fractdqhq2 (long long fract A) -- Runtime Function: long fract __fractdqsq2 (long long fract A) -- Runtime Function: short accum __fractdqha (long long fract A) -- Runtime Function: accum __fractdqsa (long long fract A) -- Runtime Function: long accum __fractdqda (long long fract A) -- Runtime Function: long long accum __fractdqta (long long fract A) -- Runtime Function: unsigned short fract __fractdquqq (long long fract A) -- Runtime Function: unsigned fract __fractdquhq (long long fract A) -- Runtime Function: unsigned long fract __fractdqusq (long long fract A) -- Runtime Function: unsigned long long fract __fractdqudq (long long fract A) -- Runtime Function: unsigned short accum __fractdquha (long long fract A) -- Runtime Function: unsigned accum __fractdqusa (long long fract A) -- Runtime Function: unsigned long accum __fractdquda (long long fract A) -- Runtime Function: unsigned long long accum __fractdquta (long long fract A) -- Runtime Function: signed char __fractdqqi (long long fract A) -- Runtime Function: short __fractdqhi (long long fract A) -- Runtime Function: int __fractdqsi (long long fract A) -- Runtime Function: long __fractdqdi (long long fract A) -- Runtime Function: long long __fractdqti (long long fract A) -- Runtime Function: float __fractdqsf (long long fract A) -- Runtime Function: double __fractdqdf (long long fract A) -- Runtime Function: short fract __fracthaqq (short accum A) -- Runtime Function: fract __fracthahq (short accum A) -- Runtime Function: long fract __fracthasq (short accum A) -- Runtime Function: long long fract __fracthadq (short accum A) -- Runtime Function: accum __fracthasa2 (short accum A) -- Runtime Function: long accum __fracthada2 (short accum A) -- Runtime Function: long long accum __fracthata2 (short accum A) -- Runtime Function: unsigned short fract __fracthauqq (short accum A) -- Runtime Function: unsigned fract __fracthauhq (short accum A) -- Runtime Function: unsigned long fract __fracthausq (short accum A) -- Runtime Function: unsigned long long fract __fracthaudq (short accum A) -- Runtime Function: unsigned short accum __fracthauha (short accum A) -- Runtime Function: unsigned accum __fracthausa (short accum A) -- Runtime Function: unsigned long accum __fracthauda (short accum A) -- Runtime Function: unsigned long long accum __fracthauta (short accum A) -- Runtime Function: signed char __fracthaqi (short accum A) -- Runtime Function: short __fracthahi (short accum A) -- Runtime Function: int __fracthasi (short accum A) -- Runtime Function: long __fracthadi (short accum A) -- Runtime Function: long long __fracthati (short accum A) -- Runtime Function: float __fracthasf (short accum A) -- Runtime Function: double __fracthadf (short accum A) -- Runtime Function: short fract __fractsaqq (accum A) -- Runtime Function: fract __fractsahq (accum A) -- Runtime Function: long fract __fractsasq (accum A) -- Runtime Function: long long fract __fractsadq (accum A) -- Runtime Function: short accum __fractsaha2 (accum A) -- Runtime Function: long accum __fractsada2 (accum A) -- Runtime Function: long long accum __fractsata2 (accum A) -- Runtime Function: unsigned short fract __fractsauqq (accum A) -- Runtime Function: unsigned fract __fractsauhq (accum A) -- Runtime Function: unsigned long fract __fractsausq (accum A) -- Runtime Function: unsigned long long fract __fractsaudq (accum A) -- Runtime Function: unsigned short accum __fractsauha (accum A) -- Runtime Function: unsigned accum __fractsausa (accum A) -- Runtime Function: unsigned long accum __fractsauda (accum A) -- Runtime Function: unsigned long long accum __fractsauta (accum A) -- Runtime Function: signed char __fractsaqi (accum A) -- Runtime Function: short __fractsahi (accum A) -- Runtime Function: int __fractsasi (accum A) -- Runtime Function: long __fractsadi (accum A) -- Runtime Function: long long __fractsati (accum A) -- Runtime Function: float __fractsasf (accum A) -- Runtime Function: double __fractsadf (accum A) -- Runtime Function: short fract __fractdaqq (long accum A) -- Runtime Function: fract __fractdahq (long accum A) -- Runtime Function: long fract __fractdasq (long accum A) -- Runtime Function: long long fract __fractdadq (long accum A) -- Runtime Function: short accum __fractdaha2 (long accum A) -- Runtime Function: accum __fractdasa2 (long accum A) -- Runtime Function: long long accum __fractdata2 (long accum A) -- Runtime Function: unsigned short fract __fractdauqq (long accum A) -- Runtime Function: unsigned fract __fractdauhq (long accum A) -- Runtime Function: unsigned long fract __fractdausq (long accum A) -- Runtime Function: unsigned long long fract __fractdaudq (long accum A) -- Runtime Function: unsigned short accum __fractdauha (long accum A) -- Runtime Function: unsigned accum __fractdausa (long accum A) -- Runtime Function: unsigned long accum __fractdauda (long accum A) -- Runtime Function: unsigned long long accum __fractdauta (long accum A) -- Runtime Function: signed char __fractdaqi (long accum A) -- Runtime Function: short __fractdahi (long accum A) -- Runtime Function: int __fractdasi (long accum A) -- Runtime Function: long __fractdadi (long accum A) -- Runtime Function: long long __fractdati (long accum A) -- Runtime Function: float __fractdasf (long accum A) -- Runtime Function: double __fractdadf (long accum A) -- Runtime Function: short fract __fracttaqq (long long accum A) -- Runtime Function: fract __fracttahq (long long accum A) -- Runtime Function: long fract __fracttasq (long long accum A) -- Runtime Function: long long fract __fracttadq (long long accum A) -- Runtime Function: short accum __fracttaha2 (long long accum A) -- Runtime Function: accum __fracttasa2 (long long accum A) -- Runtime Function: long accum __fracttada2 (long long accum A) -- Runtime Function: unsigned short fract __fracttauqq (long long accum A) -- Runtime Function: unsigned fract __fracttauhq (long long accum A) -- Runtime Function: unsigned long fract __fracttausq (long long accum A) -- Runtime Function: unsigned long long fract __fracttaudq (long long accum A) -- Runtime Function: unsigned short accum __fracttauha (long long accum A) -- Runtime Function: unsigned accum __fracttausa (long long accum A) -- Runtime Function: unsigned long accum __fracttauda (long long accum A) -- Runtime Function: unsigned long long accum __fracttauta (long long accum A) -- Runtime Function: signed char __fracttaqi (long long accum A) -- Runtime Function: short __fracttahi (long long accum A) -- Runtime Function: int __fracttasi (long long accum A) -- Runtime Function: long __fracttadi (long long accum A) -- Runtime Function: long long __fracttati (long long accum A) -- Runtime Function: float __fracttasf (long long accum A) -- Runtime Function: double __fracttadf (long long accum A) -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) -- Runtime Function: fract __fractuqqhq (unsigned short fract A) -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) -- Runtime Function: long long fract __fractuqqdq (unsigned short fract A) -- Runtime Function: short accum __fractuqqha (unsigned short fract A) -- Runtime Function: accum __fractuqqsa (unsigned short fract A) -- Runtime Function: long accum __fractuqqda (unsigned short fract A) -- Runtime Function: long long accum __fractuqqta (unsigned short fract A) -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short fract A) -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short fract A) -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned short fract A) -- Runtime Function: unsigned short accum __fractuqquha (unsigned short fract A) -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract A) -- Runtime Function: unsigned long accum __fractuqquda (unsigned short fract A) -- Runtime Function: unsigned long long accum __fractuqquta (unsigned short fract A) -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) -- Runtime Function: short __fractuqqhi (unsigned short fract A) -- Runtime Function: int __fractuqqsi (unsigned short fract A) -- Runtime Function: long __fractuqqdi (unsigned short fract A) -- Runtime Function: long long __fractuqqti (unsigned short fract A) -- Runtime Function: float __fractuqqsf (unsigned short fract A) -- Runtime Function: double __fractuqqdf (unsigned short fract A) -- Runtime Function: short fract __fractuhqqq (unsigned fract A) -- Runtime Function: fract __fractuhqhq (unsigned fract A) -- Runtime Function: long fract __fractuhqsq (unsigned fract A) -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) -- Runtime Function: short accum __fractuhqha (unsigned fract A) -- Runtime Function: accum __fractuhqsa (unsigned fract A) -- Runtime Function: long accum __fractuhqda (unsigned fract A) -- Runtime Function: long long accum __fractuhqta (unsigned fract A) -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned fract A) -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract A) -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned fract A) -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract A) -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract A) -- Runtime Function: unsigned long long accum __fractuhquta (unsigned fract A) -- Runtime Function: signed char __fractuhqqi (unsigned fract A) -- Runtime Function: short __fractuhqhi (unsigned fract A) -- Runtime Function: int __fractuhqsi (unsigned fract A) -- Runtime Function: long __fractuhqdi (unsigned fract A) -- Runtime Function: long long __fractuhqti (unsigned fract A) -- Runtime Function: float __fractuhqsf (unsigned fract A) -- Runtime Function: double __fractuhqdf (unsigned fract A) -- Runtime Function: short fract __fractusqqq (unsigned long fract A) -- Runtime Function: fract __fractusqhq (unsigned long fract A) -- Runtime Function: long fract __fractusqsq (unsigned long fract A) -- Runtime Function: long long fract __fractusqdq (unsigned long fract A) -- Runtime Function: short accum __fractusqha (unsigned long fract A) -- Runtime Function: accum __fractusqsa (unsigned long fract A) -- Runtime Function: long accum __fractusqda (unsigned long fract A) -- Runtime Function: long long accum __fractusqta (unsigned long fract A) -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long fract A) -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract A) -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned long fract A) -- Runtime Function: unsigned short accum __fractusquha (unsigned long fract A) -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract A) -- Runtime Function: unsigned long accum __fractusquda (unsigned long fract A) -- Runtime Function: unsigned long long accum __fractusquta (unsigned long fract A) -- Runtime Function: signed char __fractusqqi (unsigned long fract A) -- Runtime Function: short __fractusqhi (unsigned long fract A) -- Runtime Function: int __fractusqsi (unsigned long fract A) -- Runtime Function: long __fractusqdi (unsigned long fract A) -- Runtime Function: long long __fractusqti (unsigned long fract A) -- Runtime Function: float __fractusqsf (unsigned long fract A) -- Runtime Function: double __fractusqdf (unsigned long fract A) -- Runtime Function: short fract __fractudqqq (unsigned long long fract A) -- Runtime Function: fract __fractudqhq (unsigned long long fract A) -- Runtime Function: long fract __fractudqsq (unsigned long long fract A) -- Runtime Function: long long fract __fractudqdq (unsigned long long fract A) -- Runtime Function: short accum __fractudqha (unsigned long long fract A) -- Runtime Function: accum __fractudqsa (unsigned long long fract A) -- Runtime Function: long accum __fractudqda (unsigned long long fract A) -- Runtime Function: long long accum __fractudqta (unsigned long long fract A) -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long long fract A) -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long fract A) -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long long fract A) -- Runtime Function: unsigned short accum __fractudquha (unsigned long long fract A) -- Runtime Function: unsigned accum __fractudqusa (unsigned long long fract A) -- Runtime Function: unsigned long accum __fractudquda (unsigned long long fract A) -- Runtime Function: unsigned long long accum __fractudquta (unsigned long long fract A) -- Runtime Function: signed char __fractudqqi (unsigned long long fract A) -- Runtime Function: short __fractudqhi (unsigned long long fract A) -- Runtime Function: int __fractudqsi (unsigned long long fract A) -- Runtime Function: long __fractudqdi (unsigned long long fract A) -- Runtime Function: long long __fractudqti (unsigned long long fract A) -- Runtime Function: float __fractudqsf (unsigned long long fract A) -- Runtime Function: double __fractudqdf (unsigned long long fract A) -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) -- Runtime Function: fract __fractuhahq (unsigned short accum A) -- Runtime Function: long fract __fractuhasq (unsigned short accum A) -- Runtime Function: long long fract __fractuhadq (unsigned short accum A) -- Runtime Function: short accum __fractuhaha (unsigned short accum A) -- Runtime Function: accum __fractuhasa (unsigned short accum A) -- Runtime Function: long accum __fractuhada (unsigned short accum A) -- Runtime Function: long long accum __fractuhata (unsigned short accum A) -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short accum A) -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum A) -- Runtime Function: unsigned long fract __fractuhausq (unsigned short accum A) -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned short accum A) -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short accum A) -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short accum A) -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned short accum A) -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) -- Runtime Function: short __fractuhahi (unsigned short accum A) -- Runtime Function: int __fractuhasi (unsigned short accum A) -- Runtime Function: long __fractuhadi (unsigned short accum A) -- Runtime Function: long long __fractuhati (unsigned short accum A) -- Runtime Function: float __fractuhasf (unsigned short accum A) -- Runtime Function: double __fractuhadf (unsigned short accum A) -- Runtime Function: short fract __fractusaqq (unsigned accum A) -- Runtime Function: fract __fractusahq (unsigned accum A) -- Runtime Function: long fract __fractusasq (unsigned accum A) -- Runtime Function: long long fract __fractusadq (unsigned accum A) -- Runtime Function: short accum __fractusaha (unsigned accum A) -- Runtime Function: accum __fractusasa (unsigned accum A) -- Runtime Function: long accum __fractusada (unsigned accum A) -- Runtime Function: long long accum __fractusata (unsigned accum A) -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum A) -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) -- Runtime Function: unsigned long fract __fractusausq (unsigned accum A) -- Runtime Function: unsigned long long fract __fractusaudq (unsigned accum A) -- Runtime Function: unsigned short accum __fractusauha2 (unsigned accum A) -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum A) -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned accum A) -- Runtime Function: signed char __fractusaqi (unsigned accum A) -- Runtime Function: short __fractusahi (unsigned accum A) -- Runtime Function: int __fractusasi (unsigned accum A) -- Runtime Function: long __fractusadi (unsigned accum A) -- Runtime Function: long long __fractusati (unsigned accum A) -- Runtime Function: float __fractusasf (unsigned accum A) -- Runtime Function: double __fractusadf (unsigned accum A) -- Runtime Function: short fract __fractudaqq (unsigned long accum A) -- Runtime Function: fract __fractudahq (unsigned long accum A) -- Runtime Function: long fract __fractudasq (unsigned long accum A) -- Runtime Function: long long fract __fractudadq (unsigned long accum A) -- Runtime Function: short accum __fractudaha (unsigned long accum A) -- Runtime Function: accum __fractudasa (unsigned long accum A) -- Runtime Function: long accum __fractudada (unsigned long accum A) -- Runtime Function: long long accum __fractudata (unsigned long accum A) -- Runtime Function: unsigned short fract __fractudauqq (unsigned long accum A) -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum A) -- Runtime Function: unsigned long fract __fractudausq (unsigned long accum A) -- Runtime Function: unsigned long long fract __fractudaudq (unsigned long accum A) -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long accum A) -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum A) -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned long accum A) -- Runtime Function: signed char __fractudaqi (unsigned long accum A) -- Runtime Function: short __fractudahi (unsigned long accum A) -- Runtime Function: int __fractudasi (unsigned long accum A) -- Runtime Function: long __fractudadi (unsigned long accum A) -- Runtime Function: long long __fractudati (unsigned long accum A) -- Runtime Function: float __fractudasf (unsigned long accum A) -- Runtime Function: double __fractudadf (unsigned long accum A) -- Runtime Function: short fract __fractutaqq (unsigned long long accum A) -- Runtime Function: fract __fractutahq (unsigned long long accum A) -- Runtime Function: long fract __fractutasq (unsigned long long accum A) -- Runtime Function: long long fract __fractutadq (unsigned long long accum A) -- Runtime Function: short accum __fractutaha (unsigned long long accum A) -- Runtime Function: accum __fractutasa (unsigned long long accum A) -- Runtime Function: long accum __fractutada (unsigned long long accum A) -- Runtime Function: long long accum __fractutata (unsigned long long accum A) -- Runtime Function: unsigned short fract __fractutauqq (unsigned long long accum A) -- Runtime Function: unsigned fract __fractutauhq (unsigned long long accum A) -- Runtime Function: unsigned long fract __fractutausq (unsigned long long accum A) -- Runtime Function: unsigned long long fract __fractutaudq (unsigned long long accum A) -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long long accum A) -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long accum A) -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long long accum A) -- Runtime Function: signed char __fractutaqi (unsigned long long accum A) -- Runtime Function: short __fractutahi (unsigned long long accum A) -- Runtime Function: int __fractutasi (unsigned long long accum A) -- Runtime Function: long __fractutadi (unsigned long long accum A) -- Runtime Function: long long __fractutati (unsigned long long accum A) -- Runtime Function: float __fractutasf (unsigned long long accum A) -- Runtime Function: double __fractutadf (unsigned long long accum A) -- Runtime Function: short fract __fractqiqq (signed char A) -- Runtime Function: fract __fractqihq (signed char A) -- Runtime Function: long fract __fractqisq (signed char A) -- Runtime Function: long long fract __fractqidq (signed char A) -- Runtime Function: short accum __fractqiha (signed char A) -- Runtime Function: accum __fractqisa (signed char A) -- Runtime Function: long accum __fractqida (signed char A) -- Runtime Function: long long accum __fractqita (signed char A) -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) -- Runtime Function: unsigned fract __fractqiuhq (signed char A) -- Runtime Function: unsigned long fract __fractqiusq (signed char A) -- Runtime Function: unsigned long long fract __fractqiudq (signed char A) -- Runtime Function: unsigned short accum __fractqiuha (signed char A) -- Runtime Function: unsigned accum __fractqiusa (signed char A) -- Runtime Function: unsigned long accum __fractqiuda (signed char A) -- Runtime Function: unsigned long long accum __fractqiuta (signed char A) -- Runtime Function: short fract __fracthiqq (short A) -- Runtime Function: fract __fracthihq (short A) -- Runtime Function: long fract __fracthisq (short A) -- Runtime Function: long long fract __fracthidq (short A) -- Runtime Function: short accum __fracthiha (short A) -- Runtime Function: accum __fracthisa (short A) -- Runtime Function: long accum __fracthida (short A) -- Runtime Function: long long accum __fracthita (short A) -- Runtime Function: unsigned short fract __fracthiuqq (short A) -- Runtime Function: unsigned fract __fracthiuhq (short A) -- Runtime Function: unsigned long fract __fracthiusq (short A) -- Runtime Function: unsigned long long fract __fracthiudq (short A) -- Runtime Function: unsigned short accum __fracthiuha (short A) -- Runtime Function: unsigned accum __fracthiusa (short A) -- Runtime Function: unsigned long accum __fracthiuda (short A) -- Runtime Function: unsigned long long accum __fracthiuta (short A) -- Runtime Function: short fract __fractsiqq (int A) -- Runtime Function: fract __fractsihq (int A) -- Runtime Function: long fract __fractsisq (int A) -- Runtime Function: long long fract __fractsidq (int A) -- Runtime Function: short accum __fractsiha (int A) -- Runtime Function: accum __fractsisa (int A) -- Runtime Function: long accum __fractsida (int A) -- Runtime Function: long long accum __fractsita (int A) -- Runtime Function: unsigned short fract __fractsiuqq (int A) -- Runtime Function: unsigned fract __fractsiuhq (int A) -- Runtime Function: unsigned long fract __fractsiusq (int A) -- Runtime Function: unsigned long long fract __fractsiudq (int A) -- Runtime Function: unsigned short accum __fractsiuha (int A) -- Runtime Function: unsigned accum __fractsiusa (int A) -- Runtime Function: unsigned long accum __fractsiuda (int A) -- Runtime Function: unsigned long long accum __fractsiuta (int A) -- Runtime Function: short fract __fractdiqq (long A) -- Runtime Function: fract __fractdihq (long A) -- Runtime Function: long fract __fractdisq (long A) -- Runtime Function: long long fract __fractdidq (long A) -- Runtime Function: short accum __fractdiha (long A) -- Runtime Function: accum __fractdisa (long A) -- Runtime Function: long accum __fractdida (long A) -- Runtime Function: long long accum __fractdita (long A) -- Runtime Function: unsigned short fract __fractdiuqq (long A) -- Runtime Function: unsigned fract __fractdiuhq (long A) -- Runtime Function: unsigned long fract __fractdiusq (long A) -- Runtime Function: unsigned long long fract __fractdiudq (long A) -- Runtime Function: unsigned short accum __fractdiuha (long A) -- Runtime Function: unsigned accum __fractdiusa (long A) -- Runtime Function: unsigned long accum __fractdiuda (long A) -- Runtime Function: unsigned long long accum __fractdiuta (long A) -- Runtime Function: short fract __fracttiqq (long long A) -- Runtime Function: fract __fracttihq (long long A) -- Runtime Function: long fract __fracttisq (long long A) -- Runtime Function: long long fract __fracttidq (long long A) -- Runtime Function: short accum __fracttiha (long long A) -- Runtime Function: accum __fracttisa (long long A) -- Runtime Function: long accum __fracttida (long long A) -- Runtime Function: long long accum __fracttita (long long A) -- Runtime Function: unsigned short fract __fracttiuqq (long long A) -- Runtime Function: unsigned fract __fracttiuhq (long long A) -- Runtime Function: unsigned long fract __fracttiusq (long long A) -- Runtime Function: unsigned long long fract __fracttiudq (long long A) -- Runtime Function: unsigned short accum __fracttiuha (long long A) -- Runtime Function: unsigned accum __fracttiusa (long long A) -- Runtime Function: unsigned long accum __fracttiuda (long long A) -- Runtime Function: unsigned long long accum __fracttiuta (long long A) -- Runtime Function: short fract __fractsfqq (float A) -- Runtime Function: fract __fractsfhq (float A) -- Runtime Function: long fract __fractsfsq (float A) -- Runtime Function: long long fract __fractsfdq (float A) -- Runtime Function: short accum __fractsfha (float A) -- Runtime Function: accum __fractsfsa (float A) -- Runtime Function: long accum __fractsfda (float A) -- Runtime Function: long long accum __fractsfta (float A) -- Runtime Function: unsigned short fract __fractsfuqq (float A) -- Runtime Function: unsigned fract __fractsfuhq (float A) -- Runtime Function: unsigned long fract __fractsfusq (float A) -- Runtime Function: unsigned long long fract __fractsfudq (float A) -- Runtime Function: unsigned short accum __fractsfuha (float A) -- Runtime Function: unsigned accum __fractsfusa (float A) -- Runtime Function: unsigned long accum __fractsfuda (float A) -- Runtime Function: unsigned long long accum __fractsfuta (float A) -- Runtime Function: short fract __fractdfqq (double A) -- Runtime Function: fract __fractdfhq (double A) -- Runtime Function: long fract __fractdfsq (double A) -- Runtime Function: long long fract __fractdfdq (double A) -- Runtime Function: short accum __fractdfha (double A) -- Runtime Function: accum __fractdfsa (double A) -- Runtime Function: long accum __fractdfda (double A) -- Runtime Function: long long accum __fractdfta (double A) -- Runtime Function: unsigned short fract __fractdfuqq (double A) -- Runtime Function: unsigned fract __fractdfuhq (double A) -- Runtime Function: unsigned long fract __fractdfusq (double A) -- Runtime Function: unsigned long long fract __fractdfudq (double A) -- Runtime Function: unsigned short accum __fractdfuha (double A) -- Runtime Function: unsigned accum __fractdfusa (double A) -- Runtime Function: unsigned long accum __fractdfuda (double A) -- Runtime Function: unsigned long long accum __fractdfuta (double A) These functions convert from fractional and signed non-fractionals to fractionals and signed non-fractionals, without saturation. -- Runtime Function: fract __satfractqqhq2 (short fract A) -- Runtime Function: long fract __satfractqqsq2 (short fract A) -- Runtime Function: long long fract __satfractqqdq2 (short fract A) -- Runtime Function: short accum __satfractqqha (short fract A) -- Runtime Function: accum __satfractqqsa (short fract A) -- Runtime Function: long accum __satfractqqda (short fract A) -- Runtime Function: long long accum __satfractqqta (short fract A) -- Runtime Function: unsigned short fract __satfractqquqq (short fract A) -- Runtime Function: unsigned fract __satfractqquhq (short fract A) -- Runtime Function: unsigned long fract __satfractqqusq (short fract A) -- Runtime Function: unsigned long long fract __satfractqqudq (short fract A) -- Runtime Function: unsigned short accum __satfractqquha (short fract A) -- Runtime Function: unsigned accum __satfractqqusa (short fract A) -- Runtime Function: unsigned long accum __satfractqquda (short fract A) -- Runtime Function: unsigned long long accum __satfractqquta (short fract A) -- Runtime Function: short fract __satfracthqqq2 (fract A) -- Runtime Function: long fract __satfracthqsq2 (fract A) -- Runtime Function: long long fract __satfracthqdq2 (fract A) -- Runtime Function: short accum __satfracthqha (fract A) -- Runtime Function: accum __satfracthqsa (fract A) -- Runtime Function: long accum __satfracthqda (fract A) -- Runtime Function: long long accum __satfracthqta (fract A) -- Runtime Function: unsigned short fract __satfracthquqq (fract A) -- Runtime Function: unsigned fract __satfracthquhq (fract A) -- Runtime Function: unsigned long fract __satfracthqusq (fract A) -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) -- Runtime Function: unsigned short accum __satfracthquha (fract A) -- Runtime Function: unsigned accum __satfracthqusa (fract A) -- Runtime Function: unsigned long accum __satfracthquda (fract A) -- Runtime Function: unsigned long long accum __satfracthquta (fract A) -- Runtime Function: short fract __satfractsqqq2 (long fract A) -- Runtime Function: fract __satfractsqhq2 (long fract A) -- Runtime Function: long long fract __satfractsqdq2 (long fract A) -- Runtime Function: short accum __satfractsqha (long fract A) -- Runtime Function: accum __satfractsqsa (long fract A) -- Runtime Function: long accum __satfractsqda (long fract A) -- Runtime Function: long long accum __satfractsqta (long fract A) -- Runtime Function: unsigned short fract __satfractsquqq (long fract A) -- Runtime Function: unsigned fract __satfractsquhq (long fract A) -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) -- Runtime Function: unsigned long long fract __satfractsqudq (long fract A) -- Runtime Function: unsigned short accum __satfractsquha (long fract A) -- Runtime Function: unsigned accum __satfractsqusa (long fract A) -- Runtime Function: unsigned long accum __satfractsquda (long fract A) -- Runtime Function: unsigned long long accum __satfractsquta (long fract A) -- Runtime Function: short fract __satfractdqqq2 (long long fract A) -- Runtime Function: fract __satfractdqhq2 (long long fract A) -- Runtime Function: long fract __satfractdqsq2 (long long fract A) -- Runtime Function: short accum __satfractdqha (long long fract A) -- Runtime Function: accum __satfractdqsa (long long fract A) -- Runtime Function: long accum __satfractdqda (long long fract A) -- Runtime Function: long long accum __satfractdqta (long long fract A) -- Runtime Function: unsigned short fract __satfractdquqq (long long fract A) -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) -- Runtime Function: unsigned long fract __satfractdqusq (long long fract A) -- Runtime Function: unsigned long long fract __satfractdqudq (long long fract A) -- Runtime Function: unsigned short accum __satfractdquha (long long fract A) -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) -- Runtime Function: unsigned long accum __satfractdquda (long long fract A) -- Runtime Function: unsigned long long accum __satfractdquta (long long fract A) -- Runtime Function: short fract __satfracthaqq (short accum A) -- Runtime Function: fract __satfracthahq (short accum A) -- Runtime Function: long fract __satfracthasq (short accum A) -- Runtime Function: long long fract __satfracthadq (short accum A) -- Runtime Function: accum __satfracthasa2 (short accum A) -- Runtime Function: long accum __satfracthada2 (short accum A) -- Runtime Function: long long accum __satfracthata2 (short accum A) -- Runtime Function: unsigned short fract __satfracthauqq (short accum A) -- Runtime Function: unsigned fract __satfracthauhq (short accum A) -- Runtime Function: unsigned long fract __satfracthausq (short accum A) -- Runtime Function: unsigned long long fract __satfracthaudq (short accum A) -- Runtime Function: unsigned short accum __satfracthauha (short accum A) -- Runtime Function: unsigned accum __satfracthausa (short accum A) -- Runtime Function: unsigned long accum __satfracthauda (short accum A) -- Runtime Function: unsigned long long accum __satfracthauta (short accum A) -- Runtime Function: short fract __satfractsaqq (accum A) -- Runtime Function: fract __satfractsahq (accum A) -- Runtime Function: long fract __satfractsasq (accum A) -- Runtime Function: long long fract __satfractsadq (accum A) -- Runtime Function: short accum __satfractsaha2 (accum A) -- Runtime Function: long accum __satfractsada2 (accum A) -- Runtime Function: long long accum __satfractsata2 (accum A) -- Runtime Function: unsigned short fract __satfractsauqq (accum A) -- Runtime Function: unsigned fract __satfractsauhq (accum A) -- Runtime Function: unsigned long fract __satfractsausq (accum A) -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) -- Runtime Function: unsigned short accum __satfractsauha (accum A) -- Runtime Function: unsigned accum __satfractsausa (accum A) -- Runtime Function: unsigned long accum __satfractsauda (accum A) -- Runtime Function: unsigned long long accum __satfractsauta (accum A) -- Runtime Function: short fract __satfractdaqq (long accum A) -- Runtime Function: fract __satfractdahq (long accum A) -- Runtime Function: long fract __satfractdasq (long accum A) -- Runtime Function: long long fract __satfractdadq (long accum A) -- Runtime Function: short accum __satfractdaha2 (long accum A) -- Runtime Function: accum __satfractdasa2 (long accum A) -- Runtime Function: long long accum __satfractdata2 (long accum A) -- Runtime Function: unsigned short fract __satfractdauqq (long accum A) -- Runtime Function: unsigned fract __satfractdauhq (long accum A) -- Runtime Function: unsigned long fract __satfractdausq (long accum A) -- Runtime Function: unsigned long long fract __satfractdaudq (long accum A) -- Runtime Function: unsigned short accum __satfractdauha (long accum A) -- Runtime Function: unsigned accum __satfractdausa (long accum A) -- Runtime Function: unsigned long accum __satfractdauda (long accum A) -- Runtime Function: unsigned long long accum __satfractdauta (long accum A) -- Runtime Function: short fract __satfracttaqq (long long accum A) -- Runtime Function: fract __satfracttahq (long long accum A) -- Runtime Function: long fract __satfracttasq (long long accum A) -- Runtime Function: long long fract __satfracttadq (long long accum A) -- Runtime Function: short accum __satfracttaha2 (long long accum A) -- Runtime Function: accum __satfracttasa2 (long long accum A) -- Runtime Function: long accum __satfracttada2 (long long accum A) -- Runtime Function: unsigned short fract __satfracttauqq (long long accum A) -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) -- Runtime Function: unsigned long fract __satfracttausq (long long accum A) -- Runtime Function: unsigned long long fract __satfracttaudq (long long accum A) -- Runtime Function: unsigned short accum __satfracttauha (long long accum A) -- Runtime Function: unsigned accum __satfracttausa (long long accum A) -- Runtime Function: unsigned long accum __satfracttauda (long long accum A) -- Runtime Function: unsigned long long accum __satfracttauta (long long accum A) -- Runtime Function: short fract __satfractuqqqq (unsigned short fract A) -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) -- Runtime Function: long fract __satfractuqqsq (unsigned short fract A) -- Runtime Function: long long fract __satfractuqqdq (unsigned short fract A) -- Runtime Function: short accum __satfractuqqha (unsigned short fract A) -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) -- Runtime Function: long accum __satfractuqqda (unsigned short fract A) -- Runtime Function: long long accum __satfractuqqta (unsigned short fract A) -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short fract A) -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned short fract A) -- Runtime Function: unsigned long long fract __satfractuqqudq2 (unsigned short fract A) -- Runtime Function: unsigned short accum __satfractuqquha (unsigned short fract A) -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short fract A) -- Runtime Function: unsigned long accum __satfractuqquda (unsigned short fract A) -- Runtime Function: unsigned long long accum __satfractuqquta (unsigned short fract A) -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) -- Runtime Function: fract __satfractuhqhq (unsigned fract A) -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) -- Runtime Function: short accum __satfractuhqha (unsigned fract A) -- Runtime Function: accum __satfractuhqsa (unsigned fract A) -- Runtime Function: long accum __satfractuhqda (unsigned fract A) -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned fract A) -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned fract A) -- Runtime Function: unsigned long long fract __satfractuhqudq2 (unsigned fract A) -- Runtime Function: unsigned short accum __satfractuhquha (unsigned fract A) -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) -- Runtime Function: unsigned long accum __satfractuhquda (unsigned fract A) -- Runtime Function: unsigned long long accum __satfractuhquta (unsigned fract A) -- Runtime Function: short fract __satfractusqqq (unsigned long fract A) -- Runtime Function: fract __satfractusqhq (unsigned long fract A) -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) -- Runtime Function: long long fract __satfractusqdq (unsigned long fract A) -- Runtime Function: short accum __satfractusqha (unsigned long fract A) -- Runtime Function: accum __satfractusqsa (unsigned long fract A) -- Runtime Function: long accum __satfractusqda (unsigned long fract A) -- Runtime Function: long long accum __satfractusqta (unsigned long fract A) -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned long fract A) -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long fract A) -- Runtime Function: unsigned long long fract __satfractusqudq2 (unsigned long fract A) -- Runtime Function: unsigned short accum __satfractusquha (unsigned long fract A) -- Runtime Function: unsigned accum __satfractusqusa (unsigned long fract A) -- Runtime Function: unsigned long accum __satfractusquda (unsigned long fract A) -- Runtime Function: unsigned long long accum __satfractusquta (unsigned long fract A) -- Runtime Function: short fract __satfractudqqq (unsigned long long fract A) -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) -- Runtime Function: long fract __satfractudqsq (unsigned long long fract A) -- Runtime Function: long long fract __satfractudqdq (unsigned long long fract A) -- Runtime Function: short accum __satfractudqha (unsigned long long fract A) -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) -- Runtime Function: long accum __satfractudqda (unsigned long long fract A) -- Runtime Function: long long accum __satfractudqta (unsigned long long fract A) -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned long long fract A) -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long long fract A) -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned long long fract A) -- Runtime Function: unsigned short accum __satfractudquha (unsigned long long fract A) -- Runtime Function: unsigned accum __satfractudqusa (unsigned long long fract A) -- Runtime Function: unsigned long accum __satfractudquda (unsigned long long fract A) -- Runtime Function: unsigned long long accum __satfractudquta (unsigned long long fract A) -- Runtime Function: short fract __satfractuhaqq (unsigned short accum A) -- Runtime Function: fract __satfractuhahq (unsigned short accum A) -- Runtime Function: long fract __satfractuhasq (unsigned short accum A) -- Runtime Function: long long fract __satfractuhadq (unsigned short accum A) -- Runtime Function: short accum __satfractuhaha (unsigned short accum A) -- Runtime Function: accum __satfractuhasa (unsigned short accum A) -- Runtime Function: long accum __satfractuhada (unsigned short accum A) -- Runtime Function: long long accum __satfractuhata (unsigned short accum A) -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned short accum A) -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short accum A) -- Runtime Function: unsigned long fract __satfractuhausq (unsigned short accum A) -- Runtime Function: unsigned long long fract __satfractuhaudq (unsigned short accum A) -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short accum A) -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned short accum A) -- Runtime Function: unsigned long long accum __satfractuhauta2 (unsigned short accum A) -- Runtime Function: short fract __satfractusaqq (unsigned accum A) -- Runtime Function: fract __satfractusahq (unsigned accum A) -- Runtime Function: long fract __satfractusasq (unsigned accum A) -- Runtime Function: long long fract __satfractusadq (unsigned accum A) -- Runtime Function: short accum __satfractusaha (unsigned accum A) -- Runtime Function: accum __satfractusasa (unsigned accum A) -- Runtime Function: long accum __satfractusada (unsigned accum A) -- Runtime Function: long long accum __satfractusata (unsigned accum A) -- Runtime Function: unsigned short fract __satfractusauqq (unsigned accum A) -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) -- Runtime Function: unsigned long fract __satfractusausq (unsigned accum A) -- Runtime Function: unsigned long long fract __satfractusaudq (unsigned accum A) -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned accum A) -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned accum A) -- Runtime Function: unsigned long long accum __satfractusauta2 (unsigned accum A) -- Runtime Function: short fract __satfractudaqq (unsigned long accum A) -- Runtime Function: fract __satfractudahq (unsigned long accum A) -- Runtime Function: long fract __satfractudasq (unsigned long accum A) -- Runtime Function: long long fract __satfractudadq (unsigned long accum A) -- Runtime Function: short accum __satfractudaha (unsigned long accum A) -- Runtime Function: accum __satfractudasa (unsigned long accum A) -- Runtime Function: long accum __satfractudada (unsigned long accum A) -- Runtime Function: long long accum __satfractudata (unsigned long accum A) -- Runtime Function: unsigned short fract __satfractudauqq (unsigned long accum A) -- Runtime Function: unsigned fract __satfractudauhq (unsigned long accum A) -- Runtime Function: unsigned long fract __satfractudausq (unsigned long accum A) -- Runtime Function: unsigned long long fract __satfractudaudq (unsigned long accum A) -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned long accum A) -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long accum A) -- Runtime Function: unsigned long long accum __satfractudauta2 (unsigned long accum A) -- Runtime Function: short fract __satfractutaqq (unsigned long long accum A) -- Runtime Function: fract __satfractutahq (unsigned long long accum A) -- Runtime Function: long fract __satfractutasq (unsigned long long accum A) -- Runtime Function: long long fract __satfractutadq (unsigned long long accum A) -- Runtime Function: short accum __satfractutaha (unsigned long long accum A) -- Runtime Function: accum __satfractutasa (unsigned long long accum A) -- Runtime Function: long accum __satfractutada (unsigned long long accum A) -- Runtime Function: long long accum __satfractutata (unsigned long long accum A) -- Runtime Function: unsigned short fract __satfractutauqq (unsigned long long accum A) -- Runtime Function: unsigned fract __satfractutauhq (unsigned long long accum A) -- Runtime Function: unsigned long fract __satfractutausq (unsigned long long accum A) -- Runtime Function: unsigned long long fract __satfractutaudq (unsigned long long accum A) -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned long long accum A) -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long long accum A) -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned long long accum A) -- Runtime Function: short fract __satfractqiqq (signed char A) -- Runtime Function: fract __satfractqihq (signed char A) -- Runtime Function: long fract __satfractqisq (signed char A) -- Runtime Function: long long fract __satfractqidq (signed char A) -- Runtime Function: short accum __satfractqiha (signed char A) -- Runtime Function: accum __satfractqisa (signed char A) -- Runtime Function: long accum __satfractqida (signed char A) -- Runtime Function: long long accum __satfractqita (signed char A) -- Runtime Function: unsigned short fract __satfractqiuqq (signed char A) -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) -- Runtime Function: unsigned long fract __satfractqiusq (signed char A) -- Runtime Function: unsigned long long fract __satfractqiudq (signed char A) -- Runtime Function: unsigned short accum __satfractqiuha (signed char A) -- Runtime Function: unsigned accum __satfractqiusa (signed char A) -- Runtime Function: unsigned long accum __satfractqiuda (signed char A) -- Runtime Function: unsigned long long accum __satfractqiuta (signed char A) -- Runtime Function: short fract __satfracthiqq (short A) -- Runtime Function: fract __satfracthihq (short A) -- Runtime Function: long fract __satfracthisq (short A) -- Runtime Function: long long fract __satfracthidq (short A) -- Runtime Function: short accum __satfracthiha (short A) -- Runtime Function: accum __satfracthisa (short A) -- Runtime Function: long accum __satfracthida (short A) -- Runtime Function: long long accum __satfracthita (short A) -- Runtime Function: unsigned short fract __satfracthiuqq (short A) -- Runtime Function: unsigned fract __satfracthiuhq (short A) -- Runtime Function: unsigned long fract __satfracthiusq (short A) -- Runtime Function: unsigned long long fract __satfracthiudq (short A) -- Runtime Function: unsigned short accum __satfracthiuha (short A) -- Runtime Function: unsigned accum __satfracthiusa (short A) -- Runtime Function: unsigned long accum __satfracthiuda (short A) -- Runtime Function: unsigned long long accum __satfracthiuta (short A) -- Runtime Function: short fract __satfractsiqq (int A) -- Runtime Function: fract __satfractsihq (int A) -- Runtime Function: long fract __satfractsisq (int A) -- Runtime Function: long long fract __satfractsidq (int A) -- Runtime Function: short accum __satfractsiha (int A) -- Runtime Function: accum __satfractsisa (int A) -- Runtime Function: long accum __satfractsida (int A) -- Runtime Function: long long accum __satfractsita (int A) -- Runtime Function: unsigned short fract __satfractsiuqq (int A) -- Runtime Function: unsigned fract __satfractsiuhq (int A) -- Runtime Function: unsigned long fract __satfractsiusq (int A) -- Runtime Function: unsigned long long fract __satfractsiudq (int A) -- Runtime Function: unsigned short accum __satfractsiuha (int A) -- Runtime Function: unsigned accum __satfractsiusa (int A) -- Runtime Function: unsigned long accum __satfractsiuda (int A) -- Runtime Function: unsigned long long accum __satfractsiuta (int A) -- Runtime Function: short fract __satfractdiqq (long A) -- Runtime Function: fract __satfractdihq (long A) -- Runtime Function: long fract __satfractdisq (long A) -- Runtime Function: long long fract __satfractdidq (long A) -- Runtime Function: short accum __satfractdiha (long A) -- Runtime Function: accum __satfractdisa (long A) -- Runtime Function: long accum __satfractdida (long A) -- Runtime Function: long long accum __satfractdita (long A) -- Runtime Function: unsigned short fract __satfractdiuqq (long A) -- Runtime Function: unsigned fract __satfractdiuhq (long A) -- Runtime Function: unsigned long fract __satfractdiusq (long A) -- Runtime Function: unsigned long long fract __satfractdiudq (long A) -- Runtime Function: unsigned short accum __satfractdiuha (long A) -- Runtime Function: unsigned accum __satfractdiusa (long A) -- Runtime Function: unsigned long accum __satfractdiuda (long A) -- Runtime Function: unsigned long long accum __satfractdiuta (long A) -- Runtime Function: short fract __satfracttiqq (long long A) -- Runtime Function: fract __satfracttihq (long long A) -- Runtime Function: long fract __satfracttisq (long long A) -- Runtime Function: long long fract __satfracttidq (long long A) -- Runtime Function: short accum __satfracttiha (long long A) -- Runtime Function: accum __satfracttisa (long long A) -- Runtime Function: long accum __satfracttida (long long A) -- Runtime Function: long long accum __satfracttita (long long A) -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) -- Runtime Function: unsigned fract __satfracttiuhq (long long A) -- Runtime Function: unsigned long fract __satfracttiusq (long long A) -- Runtime Function: unsigned long long fract __satfracttiudq (long long A) -- Runtime Function: unsigned short accum __satfracttiuha (long long A) -- Runtime Function: unsigned accum __satfracttiusa (long long A) -- Runtime Function: unsigned long accum __satfracttiuda (long long A) -- Runtime Function: unsigned long long accum __satfracttiuta (long long A) -- Runtime Function: short fract __satfractsfqq (float A) -- Runtime Function: fract __satfractsfhq (float A) -- Runtime Function: long fract __satfractsfsq (float A) -- Runtime Function: long long fract __satfractsfdq (float A) -- Runtime Function: short accum __satfractsfha (float A) -- Runtime Function: accum __satfractsfsa (float A) -- Runtime Function: long accum __satfractsfda (float A) -- Runtime Function: long long accum __satfractsfta (float A) -- Runtime Function: unsigned short fract __satfractsfuqq (float A) -- Runtime Function: unsigned fract __satfractsfuhq (float A) -- Runtime Function: unsigned long fract __satfractsfusq (float A) -- Runtime Function: unsigned long long fract __satfractsfudq (float A) -- Runtime Function: unsigned short accum __satfractsfuha (float A) -- Runtime Function: unsigned accum __satfractsfusa (float A) -- Runtime Function: unsigned long accum __satfractsfuda (float A) -- Runtime Function: unsigned long long accum __satfractsfuta (float A) -- Runtime Function: short fract __satfractdfqq (double A) -- Runtime Function: fract __satfractdfhq (double A) -- Runtime Function: long fract __satfractdfsq (double A) -- Runtime Function: long long fract __satfractdfdq (double A) -- Runtime Function: short accum __satfractdfha (double A) -- Runtime Function: accum __satfractdfsa (double A) -- Runtime Function: long accum __satfractdfda (double A) -- Runtime Function: long long accum __satfractdfta (double A) -- Runtime Function: unsigned short fract __satfractdfuqq (double A) -- Runtime Function: unsigned fract __satfractdfuhq (double A) -- Runtime Function: unsigned long fract __satfractdfusq (double A) -- Runtime Function: unsigned long long fract __satfractdfudq (double A) -- Runtime Function: unsigned short accum __satfractdfuha (double A) -- Runtime Function: unsigned accum __satfractdfusa (double A) -- Runtime Function: unsigned long accum __satfractdfuda (double A) -- Runtime Function: unsigned long long accum __satfractdfuta (double A) The functions convert from fractional and signed non-fractionals to fractionals, with saturation. -- Runtime Function: unsigned char __fractunsqqqi (short fract A) -- Runtime Function: unsigned short __fractunsqqhi (short fract A) -- Runtime Function: unsigned int __fractunsqqsi (short fract A) -- Runtime Function: unsigned long __fractunsqqdi (short fract A) -- Runtime Function: unsigned long long __fractunsqqti (short fract A) -- Runtime Function: unsigned char __fractunshqqi (fract A) -- Runtime Function: unsigned short __fractunshqhi (fract A) -- Runtime Function: unsigned int __fractunshqsi (fract A) -- Runtime Function: unsigned long __fractunshqdi (fract A) -- Runtime Function: unsigned long long __fractunshqti (fract A) -- Runtime Function: unsigned char __fractunssqqi (long fract A) -- Runtime Function: unsigned short __fractunssqhi (long fract A) -- Runtime Function: unsigned int __fractunssqsi (long fract A) -- Runtime Function: unsigned long __fractunssqdi (long fract A) -- Runtime Function: unsigned long long __fractunssqti (long fract A) -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) -- Runtime Function: unsigned long long __fractunsdqti (long long fract A) -- Runtime Function: unsigned char __fractunshaqi (short accum A) -- Runtime Function: unsigned short __fractunshahi (short accum A) -- Runtime Function: unsigned int __fractunshasi (short accum A) -- Runtime Function: unsigned long __fractunshadi (short accum A) -- Runtime Function: unsigned long long __fractunshati (short accum A) -- Runtime Function: unsigned char __fractunssaqi (accum A) -- Runtime Function: unsigned short __fractunssahi (accum A) -- Runtime Function: unsigned int __fractunssasi (accum A) -- Runtime Function: unsigned long __fractunssadi (accum A) -- Runtime Function: unsigned long long __fractunssati (accum A) -- Runtime Function: unsigned char __fractunsdaqi (long accum A) -- Runtime Function: unsigned short __fractunsdahi (long accum A) -- Runtime Function: unsigned int __fractunsdasi (long accum A) -- Runtime Function: unsigned long __fractunsdadi (long accum A) -- Runtime Function: unsigned long long __fractunsdati (long accum A) -- Runtime Function: unsigned char __fractunstaqi (long long accum A) -- Runtime Function: unsigned short __fractunstahi (long long accum A) -- Runtime Function: unsigned int __fractunstasi (long long accum A) -- Runtime Function: unsigned long __fractunstadi (long long accum A) -- Runtime Function: unsigned long long __fractunstati (long long accum A) -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short fract A) -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short fract A) -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract A) -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short fract A) -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short fract A) -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract A) -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract A) -- Runtime Function: unsigned short __fractunsusqhi (unsigned long fract A) -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract A) -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract A) -- Runtime Function: unsigned long long __fractunsusqti (unsigned long fract A) -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long fract A) -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long fract A) -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long fract A) -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long fract A) -- Runtime Function: unsigned long long __fractunsudqti (unsigned long long fract A) -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short accum A) -- Runtime Function: unsigned short __fractunsuhahi (unsigned short accum A) -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum A) -- Runtime Function: unsigned long __fractunsuhadi (unsigned short accum A) -- Runtime Function: unsigned long long __fractunsuhati (unsigned short accum A) -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) -- Runtime Function: unsigned long long __fractunsusati (unsigned accum A) -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum A) -- Runtime Function: unsigned short __fractunsudahi (unsigned long accum A) -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum A) -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum A) -- Runtime Function: unsigned long long __fractunsudati (unsigned long accum A) -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long accum A) -- Runtime Function: unsigned short __fractunsutahi (unsigned long long accum A) -- Runtime Function: unsigned int __fractunsutasi (unsigned long long accum A) -- Runtime Function: unsigned long __fractunsutadi (unsigned long long accum A) -- Runtime Function: unsigned long long __fractunsutati (unsigned long long accum A) -- Runtime Function: short fract __fractunsqiqq (unsigned char A) -- Runtime Function: fract __fractunsqihq (unsigned char A) -- Runtime Function: long fract __fractunsqisq (unsigned char A) -- Runtime Function: long long fract __fractunsqidq (unsigned char A) -- Runtime Function: short accum __fractunsqiha (unsigned char A) -- Runtime Function: accum __fractunsqisa (unsigned char A) -- Runtime Function: long accum __fractunsqida (unsigned char A) -- Runtime Function: long long accum __fractunsqita (unsigned char A) -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned char A) -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char A) -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned char A) -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned char A) -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char A) -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned char A) -- Runtime Function: short fract __fractunshiqq (unsigned short A) -- Runtime Function: fract __fractunshihq (unsigned short A) -- Runtime Function: long fract __fractunshisq (unsigned short A) -- Runtime Function: long long fract __fractunshidq (unsigned short A) -- Runtime Function: short accum __fractunshiha (unsigned short A) -- Runtime Function: accum __fractunshisa (unsigned short A) -- Runtime Function: long accum __fractunshida (unsigned short A) -- Runtime Function: long long accum __fractunshita (unsigned short A) -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned short A) -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) -- Runtime Function: unsigned long fract __fractunshiusq (unsigned short A) -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned short A) -- Runtime Function: unsigned short accum __fractunshiuha (unsigned short A) -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) -- Runtime Function: unsigned long accum __fractunshiuda (unsigned short A) -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned short A) -- Runtime Function: short fract __fractunssiqq (unsigned int A) -- Runtime Function: fract __fractunssihq (unsigned int A) -- Runtime Function: long fract __fractunssisq (unsigned int A) -- Runtime Function: long long fract __fractunssidq (unsigned int A) -- Runtime Function: short accum __fractunssiha (unsigned int A) -- Runtime Function: accum __fractunssisa (unsigned int A) -- Runtime Function: long accum __fractunssida (unsigned int A) -- Runtime Function: long long accum __fractunssita (unsigned int A) -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int A) -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int A) -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned int A) -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int A) -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int A) -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned int A) -- Runtime Function: short fract __fractunsdiqq (unsigned long A) -- Runtime Function: fract __fractunsdihq (unsigned long A) -- Runtime Function: long fract __fractunsdisq (unsigned long A) -- Runtime Function: long long fract __fractunsdidq (unsigned long A) -- Runtime Function: short accum __fractunsdiha (unsigned long A) -- Runtime Function: accum __fractunsdisa (unsigned long A) -- Runtime Function: long accum __fractunsdida (unsigned long A) -- Runtime Function: long long accum __fractunsdita (unsigned long A) -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned long A) -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long A) -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned long A) -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned long A) -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long A) -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned long A) -- Runtime Function: short fract __fractunstiqq (unsigned long long A) -- Runtime Function: fract __fractunstihq (unsigned long long A) -- Runtime Function: long fract __fractunstisq (unsigned long long A) -- Runtime Function: long long fract __fractunstidq (unsigned long long A) -- Runtime Function: short accum __fractunstiha (unsigned long long A) -- Runtime Function: accum __fractunstisa (unsigned long long A) -- Runtime Function: long accum __fractunstida (unsigned long long A) -- Runtime Function: long long accum __fractunstita (unsigned long long A) -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned long long A) -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long A) -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long long A) -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned long long A) -- Runtime Function: unsigned short accum __fractunstiuha (unsigned long long A) -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long A) -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long long A) -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned long long A) These functions convert from fractionals to unsigned non-fractionals; and from unsigned non-fractionals to fractionals, without saturation. -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) -- Runtime Function: fract __satfractunsqihq (unsigned char A) -- Runtime Function: long fract __satfractunsqisq (unsigned char A) -- Runtime Function: long long fract __satfractunsqidq (unsigned char A) -- Runtime Function: short accum __satfractunsqiha (unsigned char A) -- Runtime Function: accum __satfractunsqisa (unsigned char A) -- Runtime Function: long accum __satfractunsqida (unsigned char A) -- Runtime Function: long long accum __satfractunsqita (unsigned char A) -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned char A) -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char A) -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned char A) -- Runtime Function: unsigned long long fract __satfractunsqiudq (unsigned char A) -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned char A) -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char A) -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned char A) -- Runtime Function: unsigned long long accum __satfractunsqiuta (unsigned char A) -- Runtime Function: short fract __satfractunshiqq (unsigned short A) -- Runtime Function: fract __satfractunshihq (unsigned short A) -- Runtime Function: long fract __satfractunshisq (unsigned short A) -- Runtime Function: long long fract __satfractunshidq (unsigned short A) -- Runtime Function: short accum __satfractunshiha (unsigned short A) -- Runtime Function: accum __satfractunshisa (unsigned short A) -- Runtime Function: long accum __satfractunshida (unsigned short A) -- Runtime Function: long long accum __satfractunshita (unsigned short A) -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned short A) -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short A) -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned short A) -- Runtime Function: unsigned long long fract __satfractunshiudq (unsigned short A) -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned short A) -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short A) -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned short A) -- Runtime Function: unsigned long long accum __satfractunshiuta (unsigned short A) -- Runtime Function: short fract __satfractunssiqq (unsigned int A) -- Runtime Function: fract __satfractunssihq (unsigned int A) -- Runtime Function: long fract __satfractunssisq (unsigned int A) -- Runtime Function: long long fract __satfractunssidq (unsigned int A) -- Runtime Function: short accum __satfractunssiha (unsigned int A) -- Runtime Function: accum __satfractunssisa (unsigned int A) -- Runtime Function: long accum __satfractunssida (unsigned int A) -- Runtime Function: long long accum __satfractunssita (unsigned int A) -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned int A) -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned int A) -- Runtime Function: unsigned long long fract __satfractunssiudq (unsigned int A) -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned int A) -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned int A) -- Runtime Function: unsigned long long accum __satfractunssiuta (unsigned int A) -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) -- Runtime Function: fract __satfractunsdihq (unsigned long A) -- Runtime Function: long fract __satfractunsdisq (unsigned long A) -- Runtime Function: long long fract __satfractunsdidq (unsigned long A) -- Runtime Function: short accum __satfractunsdiha (unsigned long A) -- Runtime Function: accum __satfractunsdisa (unsigned long A) -- Runtime Function: long accum __satfractunsdida (unsigned long A) -- Runtime Function: long long accum __satfractunsdita (unsigned long A) -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned long A) -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long A) -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned long A) -- Runtime Function: unsigned long long fract __satfractunsdiudq (unsigned long A) -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned long A) -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long A) -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned long A) -- Runtime Function: unsigned long long accum __satfractunsdiuta (unsigned long A) -- Runtime Function: short fract __satfractunstiqq (unsigned long long A) -- Runtime Function: fract __satfractunstihq (unsigned long long A) -- Runtime Function: long fract __satfractunstisq (unsigned long long A) -- Runtime Function: long long fract __satfractunstidq (unsigned long long A) -- Runtime Function: short accum __satfractunstiha (unsigned long long A) -- Runtime Function: accum __satfractunstisa (unsigned long long A) -- Runtime Function: long accum __satfractunstida (unsigned long long A) -- Runtime Function: long long accum __satfractunstita (unsigned long long A) -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned long long A) -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long long A) -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned long long A) -- Runtime Function: unsigned long long fract __satfractunstiudq (unsigned long long A) -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned long long A) -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long long A) -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned long long A) -- Runtime Function: unsigned long long accum __satfractunstiuta (unsigned long long A) These functions convert from unsigned non-fractionals to fractionals, with saturation.  File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 4.5 Language-independent routines for exception handling ======================================================== document me! _Unwind_DeleteException _Unwind_Find_FDE _Unwind_ForcedUnwind _Unwind_GetGR _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_GetRegionStart _Unwind_GetTextRelBase _Unwind_GetDataRelBase _Unwind_RaiseException _Unwind_Resume _Unwind_SetGR _Unwind_SetIP _Unwind_FindEnclosingFunction _Unwind_SjLj_Register _Unwind_SjLj_Unregister _Unwind_SjLj_RaiseException _Unwind_SjLj_ForcedUnwind _Unwind_SjLj_Resume __deregister_frame __deregister_frame_info __deregister_frame_info_bases __register_frame __register_frame_info __register_frame_info_bases __register_frame_info_table __register_frame_info_table_bases __register_frame_table  File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 4.6 Miscellaneous runtime library routines ========================================== 4.6.1 Cache control functions ----------------------------- -- Runtime Function: void __clear_cache (char *BEG, char *END) This function clears the instruction cache between BEG and END. 4.6.2 Split stack functions and variables ----------------------------------------- -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void **INITIAL_SP) When using ‘-fsplit-stack’, this call may be used to iterate over the stack segments. It may be called like this: void *next_segment = NULL; void *next_sp = NULL; void *initial_sp = NULL; void *stack; size_t stack_size; while ((stack = __splitstack_find (next_segment, next_sp, &stack_size, &next_segment, &next_sp, &initial_sp)) != NULL) { /* Stack segment starts at stack and is stack_size bytes long. */ } There is no way to iterate over the stack segments of a different thread. However, what is permitted is for one thread to call this with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, NEXT_SP, and INITIAL_SP to a different thread, and then to suspend one way or another. A different thread may run the subsequent ‘__splitstack_find’ iterations. Of course, this will only work if the first thread is suspended while the second thread is calling ‘__splitstack_find’. If not, the second thread could be looking at the stack while it is changing, and anything could happen. -- Variable: __morestack_segments -- Variable: __morestack_current_segment -- Variable: __morestack_initial_sp Internal variables used by the ‘-fsplit-stack’ implementation.  File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 5 Language Front Ends in GCC **************************** The interface to front ends for languages in GCC, and in particular the ‘tree’ structure (*note GENERIC::), was initially designed for C, and many aspects of it are still somewhat biased towards C and C-like languages. It is, however, reasonably well suited to other procedural languages, and front ends for many such languages have been written for GCC. Writing a compiler as a front end for GCC, rather than compiling directly to assembler or generating C code which is then compiled by GCC, has several advantages: • GCC front ends benefit from the support for many different target machines already present in GCC. • GCC front ends benefit from all the optimizations in GCC. Some of these, such as alias analysis, may work better when GCC is compiling directly from source code than when it is compiling from generated C code. • Better debugging information is generated when compiling directly from source code than when going via intermediate generated C code. Because of the advantages of writing a compiler as a GCC front end, GCC front ends have also been created for languages very different from those for which GCC was designed, such as the declarative logic/functional language Mercury. For these reasons, it may also be useful to implement compilers created for specialized purposes (for example, as part of a research project) as GCC front ends.  File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 6 Source Tree Structure and Build System **************************************** This chapter describes the structure of the GCC source tree, and how GCC is built. The user documentation for building and installing GCC is in a separate manual (), with which it is presumed that you are familiar. * Menu: * Configure Terms:: Configuration terminology and history. * Top Level:: The top level source directory. * gcc Directory:: The ‘gcc’ subdirectory.  File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 6.1 Configure Terms and History =============================== The configure and build process has a long and colorful history, and can be confusing to anyone who doesn't know why things are the way they are. While there are other documents which describe the configuration process in detail, here are a few things that everyone working on GCC should know. There are three system names that the build knows about: the machine you are building on (“build”), the machine that you are building for (“host”), and the machine that GCC will produce code for (“target”). When you configure GCC, you specify these with ‘--build=’, ‘--host=’, and ‘--target=’. Specifying the host without specifying the build should be avoided, as ‘configure’ may (and once did) assume that the host you specify is also the build, which may not be true. If build, host, and target are all the same, this is called a “native”. If build and host are the same but target is different, this is called a “cross”. If build, host, and target are all different this is called a “canadian” (for obscure reasons dealing with Canada's political party and the background of the person working on the build at that time). If host and target are the same, but build is different, you are using a cross-compiler to build a native for a different system. Some people call this a “host-x-host”, “crossed native”, or “cross-built native”. If build and target are the same, but host is different, you are using a cross compiler to build a cross compiler that produces code for the machine you're building on. This is rare, so there is no common way of describing it. There is a proposal to call this a “crossback”. If build and host are the same, the GCC you are building will also be used to build the target libraries (like ‘libstdc++’). If build and host are different, you must have already built and installed a cross compiler that will be used to build the target libraries (if you configured with ‘--target=foo-bar’, this compiler will be called ‘foo-bar-gcc’). In the case of target libraries, the machine you're building for is the machine you specified with ‘--target’. So, build is the machine you're building on (no change there), host is the machine you're building for (the target libraries are built for the target, so host is the target you specified), and target doesn't apply (because you're not building a compiler, you're building libraries). The configure/make process will adjust these variables as needed. It also sets ‘$with_cross_host’ to the original ‘--host’ value in case you need it. The ‘libiberty’ support library is built up to three times: once for the host, once for the target (even if they are the same), and once for the build if build and host are different. This allows it to be used by all programs which are generated in the course of the build process.  File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 6.2 Top Level Source Directory ============================== The top level source directory in a GCC distribution contains several files and directories that are shared with other software distributions such as that of GNU Binutils. It also contains several subdirectories that contain parts of GCC and its runtime libraries: ‘c++tools’ Contains the sources for the g++-mapper-server, a tool used with C++ modules. ‘config’ Autoconf macros and Makefile fragments used throughout the tree. ‘contrib’ Contributed scripts that may be found useful in conjunction with GCC. One of these, ‘contrib/texi2pod.pl’, is used to generate man pages from Texinfo manuals as part of the GCC build process. ‘fixincludes’ The support for fixing system headers to work with GCC. See ‘fixincludes/README’ for more information. The headers fixed by this mechanism are installed in ‘LIBSUBDIR/include-fixed’. Along with those headers, ‘README-fixinc’ is also installed, as ‘LIBSUBDIR/include-fixed/README’. ‘gcc’ The main sources of GCC itself (except for runtime libraries), including optimizers, support for different target architectures, language front ends, and testsuites. *Note The ‘gcc’ Subdirectory: gcc Directory, for details. ‘gnattools’ Support tools for GNAT. ‘gotools’ Support tools for Go. ‘include’ Headers for the ‘libiberty’ library. ‘intl’ GNU ‘libintl’, from GNU ‘gettext’, for systems which do not include it in ‘libc’. ‘libada’ The Ada runtime library. ‘libatomic’ The runtime support library for atomic operations (e.g. for ‘__sync’ and ‘__atomic’). ‘libbacktrace’ A library that allows GCC to produce backtraces when it crashes. ‘libcc1’ A library that allows GDB to make use of the compiler. ‘libcody’ A compiler dynamism library to allow communication between compilers and build systems, for purposes such as C++ modules. ‘libcpp’ The C preprocessor library. ‘libdecnumber’ The Decimal Float support library. ‘libffi’ The ‘libffi’ library, used as part of the Go runtime library. ‘libgcc’ The GCC runtime library. ‘libgfortran’ The Fortran runtime library. ‘libgm2’ The Modula-2 runtime library. ‘libgo’ The Go runtime library. The bulk of this library is mirrored from the master Go repository (https://github.com/golang/go). ‘libgomp’ The GNU Offloading and Multi Processing Runtime Library. ‘libiberty’ The ‘libiberty’ library, used for portability and for some generally useful data structures and algorithms. *Note Introduction: (libiberty)Top, for more information about this library. ‘libitm’ The runtime support library for transactional memory. ‘libobjc’ The Objective-C and Objective-C++ runtime library. ‘libphobos’ The D standard and runtime library. The bulk of this library is mirrored from the master D repositories (https://github.com/dlang). ‘libquadmath’ The runtime support library for quad-precision math operations. ‘libsanitizer’ Libraries for various sanitizers. The bulk of this directory is mirrored from the Google sanitizers repositories (https://github.com/google/sanitizers). ‘libssp’ The Stack protector runtime library. ‘libstdc++-v3’ The C++ runtime library. ‘libvtv’ The vtable verification library. ‘lto-plugin’ Plugin used by the linker if link-time optimizations are enabled. ‘maintainer-scripts’ Scripts used by the ‘gccadmin’ account on ‘gcc.gnu.org’. ‘zlib’ The ‘zlib’ compression library, used for compressing and uncompressing GCC's intermediate language in LTO object files. The build system in the top level directory, including how recursion into subdirectories works and how building runtime libraries for multilibs is handled, is documented in a separate manual, included with GNU Binutils.  File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 6.3 The ‘gcc’ Subdirectory ========================== The ‘gcc’ directory contains many files that are part of the C sources of GCC, other files used as part of the configuration and build process, and subdirectories including documentation and a testsuite. The files that are sources of GCC are documented in a separate chapter. *Note Passes and Files of the Compiler: Passes. * Menu: * Subdirectories:: Subdirectories of ‘gcc’. * Configuration:: The configuration process, and the files it uses. * Build:: The build system in the ‘gcc’ directory. * Makefile:: Targets in ‘gcc/Makefile’. * Library Files:: Library source files and headers under ‘gcc/’. * Headers:: Headers installed by GCC. * Documentation:: Building documentation in GCC. * Front End:: Anatomy of a language front end. * Back End:: Anatomy of a target back end.  File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 6.3.1 Subdirectories of ‘gcc’ ----------------------------- The ‘gcc’ directory contains the following subdirectories: ‘LANGUAGE’ Subdirectories for various languages. Directories containing a file ‘config-lang.in’ are language subdirectories. The contents of the subdirectories ‘c’ (for C), ‘cp’ (for C++), ‘m2’ (for Modula-2), ‘objc’ (for Objective-C), ‘objcp’ (for Objective-C++), and ‘lto’ (for LTO) are documented in this manual (*note Passes and Files of the Compiler: Passes.); those for other languages are not. *Note Anatomy of a Language Front End: Front End, for details of the files in these directories. ‘common’ Source files shared between the compiler drivers (such as ‘gcc’) and the compilers proper (such as ‘cc1’). If an architecture defines target hooks shared between those places, it also has a subdirectory in ‘common/config’. *Note Target Structure::. ‘config’ Configuration files for supported architectures and operating systems. *Note Anatomy of a Target Back End: Back End, for details of the files in this directory. ‘doc’ Texinfo documentation for GCC, together with automatically generated man pages and support for converting the installation manual to HTML. *Note Documentation::. ‘ginclude’ System headers installed by GCC, mainly those required by the C standard of freestanding implementations. *Note Headers Installed by GCC: Headers, for details of when these and other headers are installed. ‘po’ Message catalogs with translations of messages produced by GCC into various languages, ‘LANGUAGE.po’. This directory also contains ‘gcc.pot’, the template for these message catalogues, ‘exgettext’, a wrapper around ‘gettext’ to extract the messages from the GCC sources and create ‘gcc.pot’, which is run by ‘make gcc.pot’, and ‘EXCLUDES’, a list of files from which messages should not be extracted. ‘testsuite’ The GCC testsuites (except for those for runtime libraries). *Note Testsuites::.  File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 6.3.2 Configuration in the ‘gcc’ Directory ------------------------------------------ The ‘gcc’ directory is configured with an Autoconf-generated script ‘configure’. The ‘configure’ script is generated from ‘configure.ac’ and ‘aclocal.m4’. From the files ‘configure.ac’ and ‘acconfig.h’, Autoheader generates the file ‘config.in’. The file ‘cstamp-h.in’ is used as a timestamp. * Menu: * Config Fragments:: Scripts used by ‘configure’. * System Config:: The ‘config.build’, ‘config.host’, and ‘config.gcc’ files. * Configuration Files:: Files created by running ‘configure’.  File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 6.3.2.1 Scripts Used by ‘configure’ ................................... ‘configure’ uses some other scripts to help in its work: • The standard GNU ‘config.sub’ and ‘config.guess’ files, kept in the top level directory, are used. • The file ‘config.gcc’ is used to handle configuration specific to the particular target machine. The file ‘config.build’ is used to handle configuration specific to the particular build machine. The file ‘config.host’ is used to handle configuration specific to the particular host machine. (In general, these should only be used for features that cannot reasonably be tested in Autoconf feature tests.) *Note The ‘config.build’; ‘config.host’; and ‘config.gcc’ Files: System Config, for details of the contents of these files. • Each language subdirectory has a file ‘LANGUAGE/config-lang.in’ that is used for front-end-specific configuration. *Note The Front End ‘config-lang.in’ File: Front End Config, for details of this file. • A helper script ‘configure.frag’ is used as part of creating the output of ‘configure’.  File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 6.3.2.2 The ‘config.build’; ‘config.host’; and ‘config.gcc’ Files ................................................................. The ‘config.build’ file contains specific rules for particular systems which GCC is built on. This should be used as rarely as possible, as the behavior of the build system can always be detected by autoconf. The ‘config.host’ file contains specific rules for particular systems which GCC will run on. This is rarely needed. The ‘config.gcc’ file contains specific rules for particular systems which GCC will generate code for. This is usually needed. Each file has a list of the shell variables it sets, with descriptions, at the top of the file. FIXME: document the contents of these files, and what variables should be set to control build, host and target configuration.  File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 6.3.2.3 Files Created by ‘configure’ .................................... Here we spell out what files will be set up by ‘configure’ in the ‘gcc’ directory. Some other files are created as temporary files in the configuration process, and are not used in the subsequent build; these are not documented. • ‘Makefile’ is constructed from ‘Makefile.in’, together with the host and target fragments (*note Makefile Fragments: Fragments.) ‘t-TARGET’ and ‘x-HOST’ from ‘config’, if any, and language Makefile fragments ‘LANGUAGE/Make-lang.in’. • ‘auto-host.h’ contains information about the host machine determined by ‘configure’. If the host machine is different from the build machine, then ‘auto-build.h’ is also created, containing such information about the build machine. • ‘config.status’ is a script that may be run to recreate the current configuration. • ‘configargs.h’ is a header containing details of the arguments passed to ‘configure’ to configure GCC, and of the thread model used. • ‘cstamp-h’ is used as a timestamp. • If a language ‘config-lang.in’ file (*note The Front End ‘config-lang.in’ File: Front End Config.) sets ‘outputs’, then the files listed in ‘outputs’ there are also generated. The following configuration headers are created from the Makefile, using ‘mkconfig.sh’, rather than directly by ‘configure’. ‘config.h’, ‘bconfig.h’ and ‘tconfig.h’ all contain the ‘xm-MACHINE.h’ header, if any, appropriate to the host, build and target machines respectively, the configuration headers for the target, and some definitions; for the host and build machines, these include the autoconfigured headers generated by ‘configure’. The other configuration headers are determined by ‘config.gcc’. They also contain the typedefs for ‘rtx’, ‘rtvec’ and ‘tree’. • ‘config.h’, for use in programs that run on the host machine. • ‘bconfig.h’, for use in programs that run on the build machine. • ‘tconfig.h’, for use in programs and libraries for the target machine. • ‘tm_p.h’, which includes the header ‘MACHINE-protos.h’ that contains prototypes for functions in the target ‘MACHINE.c’ file. The ‘MACHINE-protos.h’ header is included after the ‘rtl.h’ and/or ‘tree.h’ would have been included. The ‘tm_p.h’ also includes the header ‘tm-preds.h’ which is generated by ‘genpreds’ program during the build to define the declarations and inline functions for the predicate functions.  File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 6.3.3 Build System in the ‘gcc’ Directory ----------------------------------------- FIXME: describe the build system, including what is built in what stages. Also list the various source files that are used in the build process but aren't source files of GCC itself and so aren't documented below (*note Passes::).  File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 6.3.4 Makefile Targets ---------------------- These targets are available from the ‘gcc’ directory: ‘all’ This is the default target. Depending on what your build/host/target configuration is, it coordinates all the things that need to be built. ‘doc’ Produce info-formatted documentation and man pages. Essentially it calls ‘make man’ and ‘make info’. ‘dvi’ Produce DVI-formatted documentation. ‘pdf’ Produce PDF-formatted documentation. ‘html’ Produce HTML-formatted documentation. ‘man’ Generate man pages. ‘info’ Generate info-formatted pages. ‘mostlyclean’ Delete the files made while building the compiler. ‘clean’ That, and all the other files built by ‘make all’. ‘distclean’ That, and all the files created by ‘configure’. ‘maintainer-clean’ Distclean plus any file that can be generated from other files. Note that additional tools may be required beyond what is normally needed to build GCC. ‘srcextra’ Generates files in the source directory that are not version-controlled but should go into a release tarball. ‘srcinfo’ ‘srcman’ Copies the info-formatted and manpage documentation into the source directory usually for the purpose of generating a release tarball. ‘install’ Installs GCC. ‘uninstall’ Deletes installed files, though this is not supported. ‘check’ Run the testsuite. This creates a ‘testsuite’ subdirectory that has various ‘.sum’ and ‘.log’ files containing the results of the testing. You can run subsets with, for example, ‘make check-gcc’. You can specify specific tests by setting ‘RUNTESTFLAGS’ to be the name of the ‘.exp’ file, optionally followed by (for some tests) an equals and a file wildcard, like: make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" Note that running the testsuite may require additional tools be installed, such as Tcl or DejaGnu. The toplevel tree from which you start GCC compilation is not the GCC directory, but rather a complex Makefile that coordinates the various steps of the build, including bootstrapping the compiler and using the new compiler to build target libraries. When GCC is configured for a native configuration, the default action for ‘make’ is to do a full three-stage bootstrap. This means that GCC is built three times--once with the native compiler, once with the native-built compiler it just built, and once with the compiler it built the second time. In theory, the last two should produce the same results, which ‘make compare’ can check. Each stage is configured separately and compiled into a separate directory, to minimize problems due to ABI incompatibilities between the native compiler and GCC. If you do a change, rebuilding will also start from the first stage and "bubble" up the change through the three stages. Each stage is taken from its build directory (if it had been built previously), rebuilt, and copied to its subdirectory. This will allow you to, for example, continue a bootstrap after fixing a bug which causes the stage2 build to crash. It does not provide as good coverage of the compiler as bootstrapping from scratch, but it ensures that the new code is syntactically correct (e.g., that you did not use GCC extensions by mistake), and avoids spurious bootstrap comparison failures(1). Other targets available from the top level include: ‘bootstrap-lean’ Like ‘bootstrap’, except that the various stages are removed once they're no longer needed. This saves disk space. ‘bootstrap2’ ‘bootstrap2-lean’ Performs only the first two stages of bootstrap. Unlike a three-stage bootstrap, this does not perform a comparison to test that the compiler is running properly. Note that the disk space required by a "lean" bootstrap is approximately independent of the number of stages. ‘stageN-bubble (N = 1...4, profile, feedback)’ Rebuild all the stages up to N, with the appropriate flags, "bubbling" the changes as described above. ‘all-stageN (N = 1...4, profile, feedback)’ Assuming that stage N has already been built, rebuild it with the appropriate flags. This is rarely needed. ‘cleanstrap’ Remove everything (‘make clean’) and rebuilds (‘make bootstrap’). ‘compare’ Compares the results of stages 2 and 3. This ensures that the compiler is running properly, since it should produce the same object files regardless of how it itself was compiled. ‘distclean-stageN (N = 1...4, profile, feedback)’ Wipe stage N and all the following ones. For example, ‘make distclean-stage3’ wipes stage 3 and all the following ones, so that another ‘make’ then rebuilds them from scratch. This can be useful if you're doing changes where "bubbling" the changes as described above is not sufficient, but a full ‘make restrap’ isn't necessary either. ‘profiledbootstrap’ Builds a compiler with profiling feedback information. In this case, the second and third stages are named ‘profile’ and ‘feedback’, respectively. For more information, see the installation instructions. ‘restrap’ Restart a bootstrap, so that everything that was not built with the system compiler is rebuilt. ‘stageN-start (N = 1...4, profile, feedback)’ For each package that is bootstrapped, rename directories so that, for example, ‘gcc’ points to the stageN GCC, compiled with the stageN-1 GCC(2). You will invoke this target if you need to test or debug the stageN GCC. If you only need to execute GCC (but you need not run ‘make’ either to rebuild it or to run test suites), you should be able to work directly in the ‘stageN-gcc’ directory. This makes it easier to debug multiple stages in parallel. ‘stage’ For each package that is bootstrapped, relocate its build directory to indicate its stage. For example, if the ‘gcc’ directory points to the stage2 GCC, after invoking this target it will be renamed to ‘stage2-gcc’. If you wish to use non-default GCC flags when compiling the stage2 and stage3 compilers, set ‘BOOT_CFLAGS’ on the command line when doing ‘make’. Usually, the first stage only builds the languages that the compiler is written in: typically, C and maybe Ada. If you are debugging a miscompilation of a different stage2 front-end (for example, of the Fortran front-end), you may want to have front-ends for other languages in the first stage as well. To do so, set ‘STAGE1_LANGUAGES’ on the command line when doing ‘make’. For example, in the aforementioned scenario of debugging a Fortran front-end miscompilation caused by the stage1 compiler, you may need a command like make stage2-bubble STAGE1_LANGUAGES=c,fortran Alternatively, you can use per-language targets to build and test languages that are not enabled by default in stage1. For example, ‘make f951’ will build a Fortran compiler even in the stage1 build directory. ---------- Footnotes ---------- (1) Except if the compiler was buggy and miscompiled some of the files that were not modified. In this case, it's best to use ‘make restrap’. (2) Customarily, the system compiler is also termed the ‘stage0’ GCC.  File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 6.3.5 Library Source Files and Headers under the ‘gcc’ Directory ---------------------------------------------------------------- FIXME: list here, with explanation, all the C source files and headers under the ‘gcc’ directory that aren't built into the GCC executable but rather are part of runtime libraries and object files, such as ‘crtstuff.c’ and ‘unwind-dw2.c’. *Note Headers Installed by GCC: Headers, for more information about the ‘ginclude’ directory.  File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 6.3.6 Headers Installed by GCC ------------------------------ In general, GCC expects the system C library to provide most of the headers to be used with it. However, GCC will fix those headers if necessary to make them work with GCC, and will install some headers required of freestanding implementations. These headers are installed in ‘LIBSUBDIR/include’. Headers for non-C runtime libraries are also installed by GCC; these are not documented here. (FIXME: document them somewhere.) Several of the headers GCC installs are in the ‘ginclude’ directory. These headers, ‘iso646.h’, ‘stdarg.h’, ‘stdbool.h’, and ‘stddef.h’, are installed in ‘LIBSUBDIR/include’, unless the target Makefile fragment (*note Target Fragment::) overrides this by setting ‘USER_H’. In addition to these headers and those generated by fixing system headers to work with GCC, some other headers may also be installed in ‘LIBSUBDIR/include’. ‘config.gcc’ may set ‘extra_headers’; this specifies additional headers under ‘config’ to be installed on some systems. GCC installs its own version of ‘’, from ‘ginclude/float.h’. This is done to cope with command-line options that change the representation of floating point numbers. GCC also installs its own version of ‘’; this is generated from ‘glimits.h’, together with ‘limitx.h’ and ‘limity.h’ if the system also has its own version of ‘’. (GCC provides its own header because it is required of ISO C freestanding implementations, but needs to include the system header from its own header as well because other standards such as POSIX specify additional values to be defined in ‘’.) The system's ‘’ header is used via ‘LIBSUBDIR/include/syslimits.h’, which is copied from ‘gsyslimits.h’ if it does not need fixing to work with GCC; if it needs fixing, ‘syslimits.h’ is the fixed copy. GCC can also install ‘’. It will do this when ‘config.gcc’ sets ‘use_gcc_tgmath’ to ‘yes’.  File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 6.3.7 Building Documentation ---------------------------- The main GCC documentation is in the form of manuals in Texinfo format. These are installed in Info format; DVI versions may be generated by ‘make dvi’, PDF versions by ‘make pdf’, and HTML versions by ‘make html’. In addition, some man pages are generated from the Texinfo manuals, there are some other text files with miscellaneous documentation, and runtime libraries have their own documentation outside the ‘gcc’ directory. FIXME: document the documentation for runtime libraries somewhere. * Menu: * Texinfo Manuals:: GCC manuals in Texinfo format. * Man Page Generation:: Generating man pages from Texinfo manuals. * Miscellaneous Docs:: Miscellaneous text files with documentation.  File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 6.3.7.1 Texinfo Manuals ....................... The manuals for GCC as a whole, and the C and C++ front ends, are in files ‘doc/*.texi’. Other front ends have their own manuals in files ‘LANGUAGE/*.texi’. Common files ‘doc/include/*.texi’ are provided which may be included in multiple manuals; the following files are in ‘doc/include’: ‘fdl.texi’ The GNU Free Documentation License. ‘funding.texi’ The section "Funding Free Software". ‘gcc-common.texi’ Common definitions for manuals. ‘gpl_v3.texi’ The GNU General Public License. ‘texinfo.tex’ A copy of ‘texinfo.tex’ known to work with the GCC manuals. DVI-formatted manuals are generated by ‘make dvi’, which uses ‘texi2dvi’ (via the Makefile macro ‘$(TEXI2DVI)’). PDF-formatted manuals are generated by ‘make pdf’, which uses ‘texi2pdf’ (via the Makefile macro ‘$(TEXI2PDF)’). HTML formatted manuals are generated by ‘make html’. Info manuals are generated by ‘make info’ (which is run as part of a bootstrap); this generates the manuals in the source directory, using ‘makeinfo’ via the Makefile macro ‘$(MAKEINFO)’, and they are included in release distributions. Manuals are also provided on the GCC web site, in both HTML and PostScript forms. This is done via the script ‘maintainer-scripts/update_web_docs_git’. Each manual to be provided online must be listed in the definition of ‘MANUALS’ in that file; a file ‘NAME.texi’ must only appear once in the source tree, and the output manual must have the same name as the source file. (However, other Texinfo files, included in manuals but not themselves the root files of manuals, may have names that appear more than once in the source tree.) The manual file ‘NAME.texi’ should only include other files in its own directory or in ‘doc/include’. HTML manuals will be generated by ‘makeinfo --html’, PostScript manuals by ‘texi2dvi’ and ‘dvips’, and PDF manuals by ‘texi2pdf’. All Texinfo files that are parts of manuals must be version-controlled, even if they are generated files, for the generation of online manuals to work. The installation manual, ‘doc/install.texi’, is also provided on the GCC web site. The HTML version is generated by the script ‘doc/install.texi2html’.  File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 6.3.7.2 Man Page Generation ........................... Because of user demand, in addition to full Texinfo manuals, man pages are provided which contain extracts from those manuals. These man pages are generated from the Texinfo manuals using ‘contrib/texi2pod.pl’ and ‘pod2man’. (The man page for ‘g++’, ‘cp/g++.1’, just contains a ‘.so’ reference to ‘gcc.1’, but all the other man pages are generated from Texinfo manuals.) Because many systems may not have the necessary tools installed to generate the man pages, they are only generated if the ‘configure’ script detects that recent enough tools are installed, and the Makefiles allow generating man pages to fail without aborting the build. Man pages are also included in release distributions. They are generated in the source directory. Magic comments in Texinfo files starting ‘@c man’ control what parts of a Texinfo file go into a man page. Only a subset of Texinfo is supported by ‘texi2pod.pl’, and it may be necessary to add support for more Texinfo features to this script when generating new man pages. To improve the man page output, some special Texinfo macros are provided in ‘doc/include/gcc-common.texi’ which ‘texi2pod.pl’ understands: ‘@gcctabopt’ Use in the form ‘@table @gcctabopt’ for tables of options, where for printed output the effect of ‘@code’ is better than that of ‘@option’ but for man page output a different effect is wanted. ‘@gccoptlist’ Use for summary lists of options in manuals. FIXME: describe the ‘texi2pod.pl’ input language and magic comments in more detail.  File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 6.3.7.3 Miscellaneous Documentation ................................... In addition to the formal documentation that is installed by GCC, there are several other text files in the ‘gcc’ subdirectory with miscellaneous documentation: ‘ABOUT-GCC-NLS’ Notes on GCC's Native Language Support. FIXME: this should be part of this manual rather than a separate file. ‘ABOUT-NLS’ Notes on the Free Translation Project. ‘COPYING’ ‘COPYING3’ The GNU General Public License, Versions 2 and 3. ‘COPYING.LIB’ ‘COPYING3.LIB’ The GNU Lesser General Public License, Versions 2.1 and 3. ‘*ChangeLog*’ ‘*/ChangeLog*’ Change log files for various parts of GCC. ‘LANGUAGES’ Details of a few changes to the GCC front-end interface. FIXME: the information in this file should be part of general documentation of the front-end interface in this manual. ‘ONEWS’ Information about new features in old versions of GCC. (For recent versions, the information is on the GCC web site.) ‘README.Portability’ Information about portability issues when writing code in GCC. FIXME: why isn't this part of this manual or of the GCC Coding Conventions? FIXME: document such files in subdirectories, at least ‘config’, ‘c’, ‘cp’, ‘objc’, ‘testsuite’.  File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 6.3.8 Anatomy of a Language Front End ------------------------------------- A front end for a language in GCC has the following parts: • A directory ‘LANGUAGE’ under ‘gcc’ containing source files for that front end. *Note The Front End ‘LANGUAGE’ Directory: Front End Directory, for details. • A mention of the language in the list of supported languages in ‘gcc/doc/install.texi’. • A mention of the name under which the language's runtime library is recognized by ‘--enable-shared=PACKAGE’ in the documentation of that option in ‘gcc/doc/install.texi’. • A mention of any special prerequisites for building the front end in the documentation of prerequisites in ‘gcc/doc/install.texi’. • Details of contributors to that front end in ‘gcc/doc/contrib.texi’. If the details are in that front end's own manual then there should be a link to that manual's list in ‘contrib.texi’. • Information about support for that language in ‘gcc/doc/frontends.texi’. • Information about standards for that language, and the front end's support for them, in ‘gcc/doc/standards.texi’. This may be a link to such information in the front end's own manual. • Details of source file suffixes for that language and ‘-x LANG’ options supported, in ‘gcc/doc/invoke.texi’. • Entries in ‘default_compilers’ in ‘gcc.cc’ for source file suffixes for that language. • Preferably testsuites, which may be under ‘gcc/testsuite’ or runtime library directories. FIXME: document somewhere how to write testsuite harnesses. • Probably a runtime library for the language, outside the ‘gcc’ directory. FIXME: document this further. • Details of the directories of any runtime libraries in ‘gcc/doc/sourcebuild.texi’. • Check targets in ‘Makefile.def’ for the top-level ‘Makefile’ to check just the compiler or the compiler and runtime library for the language. If the front end is added to the official GCC source repository, the following are also necessary: • At least one Bugzilla component for bugs in that front end and runtime libraries. This category needs to be added to the Bugzilla database. • Normally, one or more maintainers of that front end listed in ‘MAINTAINERS’. • Mentions on the GCC web site in ‘index.html’ and ‘frontends.html’, with any relevant links on ‘readings.html’. (Front ends that are not an official part of GCC may also be listed on ‘frontends.html’, with relevant links.) • A news item on ‘index.html’, and possibly an announcement on the mailing list. • The front end's manuals should be mentioned in ‘maintainer-scripts/update_web_docs_git’ (*note Texinfo Manuals::) and the online manuals should be linked to from ‘onlinedocs/index.html’. • If the front end has its own manual with its own index of options, the generated ‘Option-Index.html’ should be added to ‘PER_LANGUAGE_OPTION_INDEXES’ in ‘gcc/regenerate-opt-urls.py’ and to ‘OPT_URLS_HTML_DEPS’ in ‘gcc/Makefile.in’. • Any old releases or CVS repositories of the front end, before its inclusion in GCC, should be made available on the GCC web site at . • The release and snapshot script ‘maintainer-scripts/gcc_release’ should be updated to generate appropriate tarballs for this front end. • If this front end includes its own version files that include the current date, ‘maintainer-scripts/update_version’ should be updated accordingly. * Menu: * Front End Directory:: The front end ‘LANGUAGE’ directory. * Front End Config:: The front end ‘config-lang.in’ file. * Front End Makefile:: The front end ‘Make-lang.in’ file.  File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 6.3.8.1 The Front End ‘LANGUAGE’ Directory .......................................... A front end ‘LANGUAGE’ directory contains the source files of that front end (but not of any runtime libraries, which should be outside the ‘gcc’ directory). This includes documentation, and possibly some subsidiary programs built alongside the front end. Certain files are special and other parts of the compiler depend on their names: ‘config-lang.in’ This file is required in all language subdirectories. *Note The Front End ‘config-lang.in’ File: Front End Config, for details of its contents ‘Make-lang.in’ This file is required in all language subdirectories. *Note The Front End ‘Make-lang.in’ File: Front End Makefile, for details of its contents. ‘lang.opt’ This file registers the set of switches that the front end accepts on the command line, and their ‘--help’ text. *Note Options::. ‘lang-specs.h’ This file provides entries for ‘default_compilers’ in ‘gcc.cc’ which override the default of giving an error that a compiler for that language is not installed. ‘LANGUAGE-tree.def’ This file, which need not exist, defines any language-specific tree codes.  File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 6.3.8.2 The Front End ‘config-lang.in’ File ........................................... Each language subdirectory contains a ‘config-lang.in’ file. This file is a shell script that may define some variables describing the language: ‘language’ This definition must be present, and gives the name of the language for some purposes such as arguments to ‘--enable-languages’. ‘lang_requires’ If defined, this variable lists (space-separated) language front ends other than C that this front end requires to be enabled (with the names given being their ‘language’ settings). For example, the Obj-C++ front end depends on the C++ and ObjC front ends, so sets ‘lang_requires="objc c++"’. ‘subdir_requires’ If defined, this variable lists (space-separated) front end directories other than C that this front end requires to be present. For example, the Objective-C++ front end uses source files from the C++ and Objective-C front ends, so sets ‘subdir_requires="cp objc"’. ‘target_libs’ If defined, this variable lists (space-separated) targets in the top level ‘Makefile’ to build the runtime libraries for this language, such as ‘target-libobjc’. ‘lang_dirs’ If defined, this variable lists (space-separated) top level directories (parallel to ‘gcc’), apart from the runtime libraries, that should not be configured if this front end is not built. ‘build_by_default’ If defined to ‘no’, this language front end is not built unless enabled in a ‘--enable-languages’ argument. Otherwise, front ends are built by default, subject to any special logic in ‘configure.ac’ (as is present to disable the Ada front end if the Ada compiler is not already installed). ‘boot_language’ If defined to ‘yes’, this front end is built in stage1 of the bootstrap. This is only relevant to front ends written in their own languages. ‘compilers’ If defined, a space-separated list of compiler executables that will be run by the driver. The names here will each end with ‘\$(exeext)’. ‘outputs’ If defined, a space-separated list of files that should be generated by ‘configure’ substituting values in them. This mechanism can be used to create a file ‘LANGUAGE/Makefile’ from ‘LANGUAGE/Makefile.in’, but this is deprecated, building everything from the single ‘gcc/Makefile’ is preferred. ‘gtfiles’ If defined, a space-separated list of files that should be scanned by ‘gengtype.cc’ to generate the garbage collection tables and routines for this language. This excludes the files that are common to all front ends. *Note Type Information::.  File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 6.3.8.3 The Front End ‘Make-lang.in’ File ......................................... Each language subdirectory contains a ‘Make-lang.in’ file. It contains targets ‘LANG.HOOK’ (where ‘LANG’ is the setting of ‘language’ in ‘config-lang.in’) for the following values of ‘HOOK’, and any other Makefile rules required to build those targets (which may if necessary use other Makefiles specified in ‘outputs’ in ‘config-lang.in’, although this is deprecated). It also adds any testsuite targets that can use the standard rule in ‘gcc/Makefile.in’ to the variable ‘lang_checks’. ‘all.cross’ ‘start.encap’ ‘rest.encap’ FIXME: exactly what goes in each of these targets? ‘tags’ Build an ‘etags’ ‘TAGS’ file in the language subdirectory in the source tree. ‘info’ Build info documentation for the front end, in the build directory. This target is only called by ‘make bootstrap’ if a suitable version of ‘makeinfo’ is available, so does not need to check for this, and should fail if an error occurs. ‘dvi’ Build DVI documentation for the front end, in the build directory. This should be done using ‘$(TEXI2DVI)’, with appropriate ‘-I’ arguments pointing to directories of included files. ‘pdf’ Build PDF documentation for the front end, in the build directory. This should be done using ‘$(TEXI2PDF)’, with appropriate ‘-I’ arguments pointing to directories of included files. ‘html’ Build HTML documentation for the front end, in the build directory. ‘man’ Build generated man pages for the front end from Texinfo manuals (*note Man Page Generation::), in the build directory. This target is only called if the necessary tools are available, but should ignore errors so as not to stop the build if errors occur; man pages are optional and the tools involved may be installed in a broken way. ‘install-common’ Install everything that is part of the front end, apart from the compiler executables listed in ‘compilers’ in ‘config-lang.in’. ‘install-info’ Install info documentation for the front end, if it is present in the source directory. This target should have dependencies on info files that should be installed. ‘install-man’ Install man pages for the front end. This target should ignore errors. ‘install-plugin’ Install headers needed for plugins. ‘srcextra’ Copies its dependencies into the source directory. This generally should be used for generated files such as Bison output files which are not version-controlled, but should be included in any release tarballs. This target will be executed during a bootstrap if ‘--enable-generated-files-in-srcdir’ was specified as a ‘configure’ option. ‘srcinfo’ ‘srcman’ Copies its dependencies into the source directory. These targets will be executed during a bootstrap if ‘--enable-generated-files-in-srcdir’ was specified as a ‘configure’ option. ‘uninstall’ Uninstall files installed by installing the compiler. This is currently documented not to be supported, so the hook need not do anything. ‘mostlyclean’ ‘clean’ ‘distclean’ ‘maintainer-clean’ The language parts of the standard GNU ‘*clean’ targets. *Note Standard Targets for Users: (standards)Standard Targets, for details of the standard targets. For GCC, ‘maintainer-clean’ should delete all generated files in the source directory that are not version-controlled, but should not delete anything that is. ‘Make-lang.in’ must also define a variable ‘LANG_OBJS’ to a list of host object files that are used by that language.  File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 6.3.9 Anatomy of a Target Back End ---------------------------------- A back end for a target architecture in GCC has the following parts: • A directory ‘MACHINE’ under ‘gcc/config’, containing a machine description ‘MACHINE.md’ file (*note Machine Descriptions: Machine Desc.), header files ‘MACHINE.h’ and ‘MACHINE-protos.h’ and a source file ‘MACHINE.c’ (*note Target Description Macros and Functions: Target Macros.), possibly a target Makefile fragment ‘t-MACHINE’ (*note The Target Makefile Fragment: Target Fragment.), and maybe some other files. The names of these files may be changed from the defaults given by explicit specifications in ‘config.gcc’. • If necessary, a file ‘MACHINE-modes.def’ in the ‘MACHINE’ directory, containing additional machine modes to represent condition codes. *Note Condition Code::, for further details. • An optional ‘MACHINE.opt’ file in the ‘MACHINE’ directory, containing a list of target-specific options. You can also add other option files using the ‘extra_options’ variable in ‘config.gcc’. *Note Options::. • Entries in ‘config.gcc’ (*note The ‘config.gcc’ File: System Config.) for the systems with this target architecture. • Documentation in ‘gcc/doc/invoke.texi’ for any command-line options supported by this target (*note Run-time Target Specification: Run-time Target.). This means both entries in the summary table of options and details of the individual options. • An entry in ‘gcc/regenerate-opt-urls.py’'s TARGET_SPECIFIC_PAGES dictionary mapping from target-specific HTML documentation pages to the target specific source directory. • Documentation in ‘gcc/doc/extend.texi’ for any target-specific attributes supported (*note Defining target-specific uses of ‘__attribute__’: Target Attributes.), including where the same attribute is already supported on some targets, which are enumerated in the manual. • Documentation in ‘gcc/doc/extend.texi’ for any target-specific pragmas supported. • Documentation in ‘gcc/doc/extend.texi’ of any target-specific built-in functions supported. • Documentation in ‘gcc/doc/extend.texi’ of any target-specific format checking styles supported. • Documentation in ‘gcc/doc/md.texi’ of any target-specific constraint letters (*note Constraints for Particular Machines: Machine Constraints.). • A note in ‘gcc/doc/contrib.texi’ under the person or people who contributed the target support. • Entries in ‘gcc/doc/install.texi’ for all target triplets supported with this target architecture, giving details of any special notes about installation for this target, or saying that there are no special notes if there are none. • Possibly other support outside the ‘gcc’ directory for runtime libraries. FIXME: reference docs for this. The ‘libstdc++’ porting manual needs to be installed as info for this to work, or to be a chapter of this manual. The ‘MACHINE.h’ header is included very early in GCC's standard sequence of header files, while ‘MACHINE-protos.h’ is included late in the sequence. Thus ‘MACHINE-protos.h’ can include declarations referencing types that are not defined when ‘MACHINE.h’ is included, specifically including those from ‘rtl.h’ and ‘tree.h’. Since both RTL and tree types may not be available in every context where ‘MACHINE-protos.h’ is included, in this file you should guard declarations using these types inside appropriate ‘#ifdef RTX_CODE’ or ‘#ifdef TREE_CODE’ conditional code segments. If the backend uses shared data structures that require ‘GTY’ markers for garbage collection (*note Type Information::), you must declare those in ‘MACHINE.h’ rather than ‘MACHINE-protos.h’. Any definitions required for building libgcc must also go in ‘MACHINE.h’. GCC uses the macro ‘IN_TARGET_CODE’ to distinguish between machine-specific ‘.c’ and ‘.cc’ files and machine-independent ‘.c’ and ‘.cc’ files. Machine-specific files should use the directive: #define IN_TARGET_CODE 1 before including ‘config.h’. If the back end is added to the official GCC source repository, the following are also necessary: • An entry for the target architecture in ‘readings.html’ on the GCC web site, with any relevant links. • Details of the properties of the back end and target architecture in ‘backends.html’ on the GCC web site. • A news item about the contribution of support for that target architecture, in ‘index.html’ on the GCC web site. • Normally, one or more maintainers of that target listed in ‘MAINTAINERS’. Some existing architectures may be unmaintained, but it would be unusual to add support for a target that does not have a maintainer when support is added. • Target triplets covering all ‘config.gcc’ stanzas for the target, in the list in ‘contrib/config-list.mk’.  File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 7 Testsuites ************ GCC contains several testsuites to help maintain compiler quality. Most of the runtime libraries and language front ends in GCC have testsuites. Currently only the C language testsuites are documented here; FIXME: document the others. * Menu: * Test Idioms:: Idioms used in testsuite code. * Test Directives:: Directives used within DejaGnu tests. * Ada Tests:: The Ada language testsuites. * C Tests:: The C language testsuites. * LTO Testing:: Support for testing link-time optimizations. * gcov Testing:: Support for testing gcov. * profopt Testing:: Support for testing profile-directed optimizations. * compat Testing:: Support for testing binary compatibility. * Torture Tests:: Support for torture testing using multiple options. * GIMPLE Tests:: Support for testing GIMPLE passes. * RTL Tests:: Support for testing RTL passes.  File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 7.1 Idioms Used in Testsuite Code ================================= In general, C testcases have a trailing ‘-N.c’, starting with ‘-1.c’, in case other testcases with similar names are added later. If the test is a test of some well-defined feature, it should have a name referring to that feature such as ‘FEATURE-1.c’. If it does not test a well-defined feature but just happens to exercise a bug somewhere in the compiler, and a bug report has been filed for this bug in the GCC bug database, ‘prBUG-NUMBER-1.c’ is the appropriate form of name. Otherwise (for miscellaneous bugs not filed in the GCC bug database), and previously more generally, test cases are named after the date on which they were added. This allows people to tell at a glance whether a test failure is because of a recently found bug that has not yet been fixed, or whether it may be a regression, but does not give any other information about the bug or where discussion of it may be found. Some other language testsuites follow similar conventions. In the ‘gcc.dg’ testsuite, it is often necessary to test that an error is indeed a hard error and not just a warning--for example, where it is a constraint violation in the C standard, which must become an error with ‘-pedantic-errors’. The following idiom, where the first line shown is line LINE of the file and the line that generates the error, is used for this: /* { dg-bogus "warning" "warning in place of error" } */ /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ It may be necessary to check that an expression is an integer constant expression and has a certain value. To check that ‘E’ has value ‘V’, an idiom similar to the following is used: char x[((E) == (V) ? 1 : -1)]; In ‘gcc.dg’ tests, ‘__typeof__’ is sometimes used to make assertions about the types of expressions. See, for example, ‘gcc.dg/c99-condexpr-1.c’. The more subtle uses depend on the exact rules for the types of conditional expressions in the C standard; see, for example, ‘gcc.dg/c99-intconst-1.c’. It is useful to be able to test that optimizations are being made properly. This cannot be done in all cases, but it can be done where the optimization will lead to code being optimized away (for example, where flow analysis or alias analysis should show that certain code cannot be called) or to functions not being called because they have been expanded as built-in functions. Such tests go in ‘gcc.c-torture/execute’. Where code should be optimized away, a call to a nonexistent function such as ‘link_failure ()’ may be inserted; a definition #ifndef __OPTIMIZE__ void link_failure (void) { abort (); } #endif will also be needed so that linking still succeeds when the test is run without optimization. When all calls to a built-in function should have been optimized and no calls to the non-built-in version of the function should remain, that function may be defined as ‘static’ to call ‘abort ()’ (although redeclaring a function as static may not work on all targets). All testcases must be portable. Target-specific testcases must have appropriate code to avoid causing failures on unsupported systems; unfortunately, the mechanisms for this differ by directory. FIXME: discuss non-C testsuites here.  File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 7.2 Directives used within DejaGnu tests ======================================== * Menu: * Directives:: Syntax and descriptions of test directives. * Selectors:: Selecting targets to which a test applies. * Effective-Target Keywords:: Keywords describing target attributes. * Add Options:: Features for ‘dg-add-options’ * Require Support:: Variants of ‘dg-require-SUPPORT’ * Final Actions:: Commands for use in ‘dg-final’  File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 7.2.1 Syntax and Descriptions of test directives ------------------------------------------------ Test directives appear within comments in a test source file and begin with ‘dg-’. Some of these are defined within DejaGnu and others are local to the GCC testsuite. The order in which test directives appear in a test can be important: directives local to GCC sometimes override information used by the DejaGnu directives, which know nothing about the GCC directives, so the DejaGnu directives must precede GCC directives. Several test directives include selectors (*note Selectors::) which are usually preceded by the keyword ‘target’ or ‘xfail’. 7.2.1.1 Specify how to build the test ..................................... ‘{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }’ DO-WHAT-KEYWORD specifies how the test is compiled and whether it is executed. It is one of: ‘preprocess’ Compile with ‘-E’ to run only the preprocessor. ‘compile’ Compile with ‘-S’ to produce an assembly code file. ‘assemble’ Compile with ‘-c’ to produce a relocatable object file. ‘link’ Compile, assemble, and link to produce an executable file. ‘run’ Produce and run an executable file, which is expected to return an exit code of 0. The default is ‘compile’. That can be overridden for a set of tests by redefining ‘dg-do-what-default’ within the ‘.exp’ file for those tests. If the directive includes the optional ‘{ target SELECTOR }’ then the test is skipped unless the target system matches the SELECTOR. If DO-WHAT-KEYWORD is ‘run’ and the directive includes the optional ‘{ xfail SELECTOR }’ and the selector is met then the test is expected to fail. The ‘xfail’ clause is ignored for other values of DO-WHAT-KEYWORD; those tests can use directive ‘dg-xfail-if’. 7.2.1.2 Specify additional compiler options ........................................... ‘{ dg-options OPTIONS [{ target SELECTOR }] }’ This DejaGnu directive provides a list of compiler options, to be used if the target system matches SELECTOR, that replace the default options used for this set of tests. ‘{ dg-add-options FEATURE ... }’ Add any compiler options that are needed to access certain features. This directive does nothing on targets that enable the features by default, or that don't provide them at all. It must come after all ‘dg-options’ directives. For supported values of FEATURE see *note Add Options::. ‘{ dg-additional-options OPTIONS [{ target SELECTOR }] }’ This directive provides a list of compiler options, to be used if the target system matches SELECTOR, that are added to the default options used for this set of tests. 7.2.1.3 Modify the test timeout value ..................................... The normal timeout limit, in seconds, is found by searching the following in order: • the value defined by an earlier ‘dg-timeout’ directive in the test • variable TOOL_TIMEOUT defined by the set of tests • GCC,TIMEOUT set in the target board • 300 ‘{ dg-timeout N [{target SELECTOR }] }’ Set the time limit for the compilation and for the execution of the test to the specified number of seconds. ‘{ dg-timeout-factor X [{ target SELECTOR }] }’ Multiply the normal time limit for compilation and execution of the test by the specified floating-point factor. 7.2.1.4 Skip a test for some targets .................................... ‘{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’ Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each element is a string of zero or more GCC options. Skip the test if all of the following conditions are met: • the test system is included in SELECTOR • for at least one of the option strings in INCLUDE-OPTS, every option from that string is in the set of options with which the test would be compiled; use ‘"*"’ for an INCLUDE-OPTS list that matches any options; that is the default if INCLUDE-OPTS is not specified • for each of the option strings in EXCLUDE-OPTS, at least one option from that string is not in the set of options with which the test would be compiled; use ‘""’ for an empty EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not specified For example, to skip a test if option ‘-Os’ is present: /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ To skip a test if both options ‘-O2’ and ‘-g’ are present: /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ To skip a test if either ‘-O2’ or ‘-O3’ is present: /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ To skip a test unless option ‘-Os’ is present: /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ To skip a test if either ‘-O2’ or ‘-O3’ is used with ‘-g’ but not if ‘-fpic’ is also present: /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ ‘{ dg-require-effective-target KEYWORD [{ target SELECTOR }] }’ Skip the test if the test target, including current multilib flags, is not covered by the effective-target keyword. If the directive includes the optional ‘{ SELECTOR }’ then the effective-target test is only performed if the target system matches the SELECTOR. This directive must appear after any ‘dg-do’ directive in the test and before any ‘dg-additional-sources’ directive. *Note Effective-Target Keywords::. ‘{ dg-require-SUPPORT args }’ Skip the test if the target does not provide the required support. These directives must appear after any ‘dg-do’ directive in the test and before any ‘dg-additional-sources’ directive. They require at least one argument, which can be an empty string if the specific procedure does not examine the argument. *Note Require Support::, for a complete list of these directives. 7.2.1.5 Expect a test to fail for some targets .............................................. ‘{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’ Expect the test to fail if the conditions (which are the same as for ‘dg-skip-if’) are met. This does not affect the execute step. ‘{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }’ Expect the execute step of a test to fail if the conditions (which are the same as for ‘dg-skip-if’) are met. 7.2.1.6 Expect the compiler to crash .................................... ‘{ dg-ice COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }’ Expect the compiler to crash with an internal compiler error and return a nonzero exit status if the conditions (which are the same as for ‘dg-skip-if’) are met. Used for tests that test bugs that have not been fixed yet. 7.2.1.7 Expect the test executable to fail .......................................... ‘{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }’ Expect the test executable to return a nonzero exit status if the conditions (which are the same as for ‘dg-skip-if’) are met. 7.2.1.8 Verify compiler messages ................................ Where LINE is an accepted argument for these commands, a value of ‘0’ can be used if there is no line associated with the message. ‘{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’ This DejaGnu directive appears on a source line that is expected to get an error message, or else specifies the source line associated with the message. If there is no message for that line or if the text of that message is not matched by REGEXP then the check fails and COMMENT is included in the ‘FAIL’ message. The check does not look for the string ‘error’ unless it is part of REGEXP. ‘{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’ This DejaGnu directive appears on a source line that is expected to get a warning message, or else specifies the source line associated with the message. If there is no message for that line or if the text of that message is not matched by REGEXP then the check fails and COMMENT is included in the ‘FAIL’ message. The check does not look for the string ‘warning’ unless it is part of REGEXP. ‘{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’ The line is expected to get a message other than an error or warning. If there is no message for that line or if the text of that message is not matched by REGEXP then the check fails and COMMENT is included in the ‘FAIL’ message. ‘{ dg-note REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’ The line is expected to get a ‘note’ message. If there is no message for that line or if the text of that message is not matched by REGEXP then the check fails and COMMENT is included in the ‘FAIL’ message. By default, any _excess_ ‘note’ messages are pruned, meaning their appearance doesn't trigger _excess errors_. However, if ‘dg-note’ is used at least once in a testcase, they're not pruned and instead must _all_ be handled explicitly. Thus, if looking for just single instances of messages with ‘note: ’ prefixes without caring for all of them, use ‘dg-message "note: [...]"’ instead of ‘dg-note’, or use ‘dg-note’ together with ‘dg-prune-output "note: "’. ‘{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }’ This DejaGnu directive appears on a source line that should not get a message matching REGEXP, or else specifies the source line associated with the bogus message. It is usually used with ‘xfail’ to indicate that the message is a known problem for a particular set of targets. ‘{ dg-line LINENUMVAR }’ This DejaGnu directive sets the variable LINENUMVAR to the line number of the source line. The variable LINENUMVAR can then be used in subsequent ‘dg-error’, ‘dg-warning’, ‘dg-message’, ‘dg-note’ and ‘dg-bogus’ directives. For example: int a; /* { dg-line first_def_a } */ float a; /* { dg-error "conflicting types of" } */ /* { dg-message "previous declaration of" "" { target *-*-* } first_def_a } */ ‘{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }’ This DejaGnu directive indicates that the test is expected to fail due to compiler messages that are not handled by ‘dg-error’, ‘dg-warning’, ‘dg-message’, ‘dg-note’ or ‘dg-bogus’. For this directive ‘xfail’ has the same effect as ‘target’. ‘{ dg-prune-output REGEXP }’ Prune messages matching REGEXP from the test output. 7.2.1.9 Verify output of the test executable ............................................ ‘{ dg-output REGEXP [{ target/xfail SELECTOR }] }’ This DejaGnu directive compares REGEXP to the combined output that the test executable writes to ‘stdout’ and ‘stderr’. 7.2.1.10 Specify environment variables for a test ................................................. ‘{ dg-set-compiler-env-var VAR_NAME "VAR_VALUE" }’ Specify that the environment variable VAR_NAME needs to be set to VAR_VALUE before invoking the compiler on the test file. ‘{ dg-set-target-env-var VAR_NAME "VAR_VALUE" }’ Specify that the environment variable VAR_NAME needs to be set to VAR_VALUE before execution of the program created by the test. 7.2.1.11 Specify additional files for a test ............................................ ‘{ dg-additional-files "FILELIST" }’ Specify additional files, other than source files, that must be copied to the system where the compiler runs. ‘{ dg-additional-sources "FILELIST" }’ Specify additional source files to appear in the compile line following the main test file. 7.2.1.12 Add checks at the end of a test ........................................ ‘{ dg-final { LOCAL-DIRECTIVE } }’ This DejaGnu directive is placed within a comment anywhere in the source file and is processed after the test has been compiled and run. Multiple ‘dg-final’ commands are processed in the order in which they appear in the source file. *Note Final Actions::, for a list of directives that can be used within ‘dg-final’.  File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 7.2.2 Selecting targets to which a test applies ----------------------------------------------- Several test directives include SELECTORs to limit the targets for which a test is run or to declare that a test is expected to fail on particular targets. A selector is: • one or more target triplets, possibly including wildcard characters; use ‘*-*-*’ to match any target • a single effective-target keyword (*note Effective-Target Keywords::) • a list of compiler options that should be included or excluded (as described in more detail below) • a logical expression Depending on the context, the selector specifies whether a test is skipped and reported as unsupported or is expected to fail. A context that allows either ‘target’ or ‘xfail’ also allows ‘{ target SELECTOR1 xfail SELECTOR2 }’ to skip the test for targets that don't match SELECTOR1 and the test to fail for targets that match SELECTOR2. A selector expression appears within curly braces and uses a single logical operator: one of ‘!’, ‘&&’, or ‘||’. An operand is one of the following: • another selector expression, in curly braces • an effective-target keyword, such as ‘lp64’ • a single target triplet • a list of target triplets within quotes or curly braces • one of the following: ‘{ any-opts OPT1 ... OPTN }’ Each of OPT1 to OPTN is a space-separated list of option globs. The selector expression evaluates to true if, for one of these strings, every glob in the string matches an option that was passed to the compiler. For example: { any-opts "-O3 -flto" "-O[2g]" } is true if any of the following are true: • ‘-O2’ was passed to the compiler • ‘-Og’ was passed to the compiler • both ‘-O3’ and ‘-flto’ were passed to the compiler This kind of selector can only be used within ‘dg-final’ directives. Use ‘dg-skip-if’, ‘dg-xfail-if’ or ‘dg-xfail-run-if’ to skip whole tests based on options, or to mark them as expected to fail with certain options. ‘{ no-opts OPT1 ... OPTN }’ As for ‘any-opts’ above, each of OPT1 to OPTN is a space-separated list of option globs. The selector expression evaluates to true if, for all of these strings, there is at least one glob that does not match an option that was passed to the compiler. It is shorthand for: { ! { any-opts OPT1 ... OPTN } } For example: { no-opts "-O3 -flto" "-O[2g]" } is true if all of the following are true: • ‘-O2’ was not passed to the compiler • ‘-Og’ was not passed to the compiler • at least one of ‘-O3’ or ‘-flto’ was not passed to the compiler Like ‘any-opts’, this kind of selector can only be used within ‘dg-final’ directives. Here are some examples of full target selectors: { target { ! "hppa*-*-* ia64*-*-*" } } { target { powerpc*-*-* && lp64 } } { xfail { lp64 || vect_no_align } } { xfail { aarch64*-*-* && { any-opts "-O2" } } }  File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 7.2.3 Keywords describing target attributes ------------------------------------------- Effective-target keywords identify sets of targets that support particular functionality. They are used to limit tests to be run only for particular targets, or to specify that particular sets of targets are expected to fail some tests. Effective-target keywords are defined in ‘lib/target-supports.exp’ in the GCC testsuite, with the exception of those that are documented as being local to a particular test directory. The ‘effective target’ takes into account all of the compiler options with which the test will be compiled, including the multilib options. By convention, keywords ending in ‘_nocache’ can also include options specified for the particular test in an earlier ‘dg-options’ or ‘dg-add-options’ directive. 7.2.3.1 Endianness .................. ‘be’ Target uses big-endian memory order for multi-byte and multi-word data. ‘le’ Target uses little-endian memory order for multi-byte and multi-word data. 7.2.3.2 Data type sizes ....................... ‘ilp32’ Target has 32-bit ‘int’, ‘long’, and pointers. ‘lp64’ Target has 32-bit ‘int’, 64-bit ‘long’ and pointers. ‘llp64’ Target has 32-bit ‘int’ and ‘long’, 64-bit ‘long long’ and pointers. ‘double64’ Target has 64-bit ‘double’. ‘double64plus’ Target has ‘double’ that is 64 bits or longer. ‘longdouble128’ Target has 128-bit ‘long double’. ‘int32plus’ Target has ‘int’ that is at 32 bits or longer. ‘int16’ Target has ‘int’ that is 16 bits or shorter. ‘longlong64’ Target has 64-bit ‘long long’. ‘long_neq_int’ Target has ‘int’ and ‘long’ with different sizes. ‘short_eq_int’ Target has ‘short’ and ‘int’ with the same size. ‘ptr_eq_short’ Target has pointers (‘void *’) and ‘short’ with the same size. ‘int_eq_float’ Target has ‘int’ and ‘float’ with the same size. ‘ptr_eq_long’ Target has pointers (‘void *’) and ‘long’ with the same size. ‘large_double’ Target supports ‘double’ that is longer than ‘float’. ‘large_long_double’ Target supports ‘long double’ that is longer than ‘double’. ‘ptr32plus’ Target has pointers that are 32 bits or longer. ‘size20plus’ Target has a 20-bit or larger address space, so supports at least 16-bit array and structure sizes. ‘size24plus’ Target has a 24-bit or larger address space, so supports at least 20-bit array and structure sizes. ‘size32plus’ Target has a 32-bit or larger address space, so supports at least 24-bit array and structure sizes. ‘4byte_wchar_t’ Target has ‘wchar_t’ that is at least 4 bytes. ‘floatN’ Target has the ‘_FloatN’ type. ‘floatNx’ Target has the ‘_FloatNx’ type. ‘floatN_runtime’ Target has the ‘_FloatN’ type, including runtime support for any options added with ‘dg-add-options’. ‘floatNx_runtime’ Target has the ‘_FloatNx’ type, including runtime support for any options added with ‘dg-add-options’. ‘floatn_nx_runtime’ Target has runtime support for any options added with ‘dg-add-options’ for any ‘_FloatN’ or ‘_FloatNx’ type. ‘inf’ Target supports floating point infinite (‘inf’) for type ‘double’. ‘inff’ Target supports floating point infinite (‘inf’) for type ‘float’. 7.2.3.3 Fortran-specific attributes ................................... ‘fortran_integer_16’ Target supports Fortran ‘integer’ that is 16 bytes or longer. ‘fortran_real_10’ Target supports Fortran ‘real’ that is 10 bytes or longer. ‘fortran_real_16’ Target supports Fortran ‘real’ that is 16 bytes or longer. ‘fortran_large_int’ Target supports Fortran ‘integer’ kinds larger than ‘integer(8)’. ‘fortran_large_real’ Target supports Fortran ‘real’ kinds larger than ‘real(8)’. 7.2.3.4 Vector-specific attributes .................................. ‘vect_align_stack_vars’ The target's ABI allows stack variables to be aligned to the preferred vector alignment. ‘vect_avg_qi’ Target supports both signed and unsigned averaging operations on vectors of bytes. ‘vect_mulhrs_hi’ Target supports both signed and unsigned multiply-high-with-round-and-scale operations on vectors of half-words. ‘vect_sdiv_pow2_si’ Target supports signed division by constant power-of-2 operations on vectors of 4-byte integers. ‘vect_condition’ Target supports vector conditional operations. ‘vect_cond_mixed’ Target supports vector conditional operations where comparison operands have different type from the value operands. ‘vect_double’ Target supports hardware vectors of ‘double’. ‘vect_double_cond_arith’ Target supports conditional addition, subtraction, multiplication, division, minimum and maximum on vectors of ‘double’, via the ‘cond_’ optabs. ‘vect_element_align_preferred’ The target's preferred vector alignment is the same as the element alignment. ‘vect_float’ Target supports hardware vectors of ‘float’ when ‘-funsafe-math-optimizations’ is in effect. ‘vect_float_strict’ Target supports hardware vectors of ‘float’ when ‘-funsafe-math-optimizations’ is not in effect. This implies ‘vect_float’. ‘vect_early_break’ Target supports vectorization codegen of loops with early breaks. This requires an implementation of the cbranch optab for vectors. ‘vect_early_break_hw’ Target supports hardware vectorization and running of loops with early breaks. This requires an implementation of the cbranch optab for vectors. ‘vect_int’ Target supports hardware vectors of ‘int’. ‘vect_long’ Target supports hardware vectors of ‘long’. ‘vect_long_long’ Target supports hardware vectors of ‘long long’. ‘vect_check_ptrs’ Target supports the ‘check_raw_ptrs’ and ‘check_war_ptrs’ optabs on vectors. ‘vect_fully_masked’ Target supports fully-masked (also known as fully-predicated) loops, so that vector loops can handle partial as well as full vectors. ‘vect_masked_load’ Target supports vector masked loads. ‘vect_masked_store’ Target supports vector masked stores. ‘vect_gather_load_ifn’ Target supports vector gather loads using internal functions (rather than via built-in functions or emulation). ‘vect_scatter_store’ Target supports vector scatter stores. ‘vect_aligned_arrays’ Target aligns arrays to vector alignment boundary. ‘vect_hw_misalign’ Target supports a vector misalign access. ‘vect_no_align’ Target does not support a vector alignment mechanism. ‘vect_peeling_profitable’ Target might require to peel loops for alignment purposes. ‘vect_no_int_min_max’ Target does not support a vector min and max instruction on ‘int’. ‘vect_no_int_add’ Target does not support a vector add instruction on ‘int’. ‘vect_no_bitwise’ Target does not support vector bitwise instructions. ‘vect_bool_cmp’ Target supports comparison of ‘bool’ vectors for at least one vector length. ‘vect_char_add’ Target supports addition of ‘char’ vectors for at least one vector length. ‘vect_char_mult’ Target supports ‘vector char’ multiplication. ‘vect_short_mult’ Target supports ‘vector short’ multiplication. ‘vect_int_mult’ Target supports ‘vector int’ multiplication. ‘vect_long_mult’ Target supports 64 bit ‘vector long’ multiplication. ‘vect_extract_even_odd’ Target supports vector even/odd element extraction. ‘vect_extract_even_odd_wide’ Target supports vector even/odd element extraction of vectors with elements ‘SImode’ or larger. ‘vect_interleave’ Target supports vector interleaving. ‘vect_strided’ Target supports vector interleaving and extract even/odd. ‘vect_strided_wide’ Target supports vector interleaving and extract even/odd for wide element types. ‘vect_perm’ Target supports vector permutation. ‘vect_perm_byte’ Target supports permutation of vectors with 8-bit elements. ‘vect_perm_short’ Target supports permutation of vectors with 16-bit elements. ‘vect_perm3_byte’ Target supports permutation of vectors with 8-bit elements, and for the default vector length it is possible to permute: { a0, a1, a2, b0, b1, b2, ... } to: { a0, a0, a0, b0, b0, b0, ... } { a1, a1, a1, b1, b1, b1, ... } { a2, a2, a2, b2, b2, b2, ... } using only two-vector permutes, regardless of how long the sequence is. ‘vect_perm3_int’ Like ‘vect_perm3_byte’, but for 32-bit elements. ‘vect_perm3_short’ Like ‘vect_perm3_byte’, but for 16-bit elements. ‘vect_shift’ Target supports a hardware vector shift operation. ‘vect_unaligned_possible’ Target prefers vectors to have an alignment greater than element alignment, but also allows unaligned vector accesses in some circumstances. ‘vect_variable_length’ Target has variable-length vectors. ‘vect64’ Target supports vectors of 64 bits. ‘vect32’ Target supports vectors of 32 bits. ‘vect_widen_sum_hi_to_si’ Target supports a vector widening summation of ‘short’ operands into ‘int’ results, or can promote (unpack) from ‘short’ to ‘int’. ‘vect_widen_sum_qi_to_hi’ Target supports a vector widening summation of ‘char’ operands into ‘short’ results, or can promote (unpack) from ‘char’ to ‘short’. ‘vect_widen_sum_qi_to_si’ Target supports a vector widening summation of ‘char’ operands into ‘int’ results. ‘vect_widen_mult_qi_to_hi’ Target supports a vector widening multiplication of ‘char’ operands into ‘short’ results, or can promote (unpack) from ‘char’ to ‘short’ and perform non-widening multiplication of ‘short’. ‘vect_widen_mult_hi_to_si’ Target supports a vector widening multiplication of ‘short’ operands into ‘int’ results, or can promote (unpack) from ‘short’ to ‘int’ and perform non-widening multiplication of ‘int’. ‘vect_widen_mult_si_to_di_pattern’ Target supports a vector widening multiplication of ‘int’ operands into ‘long’ results. ‘vect_sdot_qi’ Target supports a vector dot-product of ‘signed char’. ‘vect_udot_qi’ Target supports a vector dot-product of ‘unsigned char’. ‘vect_usdot_qi’ Target supports a vector dot-product where one operand of the multiply is ‘signed char’ and the other of ‘unsigned char’. ‘vect_sdot_hi’ Target supports a vector dot-product of ‘signed short’. ‘vect_udot_hi’ Target supports a vector dot-product of ‘unsigned short’. ‘vect_pack_trunc’ Target supports a vector demotion (packing) of ‘short’ to ‘char’ and from ‘int’ to ‘short’ using modulo arithmetic. ‘vect_unpack’ Target supports a vector promotion (unpacking) of ‘char’ to ‘short’ and from ‘char’ to ‘int’. ‘vect_intfloat_cvt’ Target supports conversion from ‘signed int’ to ‘float’. ‘vect_uintfloat_cvt’ Target supports conversion from ‘unsigned int’ to ‘float’. ‘vect_floatint_cvt’ Target supports conversion from ‘float’ to ‘signed int’. ‘vect_floatuint_cvt’ Target supports conversion from ‘float’ to ‘unsigned int’. ‘vect_intdouble_cvt’ Target supports conversion from ‘signed int’ to ‘double’. ‘vect_doubleint_cvt’ Target supports conversion from ‘double’ to ‘signed int’. ‘vect_max_reduc’ Target supports max reduction for vectors. ‘vect_sizes_16B_8B’ Target supports 16- and 8-bytes vectors. ‘vect_sizes_32B_16B’ Target supports 32- and 16-bytes vectors. ‘vect_logical_reduc’ Target supports AND, IOR and XOR reduction on vectors. ‘vect_fold_extract_last’ Target supports the ‘fold_extract_last’ optab. ‘vect_len_load_store’ Target supports the ‘len_load’ and ‘len_store’ optabs. ‘vect_partial_vectors_usage_1’ Target supports loop vectorization with partial vectors and ‘vect-partial-vector-usage’ is set to 1. ‘vect_partial_vectors_usage_2’ Target supports loop vectorization with partial vectors and ‘vect-partial-vector-usage’ is set to 2. ‘vect_partial_vectors’ Target supports loop vectorization with partial vectors and ‘vect-partial-vector-usage’ is nonzero. ‘vect_slp_v2qi_store_align’ Target supports vectorization of 2-byte char stores with 2-byte aligned address at plain ‘-O2’. ‘vect_slp_v4qi_store_align’ Target supports vectorization of 4-byte char stores with 4-byte aligned address at plain ‘-O2’. ‘vect_slp_v4qi_store_unalign’ Target supports vectorization of 4-byte char stores with unaligned address at plain ‘-O2’. ‘struct_4char_block_move’ Target supports block move for 8-byte aligned 4-byte size struct initialization. ‘vect_slp_v4qi_store_unalign_1’ Target supports vectorization of 4-byte char stores with unaligned address or store them with constant pool at plain ‘-O2’. ‘struct_8char_block_move’ Target supports block move for 8-byte aligned 8-byte size struct initialization. ‘vect_slp_v8qi_store_unalign_1’ Target supports vectorization of 8-byte char stores with unaligned address or store them with constant pool at plain ‘-O2’. ‘struct_16char_block_move’ Target supports block move for 8-byte aligned 16-byte size struct initialization. ‘vect_slp_v16qi_store_unalign_1’ Target supports vectorization of 16-byte char stores with unaligned address or store them with constant pool at plain ‘-O2’. ‘vect_slp_v2hi_store_align’ Target supports vectorization of 4-byte short stores with 4-byte aligned addressat plain ‘-O2’. ‘vect_slp_v2hi_store_unalign’ Target supports vectorization of 4-byte short stores with unaligned address at plain ‘-O2’. ‘vect_slp_v4hi_store_unalign’ Target supports vectorization of 8-byte short stores with unaligned address at plain ‘-O2’. ‘vect_slp_v2si_store_align’ Target supports vectorization of 8-byte int stores with 8-byte aligned address at plain ‘-O2’. ‘vect_slp_v4si_store_unalign’ Target supports vectorization of 16-byte int stores with unaligned address at plain ‘-O2’. 7.2.3.5 Thread Local Storage attributes ....................................... ‘tls’ Target supports thread-local storage. ‘tls_native’ Target supports native (rather than emulated) thread-local storage. ‘tls_runtime’ Test system supports executing TLS executables. 7.2.3.6 Decimal floating point attributes ......................................... ‘dfp’ Targets supports compiling decimal floating point extension to C. ‘dfp_nocache’ Including the options used to compile this particular test, the target supports compiling decimal floating point extension to C. ‘dfprt’ Test system can execute decimal floating point tests. ‘dfprt_nocache’ Including the options used to compile this particular test, the test system can execute decimal floating point tests. ‘hard_dfp’ Target generates decimal floating point instructions with current options. ‘dfp_bid’ Target uses the BID format for decimal floating point. 7.2.3.7 ARM-specific attributes ............................... ‘arm32’ ARM target generates 32-bit code. ‘arm_little_endian’ ARM target that generates little-endian code. ‘arm_eabi’ ARM target adheres to the ABI for the ARM Architecture. ‘arm_fp_ok’ ARM target defines ‘__ARM_FP’ using ‘-mfloat-abi=softfp’ or equivalent options. Some multilibs may be incompatible with these options. ‘arm_fp_dp_ok’ ARM target defines ‘__ARM_FP’ with double-precision support using ‘-mfloat-abi=softfp’ or equivalent options. Some multilibs may be incompatible with these options. ‘arm_hf_eabi’ ARM target adheres to the VFP and Advanced SIMD Register Arguments variant of the ABI for the ARM Architecture (as selected with ‘-mfloat-abi=hard’). ‘arm_softfloat’ ARM target uses emulated floating point operations. ‘arm_hard_vfp_ok’ ARM target supports ‘-mfpu=vfp -mfloat-abi=hard’. Some multilibs may be incompatible with these options. ‘arm_iwmmxt_ok’ ARM target supports ‘-mcpu=iwmmxt’. Some multilibs may be incompatible with this option. ‘arm_neon’ ARM target supports generating NEON instructions. ‘arm_tune_string_ops_prefer_neon’ Test CPU tune supports inlining string operations with NEON instructions. ‘arm_neon_hw’ Test system supports executing NEON instructions. ‘arm_neonv2_hw’ Test system supports executing NEON v2 instructions. ‘arm_neon_ok’ ARM Target supports ‘-mfpu=neon -mfloat-abi=softfp’ or compatible options. Some multilibs may be incompatible with these options. ‘arm_neon_ok_no_float_abi’ ARM Target supports NEON with ‘-mfpu=neon’, but without any -mfloat-abi= option. Some multilibs may be incompatible with this option. ‘arm_neonv2_ok’ ARM Target supports ‘-mfpu=neon-vfpv4 -mfloat-abi=softfp’ or compatible options. Some multilibs may be incompatible with these options. ‘arm_fp16_ok’ Target supports options to generate VFP half-precision floating-point instructions. Some multilibs may be incompatible with these options. This test is valid for ARM only. ‘arm_fp16_hw’ Target supports executing VFP half-precision floating-point instructions. This test is valid for ARM only. ‘arm_neon_fp16_ok’ ARM Target supports ‘-mfpu=neon-fp16 -mfloat-abi=softfp’ or compatible options, including ‘-mfp16-format=ieee’ if necessary to obtain the ‘__fp16’ type. Some multilibs may be incompatible with these options. ‘arm_neon_fp16_hw’ Test system supports executing Neon half-precision float instructions. (Implies previous.) ‘arm_fp16_alternative_ok’ ARM target supports the ARM FP16 alternative format. Some multilibs may be incompatible with the options needed. ‘arm_fp16_none_ok’ ARM target supports specifying none as the ARM FP16 format. ‘arm_thumb1_ok’ ARM target generates Thumb-1 code for ‘-mthumb’. ‘arm_thumb2_ok’ ARM target generates Thumb-2 code for ‘-mthumb’. ‘arm_nothumb’ ARM target that is not using Thumb. ‘arm_vfp_ok’ ARM target supports ‘-mfpu=vfp -mfloat-abi=softfp’. Some multilibs may be incompatible with these options. ‘arm_vfp3_ok’ ARM target supports ‘-mfpu=vfp3 -mfloat-abi=softfp’. Some multilibs may be incompatible with these options. ‘arm_arch_v8a_hard_ok’ The compiler is targeting ‘arm*-*-*’ and can compile and assemble code using the options ‘-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard’. This is not enough to guarantee that linking works. ‘arm_arch_v8a_hard_multilib’ The compiler is targeting ‘arm*-*-*’ and can build programs using the options ‘-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard’. The target can also run the resulting binaries. ‘arm_v8_vfp_ok’ ARM target supports ‘-mfpu=fp-armv8 -mfloat-abi=softfp’. Some multilibs may be incompatible with these options. ‘arm_v8_neon_ok’ ARM target supports ‘-mfpu=neon-fp-armv8 -mfloat-abi=softfp’. Some multilibs may be incompatible with these options. ‘arm_v8_1a_neon_ok’ ARM target supports options to generate ARMv8.1-A Adv.SIMD instructions. Some multilibs may be incompatible with these options. ‘arm_v8_1a_neon_hw’ ARM target supports executing ARMv8.1-A Adv.SIMD instructions. Some multilibs may be incompatible with the options needed. Implies arm_v8_1a_neon_ok. ‘arm_acq_rel’ ARM target supports acquire-release instructions. ‘arm_v8_2a_fp16_scalar_ok’ ARM target supports options to generate instructions for ARMv8.2-A and scalar instructions from the FP16 extension. Some multilibs may be incompatible with these options. ‘arm_v8_2a_fp16_scalar_hw’ ARM target supports executing instructions for ARMv8.2-A and scalar instructions from the FP16 extension. Some multilibs may be incompatible with these options. Implies arm_v8_2a_fp16_neon_ok. ‘arm_v8_2a_fp16_neon_ok’ ARM target supports options to generate instructions from ARMv8.2-A with the FP16 extension. Some multilibs may be incompatible with these options. Implies arm_v8_2a_fp16_scalar_ok. ‘arm_v8_2a_fp16_neon_hw’ ARM target supports executing instructions from ARMv8.2-A with the FP16 extension. Some multilibs may be incompatible with these options. Implies arm_v8_2a_fp16_neon_ok and arm_v8_2a_fp16_scalar_hw. ‘arm_v8_2a_dotprod_neon_ok’ ARM target supports options to generate instructions from ARMv8.2-A with the Dot Product extension. Some multilibs may be incompatible with these options. ‘arm_v8_2a_dotprod_neon_hw’ ARM target supports executing instructions from ARMv8.2-A with the Dot Product extension. Some multilibs may be incompatible with these options. Implies arm_v8_2a_dotprod_neon_ok. ‘arm_v8_2a_i8mm_neon_hw’ ARM target supports executing instructions from ARMv8.2-A with the 8-bit Matrix Multiply extension. Some multilibs may be incompatible with these options. Implies arm_v8_2a_i8mm_ok. ‘arm_fp16fml_neon_ok’ ARM target supports extensions to generate the ‘VFMAL’ and ‘VFMLS’ half-precision floating-point instructions available from ARMv8.2-A and onwards. Some multilibs may be incompatible with these options. ‘arm_v8_2a_bf16_neon_ok’ ARM target supports options to generate instructions from ARMv8.2-A with the BFloat16 extension (bf16). Some multilibs may be incompatible with these options. ‘arm_v8_2a_i8mm_ok’ ARM target supports options to generate instructions from ARMv8.2-A with the 8-Bit Integer Matrix Multiply extension (i8mm). Some multilibs may be incompatible with these options. ‘arm_v8_1m_mve_ok’ ARM target supports options to generate instructions from ARMv8.1-M with the M-Profile Vector Extension (MVE). Some multilibs may be incompatible with these options. ‘arm_v8_1m_mve_fp_ok’ ARM target supports options to generate instructions from ARMv8.1-M with the Half-precision floating-point instructions (HP), Floating-point Extension (FP) along with M-Profile Vector Extension (MVE). Some multilibs may be incompatible with these options. ‘arm_mve_hw’ Test system supports executing MVE instructions. ‘arm_v8m_main_cde’ ARM target supports options to generate instructions from ARMv8-M with the Custom Datapath Extension (CDE). Some multilibs may be incompatible with these options. ‘arm_v8m_main_cde_fp’ ARM target supports options to generate instructions from ARMv8-M with the Custom Datapath Extension (CDE) and floating-point (VFP). Some multilibs may be incompatible with these options. ‘arm_v8_1m_main_cde_mve’ Arm target supports options to generate instructions from Armv8.1-M with the Custom Datapath Extension (CDE) and M-Profile Vector Extension (MVE). Some multilibs may be incompatible with these options. ‘arm_v8_1m_main_cde_mve_fp’ Arm target supports options to generate instructions from Armv8.1-M with the Custom Datapath Extension (CDE) and M-Profile Vector Extension (MVE) with floating-point support. Some multilibs may be incompatible with these options. ‘arm_pacbti_hw’ Test system supports executing Pointer Authentication and Branch Target Identification instructions. ‘arm_prefer_ldrd_strd’ ARM target prefers ‘LDRD’ and ‘STRD’ instructions over ‘LDM’ and ‘STM’ instructions. ‘arm_thumb1_movt_ok’ ARM target generates Thumb-1 code for ‘-mthumb’ with ‘MOVW’ and ‘MOVT’ instructions available. ‘arm_thumb1_cbz_ok’ ARM target generates Thumb-1 code for ‘-mthumb’ with ‘CBZ’ and ‘CBNZ’ instructions available. ‘arm_divmod_simode’ ARM target for which divmod transform is disabled, if it supports hardware div instruction. ‘arm_cmse_ok’ ARM target supports ARMv8-M Security Extensions, enabled by the ‘-mcmse’ option. ‘arm_cmse_hw’ Test system supports executing CMSE instructions. ‘arm_coproc1_ok’ ARM target supports the following coprocessor instructions: ‘CDP’, ‘LDC’, ‘STC’, ‘MCR’ and ‘MRC’. ‘arm_coproc2_ok’ ARM target supports all the coprocessor instructions also listed as supported in *note arm_coproc1_ok:: in addition to the following: ‘CDP2’, ‘LDC2’, ‘LDC2l’, ‘STC2’, ‘STC2l’, ‘MCR2’ and ‘MRC2’. ‘arm_coproc3_ok’ ARM target supports all the coprocessor instructions also listed as supported in *note arm_coproc2_ok:: in addition the following: ‘MCRR’ and ‘MRRC’. ‘arm_coproc4_ok’ ARM target supports all the coprocessor instructions also listed as supported in *note arm_coproc3_ok:: in addition the following: ‘MCRR2’ and ‘MRRC2’. ‘arm_simd32_ok’ ARM Target supports options suitable for accessing the SIMD32 intrinsics from ‘arm_acle.h’. Some multilibs may be incompatible with these options. ‘arm_sat_ok’ ARM Target supports options suitable for accessing the saturation intrinsics from ‘arm_acle.h’. Some multilibs may be incompatible with these options. ‘arm_dsp_ok’ ARM Target supports options suitable for accessing the DSP intrinsics from ‘arm_acle.h’. Some multilibs may be incompatible with these options. ‘arm_softfp_ok’ ARM target supports the ‘-mfloat-abi=softfp’ option. ‘arm_hard_ok’ ARM target supports the ‘-mfloat-abi=hard’ option. ‘arm_mve’ ARM target supports generating MVE instructions. ‘arm_v8_1_lob_ok’ ARM Target supports executing the Armv8.1-M Mainline Low Overhead Loop instructions ‘DLS’ and ‘LE’. Some multilibs may be incompatible with these options. ‘arm_thumb2_no_arm_v8_1_lob’ ARM target where Thumb-2 is used without options but does not support executing the Armv8.1-M Mainline Low Overhead Loop instructions ‘DLS’ and ‘LE’. ‘arm_thumb2_ok_no_arm_v8_1_lob’ ARM target generates Thumb-2 code for ‘-mthumb’ but does not support executing the Armv8.1-M Mainline Low Overhead Loop instructions ‘DLS’ and ‘LE’. ‘mbranch_protection_ok’ ARM target supporting ‘-mbranch-protection=standard’. ‘arm_pacbti_hw’ Test system supports for executing non nop pacbti instructions. 7.2.3.8 AArch64-specific attributes ................................... ‘aarch64_asm__ok’ AArch64 assembler supports the architecture extension ‘ext’ via the ‘.arch_extension’ pseudo-op. ‘aarch64_tiny’ AArch64 target which generates instruction sequences for tiny memory model. ‘aarch64_small’ AArch64 target which generates instruction sequences for small memory model. ‘aarch64_large’ AArch64 target which generates instruction sequences for large memory model. ‘aarch64_little_endian’ AArch64 target which generates instruction sequences for little endian. ‘aarch64_big_endian’ AArch64 target which generates instruction sequences for big endian. ‘aarch64_small_fpic’ Binutils installed on test system supports relocation types required by -fpic for AArch64 small memory model. ‘aarch64_sme’ AArch64 target that generates instructions for SME. ‘aarch64_sme2’ AArch64 target that generates instructions for SME2. ‘aarch64_sve_hw’ AArch64 target that is able to generate and execute SVE code (regardless of whether it does so by default). ‘aarch64_sve128_hw’ ‘aarch64_sve256_hw’ ‘aarch64_sve512_hw’ ‘aarch64_sve1024_hw’ ‘aarch64_sve2048_hw’ Like ‘aarch64_sve_hw’, but also test for an exact hardware vector length. ‘aarch64_fjcvtzs_hw’ AArch64 target that is able to generate and execute armv8.3-a FJCVTZS instruction. 7.2.3.9 LoongArch specific attributes ..................................... ‘loongarch_sx’ LoongArch target that generates instructions for SX. ‘loongarch_asx’ LoongArch target that generates instructions for ASX. ‘loongarch_sx_hw’ LoongArch target that is able to generate and execute SX code. ‘loongarch_asx_hw’ LoongArch target that is able to generate and execute ASX code. ‘loongarch_call36_support’ LoongArch binutils supports call36 relocation. 7.2.3.10 MIPS-specific attributes ................................. ‘mips64’ MIPS target supports 64-bit instructions. ‘nomips16’ MIPS target does not produce MIPS16 code. ‘mips16_attribute’ MIPS target can generate MIPS16 code. ‘mips_loongson’ MIPS target is a Loongson-2E or -2F target using an ABI that supports the Loongson vector modes. ‘mips_msa’ MIPS target supports ‘-mmsa’, MIPS SIMD Architecture (MSA). ‘mips_newabi_large_long_double’ MIPS target supports ‘long double’ larger than ‘double’ when using the new ABI. ‘mpaired_single’ MIPS target supports ‘-mpaired-single’. 7.2.3.11 MSP430-specific attributes ................................... ‘msp430_small’ MSP430 target has the small memory model enabled (‘-msmall’). ‘msp430_large’ MSP430 target has the large memory model enabled (‘-mlarge’). 7.2.3.12 PowerPC-specific attributes .................................... ‘dfp_hw’ PowerPC target supports executing hardware DFP instructions. ‘p8vector_hw’ PowerPC target supports executing VSX instructions (ISA 2.07). ‘powerpc64’ Test system supports executing 64-bit instructions. ‘powerpc_altivec’ PowerPC target supports AltiVec. ‘powerpc_altivec_ok’ PowerPC target supports ‘-maltivec’. ‘powerpc_eabi_ok’ PowerPC target supports ‘-meabi’. ‘powerpc_elfv2’ PowerPC target supports ‘-mabi=elfv2’. ‘powerpc_fprs’ PowerPC target supports floating-point registers. ‘powerpc_hard_double’ PowerPC target supports hardware double-precision floating-point. ‘powerpc_htm_ok’ PowerPC target supports ‘-mhtm’ ‘powerpc_p8vector_ok’ PowerPC target supports ‘-mpower8-vector’ ‘powerpc_popcntb_ok’ PowerPC target supports the ‘popcntb’ instruction, indicating that this target supports ‘-mcpu=power5’. ‘powerpc_ppu_ok’ PowerPC target supports ‘-mcpu=cell’. ‘powerpc_spe’ PowerPC target supports PowerPC SPE. ‘powerpc_spe_nocache’ Including the options used to compile this particular test, the PowerPC target supports PowerPC SPE. ‘powerpc_spu’ PowerPC target supports PowerPC SPU. ‘powerpc_vsx_ok’ PowerPC target supports ‘-mvsx’. ‘powerpc_405_nocache’ Including the options used to compile this particular test, the PowerPC target supports PowerPC 405. ‘ppc_recip_hw’ PowerPC target supports executing reciprocal estimate instructions. ‘vmx_hw’ PowerPC target supports executing AltiVec instructions. ‘vsx_hw’ PowerPC target supports executing VSX instructions (ISA 2.06). ‘has_arch_pwr5’ PowerPC target pre-defines macro _ARCH_PWR5 which means the ‘-mcpu’ setting is Power5 or later. ‘has_arch_pwr6’ PowerPC target pre-defines macro _ARCH_PWR6 which means the ‘-mcpu’ setting is Power6 or later. ‘has_arch_pwr7’ PowerPC target pre-defines macro _ARCH_PWR7 which means the ‘-mcpu’ setting is Power7 or later. ‘has_arch_pwr8’ PowerPC target pre-defines macro _ARCH_PWR8 which means the ‘-mcpu’ setting is Power8 or later. ‘has_arch_pwr9’ PowerPC target pre-defines macro _ARCH_PWR9 which means the ‘-mcpu’ setting is Power9 or later. 7.2.3.13 RISC-V specific attributes ................................... ‘rv32’ Test system has an integer register width of 32 bits. ‘rv64’ Test system has an integer register width of 64 bits. 7.2.3.14 CORE-V specific attributes ................................... ‘cv_mac’ Test system has support for the CORE-V MAC extension. ‘cv_alu’ Test system has support for the CORE-V ALU extension. ‘cv_elw’ Test system has support for the CORE-V ELW extension. ‘cv_simd’ Test system has support for the CORE-V SIMD extension. 7.2.3.15 Other hardware attributes .................................. ‘autoincdec’ Target supports autoincrement/decrement addressing. ‘avx’ Target supports compiling ‘avx’ instructions. ‘avx_runtime’ Target supports the execution of ‘avx’ instructions. ‘avx10.1’ Target supports the execution of ‘avx10.1’ instructions. ‘avx10.1-256’ Target supports the execution of ‘avx10.1’ instructions. ‘avx10.1-512’ Target supports the execution of ‘avx10.1-512’ instructions. ‘avx2’ Target supports compiling ‘avx2’ instructions. ‘avx2_runtime’ Target supports the execution of ‘avx2’ instructions. ‘avxvnni’ Target supports the execution of ‘avxvnni’ instructions. ‘avx512f’ Target supports compiling ‘avx512f’ instructions. ‘avx512f_runtime’ Target supports the execution of ‘avx512f’ instructions. ‘avx512vp2intersect’ Target supports the execution of ‘avx512vp2intersect’ instructions. ‘avxifma’ Target supports the execution of ‘avxifma’ instructions. ‘avxneconvert’ Target supports the execution of ‘avxneconvert’ instructions. ‘avxvnniint8’ Target supports the execution of ‘avxvnniint8’ instructions. ‘avxvnniint16’ Target supports the execution of ‘avxvnniint16’ instructions. ‘amx_tile’ Target supports the execution of ‘amx-tile’ instructions. ‘amx_int8’ Target supports the execution of ‘amx-int8’ instructions. ‘amx_bf16’ Target supports the execution of ‘amx-bf16’ instructions. ‘amx_complex’ Target supports the execution of ‘amx-complex’ instructions. ‘amx_fp16’ Target supports the execution of ‘amx-fp16’ instructions. ‘cell_hw’ Test system can execute AltiVec and Cell PPU instructions. ‘clz’ Target supports a clz optab on int. ‘clzl’ Target supports a clz optab on long. ‘clzll’ Target supports a clz optab on long long. ‘ctz’ Target supports a ctz optab on int. ‘ctzl’ Target supports a ctz optab on long. ‘ctzll’ Target supports a ctz optab on long long. ‘cmpccxadd’ Target supports the execution of ‘cmpccxadd’ instructions. ‘coldfire_fpu’ Target uses a ColdFire FPU. ‘divmod’ Target supporting hardware divmod insn or divmod libcall. ‘divmod_simode’ Target supporting hardware divmod insn or divmod libcall for SImode. ‘hard_float’ Target supports FPU instructions. ‘non_strict_align’ Target does not require strict alignment. ‘opt_mstrict_align’ Target supports ‘-mstrict-align’ and ‘-mno-strict-align’. ‘pie_copyreloc’ The x86-64 target linker supports PIE with copy reloc. ‘popcount’ Target supports a popcount optab on int. ‘popcountl’ Target supports a popcount optab on long. ‘popcountll’ Target supports a popcount optab on long long. ‘prefetchi’ Target supports the execution of ‘prefetchi’ instructions. ‘raoint’ Target supports the execution of ‘raoint’ instructions. ‘rdrand’ Target supports x86 ‘rdrand’ instruction. ‘sha512’ Target supports the execution of ‘sha512’ instructions. ‘sm3’ Target supports the execution of ‘sm3’ instructions. ‘sm4’ Target supports the execution of ‘sm4’ instructions. ‘sqrt_insn’ Target has a square root instruction that the compiler can generate. ‘sse’ Target supports compiling ‘sse’ instructions. ‘sse_runtime’ Target supports the execution of ‘sse’ instructions. ‘sse2’ Target supports compiling ‘sse2’ instructions. ‘sse2_runtime’ Target supports the execution of ‘sse2’ instructions. ‘sync_char_short’ Target supports atomic operations on ‘char’ and ‘short’. ‘sync_int_long’ Target supports atomic operations on ‘int’ and ‘long’. ‘ultrasparc_hw’ Test environment appears to run executables on a simulator that accepts only ‘EM_SPARC’ executables and chokes on ‘EM_SPARC32PLUS’ or ‘EM_SPARCV9’ executables. ‘user_msr’ Target supports the execution of ‘user_msr’ instructions. ‘vect_cmdline_needed’ Target requires a command line argument to enable a SIMD instruction set. ‘xorsign’ Target supports the xorsign optab expansion. ‘ifn_copysign’ Target supports the copysign optab expansion of float and double for both scalar and vector modes. 7.2.3.16 Environment attributes ............................... ‘c’ The language for the compiler under test is C. ‘c++’ The language for the compiler under test is C++. ‘c99_runtime’ Target provides a full C99 runtime. ‘cfi’ Target supports DWARF CFI directives. ‘correct_iso_cpp_string_wchar_protos’ Target ‘string.h’ and ‘wchar.h’ headers provide C++ required overloads for ‘strchr’ etc. functions. ‘d_runtime’ Target provides the D runtime. ‘d_runtime_has_std_library’ Target provides the D standard library (Phobos). ‘dummy_wcsftime’ Target uses a dummy ‘wcsftime’ function that always returns zero. ‘fd_truncate’ Target can truncate a file from a file descriptor, as used by ‘libgfortran/io/unix.c:fd_truncate’; i.e. ‘ftruncate’ or ‘chsize’. ‘fenv’ Target provides ‘fenv.h’ include file. ‘fenv_exceptions’ Target supports ‘fenv.h’ with all the standard IEEE exceptions and floating-point exceptions are raised by arithmetic operations. ‘fenv_exceptions_dfp’ Target supports ‘fenv.h’ with all the standard IEEE exceptions and floating-point exceptions are raised by arithmetic operations for decimal floating point. ‘fileio’ Target offers such file I/O library functions as ‘fopen’, ‘fclose’, ‘tmpnam’, and ‘remove’. This is a link-time requirement for the presence of the functions in the library; even if they fail at runtime, the requirement is still regarded as satisfied. ‘freestanding’ Target is ‘freestanding’ as defined in section 4 of the C99 standard. Effectively, it is a target which supports no extra headers or libraries other than what is considered essential. ‘gettimeofday’ Target supports ‘gettimeofday’. ‘init_priority’ Target supports constructors with initialization priority arguments. ‘inttypes_types’ Target has the basic signed and unsigned types in ‘inttypes.h’. This is for tests that GCC's notions of these types agree with those in the header, as some systems have only ‘inttypes.h’. ‘lax_strtofp’ Target might have errors of a few ULP in string to floating-point conversion functions and overflow is not always detected correctly by those functions. ‘mempcpy’ Target provides ‘mempcpy’ function. ‘mmap’ Target supports ‘mmap’. ‘newlib’ Target supports Newlib. ‘newlib_nano_io’ GCC was configured with ‘--enable-newlib-nano-formatted-io’, which reduces the code size of Newlib formatted I/O functions. ‘posix_memalign’ Target supports ‘posix_memalign’. ‘pow10’ Target provides ‘pow10’ function. ‘pthread’ Target can compile using ‘pthread.h’ with no errors or warnings. ‘pthread_h’ Target has ‘pthread.h’. ‘sockets’ Target can compile using ‘sys/socket.h’ with no errors or warnings. ‘run_expensive_tests’ Expensive testcases (usually those that consume excessive amounts of CPU time) should be run on this target. This can be enabled by setting the ‘GCC_TEST_RUN_EXPENSIVE’ environment variable to a non-empty string. ‘simulator’ Test system runs executables on a simulator (i.e. slowly) rather than hardware (i.e. fast). ‘signal’ Target has ‘signal.h’. ‘stabs’ Target supports the stabs debugging format. ‘stdint_types’ Target has the basic signed and unsigned C types in ‘stdint.h’. This will be obsolete when GCC ensures a working ‘stdint.h’ for all targets. ‘stdint_types_mbig_endian’ Target accepts the option ‘-mbig-endian’ and ‘stdint.h’ can be included without error when ‘-mbig-endian’ is passed. ‘stpcpy’ Target provides ‘stpcpy’ function. ‘sysconf’ Target supports ‘sysconf’. ‘trampolines’ Target supports trampolines. ‘two_plus_gigs’ Target supports linking programs with 2+GiB of data. ‘uclibc’ Target supports uClibc. ‘unwrapped’ Target does not use a status wrapper. ‘vxworks_kernel’ Target is a VxWorks kernel. ‘vxworks_rtp’ Target is a VxWorks RTP. ‘wchar’ Target supports wide characters. ‘weak_undefined’ Target supports weak undefined symbols 7.2.3.17 Other attributes ......................... ‘R_flag_in_section’ Target supports the 'R' flag in .section directive in assembly inputs. ‘automatic_stack_alignment’ Target supports automatic stack alignment. ‘branch_cost’ Target supports ‘-branch-cost=N’. ‘const_volatile_readonly_section’ Target places const volatile variables in readonly sections. ‘cxa_atexit’ Target uses ‘__cxa_atexit’. ‘default_packed’ Target has packed layout of structure members by default. ‘exceptions’ Target supports exceptions. ‘exceptions_enabled’ Target supports exceptions and they are enabled in the current testing configuration. ‘fgraphite’ Target supports Graphite optimizations. ‘fixed_point’ Target supports fixed-point extension to C. ‘bitint’ Target supports _BitInt(N). ‘bitint128’ Target supports _BitInt(128). ‘bitint575’ Target supports _BitInt(575). ‘bitint65535’ Target supports _BitInt(65535). ‘fopenacc’ Target supports OpenACC via ‘-fopenacc’. ‘fopenmp’ Target supports OpenMP via ‘-fopenmp’. ‘fpic’ Target supports ‘-fpic’ and ‘-fPIC’. ‘freorder’ Target supports ‘-freorder-blocks-and-partition’. ‘fstack_protector’ Target supports ‘-fstack-protector’. ‘gas’ Target uses GNU ‘as’. ‘gc_sections’ Target supports ‘--gc-sections’. ‘gld’ Target uses GNU ‘ld’. ‘keeps_null_pointer_checks’ Target keeps null pointer checks, either due to the use of ‘-fno-delete-null-pointer-checks’ or hardwired into the target. ‘llvm_binutils’ Target is using an LLVM assembler and/or linker, instead of GNU Binutils. ‘lra’ Target supports local register allocator (LRA). ‘lto’ Compiler has been configured to support link-time optimization (LTO). ‘lto_incremental’ Compiler and linker support link-time optimization relocatable linking with ‘-r’ and ‘-flto’ options. ‘thread_fence’ Target implements ‘__atomic_thread_fence’ without relying on non-implemented ‘__sync_synchronize()’. ‘naked_functions’ Target supports the ‘naked’ function attribute. ‘named_sections’ Target supports named sections. ‘natural_alignment_32’ Target uses natural alignment (aligned to type size) for types of 32 bits or less. ‘tail_call’ Target supports tail-call optimizations. ‘target_natural_alignment_64’ Target uses natural alignment (aligned to type size) for types of 64 bits or less. ‘no_alignment_constraints’ Target defines __BIGGEST_ALIGNMENT__=1. Hence target imposes no alignment constraints. This is similar, but not necessarily the same as *note default_packed::. Although ‘BIGGEST_FIELD_ALIGNMENT’ defaults to ‘BIGGEST_ALIGNMENT’ for most targets, it is possible for a target to set those two with different values and have different alignment constraints for aggregate and non-aggregate types. ‘noinit’ Target supports the ‘noinit’ variable attribute. ‘nonpic’ Target does not generate PIC by default. ‘o_flag_in_section’ Target supports the 'o' flag in .section directive in assembly inputs. ‘offload_gcn’ Target has been configured for OpenACC/OpenMP offloading on AMD GCN. ‘persistent’ Target supports the ‘persistent’ variable attribute. ‘pie_enabled’ Target generates PIE by default. ‘pcc_bitfield_type_matters’ Target defines ‘PCC_BITFIELD_TYPE_MATTERS’. ‘pe_aligned_commons’ Target supports ‘-mpe-aligned-commons’. ‘pie’ Target supports ‘-pie’, ‘-fpie’ and ‘-fPIE’. ‘linker_plugin’ Target supports the linker plugin. ‘rdynamic’ Target supports ‘-rdynamic’. ‘scalar_all_fma’ Target supports all four fused multiply-add optabs for both ‘float’ and ‘double’. These optabs are: ‘fma_optab’, ‘fms_optab’, ‘fnma_optab’ and ‘fnms_optab’. ‘section_anchors’ Target supports section anchors. ‘short_enums’ Target defaults to short enums. ‘stack_size’ Target has limited stack size. The stack size limit can be obtained using the STACK_SIZE macro defined by *note ‘dg-add-options’ feature ‘stack_size’: stack_size_ao. Note that for certain targets, stack size limits are relevant for execution only, and therefore considered only if ‘dg-do run’ is in effect, otherwise unlimited. ‘static’ Target supports ‘-static’. ‘static_libgfortran’ Target supports statically linking ‘libgfortran’. ‘string_merging’ Target supports merging string constants at link time. ‘strub’ Target supports attribute ‘strub’ for stack scrubbing. ‘ucn’ Target supports compiling and assembling UCN. ‘ucn_nocache’ Including the options used to compile this particular test, the target supports compiling and assembling UCN. ‘unaligned_stack’ Target does not guarantee that its ‘STACK_BOUNDARY’ is greater than or equal to the required vector alignment. ‘vector_alignment_reachable’ Vector alignment is reachable for types of 32 bits or less. ‘vector_alignment_reachable_for_64bit’ Vector alignment is reachable for types of 64 bits or less. ‘vma_equals_lma’ Target generates executable with VMA equal to LMA for .data section. ‘wchar_t_char16_t_compatible’ Target supports ‘wchar_t’ that is compatible with ‘char16_t’. ‘wchar_t_char32_t_compatible’ Target supports ‘wchar_t’ that is compatible with ‘char32_t’. ‘comdat_group’ Target uses comdat groups. ‘indirect_calls’ Target supports indirect calls, i.e. calls where the target is not constant. ‘lgccjit’ Target supports -lgccjit, i.e. libgccjit.so can be linked into jit tests. ‘__OPTIMIZE__’ Optimizations are enabled (‘__OPTIMIZE__’) per the current compiler flags. 7.2.3.18 Local to tests in ‘gcc.target/i386’ ............................................ ‘3dnow’ Target supports compiling ‘3dnow’ instructions. ‘aes’ Target supports compiling ‘aes’ instructions. ‘fma4’ Target supports compiling ‘fma4’ instructions. ‘mfentry’ Target supports the ‘-mfentry’ option that alters the position of profiling calls such that they precede the prologue. ‘ms_hook_prologue’ Target supports attribute ‘ms_hook_prologue’. ‘pclmul’ Target supports compiling ‘pclmul’ instructions. ‘sse3’ Target supports compiling ‘sse3’ instructions. ‘sse4’ Target supports compiling ‘sse4’ instructions. ‘sse4a’ Target supports compiling ‘sse4a’ instructions. ‘ssse3’ Target supports compiling ‘ssse3’ instructions. ‘vaes’ Target supports compiling ‘vaes’ instructions. ‘vpclmul’ Target supports compiling ‘vpclmul’ instructions. ‘xop’ Target supports compiling ‘xop’ instructions. 7.2.3.19 Local to tests in ‘gcc.test-framework’ ............................................... ‘no’ Always returns 0. ‘yes’ Always returns 1.  File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 7.2.4 Features for ‘dg-add-options’ ----------------------------------- The supported values of FEATURE for directive ‘dg-add-options’ are: ‘arm_fp’ ‘__ARM_FP’ definition. Only ARM targets support this feature, and only then in certain modes; see the *note arm_fp_ok effective target keyword: arm_fp_ok. ‘arm_fp_dp’ ‘__ARM_FP’ definition with double-precision support. Only ARM targets support this feature, and only then in certain modes; see the *note arm_fp_dp_ok effective target keyword: arm_fp_dp_ok. ‘arm_neon’ NEON support. Only ARM targets support this feature, and only then in certain modes; see the *note arm_neon_ok effective target keyword: arm_neon_ok. ‘arm_fp16’ VFP half-precision floating point support. This does not select the FP16 format; for that, use *note arm_fp16_ieee: arm_fp16_ieee. or *note arm_fp16_alternative: arm_fp16_alternative. instead. This feature is only supported by ARM targets and then only in certain modes; see the *note arm_fp16_ok effective target keyword: arm_fp16_ok. ‘arm_fp16_ieee’ ARM IEEE 754-2008 format VFP half-precision floating point support. This feature is only supported by ARM targets and then only in certain modes; see the *note arm_fp16_ok effective target keyword: arm_fp16_ok. ‘arm_fp16_alternative’ ARM Alternative format VFP half-precision floating point support. This feature is only supported by ARM targets and then only in certain modes; see the *note arm_fp16_ok effective target keyword: arm_fp16_ok. ‘arm_neon_fp16’ NEON and half-precision floating point support. Only ARM targets support this feature, and only then in certain modes; see the *note arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok. ‘arm_vfp3’ arm vfp3 floating point support; see the *note arm_vfp3_ok effective target keyword: arm_vfp3_ok. ‘arm_arch_v8a_hard’ Add options for ARMv8-A and the hard-float variant of the AAPCS, if this is supported by the compiler; see the *note arm_arch_v8a_hard_ok: arm_arch_v8a_hard_ok. effective target keyword. ‘arm_v8_1a_neon’ Add options for ARMv8.1-A with Adv.SIMD support, if this is supported by the target; see the *note arm_v8_1a_neon_ok: arm_v8_1a_neon_ok. effective target keyword. ‘arm_v8_2a_fp16_scalar’ Add options for ARMv8.2-A with scalar FP16 support, if this is supported by the target; see the *note arm_v8_2a_fp16_scalar_ok: arm_v8_2a_fp16_scalar_ok. effective target keyword. ‘arm_v8_2a_fp16_neon’ Add options for ARMv8.2-A with Adv.SIMD FP16 support, if this is supported by the target; see the *note arm_v8_2a_fp16_neon_ok: arm_v8_2a_fp16_neon_ok. effective target keyword. ‘arm_v8_2a_dotprod_neon’ Add options for ARMv8.2-A with Adv.SIMD Dot Product support, if this is supported by the target; see the *note arm_v8_2a_dotprod_neon_ok:: effective target keyword. ‘arm_fp16fml_neon’ Add options to enable generation of the ‘VFMAL’ and ‘VFMSL’ instructions, if this is supported by the target; see the *note arm_fp16fml_neon_ok:: effective target keyword. ‘arm_dsp’ Add options for ARM DSP intrinsics support, if this is supported by the target; see the *note arm_dsp_ok effective target keyword: arm_dsp_ok. ‘bind_pic_locally’ Add the target-specific flags needed to enable functions to bind locally when using pic/PIC passes in the testsuite. ‘floatN’ Add the target-specific flags needed to use the ‘_FloatN’ type. ‘floatNx’ Add the target-specific flags needed to use the ‘_FloatNx’ type. ‘ieee’ Add the target-specific flags needed to enable full IEEE compliance mode. ‘mips16_attribute’ ‘mips16’ function attributes. Only MIPS targets support this feature, and only then in certain modes. ‘stack_size’ Add the flags needed to define macro STACK_SIZE and set it to the stack size limit associated with the *note ‘stack_size’ effective target: stack_size_et. ‘sqrt_insn’ Add the target-specific flags needed to enable hardware square root instructions, if any. ‘tls’ Add the target-specific flags needed to use thread-local storage. ‘vect_early_break’ Add the target-specific flags needed to enable early break vectorization for a target, if any. This requires the target to have an implementation of the ‘cbranch’ optab. ‘weak_undefined’ Add the flags needed to enable support for weak undefined symbols.  File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 7.2.5 Variants of ‘dg-require-SUPPORT’ -------------------------------------- A few of the ‘dg-require’ directives take arguments. ‘dg-require-iconv CODESET’ Skip the test if the target does not support iconv. CODESET is the codeset to convert to. ‘dg-require-profiling PROFOPT’ Skip the test if the target does not support profiling with option PROFOPT. ‘dg-require-stack-check CHECK’ Skip the test if the target does not support the ‘-fstack-check’ option. If CHECK is ‘""’, support for ‘-fstack-check’ is checked, for ‘-fstack-check=("CHECK")’ otherwise. ‘dg-require-stack-size SIZE’ Skip the test if the target does not support a stack size of SIZE. ‘dg-require-visibility VIS’ Skip the test if the target does not support the ‘visibility’ attribute. If VIS is ‘""’, support for ‘visibility("hidden")’ is checked, for ‘visibility("VIS")’ otherwise. The original ‘dg-require’ directives were defined before there was support for effective-target keywords. The directives that do not take arguments could be replaced with effective-target keywords. ‘dg-require-alias ""’ Skip the test if the target does not support the ‘alias’ attribute. ‘dg-require-ascii-locale ""’ Skip the test if the host does not support an ASCII locale. ‘dg-require-compat-dfp ""’ Skip this test unless both compilers in a ‘compat’ testsuite support decimal floating point. ‘dg-require-cxa-atexit ""’ Skip the test if the target does not support ‘__cxa_atexit’. This is equivalent to ‘dg-require-effective-target cxa_atexit’. ‘dg-require-dll ""’ Skip the test if the target does not support DLL attributes. ‘dg-require-dot ""’ Skip the test if the host does not have ‘dot’. ‘dg-require-fork ""’ Skip the test if the target does not support ‘fork’. ‘dg-require-gc-sections ""’ Skip the test if the target's linker does not support the ‘--gc-sections’ flags. This is equivalent to ‘dg-require-effective-target gc-sections’. ‘dg-require-host-local ""’ Skip the test if the host is remote, rather than the same as the build system. Some tests are incompatible with DejaGnu's handling of remote hosts, which involves copying the source file to the host and compiling it with a relative path and "‘-o a.out’". ‘dg-require-linker-plugin ""’ Skip the test is the target does not support the linker plugin. This is equivalent to ‘dg-require-effective-target linker_plugin’. ‘dg-require-mkfifo ""’ Skip the test if the target does not support ‘mkfifo’. ‘dg-require-named-sections ""’ Skip the test is the target does not support named sections. This is equivalent to ‘dg-require-effective-target named_sections’. ‘dg-require-weak ""’ Skip the test if the target does not support weak symbols. ‘dg-require-weak-override ""’ Skip the test if the target does not support overriding weak symbols.  File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 7.2.6 Commands for use in ‘dg-final’ ------------------------------------ The GCC testsuite defines the following directives to be used within ‘dg-final’. 7.2.6.1 Scan a particular file .............................. ‘scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]’ Passes if REGEXP matches text in FILENAME. ‘scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]’ Passes if REGEXP does not match text in FILENAME. ‘scan-module MODULE REGEXP [{ target/xfail SELECTOR }]’ Passes if REGEXP matches in Fortran module MODULE. ‘dg-check-dot FILENAME’ Passes if FILENAME is a valid ‘.dot’ file (by running ‘dot -Tpng’ on it, and verifying the exit code is 0). ‘scan-sarif-file REGEXP [{ target/xfail SELECTOR }]’ Passes if REGEXP matches text in the file generated by ‘-fdiagnostics-format=sarif-file’. ‘scan-sarif-file-not REGEXP [{ target/xfail SELECTOR }]’ Passes if REGEXP does not match text in the file generated by ‘-fdiagnostics-format=sarif-file’. 7.2.6.2 Scan the assembly output ................................ ‘scan-assembler REGEX [{ target/xfail SELECTOR }]’ Passes if REGEX matches text in the test's assembler output, excluding LTO sections. ‘scan-raw-assembler REGEX [{ target/xfail SELECTOR }]’ Passes if REGEX matches text in the test's assembler output, including LTO sections. ‘scan-assembler-not REGEX [{ target/xfail SELECTOR }]’ Passes if REGEX does not match text in the test's assembler output, excluding LTO sections. ‘scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]’ Passes if REGEX is matched exactly NUM times in the test's assembler output, excluding LTO sections. ‘scan-assembler-bound REGEX CMP NUM [{ target/xfail SELECTOR }]’ Passes if REGEX is matched CMP NUM times in the test's assembler output, excluding LTO sections. CMP is a comparitor. ‘scan-assembler-dem REGEX [{ target/xfail SELECTOR }]’ Passes if REGEX matches text in the test's demangled assembler output, excluding LTO sections. ‘scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]’ Passes if REGEX does not match text in the test's demangled assembler output, excluding LTO sections. ‘scan-assembler-symbol-section FUNCTIONS SECTION [{ target/xfail SELECTOR }]’ Passes if FUNCTIONS are all in SECTION. The caller needs to allow for ‘USER_LABEL_PREFIX’ and different section name conventions. ‘scan-symbol-section FILENAME FUNCTIONS SECTION [{ target/xfail SELECTOR }]’ Passes if FUNCTIONS are all in SECTIONin FILENAME. The same caveats as for ‘scan-assembler-symbol-section’ apply. ‘scan-hidden SYMBOL [{ target/xfail SELECTOR }]’ Passes if SYMBOL is defined as a hidden symbol in the test's assembly output. ‘scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]’ Passes if SYMBOL is not defined as a hidden symbol in the test's assembly output. ‘check-function-bodies PREFIX TERMINATOR [OPTIONS [{ target/xfail SELECTOR }]]’ Looks through the source file for comments that give the expected assembly output for selected functions. Each line of expected output starts with the prefix string PREFIX and the expected output for a function as a whole is followed by a line that starts with the string TERMINATOR. Specifying an empty terminator is equivalent to specifying ‘"*/"’. OPTIONS, if specified, is a list of regular expressions, each of which matches a full command-line option. A non-empty list prevents the test from running unless all of the given options are present on the command line. This can help if a source file is compiled both with and without optimization, since it is rarely useful to check the full function body for unoptimized code. The first line of the expected output for a function FN has the form: PREFIX FN: [{ target/xfail SELECTOR }] Subsequent lines of the expected output also start with PREFIX. In both cases, whitespace after PREFIX is not significant. Depending on the configuration (see ‘configure_check-function-bodies’ in ‘gcc/testsuite/lib/scanasm.exp’), the test may discard from the compiler's assembly output directives such as ‘.cfi_startproc’, local label definitions such as ‘.LFB0’, and more. It then matches the result against the expected output for a function as a single regular expression. This means that later lines can use backslashes to refer back to ‘(...)’ captures on earlier lines. For example: /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ ... /* ** add_w0_s8_m: ** mov (z[0-9]+\.b), w0 ** add z0\.b, p0/m, z0\.b, \1 ** ret */ svint8_t add_w0_s8_m (...) { ... } ... /* ** add_b0_s8_m: ** mov (z[0-9]+\.b), b0 ** add z1\.b, p0/m, z1\.b, \1 ** ret */ svint8_t add_b0_s8_m (...) { ... } checks whether the implementations of ‘add_w0_s8_m’ and ‘add_b0_s8_m’ match the regular expressions given. The test only runs when ‘-DCHECK_ASM’ is passed on the command line. It is possible to create non-capturing multi-line regular expression groups of the form ‘(A|B|...)’ by putting the ‘(’, ‘|’ and ‘)’ on separate lines (each still using PREFIX). For example: /* ** cmple_f16_tied: ** ( ** fcmge p0\.h, p0/z, z1\.h, z0\.h ** | ** fcmle p0\.h, p0/z, z0\.h, z1\.h ** ) ** ret */ svbool_t cmple_f16_tied (...) { ... } checks whether ‘cmple_f16_tied’ is implemented by the ‘fcmge’ instruction followed by ‘ret’ or by the ‘fcmle’ instruction followed by ‘ret’. The test is still a single regular rexpression. A line containing just: PREFIX ... stands for zero or more unmatched lines; the whitespace after PREFIX is again not significant. 7.2.6.3 Scan optimization dump files .................................... These commands are available for KIND of ‘tree’, ‘ltrans-tree’, ‘offload-tree’, ‘rtl’, ‘offload-rtl’, ‘ipa’, ‘offload-ipa’, and ‘wpa-ipa’. ‘scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]’ Passes if REGEX matches text in the dump file with suffix SUFFIX. ‘scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]’ Passes if REGEX does not match text in the dump file with suffix SUFFIX. ‘scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]’ Passes if REGEX is found exactly NUM times in the dump file with suffix SUFFIX. ‘scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]’ Passes if REGEX matches demangled text in the dump file with suffix SUFFIX. ‘scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]’ Passes if REGEX does not match demangled text in the dump file with suffix SUFFIX. The SUFFIX argument which describes the dump file to be scanned may contain a glob pattern that must expand to exactly one file name. This is useful if, e.g., different pass instances are executed depending on torture testing command-line flags, producing dump files whose names differ only in their pass instance number suffix. For example, to scan instances 1, 2, 3 of a tree pass "mypass" for occurrences of the string "code has been optimized", use: /* { dg-options "-fdump-tree-mypass" } */ /* { dg-final { scan-tree-dump "code has been optimized" "mypass\[1-3\]" } } */ The ‘offload-...’ ones by default separately scan the dump file of each enabled offload target. You may use the ‘only_for_offload_target’ wrapper to restrict the scanning to one specific offload target: /* { dg-do link { target offload_target_amdgcn } } */ /* { dg-additional-options -foffload-options=-fdump-ipa-simdclone-details } */ /* { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-ipa-dump REGEX_AMDGCN simdclone } } */ This test case is active if GCN offload compilation is enabled (but potentially also additional offload targets). The ‘simdclone’ IPA dump file is (potentially) produced for all offload targets, but only the GCN offload one is scanned. If a test case doesn't have a ‘{ target SELECTOR }’, and you need to scan, for example, for different REGEXes for each of host and potentially several offload targets, use a pattern like this: /* { dg-final { scan-tree-dump REGEX_HOST optimized } } { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump REGEX_AMDGCN optimized { target offload_target_amdgcn } } } { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump REGEX_NVPTX optimized { target offload_target_nvptx } } } */ Here, unconditionally REGEX_HOST is scanned for in the host dump file. If GCN offloading compilation is actually enabled, REGEX_AMDGCN is scanned for in the GCN offload compilation dump file. If nvptx offloading compilation is actually enabled, REGEX_NVPTX is scanned for in the nvptx offload compilation dump file. 7.2.6.4 Check for output files .............................. ‘output-exists [{ target/xfail SELECTOR }]’ Passes if compiler output file exists. ‘output-exists-not [{ target/xfail SELECTOR }]’ Passes if compiler output file does not exist. ‘scan-symbol REGEXP [{ target/xfail SELECTOR }]’ Passes if the pattern is present in the final executable. ‘scan-symbol-not REGEXP [{ target/xfail SELECTOR }]’ Passes if the pattern is absent from the final executable. 7.2.6.5 Checks for ‘gcov’ tests ............................... ‘run-gcov SOURCEFILE’ Check line counts in ‘gcov’ tests. ‘run-gcov [branches] [calls] { OPTS SOURCEFILE }’ Check branch and/or call counts, in addition to line counts, in ‘gcov’ tests. ‘run-gcov-pytest { SOURCEFILE PYTEST_FILE }’ Check output of ‘gcov’ intermediate format with a pytest script. 7.2.6.6 Clean up generated test files ..................................... Usually the test-framework removes files that were generated during testing. If a testcase, for example, uses any dumping mechanism to inspect a passes dump file, the testsuite recognized the dump option passed to the tool and schedules a final cleanup to remove these files. There are, however, following additional cleanup directives that can be used to annotate a testcase "manually". ‘cleanup-coverage-files’ Removes coverage data files generated for this test. ‘cleanup-modules "LIST-OF-EXTRA-MODULES"’ Removes Fortran module files generated for this test, excluding the module names listed in keep-modules. Cleaning up module files is usually done automatically by the testsuite by looking at the source files and removing the modules after the test has been executed. module MoD1 end module MoD1 module Mod2 end module Mod2 module moD3 end module moD3 module mod4 end module mod4 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant ! { dg-final { keep-modules "mod3 mod4" } } ‘keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"’ Whitespace separated list of module names that should not be deleted by cleanup-modules. If the list of modules is empty, all modules defined in this file are kept. module maybe_unneeded end module maybe_unneeded module keep1 end module keep1 module keep2 end module keep2 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two ! { dg-final { keep-modules "" } } ! keep all ‘dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"’ Whitespace separated list of suffixes that should not be deleted automatically in a testcase that uses ‘-save-temps’. // { dg-options "-save-temps -fpch-preprocess -I." } int main() { return 0; } // { dg-keep-saved-temps ".s" } ! just keep assembler file // { dg-keep-saved-temps ".s" ".i" } ! ... and .i // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o ‘cleanup-profile-file’ Removes profiling files generated for this test.