Name Date Size #Lines LOC

..12-Jan-2024-

aarch64/H13-Apr-2024-686475

arm/H13-Apr-2024-4,5372,357

avr/H09-Feb-2023-338173

cpu_model/H13-Apr-2024-1,7991,492

hexagon/H08-May-2022-5,2864,137

i386/H13-Apr-2024-1,234761

loongarch/H23-Jun-2023-6047

ppc/H08-May-2022-1,048607

riscv/H22-Apr-2024-540416

sparc64/H08-May-2022-922813

ve/H08-May-2022-6436

x86_64/H13-Apr-2024-246107

README.txtH A D13-Apr-202415 KiB357278

absvdi2.cH A D12-Jan-2024825 268

absvsi2.cH A D12-Jan-2024825 268

absvti2.cH A D13-Apr-2024872 3010

adddf3.cH A D08-May-2022859 2510

addsf3.cH A D08-May-2022853 2510

addtf3.cH A D12-Jan-2024703 248

addvdi3.cH A D08-May-2022819 3012

addvsi3.cH A D08-May-2022819 3012

addvti3.cH A D08-May-2022868 3414

apple_versioning.cH A D23-Jun-202313.1 KiB340310

ashldi3.cH A D13-Apr-20241.2 KiB4021

ashlti3.cH A D13-Apr-20241.2 KiB4020

ashrdi3.cH A D13-Apr-20241.3 KiB4121

ashrti3.cH A D13-Apr-20241.3 KiB4120

assembly.hH A D13-Apr-202410.6 KiB294236

atomic.cH A D09-Feb-202317.7 KiB374273

atomic_flag_clear.cH A D08-May-2022791 2610

atomic_flag_clear_explicit.cH A D08-May-2022859 2711

atomic_flag_test_and_set.cH A D08-May-2022823 2610

atomic_flag_test_and_set_explicit.cH A D08-May-2022898 2711

atomic_signal_fence.cH A D08-May-2022761 2610

atomic_thread_fence.cH A D08-May-2022761 2610

bswapdi2.cH A D08-May-2022958 2612

bswapsi2.cH A D08-May-2022743 217

clear_cache.cH A D12-Jan-20247.6 KiB213146

clzdi2.cH A D08-May-20221.3 KiB3614

clzsi2.cH A D08-May-20221.5 KiB4917

clzti2.cH A D08-May-2022884 3010

cmpdi2.cH A D08-May-20221.1 KiB4321

cmpti2.cH A D08-May-2022974 3818

comparedf2.cH A D08-May-20222.5 KiB7828

comparesf2.cH A D08-May-20222.5 KiB7828

comparetf2.cH A D12-Jan-20241.9 KiB6417

crtbegin.cH A D12-Jan-20244.3 KiB136113

crtend.cH A D12-Jan-2024890 2311

ctzdi2.cH A D08-May-20221.3 KiB3614

ctzsi2.cH A D08-May-20221.6 KiB5419

ctzti2.cH A D08-May-2022884 3010

divdc3.cH A D08-May-20222.3 KiB5640

divdf3.cH A D08-May-2022986 3012

divdi3.cH A D08-May-2022780 236

divmoddi4.cH A D13-Apr-20241.3 KiB2913

divmodsi4.cH A D13-Apr-20241.3 KiB3013

divmodti4.cH A D13-Apr-20241.3 KiB3315

divsc3.cH A D08-May-20222.2 KiB5539

divsf3.cH A D08-May-20221,021 3113

divsi3.cH A D08-May-20221 KiB319

divtc3.cH A D13-Apr-20242.3 KiB5739

divtf3.cH A D12-Jan-2024840 278

divti3.cH A D08-May-2022829 278

divxc3.cH A D13-Apr-20242.2 KiB5638

emutls.cH A D09-Feb-202313.3 KiB409286

enable_execute_stack.cH A D08-May-20222.1 KiB6842

eprintf.cH A D23-Jun-2023988 3014

extenddftf2.cH A D13-Apr-2024594 208

extendhfsf2.cH A D08-May-2022937 2814

extendhftf2.cH A D13-Apr-2024615 218

extendsfdf2.cH A D08-May-2022716 2211

extendsftf2.cH A D13-Apr-2024594 208

extendxftf2.cH A D13-Apr-2024736 2510

ffsdi2.cH A D08-May-2022900 2811

ffssi2.cH A D08-May-2022776 247

ffsti2.cH A D08-May-2022969 3213

fixdfdi.cH A D14-May-20221.3 KiB4926

fixdfsi.cH A D08-May-2022755 2413

fixdfti.cH A D08-May-2022633 229

fixsfdi.cH A D14-May-20221.3 KiB4926

fixsfsi.cH A D08-May-2022755 2413

fixsfti.cH A D08-May-2022633 229

fixtfdi.cH A D12-Jan-2024597 198

fixtfsi.cH A D12-Jan-2024597 198

fixtfti.cH A D12-Jan-2024597 198

fixunsdfdi.cH A D14-May-20221.4 KiB4725

fixunsdfsi.cH A D08-May-2022743 2312

fixunsdfti.cH A D08-May-2022611 198

fixunssfdi.cH A D14-May-20221.4 KiB4826

fixunssfsi.cH A D08-May-2022896 2712

fixunssfti.cH A D08-May-2022731 227

fixunstfdi.cH A D12-Jan-2024577 187

fixunstfsi.cH A D12-Jan-2024577 187

fixunstfti.cH A D12-Jan-2024577 187

fixunsxfdi.cH A D13-Apr-20241.6 KiB5120

fixunsxfsi.cH A D13-Apr-20241.6 KiB5120

fixunsxfti.cH A D13-Apr-20241.4 KiB4518

fixxfdi.cH A D13-Apr-20241.7 KiB5525

fixxfti.cH A D13-Apr-20241.5 KiB4721

floatdidf.cH A D13-Apr-20241.9 KiB6630

floatdisf.cH A D13-Apr-20241.2 KiB3915

floatditf.cH A D12-Jan-20241.5 KiB5021

floatdixf.cH A D13-Apr-20241.4 KiB4217

floatsidf.cH A D13-Apr-20241.7 KiB5927

floatsisf.cH A D13-Apr-20241.9 KiB6737

floatsitf.cH A D13-Apr-20241.5 KiB5021

floattidf.cH A D13-Apr-2024989 327

floattisf.cH A D13-Apr-2024942 317

floattitf.cH A D13-Apr-20241.2 KiB369

floattixf.cH A D13-Apr-20242.5 KiB7438

floatundidf.cH A D13-Apr-20242.1 KiB7236

floatundisf.cH A D13-Apr-20241.2 KiB3915

floatunditf.cH A D12-Jan-20241.2 KiB4115

floatundixf.cH A D13-Apr-20241.2 KiB3814

floatunsidf.cH A D08-May-20221.4 KiB4821

floatunsisf.cH A D14-May-20221.7 KiB5831

floatunsitf.cH A D12-Jan-20241.2 KiB4115

floatuntidf.cH A D13-Apr-2024994 327

floatuntisf.cH A D13-Apr-2024946 317

floatuntitf.cH A D13-Apr-20241.2 KiB369

floatuntixf.cH A D13-Apr-20242.4 KiB7135

fp_add_impl.incH A D08-May-20225.4 KiB173151

fp_compare_impl.incH A D09-Feb-20233.5 KiB120107

fp_div_impl.incH A D08-May-202218.3 KiB420373

fp_extend.hH A D13-Apr-20244.9 KiB175115

fp_extend_impl.incH A D13-Apr-20244.2 KiB10998

fp_fixint_impl.incH A D13-Apr-20241.5 KiB4135

fp_fixuint_impl.incH A D08-May-20221.4 KiB3933

fp_lib.hH A D13-Apr-202413.7 KiB426318

fp_mode.cH A D09-Feb-2023826 235

fp_mode.hH A D14-May-2022852 3011

fp_mul_impl.incH A D08-May-20224.4 KiB129109

fp_trunc.hH A D13-Apr-20244.6 KiB159104

fp_trunc_impl.incH A D13-Apr-20246.2 KiB156140

gcc_personality_v0.cH A D12-Jan-20249.2 KiB273188

int_div_impl.incH A D08-May-20223.3 KiB9690

int_endianness.hH A D09-Feb-20232.7 KiB11568

int_lib.hH A D13-Apr-20245.1 KiB174122

int_math.hH A D13-Apr-20243.7 KiB10977

int_mulo_impl.incH A D12-Jan-20241.4 KiB5045

int_mulv_impl.incH A D12-Jan-20241.3 KiB4843

int_to_fp.hH A D13-Apr-20241.8 KiB8354

int_to_fp_impl.incH A D13-Apr-20242.7 KiB7367

int_types.hH A D13-Apr-20246.9 KiB277206

int_util.cH A D08-May-20221.9 KiB6435

int_util.hH A D08-May-20222.2 KiB4823

lshrdi3.cH A D08-May-20221.2 KiB3920

lshrti3.cH A D12-Jan-20241.2 KiB3919

moddi3.cH A D08-May-2022779 236

modsi3.cH A D08-May-2022649 204

modti3.cH A D08-May-2022828 278

muldc3.cH A D08-May-20222.1 KiB6650

muldf3.cH A D08-May-2022918 2610

muldi3.cH A D08-May-20221.5 KiB5232

mulodi4.cH A D12-Jan-2024779 246

mulosi4.cH A D12-Jan-2024779 246

muloti4.cH A D12-Jan-2024850 309

mulsc3.cH A D08-May-20222.1 KiB6549

mulsf3.cH A D08-May-2022918 2610

multc3.cH A D13-Apr-20242 KiB7153

multf3.cH A D12-Jan-2024772 236

multi3.cH A D08-May-20221.5 KiB5231

mulvdi3.cH A D12-Jan-2024738 224

mulvsi3.cH A D12-Jan-2024738 224

mulvti3.cH A D12-Jan-2024809 287

mulxc3.cH A D13-Apr-20242.2 KiB7052

negdf2.cH A D08-May-2022832 2510

negdi2.cH A D13-Apr-2024727 224

negsf2.cH A D08-May-2022832 2510

negti2.cH A D13-Apr-2024776 266

negvdi2.cH A D12-Jan-2024784 268

negvsi2.cH A D12-Jan-2024784 268

negvti2.cH A D13-Apr-2024817 299

os_version_check.cH A D12-Jan-202411.3 KiB329241

paritydi2.cH A D08-May-2022793 2610

paritysi2.cH A D08-May-2022751 248

parityti2.cH A D08-May-2022888 3214

popcountdi2.cH A D08-May-20221.3 KiB3310

popcountsi2.cH A D08-May-20221.1 KiB309

popcountti2.cH A D08-May-20221.7 KiB4417

powidf2.cH A D08-May-2022786 3014

powisf2.cH A D08-May-2022783 3014

powitf2.cH A D13-Apr-2024840 3517

powixf2.cH A D13-Apr-2024816 3416

subdf3.cH A D08-May-2022917 2812

subsf3.cH A D08-May-2022917 2812

subtf3.cH A D12-Jan-2024798 258

subvdi3.cH A D08-May-2022819 3012

subvsi3.cH A D08-May-2022819 3012

subvti3.cH A D08-May-2022868 3414

trampoline_setup.cH A D23-Jun-20231.8 KiB4421

truncdfbf2.cH A D09-Feb-2023513 144

truncdfhf2.cH A D08-May-2022709 2211

truncdfsf2.cH A D08-May-2022711 2211

truncsfbf2.cH A D09-Feb-2023512 144

truncsfhf2.cH A D08-May-2022931 2814

trunctfdf2.cH A D13-Apr-2024591 208

trunctfhf2.cH A D13-Apr-2024612 218

trunctfsf2.cH A D13-Apr-2024591 208

trunctfxf2.cH A D13-Apr-2024732 248

ucmpdi2.cH A D08-May-20221.1 KiB4321

ucmpti2.cH A D08-May-2022978 3818

udivdi3.cH A D08-May-2022724 247

udivmoddi4.cH A D14-May-20225.4 KiB201126

udivmodsi4.cH A D08-May-2022715 226

udivmodti4.cH A D08-May-20224.9 KiB159105

udivsi3.cH A D08-May-2022802 2810

udivti3.cH A D08-May-2022699 246

umoddi3.cH A D08-May-2022724 247

umodsi3.cH A D08-May-2022724 247

umodti3.cH A D08-May-2022717 268

unwind-ehabi-helpers.hH A D08-May-20221.9 KiB5216

README.txt

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