This repository was archived by the owner on May 21, 2019. It is now read-only.
File tree 1 file changed +22
-0
lines changed 1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change 77
77
/* Include internal utility function declarations. */
78
78
#include "int_util.h"
79
79
80
+ /*
81
+ * Workaround for LLVM bug 11663. Prevent endless recursion in
82
+ * __c?zdi2(), where calls to __builtin_c?z() are expanded to
83
+ * __c?zdi2() instead of __c?zsi2().
84
+ *
85
+ * Instead of placing this workaround in c?zdi2.c, put it in this
86
+ * global header to prevent other C files from making the detour
87
+ * through __c?zdi2() as well.
88
+ *
89
+ * This problem has been observed on FreeBSD for sparc64 and
90
+ * mips64 with GCC 4.2.1, and for riscv with GCC 5.2.0.
91
+ * Presumably it's any version of GCC, and targeting an arch that
92
+ * does not have dedicated bit counting instructions.
93
+ */
94
+ #if ((defined(__sparc__ ) && defined(__arch64__ )) || defined(__mips_n64 ) || defined(__mips_o64 ) || defined(__riscv__ ) \
95
+ || (defined(_MIPS_SIM ) && ((_MIPS_SIM == _ABI64 ) || (_MIPS_SIM == _ABIO64 ))))
96
+ si_int __clzsi2 (si_int );
97
+ si_int __ctzsi2 (si_int );
98
+ #define __builtin_clz __clzsi2
99
+ #define __builtin_ctz __ctzsi2
100
+ #endif /* sparc64 || mips_n64 || mips_o64 || riscv */
101
+
80
102
COMPILER_RT_ABI si_int __paritysi2 (si_int a );
81
103
COMPILER_RT_ABI si_int __paritydi2 (di_int a );
82
104
You can’t perform that action at this time.
0 commit comments