libgcc.h File Reference

#include <stdint.h>
#include <stddef.h>

Go to the source code of this file.

Functions

__libgcc uint64_t __udivmoddi4 (uint64_t num, uint64_t den, uint64_t *rem)
__libgcc uint64_t __udivdi3 (uint64_t num, uint64_t den)
__libgcc uint64_t __umoddi3 (uint64_t num, uint64_t den)
__libgcc int64_t __divdi3 (int64_t num, int64_t den)
__libgcc int64_t __moddi3 (int64_t num, int64_t den)


Function Documentation

__libgcc uint64_t __udivmoddi4 ( uint64_t  num,
uint64_t  den,
uint64_t rem 
)

Definition at line 3 of file __udivmoddi4.c.

Referenced by __divdi3(), __moddi3(), __udivdi3(), and __umoddi3().

00004 {
00005   uint64_t quot = 0, qbit = 1;
00006 
00007   if ( den == 0 ) {
00008     return 1/((unsigned)den); /* Intentional divide by zero, without
00009                                  triggering a compiler warning which
00010                                  would abort the build */
00011   }
00012 
00013   /* Left-justify denominator and count shift */
00014   while ( (int64_t)den >= 0 ) {
00015     den <<= 1;
00016     qbit <<= 1;
00017   }
00018 
00019   while ( qbit ) {
00020     if ( den <= num ) {
00021       num -= den;
00022       quot += qbit;
00023     }
00024     den >>= 1;
00025     qbit >>= 1;
00026   }
00027 
00028   if ( rem_p )
00029     *rem_p = num;
00030 
00031   return quot;
00032 }

__libgcc uint64_t __udivdi3 ( uint64_t  num,
uint64_t  den 
)

Definition at line 7 of file __udivdi3.c.

References __udivmoddi4(), and NULL.

00008 {
00009   return __udivmoddi4(num, den, NULL);
00010 }

__libgcc uint64_t __umoddi3 ( uint64_t  num,
uint64_t  den 
)

Definition at line 7 of file __umoddi3.c.

References __udivmoddi4().

00008 {
00009   uint64_t v;
00010 
00011   (void) __udivmoddi4(num, den, &v);
00012   return v;
00013 }

__libgcc int64_t __divdi3 ( int64_t  num,
int64_t  den 
)

Definition at line 7 of file __divdi3.c.

References __udivmoddi4(), and NULL.

00008 {
00009   int minus = 0;
00010   int64_t v;
00011 
00012   if ( num < 0 ) {
00013     num = -num;
00014     minus = 1;
00015   }
00016   if ( den < 0 ) {
00017     den = -den;
00018     minus ^= 1;
00019   }
00020 
00021   v = __udivmoddi4(num, den, NULL);
00022   if ( minus )
00023     v = -v;
00024 
00025   return v;
00026 }

__libgcc int64_t __moddi3 ( int64_t  num,
int64_t  den 
)

Definition at line 7 of file __moddi3.c.

References __udivmoddi4().

00008 {
00009   int minus = 0;
00010   int64_t v;
00011 
00012   if ( num < 0 ) {
00013     num = -num;
00014     minus = 1;
00015   }
00016   if ( den < 0 ) {
00017     den = -den;
00018     minus ^= 1;
00019   }
00020 
00021   (void) __udivmoddi4(num, den, (uint64_t *)&v);
00022   if ( minus )
00023     v = -v;
00024 
00025   return v;
00026 }


Generated on Tue Apr 6 20:01:54 2010 for gPXE by  doxygen 1.5.7.1