iPXE
libgcc
__udivmoddi4.c
Go to the documentation of this file.
1
#include "
libgcc.h
"
2
3
__libgcc
uint64_t
__udivmoddi4
(
uint64_t
num
,
uint64_t
den,
uint64_t
*rem_p)
4
{
5
uint64_t
quot = 0, qbit = 1;
6
7
if
( den == 0 ) {
8
return
1/((unsigned)den);
/* Intentional divide by zero, without
9
triggering a compiler warning which
10
would abort the build */
11
}
12
13
/* Left-justify denominator and count shift */
14
while
( (
int64_t
)den >= 0 ) {
15
den <<= 1;
16
qbit <<= 1;
17
}
18
19
while
( qbit ) {
20
if
( den <=
num
) {
21
num
-= den;
22
quot += qbit;
23
}
24
den >>= 1;
25
qbit >>= 1;
26
}
27
28
if
( rem_p )
29
*rem_p =
num
;
30
31
return
quot;
32
}
uint64_t
unsigned long long uint64_t
Definition:
stdint.h:13
num
uint32_t num
Definition:
multiboot.h:12
int64_t
signed long long int64_t
Definition:
stdint.h:18
__udivmoddi4
__libgcc uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p)
Definition:
__udivmoddi4.c:3
__libgcc
#define __libgcc
Declare a function with libgcc implicit linkage.
Definition:
compiler.h:37
libgcc.h
Generated by
1.8.15