4
4
// See https://llvm.org/LICENSE.txt for license information.
5
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
6
//
7
+ // 2024/10/20 - Modified by mintsuki for use inside cc-runtime
8
+ //
7
9
// ===----------------------------------------------------------------------===//
8
10
//
9
11
// Helpers used by __udivsi3, __umodsi3, __udivdi3, and __umodsi3.
12
14
13
15
#define clz (a ) (sizeof (a) == sizeof (unsigned long long ) ? __builtin_clzll(a) : clzsi(a))
14
16
17
+ #undef __udivXi3
18
+ #define __udivXi3 __udivXi3__EXTERNAL_COUNTER
19
+
15
20
// Adapted from Figure 3-40 of The PowerPC Compiler Writer's Guide
16
21
static __inline fixuint_t __udivXi3 (fixuint_t n, fixuint_t d) {
17
22
const unsigned N = sizeof (fixuint_t ) * CHAR_BIT;
@@ -41,6 +46,9 @@ static __inline fixuint_t __udivXi3(fixuint_t n, fixuint_t d) {
41
46
return n;
42
47
}
43
48
49
+ #undef __umodXi3
50
+ #define __umodXi3 __umodXi3__EXTERNAL_COUNTER
51
+
44
52
// Mostly identical to __udivXi3 but the return values are different.
45
53
static __inline fixuint_t __umodXi3 (fixuint_t n, fixuint_t d) {
46
54
const unsigned N = sizeof (fixuint_t ) * CHAR_BIT;
@@ -69,7 +77,12 @@ static __inline fixuint_t __umodXi3(fixuint_t n, fixuint_t d) {
69
77
return r;
70
78
}
71
79
80
+ #undef __divXi3
81
+
72
82
#ifdef COMPUTE_UDIV
83
+
84
+ #define __divXi3 __divXi3__EXTERNAL_COUNTER
85
+
73
86
static __inline fixint_t __divXi3 (fixint_t a, fixint_t b) {
74
87
const int N = (int )(sizeof (fixint_t ) * CHAR_BIT) - 1 ;
75
88
fixint_t s_a = a >> N; // s_a = a < 0 ? -1 : 0
@@ -81,7 +94,12 @@ static __inline fixint_t __divXi3(fixint_t a, fixint_t b) {
81
94
}
82
95
#endif // COMPUTE_UDIV
83
96
97
+ #undef __modXi3
98
+
84
99
#ifdef ASSIGN_UMOD
100
+
101
+ #define __modXi3 __modXi3__EXTERNAL_COUNTER
102
+
85
103
static __inline fixint_t __modXi3 (fixint_t a, fixint_t b) {
86
104
const int N = (int )(sizeof (fixint_t ) * CHAR_BIT) - 1 ;
87
105
fixint_t s = b >> N; // s = b < 0 ? -1 : 0
@@ -93,3 +111,5 @@ static __inline fixint_t __modXi3(fixint_t a, fixint_t b) {
93
111
return (res ^ s) + (-s); // negate if s == -1
94
112
}
95
113
#endif // ASSIGN_UMOD
114
+
115
+ #undef clz
0 commit comments