Skip to content

Commit d7b0a0c

Browse files
committed
fix macro
1 parent be93fe7 commit d7b0a0c

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

mypyc/lib-rt/int_ops.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@
1515
#define CPyLong_FromSsize_t PyLong_FromSsize_t
1616
#endif
1717

18+
#if defined(__GNUC__) || defined(__clang__)
19+
# if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || (defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8)
20+
# define CPY_CLZ(x) __builtin_clzll((unsigned long long)(x))
21+
# define CPY_BITS 64
22+
# else
23+
# define CPY_CLZ(x) __builtin_clz((unsigned int)(x))
24+
# define CPY_BITS 32
25+
# endif
26+
#endif
27+
28+
1829
CPyTagged CPyTagged_FromSsize_t(Py_ssize_t value) {
1930
// We use a Python object if the value shifted left by 1 is too
2031
// large for Py_ssize_t
@@ -596,7 +607,7 @@ CPyTagged CPyTagged_BitLength(CPyTagged self) {
596607
int bits = 0;
597608
if (absval) {
598609
#if defined(__GNUC__) || defined(__clang__)
599-
bits = (int)(sizeof(absval) * 8) - __builtin_clzll((unsigned long long)absval);
610+
bits = (int)(CPY_BITS - CPY_CLZ(absval));
600611
#else
601612
// Fallback to loop if no builtin
602613
while (absval) {

0 commit comments

Comments
 (0)