Skip to content

Commit be93fe7

Browse files
committed
optimize fast path for short
1 parent 1e10c40 commit be93fe7

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

mypyc/lib-rt/int_ops.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,9 +594,16 @@ CPyTagged CPyTagged_BitLength(CPyTagged self) {
594594
Py_ssize_t val = CPyTagged_ShortAsSsize_t(self);
595595
Py_ssize_t absval = val < 0 ? -val : val;
596596
int bits = 0;
597-
while (absval) {
598-
absval >>= 1;
599-
bits++;
597+
if (absval) {
598+
#if defined(__GNUC__) || defined(__clang__)
599+
bits = (int)(sizeof(absval) * 8) - __builtin_clzll((unsigned long long)absval);
600+
#else
601+
// Fallback to loop if no builtin
602+
while (absval) {
603+
absval >>= 1;
604+
bits++;
605+
}
606+
#endif
600607
}
601608
return bits << 1;
602609
}

0 commit comments

Comments
 (0)