in reply to Re: unpacking 6-bit values
in thread unpacking 6-bit values

Not sure if the C version of the jmcnamara idea got benchmarked.

Yes. It is laballed as _24to32_2() in my benchmark posts above. The _byteswap_ulong() is a compiler pragma that reduces to a single x64 assembler instruction that effectively does the same thing as your manipulations of the temp variable above. And the masking constants are hardcoded.

void _24to32_2( SV *packed ) { IS_VARS; char *pp = SvPVX( packed ); int i; IS_RESET; for( i=0; i<24; i+=3 ) { unsigned int n = _byteswap_ulong( *(unsigned long*)&pp[ i -1 ] + ); IS_PUSHUV( ( n & 0xfc0000 ) >> 18 ); IS_PUSHUV( ( n & 0x03f000 ) >> 12 ); IS_PUSHUV( ( n & 0x000fc0 ) >> 6 ); IS_PUSHUV( ( n & 0x00003f ) ); } IS_DONE; return; }

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.