2016-08-17 4 views
0

Я хочу использовать команду SMLAWy для хранения младших 32 бит в регистр назначения. Однако в документации указано, что инструкция SMLAWy хранит верхние 32 бита 48-битного результата в регистр назначения. Как я могу это сделать?
Here is the link to the ARM documentationКак хранить младшие 32 бита в инструкции SMLAWy?

ответ

2

Там нет единой инструкции, которая делает то, что вы хотите, но опрятное решение, вероятно, будет сочетанием sxth и mla, т.е. извлечь соответствующий 16-битный операнд во временный регистр, так что вы можете сделать простые 32x32 умножают и накапливают нижние 32 бита.

+0

Это одно из возможных решений, но это увеличивает количество инструкций, необходимых для выполнения всей операции. Есть ли другой способ сделать это вместо использования инструкции «MLA»? –

+0

Поскольку нет инструкции, реализующей 32x16, умножить на упакованный операнд полуслова и скопировать _lower_ 32 бита, нет. Единственными операциями, возвращающими наименее значимую часть результата умножения, являются 'mul' и' mla', и они являются операциями 32x32. Однако, если в алгоритме есть что-то _else_, которое также требует распаковки 16-разрядных данных по другим причинам, возможно, стоит попробовать изменить порядок вещей, чтобы вы могли воспользоваться этим для размножения. – Notlikethat