Вероятность выбранных битов EFLAGS

Мы все знаем, что при изучении исходного кода это безопасное предположение, что флаг направления будет ясным. Вероятность флага направления очень низкая.

Я хотел узнать о вероятностях других флагов. Вот почему я написал тестовую программу, которая выполняет отдельные шаги моего существующего программного обеспечения, увеличивая счетчик для каждого из первых 12 бит EFLAGS.

Вероятность флагов процессора x86

Результаты подтверждают предположение о флаге направления (DF) и, что неудивительно, показывают, что вероятность переполнения флага (OF) очень низкая.

Но как насчет других флагов? Флаг переноса (CF), вспомогательный флаг (AF), флаг нуля (ZF) и флаг знака (SF), по-видимому, оседают на 25%, но флаг четности (PF) выпрыгивает более чем на 50%.

Я хотел бы знать, почему вероятности CF, AF, ZF и SF настолько низки.

Для PF мое объяснение из двух центов говорит мне, что, учитывая распределение четности четности и четности 50-50 во всех возможных 8-битных битпаттерах и понимая, что пара наиболее часто используемых чисел (0 и - 1) имеют четность даже, вероятность более 50% разумна.

4
28 янв. '18 в 22:03
источник поделиться
1 ответ

Тот факт, что некоторые биты EFLAGS изменяются, часто отражает только тот факт, что ранние инструкции Intel 8086 (и, кстати, все еще очень часто используемые) были разработаны для безоговорочного обновления флагов. Это дизайнерское решение не оправдывало себя хорошо, но это не повредило современным проектам x86, пока кто-то не использует значения флагов. Использование флага (как предиката условной ветки) создает зависимость в потоке кода и может потенциально повлиять на производительность.

Если есть две (три, четыре...) команды, которые, следовательно, обновляют один и тот же бит, но только последнее значение используется позже третьей инструкцией, тогда все предыдущие вычисления флага могут быть опущены. Альтернативно, пересчет EFLAGS может задерживаться до тех пор, пока что-то не запросит его фактическое значение.

Таким образом, более интересным является вопрос, как часто используются отдельные биты EFLAG. И есть исследования, которые отвечают на него.

Следующая картина взята у Яира Лифшица и др. "Zsim: быстрый архитектурный симулятор для исследования ISA Design-Space Exploration" 3.2.3 PDF:

EFLAGS use

Как вы можете видеть, никто не заботится о вспомогательном флаге, а флаги переноса и нуля влияют на многие решения в коде. Другие авторы пришли к аналогичным выводам, которые важны в контексте, например, так как они позволяют применять важную оптимизацию оценки ленивого флага в бинарных переводчиках и переводчиках.

2
23 февр. '18 в 1:28
источник

Посмотрите другие вопросы по меткам или Задайте вопрос