Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion c2rust-lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ pub mod internal {
};
}

cfg_select!(
crate::lib::polyfill::cfg_select!(
feature = "custom-prefix" => {
#[cfg(feature = "export-symbols")]
macro_rules! prefix {
Expand Down
68 changes: 34 additions & 34 deletions lib/common/bitstream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,19 @@ pub(crate) struct BIT_CStream_t {

#[inline]
pub(crate) unsafe fn BIT_initCStream(
bitC: *mut BIT_CStream_t,
bitC: &mut BIT_CStream_t,
startPtr: *mut core::ffi::c_void,
dstCapacity: size_t,
) -> size_t {
(*bitC).bitContainer = 0;
(*bitC).bitPos = 0;
(*bitC).startPtr = startPtr as *mut core::ffi::c_char;
(*bitC).ptr = (*bitC).startPtr;
(*bitC).endPtr = ((*bitC).startPtr)
bitC.bitContainer = 0;
bitC.bitPos = 0;
bitC.startPtr = startPtr as *mut core::ffi::c_char;
bitC.ptr = bitC.startPtr;
bitC.endPtr = bitC
.startPtr
.add(dstCapacity)
.offset(-(::core::mem::size_of::<BitContainerType>() as core::ffi::c_ulong as isize));
if dstCapacity <= ::core::mem::size_of::<BitContainerType>() {
.sub(size_of::<BitContainerType>());
if dstCapacity <= size_of::<BitContainerType>() {
return Error::dstSize_tooSmall.to_error_code();
}
0
Expand All @@ -44,60 +45,59 @@ static BIT_mask: [core::ffi::c_uint; 32] = [
];

#[inline(always)]
unsafe fn BIT_getLowerBits(bitContainer: BitContainerType, nbBits: u32) -> BitContainerType {
bitContainer & *BIT_mask.as_ptr().offset(nbBits as isize) as BitContainerType
fn BIT_getLowerBits(bitContainer: BitContainerType, nbBits: u32) -> BitContainerType {
bitContainer & BIT_mask[nbBits as usize] as BitContainerType
Copy link
Copy Markdown
Collaborator

@bjorn3 bjorn3 May 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this not regress performance?

}

#[inline]
pub(crate) unsafe fn BIT_addBits(
bitC: *mut BIT_CStream_t,
bitC: &mut BIT_CStream_t,
value: BitContainerType,
nbBits: core::ffi::c_uint,
) {
(*bitC).bitContainer |= BIT_getLowerBits(value, nbBits) << (*bitC).bitPos;
(*bitC).bitPos = ((*bitC).bitPos).wrapping_add(nbBits);
bitC.bitContainer |= BIT_getLowerBits(value, nbBits) << bitC.bitPos;
bitC.bitPos = bitC.bitPos.wrapping_add(nbBits);
}

#[inline]
unsafe fn BIT_addBitsFast(
bitC: *mut BIT_CStream_t,
bitC: &mut BIT_CStream_t,
value: BitContainerType,
nbBits: core::ffi::c_uint,
) {
(*bitC).bitContainer |= value << (*bitC).bitPos;
(*bitC).bitPos = ((*bitC).bitPos).wrapping_add(nbBits);
bitC.bitContainer |= value << bitC.bitPos;
bitC.bitPos = bitC.bitPos.wrapping_add(nbBits);
}

#[inline]
pub(crate) unsafe fn BIT_flushBits(bitC: *mut BIT_CStream_t) {
let nbBytes = ((*bitC).bitPos >> 3) as size_t;
MEM_writeLEST((*bitC).ptr as *mut core::ffi::c_void, (*bitC).bitContainer);
(*bitC).ptr = ((*bitC).ptr).add(nbBytes);
if (*bitC).ptr > (*bitC).endPtr {
(*bitC).ptr = (*bitC).endPtr;
pub(crate) unsafe fn BIT_flushBits(bitC: &mut BIT_CStream_t) {
let nbBytes = (bitC.bitPos >> 3) as size_t;
MEM_writeLEST(bitC.ptr as *mut core::ffi::c_void, bitC.bitContainer);
bitC.ptr = bitC.ptr.add(nbBytes);
if bitC.ptr > bitC.endPtr {
bitC.ptr = bitC.endPtr;
}
(*bitC).bitPos &= 7;
(*bitC).bitContainer >>= nbBytes * 8;
bitC.bitPos &= 7;
bitC.bitContainer >>= nbBytes * 8;
}

#[inline]
pub(crate) unsafe fn BIT_flushBitsFast(bitC: *mut BIT_CStream_t) {
let nbBytes = ((*bitC).bitPos >> 3) as size_t;
MEM_writeLEST((*bitC).ptr as *mut core::ffi::c_void, (*bitC).bitContainer);
(*bitC).ptr = ((*bitC).ptr).add(nbBytes);
(*bitC).bitPos &= 7;
(*bitC).bitContainer >>= nbBytes * 8;
pub(crate) unsafe fn BIT_flushBitsFast(bitC: &mut BIT_CStream_t) {
let nbBytes = (bitC.bitPos >> 3) as size_t;
MEM_writeLEST(bitC.ptr as *mut core::ffi::c_void, bitC.bitContainer);
bitC.ptr = bitC.ptr.add(nbBytes);
bitC.bitPos &= 7;
bitC.bitContainer >>= nbBytes * 8;
}

#[inline]
pub(crate) unsafe fn BIT_closeCStream(bitC: *mut BIT_CStream_t) -> size_t {
pub(crate) unsafe fn BIT_closeCStream(bitC: &mut BIT_CStream_t) -> size_t {
BIT_addBitsFast(bitC, 1, 1);
BIT_flushBits(bitC);
if (*bitC).ptr >= (*bitC).endPtr {
if bitC.ptr >= bitC.endPtr {
return 0;
}
(((*bitC).ptr).offset_from((*bitC).startPtr) as usize)
.wrapping_add(((*bitC).bitPos > 0) as usize)
(bitC.ptr.offset_from(bitC.startPtr) as usize).wrapping_add((bitC.bitPos > 0) as usize)
}

/// Bitstream decoder
Expand Down
4 changes: 2 additions & 2 deletions lib/common/fse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ pub(crate) unsafe fn FSE_initCState2(

#[inline]
pub(crate) unsafe fn FSE_encodeSymbol(
bitC: *mut BIT_CStream_t,
bitC: &mut BIT_CStream_t,
statePtr: *mut FSE_CState_t,
symbol: core::ffi::c_uint,
) {
Expand All @@ -120,7 +120,7 @@ pub(crate) unsafe fn FSE_encodeSymbol(
}

#[inline]
pub(crate) unsafe fn FSE_flushCState(bitC: *mut BIT_CStream_t, statePtr: *const FSE_CState_t) {
pub(crate) unsafe fn FSE_flushCState(bitC: &mut BIT_CStream_t, statePtr: *const FSE_CState_t) {
BIT_addBits(
bitC,
(*statePtr).value as BitContainerType,
Expand Down
2 changes: 1 addition & 1 deletion lib/compress/fse_compress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ unsafe fn FSE_initCState2(statePtr: *mut FSE_CState_t, ct: *const FSE_CTable, sy
as ptrdiff_t;
}
#[inline]
unsafe fn FSE_flushCState(bitC: *mut BIT_CStream_t, statePtr: *const FSE_CState_t) {
unsafe fn FSE_flushCState(bitC: &mut BIT_CStream_t, statePtr: *const FSE_CState_t) {
BIT_addBits(
bitC,
(*statePtr).value as BitContainerType,
Expand Down
Loading