Skip to content
This repository was archived by the owner on Mar 31, 2025. It is now read-only.

Commit 2cf5ef4

Browse files
committed
Revert "Remove useless define from clzdi2 and ctzdi2"
This reverts commit 1d54852.
1 parent 1d54852 commit 2cf5ef4

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

clzdi2.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414

1515
// Returns: the number of leading 0-bits
1616

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+
1727
// Precondition: a != 0
1828

1929
COMPILER_RT_ABI int __clzdi2(di_int a) {

ctzdi2.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414

1515
// Returns: the number of trailing 0-bits
1616

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+
1727
// Precondition: a != 0
1828

1929
COMPILER_RT_ABI int __ctzdi2(di_int a) {

0 commit comments

Comments
 (0)