Нет такой кодировки как vmla.32 q1, q2, d0
;давайте предположим, что вы имели в виду q0
.
Простой, наивный ответ:
vqmovn.s32 d0, q1 // saturate and narrow 32 -> 16
vqmovn.s16 d0, q0 // saturate and narrow 16 -> 8
это делает насыщение со знаком;если у вас есть беззнаковые значения, используйте типы .u32
и .u16
, и если у вас есть подписанные значения, но вы хотите насытить их без знака, вы используете инструкцию vqmovun
.
На вопросвы не можете сделать какое-то сужение умножения, которое сильно зависит от конкретной операции (и задействованных значений);учитывая, что вы используете vmla
, ответ «вероятно, нет», однако.
Можете ли вы использовать операции насыщения в NEON и избегать расширения с самого начала, или вам нужен весь этот запас