Commit a3277e4
committed
perf(longobject): extend freelist to 3-digit PyLong objects
Extends the ints2 freelist pattern to 3-digit objects, which cover the range [2^60, 2^63-1] (positive) and [-2^63, -2^60] (negative) on 30-bit builds - including INT64_MAX, INT64_MIN, and nanosecond-precision timestamps.
Also fuses the two _PyLong_IsCompact + _PyLong_DigitCount checks in long_dealloc under a single PyLong_CheckExact branch.
Benchmark (5M ops, 30-bit build):
2-digit+2-digit -> 3-digit result: 19.6 ns -> 17.0 ns (-13%)
3-digit+compact -> 3-digit result: 18.3 ns -> 15.4 ns (-16%)
INT64_MAX + 0: 18.2 ns -> 15.9 ns (-13%)
INT64_MIN + 0: 18.1 ns -> 16.2 ns (-10%)1 parent 87758ec commit a3277e4
3 files changed
Lines changed: 26 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
49 | 50 | | |
50 | 51 | | |
51 | 52 | | |
| 53 | + | |
52 | 54 | | |
53 | 55 | | |
54 | 56 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
175 | 175 | | |
176 | 176 | | |
177 | 177 | | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
178 | 181 | | |
179 | 182 | | |
180 | 183 | | |
| |||
3647 | 3650 | | |
3648 | 3651 | | |
3649 | 3652 | | |
3650 | | - | |
| 3653 | + | |
| 3654 | + | |
3651 | 3655 | | |
3652 | 3656 | | |
3653 | 3657 | | |
| 3658 | + | |
| 3659 | + | |
| 3660 | + | |
| 3661 | + | |
3654 | 3662 | | |
3655 | 3663 | | |
3656 | 3664 | | |
| |||
3667 | 3675 | | |
3668 | 3676 | | |
3669 | 3677 | | |
3670 | | - | |
3671 | | - | |
3672 | | - | |
3673 | | - | |
3674 | | - | |
3675 | | - | |
3676 | | - | |
| 3678 | + | |
| 3679 | + | |
| 3680 | + | |
| 3681 | + | |
| 3682 | + | |
| 3683 | + | |
| 3684 | + | |
| 3685 | + | |
| 3686 | + | |
| 3687 | + | |
| 3688 | + | |
| 3689 | + | |
| 3690 | + | |
| 3691 | + | |
3677 | 3692 | | |
3678 | 3693 | | |
3679 | 3694 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
953 | 953 | | |
954 | 954 | | |
955 | 955 | | |
| 956 | + | |
956 | 957 | | |
957 | 958 | | |
958 | 959 | | |
| |||
0 commit comments