This repository was archived by the owner on Mar 31, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +20
-0
lines changed Expand file tree Collapse file tree 2 files changed +20
-0
lines changed Original file line number Diff line number Diff line change 14
14
15
15
// Returns: the number of leading 0-bits
16
16
17
+ #if !defined(__clang__ ) && \
18
+ ((defined(__sparc__ ) && defined(__arch64__ )) || defined(__mips64 ) || \
19
+ (defined(__riscv ) && __SIZEOF_POINTER__ >= 8 ))
20
+ // On 64-bit architectures with neither a native clz instruction nor a native
21
+ // ctz instruction, gcc resolves __builtin_clz to __clzdi2 rather than
22
+ // __clzsi2, leading to infinite recursion.
23
+ #define __builtin_clz (a ) __clzsi2(a)
24
+ extern int __clzsi2 (si_int );
25
+ #endif
26
+
17
27
// Precondition: a != 0
18
28
19
29
COMPILER_RT_ABI int __clzdi2 (di_int a ) {
Original file line number Diff line number Diff line change 14
14
15
15
// Returns: the number of trailing 0-bits
16
16
17
+ #if !defined(__clang__ ) && \
18
+ ((defined(__sparc__ ) && defined(__arch64__ )) || defined(__mips64 ) || \
19
+ (defined(__riscv ) && __SIZEOF_POINTER__ >= 8 ))
20
+ // On 64-bit architectures with neither a native clz instruction nor a native
21
+ // ctz instruction, gcc resolves __builtin_ctz to __ctzdi2 rather than
22
+ // __ctzsi2, leading to infinite recursion.
23
+ #define __builtin_ctz (a ) __ctzsi2(a)
24
+ extern int __ctzsi2 (si_int );
25
+ #endif
26
+
17
27
// Precondition: a != 0
18
28
19
29
COMPILER_RT_ABI int __ctzdi2 (di_int a ) {
You can’t perform that action at this time.
0 commit comments