[erlang-questions] bit syntax slower than bit operations

Matthias Radestock matthias@REDACTED
Sat Sep 1 22:23:44 CEST 2007


Bob Ippolito wrote:
> On 9/1/07, Matthias Radestock <matthias@REDACTED> wrote:
>> encode_compact({B2, B3, B4, B5}) ->
>>      <<0:2, B5:1, B4:1, B3:1, B2:1, 0:2>>.
>> encode_verbose({B2, B3, B4, B5}) ->
>>      <<((B2 bsl 2) bor (B3 bsl 3) bor (B4 bsl 4) bor (B5 bsl 5)):8>>.
>> [...]
>> Unfortunately, my tests indicate that the latter version is about twice
>> as fast, using R11B-5 under Linux on x86.
> 
> I don't know enough about the compiler or interpreter to answer your
> question, but note that encode_verbose is not the same as
> encode_compact. Consider any of B2 through B5 being integers outside
> of 0 or 1. For a complete translation you'd need some extra (BN band
> 1) ops.

Well spotted. Adding that mask slows down encode_verbose somewhat, but 
it is still substantially faster than encode_compact.

Matthias.



More information about the erlang-questions mailing list