2016-01-16 2 views
0

Я кодирую некоторую сборку для x86_64 и руки.сборка - x86_64 - предикаты

Я хотел бы знать, имеет ли x86_64 несколько способов определить предикаты ветвей.

Я искал в документации Intel, но не смог найти соответствующую информацию.

У нас есть cmov, но это довольно медленно и cmp jmp комбо стремится быть быстрее.

+1

Показанный код, скорее всего, поможет людям быстрее ответить на ваш вопрос. –

+0

Увы, x86_64 не имеет предикатов в том смысле, что ARM делает. –

+0

Какой позор! Благодаря! – Kroma

ответ

2

Предикаты ARM являются альтернативой к ветвям. IDK, что вы подразумеваете под «предикатами отрасли». Может быть, вы имеете в виду «предикатные условия»?

cmov часто стоит его по сравнению с веткой, которая пропускает только одну или две инструкции, если это вообще непредсказуемо. Broadwell и Skylake запускают cmov как единый uop, но предыдущие микроархитектуры нуждаются в 2 uops, поскольку имеют 3 входных зависимостей. Он также создает зависимость данных вместо зависимости от управления. Прогнозирование ветви, когда оно работает, может быть лучше. Кроме того, cmov не может принимать немедленный операнд, что во многих случаях разочаровывает.

Другая инструкция, которая может использовать условие в качестве входа, - setcc. Используйте xor reg,reg/установите флаги/setcc low-byte-of-reg, чтобы избежать неполных рэков при чтении полного регистра.

Для условий переноса sbb same,same будет производить 0 или -1 (полезно как маску И), или adc reg, 0 сделает reg += CF.

+0

Спасибо, Питер! Дайте ему шанс – Kroma

Смежные вопросы