Предикаты 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
.
Показанный код, скорее всего, поможет людям быстрее ответить на ваш вопрос. –
Увы, x86_64 не имеет предикатов в том смысле, что ARM делает. –
Какой позор! Благодаря! – Kroma