Мне интересно найти самый быстрый способ (наименьшее количество циклов) сравнения значений, хранящихся в регистрах NEON (скажем, Q0 и Q3) на ядре Cortex-A9 (разрешены инструкции VFP).
Пока у меня есть следующее:
(1) Использование сравнения с плавающей запятой VFP:
vcmp.f64 d0, d6
vmrs APSR_nzcv, fpscr
vcmpeq.f64 d1, d7
vmrseq APSR_nzcv, fpscr
Если 64-битные "плавающие" значения эквивалентны NaN, эта версия не будет работать.
(2) Использование сужения NEON и сравнения VFP (на этот раз только один раз и безопасным для NaN способом):
vceq.i32 q15, q0, q3
vmovn.i32 d31, q15
vshl.s16 d31, d31, #8
vcmp.f64 d31, d29
vmrs APSR_nzcv, fpscr
В регистр D29 предварительно загружен правильный 16-битный шаблон:
vmov.i16 d29, #65280 ; 0xff00
Мой вопрос: есть ли что-нибудь лучше этого? Я наблюдаю какой-то очевидный способ сделать это?