Add raw_* methods to bit32 and bit64 for efficient bit operations#11
Merged
derek-miller merged 1 commit intomainfrom Jan 29, 2026
Merged
Add raw_* methods to bit32 and bit64 for efficient bit operations#11derek-miller merged 1 commit intomainfrom
derek-miller merged 1 commit intomainfrom
Conversation
4590584 to
79feab7
Compare
…erations This adds raw_* variants of all bit operations that bypass the to_unsigned() wrapper on LuaJIT, providing direct access to native bit library functions. For XOR, AND, OR, and rotate operations, the signedness doesn't matter since bit patterns are identical. New functions in bit32: - raw_band, raw_bor, raw_bxor, raw_bnot - raw_lshift, raw_rshift, raw_arshift - raw_rol, raw_ror - raw_add New functions in bit64: - raw_band, raw_bor, raw_bxor, raw_bnot - raw_lshift, raw_rshift, raw_arshift - raw_rol, raw_ror - raw_add Key implementation details: - On LuaJIT: raw_* are direct references to bit.* functions (zero overhead) - On Lua 5.3+: raw_* use native operators with 32-bit masking for shifts - On Lua 5.2: raw_* are direct references to bit32.* (already unsigned) - On Pure Lua: raw_* fall back to safe implementations (no native library) - raw_rol/raw_ror fall back to computed versions on non-LuaJIT (not nil) Note: Shift amounts >= 32 (or >= 64 for bit64) have platform-specific behavior. LuaJIT wraps (n % 32), Lua 5.3+ returns 0. Callers should keep n in valid range.
79feab7 to
4fa60a0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces
raw_*methods for bitwise operations in thebit32andbit64modules, allowing zero-overhead access to native bit library functions across different Lua versions. The addition includes:bit32:raw_band,raw_bor,raw_bxor,raw_bnot,raw_lshift,raw_rshift,raw_arshift,raw_rol,raw_ror, andraw_add.bit64:raw_band,raw_bor,raw_bxor,raw_bnot,raw_lshift,raw_rshift,raw_arshift,raw_rol,raw_ror, andraw_add.Implementation details:
bit.*for zero overhead.bit32.*.Note: Behavior for shift amounts beyond bounds (e.g., >=32 or >=64) varies across Lua implementations. It is the caller's responsibility to ensure valid ranges for such amounts.