Code generator for bit permutations

Back to main page



Please enter an index vector (0..31 or $0..$1f, or * for don't care):

LSB MSB first; origin 0 1; base 10 16 8 A..Z; indexes refer source target bits.



Options: Allow Beneš/BPC, bit group moving, pdep/pext using cycles

Routable by the inverse Butterfly network.

Best method found: Inverse Butterfly network (about 20 cycles on superscalar processors):

x = bit_permute_step(x, 0x00004444, 1); // Butterfly, stage 0 x = bit_permute_step(x, 0x00001212, 2); // Butterfly, stage 1 x = bit_permute_step(x, 0x0000030c, 4); // Butterfly, stage 2 x = bit_permute_step(x, 0x000000f0, 8); // Butterfly, stage 3

See documentation to bit_permute_step, bit_permute_step_simple, rol.

pext and pdep can be emulated with compress_right and expand_right.

This result is not necessarily the best possible, but at least several methods have been challenged. The given cycles are only estimated and may vary significantly depending on the used processor. Thus, the selected method might not be the best one for your application. You can however influence the choice by using the options above.

See also some notes on the inner workings.

There is an even better permutation code calculator calcperm.* which is usable for various word sizes (Pascal and C++ sources).

Error reports, comments or questions? E-mail: info@sirrida.de

Last change: 2015-11-10