Какой самый быстрый способ записать поток битов на x86 / x86-64? (кодовое слово <= 32 бит)
записывая поток битов, я имею в виду процесс объединения символов переменной длины в битах в непрерывный буфер памяти.
в настоящее время у меня есть стандартный контейнер с 32-битным промежуточным буфером для записи в
void write_bits(SomeContainer<unsigned int>& dst,unsigned int& buffer, unsigned int& bits_left_in_buffer,int codeword, short bits_to_write){
if(bits_to_write < bits_left_in_buffer){
buffer|= codeword << (32-bits_left_in_buffer);
bits_left_in_buffer -= bits_to_write;
}else{
unsigned int full_bits = bits_to_write - bits_left_in_buffer;
unsigned int towrite = buffer|(codeword<<(32-bits_left_in_buffer));
buffer= full_bits ? (codeword >> bits_left_in_buffer) : 0;
dst.push_back(towrite);
bits_left_in_buffer = 32-full_bits;
}
}
Кто-нибудь знает какие-нибудь хорошие оптимизации, быстрые инструкции или другая информация, которая может быть полезна?
Ура,