См. 32-разрядную версию в Руководстве по оптимизации программного обеспечения AMD , стр. 195, где приведена одна реализация.
Это дает вам ассемблерный код для x86 напрямую.
См. Вариант в Стэнфордские хитрые хаки
Стэнфордская версия выглядит для меня как лучшая.
Это выглядит очень легко кодировать как x86 asm.
Ни одна из этих инструкций не используется.
Их можно обобщить до 64-битных версий.
В 32- или 64-разрядных версиях вы можете рассмотреть вариант SIMD.
SSE2 выполнит 4 двойных слова или два четырехсловных слова (в любом случае 128 бит)
однажды. Что вы хотите сделать, это реализовать поп-счет для 32
или 64 бита в каждом из 2 или 4 доступных регистров.
В итоге вы получите 2 или 4 набора поп-учетных записей в регистрах XMM.
когда вы сделали; последний шаг - сохранить и добавить эти
поп-счет вместе, чтобы получить окончательный ответ. Гадание,
Я ожидаю, что вы делаете это немного лучше, делая 4 параллельных 32
битовые поп-аккаунты вместо двух параллельных 64-битных поп-аккаунтов
поскольку последний, вероятно, примет 1 или 2 дополнительные инструкции
в каждой итерации, и легко добавить 4, 32-битные значения вместе
конец.