Одна вещь, которая может помочь, состоит в том, чтобы предварительно вычислить число фронтов для всех возможных 8-битных значений (таблица поиска 512 записей, поскольку вы должны включить бит, предшествующий каждому значению), а затем суммировать 1 байт счетчика в время.
// prevBit is the last bit of the previous 32-bit word
// edgeLut is a 512 entry precomputed edge count table
// Some of the shifts and & are extraneous, but there for clarity
edgeCount =
edgeLut[(prevBit << 8) | (feedback_samples >> 24) & 0xFF] +
edgeLut[(feedback_samples >> 16) & 0x1FF] +
edgeLut[(feedback_samples >> 8) & 0x1FF] +
edgeLut[(feedback_samples >> 0) & 0x1FF];
prevBit = feedback_samples & 0x1;