Home | History | Annotate | Line # | Download | only in dist
README.txt revision 1.1.1.2.2.2
      1  1.1.1.2.2.2  yamt Compiler-RT
      2  1.1.1.2.2.2  yamt ================================
      3  1.1.1.2.2.2  yamt 
      4  1.1.1.2.2.2  yamt This directory and its subdirectories contain source code for the compiler
      5  1.1.1.2.2.2  yamt support routines.
      6  1.1.1.2.2.2  yamt 
      7  1.1.1.2.2.2  yamt Compiler-RT is open source software. You may freely distribute it under the
      8  1.1.1.2.2.2  yamt terms of the license agreement found in LICENSE.txt.
      9  1.1.1.2.2.2  yamt 
     10  1.1.1.2.2.2  yamt ================================
     11  1.1.1.2.2.2  yamt 
     12  1.1.1.2.2.2  yamt This is a replacement library for libgcc.  Each function is contained
     13  1.1.1.2.2.2  yamt in its own file.  Each function has a corresponding unit test under
     14  1.1.1.2.2.2  yamt test/Unit.
     15  1.1.1.2.2.2  yamt 
     16  1.1.1.2.2.2  yamt A rudimentary script to test each file is in the file called
     17  1.1.1.2.2.2  yamt test/Unit/test.
     18  1.1.1.2.2.2  yamt 
     19  1.1.1.2.2.2  yamt Here is the specification for this library:
     20  1.1.1.2.2.2  yamt 
     21  1.1.1.2.2.2  yamt http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc
     22  1.1.1.2.2.2  yamt 
     23  1.1.1.2.2.2  yamt Here is a synopsis of the contents of this library:
     24  1.1.1.2.2.2  yamt 
     25  1.1.1.2.2.2  yamt typedef      int si_int;
     26  1.1.1.2.2.2  yamt typedef unsigned su_int;
     27  1.1.1.2.2.2  yamt 
     28  1.1.1.2.2.2  yamt typedef          long long di_int;
     29  1.1.1.2.2.2  yamt typedef unsigned long long du_int;
     30  1.1.1.2.2.2  yamt 
     31  1.1.1.2.2.2  yamt // Integral bit manipulation
     32  1.1.1.2.2.2  yamt 
     33  1.1.1.2.2.2  yamt di_int __ashldi3(di_int a, si_int b);      // a << b
     34  1.1.1.2.2.2  yamt ti_int __ashlti3(ti_int a, si_int b);      // a << b
     35  1.1.1.2.2.2  yamt 
     36  1.1.1.2.2.2  yamt di_int __ashrdi3(di_int a, si_int b);      // a >> b  arithmetic (sign fill)
     37  1.1.1.2.2.2  yamt ti_int __ashrti3(ti_int a, si_int b);      // a >> b  arithmetic (sign fill)
     38  1.1.1.2.2.2  yamt di_int __lshrdi3(di_int a, si_int b);      // a >> b  logical    (zero fill)
     39  1.1.1.2.2.2  yamt ti_int __lshrti3(ti_int a, si_int b);      // a >> b  logical    (zero fill)
     40  1.1.1.2.2.2  yamt 
     41  1.1.1.2.2.2  yamt si_int __clzsi2(si_int a);  // count leading zeros
     42  1.1.1.2.2.2  yamt si_int __clzdi2(di_int a);  // count leading zeros
     43  1.1.1.2.2.2  yamt si_int __clzti2(ti_int a);  // count leading zeros
     44  1.1.1.2.2.2  yamt si_int __ctzsi2(si_int a);  // count trailing zeros
     45  1.1.1.2.2.2  yamt si_int __ctzdi2(di_int a);  // count trailing zeros
     46  1.1.1.2.2.2  yamt si_int __ctzti2(ti_int a);  // count trailing zeros
     47  1.1.1.2.2.2  yamt 
     48  1.1.1.2.2.2  yamt si_int __ffsdi2(di_int a);  // find least significant 1 bit
     49  1.1.1.2.2.2  yamt si_int __ffsti2(ti_int a);  // find least significant 1 bit
     50  1.1.1.2.2.2  yamt 
     51  1.1.1.2.2.2  yamt si_int __paritysi2(si_int a);  // bit parity
     52  1.1.1.2.2.2  yamt si_int __paritydi2(di_int a);  // bit parity
     53  1.1.1.2.2.2  yamt si_int __parityti2(ti_int a);  // bit parity
     54  1.1.1.2.2.2  yamt 
     55  1.1.1.2.2.2  yamt si_int __popcountsi2(si_int a);  // bit population
     56  1.1.1.2.2.2  yamt si_int __popcountdi2(di_int a);  // bit population
     57  1.1.1.2.2.2  yamt si_int __popcountti2(ti_int a);  // bit population
     58  1.1.1.2.2.2  yamt 
     59  1.1.1.2.2.2  yamt uint32_t __bswapsi2(uint32_t a);   // a byteswapped, arm only
     60  1.1.1.2.2.2  yamt uint64_t __bswapdi2(uint64_t a);   // a byteswapped, arm only
     61  1.1.1.2.2.2  yamt 
     62  1.1.1.2.2.2  yamt // Integral arithmetic
     63  1.1.1.2.2.2  yamt 
     64  1.1.1.2.2.2  yamt di_int __negdi2    (di_int a);                         // -a
     65  1.1.1.2.2.2  yamt ti_int __negti2    (ti_int a);                         // -a
     66  1.1.1.2.2.2  yamt di_int __muldi3    (di_int a, di_int b);               // a * b
     67  1.1.1.2.2.2  yamt ti_int __multi3    (ti_int a, ti_int b);               // a * b
     68  1.1.1.2.2.2  yamt si_int __divsi3    (si_int a, si_int b);               // a / b   signed
     69  1.1.1.2.2.2  yamt di_int __divdi3    (di_int a, di_int b);               // a / b   signed
     70  1.1.1.2.2.2  yamt ti_int __divti3    (ti_int a, ti_int b);               // a / b   signed
     71  1.1.1.2.2.2  yamt su_int __udivsi3   (su_int n, su_int d);               // a / b   unsigned
     72  1.1.1.2.2.2  yamt du_int __udivdi3   (du_int a, du_int b);               // a / b   unsigned
     73  1.1.1.2.2.2  yamt tu_int __udivti3   (tu_int a, tu_int b);               // a / b   unsigned
     74  1.1.1.2.2.2  yamt si_int __modsi3    (si_int a, si_int b);               // a % b   signed
     75  1.1.1.2.2.2  yamt di_int __moddi3    (di_int a, di_int b);               // a % b   signed
     76  1.1.1.2.2.2  yamt ti_int __modti3    (ti_int a, ti_int b);               // a % b   signed
     77  1.1.1.2.2.2  yamt su_int __umodsi3   (su_int a, su_int b);               // a % b   unsigned
     78  1.1.1.2.2.2  yamt du_int __umoddi3   (du_int a, du_int b);               // a % b   unsigned
     79  1.1.1.2.2.2  yamt tu_int __umodti3   (tu_int a, tu_int b);               // a % b   unsigned
     80  1.1.1.2.2.2  yamt du_int __udivmoddi4(du_int a, du_int b, du_int* rem);  // a / b, *rem = a % b  unsigned
     81  1.1.1.2.2.2  yamt tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);  // a / b, *rem = a % b  unsigned
     82  1.1.1.2.2.2  yamt su_int __udivmodsi4(su_int a, su_int b, su_int* rem);  // a / b, *rem = a % b  unsigned
     83  1.1.1.2.2.2  yamt si_int __divmodsi4(si_int a, si_int b, si_int* rem);   // a / b, *rem = a % b  signed
     84  1.1.1.2.2.2  yamt 
     85  1.1.1.2.2.2  yamt 
     86  1.1.1.2.2.2  yamt 
     87  1.1.1.2.2.2  yamt //  Integral arithmetic with trapping overflow
     88  1.1.1.2.2.2  yamt 
     89  1.1.1.2.2.2  yamt si_int __absvsi2(si_int a);           // abs(a)
     90  1.1.1.2.2.2  yamt di_int __absvdi2(di_int a);           // abs(a)
     91  1.1.1.2.2.2  yamt ti_int __absvti2(ti_int a);           // abs(a)
     92  1.1.1.2.2.2  yamt 
     93  1.1.1.2.2.2  yamt si_int __negvsi2(si_int a);           // -a
     94  1.1.1.2.2.2  yamt di_int __negvdi2(di_int a);           // -a
     95  1.1.1.2.2.2  yamt ti_int __negvti2(ti_int a);           // -a
     96  1.1.1.2.2.2  yamt 
     97  1.1.1.2.2.2  yamt si_int __addvsi3(si_int a, si_int b);  // a + b
     98  1.1.1.2.2.2  yamt di_int __addvdi3(di_int a, di_int b);  // a + b
     99  1.1.1.2.2.2  yamt ti_int __addvti3(ti_int a, ti_int b);  // a + b
    100  1.1.1.2.2.2  yamt 
    101  1.1.1.2.2.2  yamt si_int __subvsi3(si_int a, si_int b);  // a - b
    102  1.1.1.2.2.2  yamt di_int __subvdi3(di_int a, di_int b);  // a - b
    103  1.1.1.2.2.2  yamt ti_int __subvti3(ti_int a, ti_int b);  // a - b
    104  1.1.1.2.2.2  yamt 
    105  1.1.1.2.2.2  yamt si_int __mulvsi3(si_int a, si_int b);  // a * b
    106  1.1.1.2.2.2  yamt di_int __mulvdi3(di_int a, di_int b);  // a * b
    107  1.1.1.2.2.2  yamt ti_int __mulvti3(ti_int a, ti_int b);  // a * b
    108  1.1.1.2.2.2  yamt 
    109  1.1.1.2.2.2  yamt 
    110  1.1.1.2.2.2  yamt // Integral arithmetic which returns if overflow
    111  1.1.1.2.2.2  yamt 
    112  1.1.1.2.2.2  yamt si_int __mulosi4(si_int a, si_int b, int* overflow);  // a * b, overflow set to one if result not in signed range
    113  1.1.1.2.2.2  yamt di_int __mulodi4(di_int a, di_int b, int* overflow);  // a * b, overflow set to one if result not in signed range
    114  1.1.1.2.2.2  yamt ti_int __muloti4(ti_int a, ti_int b, int* overflow);  // a * b, overflow set to
    115  1.1.1.2.2.2  yamt  one if result not in signed range
    116  1.1.1.2.2.2  yamt 
    117  1.1.1.2.2.2  yamt 
    118  1.1.1.2.2.2  yamt //  Integral comparison: a  < b -> 0
    119  1.1.1.2.2.2  yamt //                       a == b -> 1
    120  1.1.1.2.2.2  yamt //                       a  > b -> 2
    121  1.1.1.2.2.2  yamt 
    122  1.1.1.2.2.2  yamt si_int __cmpdi2 (di_int a, di_int b);
    123  1.1.1.2.2.2  yamt si_int __cmpti2 (ti_int a, ti_int b);
    124  1.1.1.2.2.2  yamt si_int __ucmpdi2(du_int a, du_int b);
    125  1.1.1.2.2.2  yamt si_int __ucmpti2(tu_int a, tu_int b);
    126  1.1.1.2.2.2  yamt 
    127  1.1.1.2.2.2  yamt //  Integral / floating point conversion
    128  1.1.1.2.2.2  yamt 
    129  1.1.1.2.2.2  yamt di_int __fixsfdi(      float a);
    130  1.1.1.2.2.2  yamt di_int __fixdfdi(     double a);
    131  1.1.1.2.2.2  yamt di_int __fixxfdi(long double a);
    132  1.1.1.2.2.2  yamt 
    133  1.1.1.2.2.2  yamt ti_int __fixsfti(      float a);
    134  1.1.1.2.2.2  yamt ti_int __fixdfti(     double a);
    135  1.1.1.2.2.2  yamt ti_int __fixxfti(long double a);
    136  1.1.1.2.2.2  yamt uint64_t __fixtfdi(long double input);  // ppc only, doesn't match documentation
    137  1.1.1.2.2.2  yamt 
    138  1.1.1.2.2.2  yamt su_int __fixunssfsi(      float a);
    139  1.1.1.2.2.2  yamt su_int __fixunsdfsi(     double a);
    140  1.1.1.2.2.2  yamt su_int __fixunsxfsi(long double a);
    141  1.1.1.2.2.2  yamt 
    142  1.1.1.2.2.2  yamt du_int __fixunssfdi(      float a);
    143  1.1.1.2.2.2  yamt du_int __fixunsdfdi(     double a);
    144  1.1.1.2.2.2  yamt du_int __fixunsxfdi(long double a);
    145  1.1.1.2.2.2  yamt 
    146  1.1.1.2.2.2  yamt tu_int __fixunssfti(      float a);
    147  1.1.1.2.2.2  yamt tu_int __fixunsdfti(     double a);
    148  1.1.1.2.2.2  yamt tu_int __fixunsxfti(long double a);
    149  1.1.1.2.2.2  yamt uint64_t __fixunstfdi(long double input);  // ppc only
    150  1.1.1.2.2.2  yamt 
    151  1.1.1.2.2.2  yamt float       __floatdisf(di_int a);
    152  1.1.1.2.2.2  yamt double      __floatdidf(di_int a);
    153  1.1.1.2.2.2  yamt long double __floatdixf(di_int a);
    154  1.1.1.2.2.2  yamt long double __floatditf(int64_t a);        // ppc only
    155  1.1.1.2.2.2  yamt 
    156  1.1.1.2.2.2  yamt float       __floattisf(ti_int a);
    157  1.1.1.2.2.2  yamt double      __floattidf(ti_int a);
    158  1.1.1.2.2.2  yamt long double __floattixf(ti_int a);
    159  1.1.1.2.2.2  yamt 
    160  1.1.1.2.2.2  yamt float       __floatundisf(du_int a);
    161  1.1.1.2.2.2  yamt double      __floatundidf(du_int a);
    162  1.1.1.2.2.2  yamt long double __floatundixf(du_int a);
    163  1.1.1.2.2.2  yamt long double __floatunditf(uint64_t a);     // ppc only
    164  1.1.1.2.2.2  yamt 
    165  1.1.1.2.2.2  yamt float       __floatuntisf(tu_int a);
    166  1.1.1.2.2.2  yamt double      __floatuntidf(tu_int a);
    167  1.1.1.2.2.2  yamt long double __floatuntixf(tu_int a);
    168  1.1.1.2.2.2  yamt 
    169  1.1.1.2.2.2  yamt //  Floating point raised to integer power
    170  1.1.1.2.2.2  yamt 
    171  1.1.1.2.2.2  yamt float       __powisf2(      float a, si_int b);  // a ^ b
    172  1.1.1.2.2.2  yamt double      __powidf2(     double a, si_int b);  // a ^ b
    173  1.1.1.2.2.2  yamt long double __powixf2(long double a, si_int b);  // a ^ b
    174  1.1.1.2.2.2  yamt long double __powitf2(long double a, si_int b);  // ppc only, a ^ b
    175  1.1.1.2.2.2  yamt 
    176  1.1.1.2.2.2  yamt //  Complex arithmetic
    177  1.1.1.2.2.2  yamt 
    178  1.1.1.2.2.2  yamt //  (a + ib) * (c + id)
    179  1.1.1.2.2.2  yamt 
    180  1.1.1.2.2.2  yamt       float _Complex __mulsc3( float a,  float b,  float c,  float d);
    181  1.1.1.2.2.2  yamt      double _Complex __muldc3(double a, double b, double c, double d);
    182  1.1.1.2.2.2  yamt long double _Complex __mulxc3(long double a, long double b,
    183  1.1.1.2.2.2  yamt                               long double c, long double d);
    184  1.1.1.2.2.2  yamt long double _Complex __multc3(long double a, long double b,
    185  1.1.1.2.2.2  yamt                               long double c, long double d); // ppc only
    186  1.1.1.2.2.2  yamt 
    187  1.1.1.2.2.2  yamt //  (a + ib) / (c + id)
    188  1.1.1.2.2.2  yamt 
    189  1.1.1.2.2.2  yamt       float _Complex __divsc3( float a,  float b,  float c,  float d);
    190  1.1.1.2.2.2  yamt      double _Complex __divdc3(double a, double b, double c, double d);
    191  1.1.1.2.2.2  yamt long double _Complex __divxc3(long double a, long double b,
    192  1.1.1.2.2.2  yamt                               long double c, long double d);
    193  1.1.1.2.2.2  yamt long double _Complex __divtc3(long double a, long double b,
    194  1.1.1.2.2.2  yamt                               long double c, long double d);  // ppc only
    195  1.1.1.2.2.2  yamt 
    196  1.1.1.2.2.2  yamt 
    197  1.1.1.2.2.2  yamt //         Runtime support
    198  1.1.1.2.2.2  yamt 
    199  1.1.1.2.2.2  yamt // __clear_cache() is used to tell process that new instructions have been
    200  1.1.1.2.2.2  yamt // written to an address range.  Necessary on processors that do not have
    201  1.1.1.2.2.2  yamt // a unified instuction and data cache.
    202  1.1.1.2.2.2  yamt void __clear_cache(void* start, void* end);
    203  1.1.1.2.2.2  yamt 
    204  1.1.1.2.2.2  yamt // __enable_execute_stack() is used with nested functions when a trampoline
    205  1.1.1.2.2.2  yamt // function is written onto the stack and that page range needs to be made
    206  1.1.1.2.2.2  yamt // executable.
    207  1.1.1.2.2.2  yamt void __enable_execute_stack(void* addr);
    208  1.1.1.2.2.2  yamt 
    209  1.1.1.2.2.2  yamt // __gcc_personality_v0() is normally only called by the system unwinder.
    210  1.1.1.2.2.2  yamt // C code (as opposed to C++) normally does not need a personality function
    211  1.1.1.2.2.2  yamt // because there are no catch clauses or destructors to be run.  But there
    212  1.1.1.2.2.2  yamt // is a C language extension __attribute__((cleanup(func))) which marks local
    213  1.1.1.2.2.2  yamt // variables as needing the cleanup function "func" to be run when the
    214  1.1.1.2.2.2  yamt // variable goes out of scope.  That includes when an exception is thrown,
    215  1.1.1.2.2.2  yamt // so a personality handler is needed.  
    216  1.1.1.2.2.2  yamt _Unwind_Reason_Code __gcc_personality_v0(int version, _Unwind_Action actions,
    217  1.1.1.2.2.2  yamt          uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
    218  1.1.1.2.2.2  yamt          _Unwind_Context_t context);
    219  1.1.1.2.2.2  yamt 
    220  1.1.1.2.2.2  yamt // for use with some implementations of assert() in <assert.h>
    221  1.1.1.2.2.2  yamt void __eprintf(const char* format, const char* assertion_expression,
    222  1.1.1.2.2.2  yamt 				const char* line, const char* file);
    223  1.1.1.2.2.2  yamt 				
    224  1.1.1.2.2.2  yamt 
    225  1.1.1.2.2.2  yamt 
    226  1.1.1.2.2.2  yamt //   Power PC specific functions
    227  1.1.1.2.2.2  yamt 
    228  1.1.1.2.2.2  yamt // There is no C interface to the saveFP/restFP functions.  They are helper
    229  1.1.1.2.2.2  yamt // functions called by the prolog and epilog of functions that need to save
    230  1.1.1.2.2.2  yamt // a number of non-volatile float point registers.  
    231  1.1.1.2.2.2  yamt saveFP
    232  1.1.1.2.2.2  yamt restFP
    233  1.1.1.2.2.2  yamt 
    234  1.1.1.2.2.2  yamt // PowerPC has a standard template for trampoline functions.  This function
    235  1.1.1.2.2.2  yamt // generates a custom trampoline function with the specific realFunc
    236  1.1.1.2.2.2  yamt // and localsPtr values.
    237  1.1.1.2.2.2  yamt void __trampoline_setup(uint32_t* trampOnStack, int trampSizeAllocated, 
    238  1.1.1.2.2.2  yamt                                 const void* realFunc, void* localsPtr);
    239  1.1.1.2.2.2  yamt 
    240  1.1.1.2.2.2  yamt // adds two 128-bit double-double precision values ( x + y )
    241  1.1.1.2.2.2  yamt long double __gcc_qadd(long double x, long double y);  
    242  1.1.1.2.2.2  yamt 
    243  1.1.1.2.2.2  yamt // subtracts two 128-bit double-double precision values ( x - y )
    244  1.1.1.2.2.2  yamt long double __gcc_qsub(long double x, long double y); 
    245  1.1.1.2.2.2  yamt 
    246  1.1.1.2.2.2  yamt // multiples two 128-bit double-double precision values ( x * y )
    247  1.1.1.2.2.2  yamt long double __gcc_qmul(long double x, long double y);  
    248  1.1.1.2.2.2  yamt 
    249  1.1.1.2.2.2  yamt // divides two 128-bit double-double precision values ( x / y )
    250  1.1.1.2.2.2  yamt long double __gcc_qdiv(long double a, long double b);  
    251  1.1.1.2.2.2  yamt 
    252  1.1.1.2.2.2  yamt 
    253  1.1.1.2.2.2  yamt //    ARM specific functions
    254  1.1.1.2.2.2  yamt 
    255  1.1.1.2.2.2  yamt // There is no C interface to the switch* functions.  These helper functions
    256  1.1.1.2.2.2  yamt // are only needed by Thumb1 code for efficient switch table generation.
    257  1.1.1.2.2.2  yamt switch16
    258  1.1.1.2.2.2  yamt switch32
    259  1.1.1.2.2.2  yamt switch8
    260  1.1.1.2.2.2  yamt switchu8
    261  1.1.1.2.2.2  yamt 
    262  1.1.1.2.2.2  yamt // There is no C interface to the *_vfp_d8_d15_regs functions.  There are
    263  1.1.1.2.2.2  yamt // called in the prolog and epilog of Thumb1 functions.  When the C++ ABI use
    264  1.1.1.2.2.2  yamt // SJLJ for exceptions, each function with a catch clause or destuctors needs
    265  1.1.1.2.2.2  yamt // to save and restore all registers in it prolog and epliog.  But there is 
    266  1.1.1.2.2.2  yamt // no way to access vector and high float registers from thumb1 code, so the 
    267  1.1.1.2.2.2  yamt // compiler must add call outs to these helper functions in the prolog and 
    268  1.1.1.2.2.2  yamt // epilog.
    269  1.1.1.2.2.2  yamt restore_vfp_d8_d15_regs
    270  1.1.1.2.2.2  yamt save_vfp_d8_d15_regs
    271  1.1.1.2.2.2  yamt 
    272  1.1.1.2.2.2  yamt 
    273  1.1.1.2.2.2  yamt // Note: long ago ARM processors did not have floating point hardware support.
    274  1.1.1.2.2.2  yamt // Floating point was done in software and floating point parameters were 
    275  1.1.1.2.2.2  yamt // passed in integer registers.  When hardware support was added for floating
    276  1.1.1.2.2.2  yamt // point, new *vfp functions were added to do the same operations but with 
    277  1.1.1.2.2.2  yamt // floating point parameters in floating point registers.
    278  1.1.1.2.2.2  yamt 
    279  1.1.1.2.2.2  yamt // Undocumented functions
    280  1.1.1.2.2.2  yamt 
    281  1.1.1.2.2.2  yamt float  __addsf3vfp(float a, float b);   // Appears to return a + b
    282  1.1.1.2.2.2  yamt double __adddf3vfp(double a, double b); // Appears to return a + b
    283  1.1.1.2.2.2  yamt float  __divsf3vfp(float a, float b);   // Appears to return a / b
    284  1.1.1.2.2.2  yamt double __divdf3vfp(double a, double b); // Appears to return a / b
    285  1.1.1.2.2.2  yamt int    __eqsf2vfp(float a, float b);    // Appears to return  one
    286  1.1.1.2.2.2  yamt                                         //     iff a == b and neither is NaN.
    287  1.1.1.2.2.2  yamt int    __eqdf2vfp(double a, double b);  // Appears to return  one
    288  1.1.1.2.2.2  yamt                                         //     iff a == b and neither is NaN.
    289  1.1.1.2.2.2  yamt double __extendsfdf2vfp(float a);       // Appears to convert from
    290  1.1.1.2.2.2  yamt                                         //     float to double.
    291  1.1.1.2.2.2  yamt int    __fixdfsivfp(double a);          // Appears to convert from
    292  1.1.1.2.2.2  yamt                                         //     double to int.
    293  1.1.1.2.2.2  yamt int    __fixsfsivfp(float a);           // Appears to convert from
    294  1.1.1.2.2.2  yamt                                         //     float to int.
    295  1.1.1.2.2.2  yamt unsigned int __fixunssfsivfp(float a);  // Appears to convert from
    296  1.1.1.2.2.2  yamt                                         //     float to unsigned int.
    297  1.1.1.2.2.2  yamt unsigned int __fixunsdfsivfp(double a); // Appears to convert from
    298  1.1.1.2.2.2  yamt                                         //     double to unsigned int.
    299  1.1.1.2.2.2  yamt double __floatsidfvfp(int a);           // Appears to convert from
    300  1.1.1.2.2.2  yamt                                         //     int to double.
    301  1.1.1.2.2.2  yamt float __floatsisfvfp(int a);            // Appears to convert from
    302  1.1.1.2.2.2  yamt                                         //     int to float.
    303  1.1.1.2.2.2  yamt double __floatunssidfvfp(unsigned int a); // Appears to convert from
    304  1.1.1.2.2.2  yamt                                         //     unisgned int to double.
    305  1.1.1.2.2.2  yamt float __floatunssisfvfp(unsigned int a); // Appears to convert from
    306  1.1.1.2.2.2  yamt                                         //     unisgned int to float.
    307  1.1.1.2.2.2  yamt int __gedf2vfp(double a, double b);     // Appears to return __gedf2
    308  1.1.1.2.2.2  yamt                                         //     (a >= b)
    309  1.1.1.2.2.2  yamt int __gesf2vfp(float a, float b);       // Appears to return __gesf2
    310  1.1.1.2.2.2  yamt                                         //     (a >= b)
    311  1.1.1.2.2.2  yamt int __gtdf2vfp(double a, double b);     // Appears to return __gtdf2
    312  1.1.1.2.2.2  yamt                                         //     (a > b)
    313  1.1.1.2.2.2  yamt int __gtsf2vfp(float a, float b);       // Appears to return __gtsf2
    314  1.1.1.2.2.2  yamt                                         //     (a > b)
    315  1.1.1.2.2.2  yamt int __ledf2vfp(double a, double b);     // Appears to return __ledf2
    316  1.1.1.2.2.2  yamt                                         //     (a <= b)
    317  1.1.1.2.2.2  yamt int __lesf2vfp(float a, float b);       // Appears to return __lesf2
    318  1.1.1.2.2.2  yamt                                         //     (a <= b)
    319  1.1.1.2.2.2  yamt int __ltdf2vfp(double a, double b);     // Appears to return __ltdf2
    320  1.1.1.2.2.2  yamt                                         //     (a < b)
    321  1.1.1.2.2.2  yamt int __ltsf2vfp(float a, float b);       // Appears to return __ltsf2
    322  1.1.1.2.2.2  yamt                                         //     (a < b)
    323  1.1.1.2.2.2  yamt double __muldf3vfp(double a, double b); // Appears to return a * b
    324  1.1.1.2.2.2  yamt float __mulsf3vfp(float a, float b);    // Appears to return a * b
    325  1.1.1.2.2.2  yamt int __nedf2vfp(double a, double b);     // Appears to return __nedf2
    326  1.1.1.2.2.2  yamt                                         //     (a != b)
    327  1.1.1.2.2.2  yamt double __negdf2vfp(double a);           // Appears to return -a
    328  1.1.1.2.2.2  yamt float __negsf2vfp(float a);             // Appears to return -a
    329  1.1.1.2.2.2  yamt float __negsf2vfp(float a);             // Appears to return -a
    330  1.1.1.2.2.2  yamt double __subdf3vfp(double a, double b); // Appears to return a - b
    331  1.1.1.2.2.2  yamt float __subsf3vfp(float a, float b);    // Appears to return a - b
    332  1.1.1.2.2.2  yamt float __truncdfsf2vfp(double a);        // Appears to convert from
    333  1.1.1.2.2.2  yamt                                         //     double to float.
    334  1.1.1.2.2.2  yamt int __unorddf2vfp(double a, double b);  // Appears to return __unorddf2
    335  1.1.1.2.2.2  yamt int __unordsf2vfp(float a, float b);    // Appears to return __unordsf2
    336  1.1.1.2.2.2  yamt 
    337  1.1.1.2.2.2  yamt 
    338  1.1.1.2.2.2  yamt Preconditions are listed for each function at the definition when there are any.
    339  1.1.1.2.2.2  yamt Any preconditions reflect the specification at
    340  1.1.1.2.2.2  yamt http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc.
    341  1.1.1.2.2.2  yamt 
    342  1.1.1.2.2.2  yamt Assumptions are listed in "int_lib.h", and in individual files.  Where possible
    343  1.1.1.2.2.2  yamt assumptions are checked at compile time.
    344