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