Skip to content

GH-101291: Rearrange the size bits in PyLongObject#102464

Merged
markshannon merged 37 commits intopython:mainfrom
faster-cpython:long-rearrange-size-bits
Mar 22, 2023
Merged

GH-101291: Rearrange the size bits in PyLongObject#102464
markshannon merged 37 commits intopython:mainfrom
faster-cpython:long-rearrange-size-bits

Conversation

@markshannon
Copy link
Copy Markdown
Member

@markshannon markshannon commented Mar 6, 2023

This PR rearranges the bits in what was ob_size, to slightly speedup the most common operations and to prepare for storing the tagged 2-complement value directly in a future PR.

The new layout is as follows:

  • Bits 0 and 1: 1 - sign. I.e. 0 for positive numbers, 1 for zero and 2 for negative numbers.
  • Bit 2 reserved (probably for the immortal bit)
  • Bits 3+ the unsigned size.

The bulk of the change is removing all the uses of Py_SIZE and Py_SETSIZE, and replacing them with a new set of inline functions.
It disturbs me how much we use unchecked casts, but that's a separate issue...

This will, inevitably, break Cython generated code again.

Performance measurement shows no significant change: https://github.com/faster-cpython/benchmarking/tree/main/results/bm-20230302-3.12.0a5%2B-ce6bfb2

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants