Инструкция VCVT на ARM M4-F для преобразования с плавающей запятой в фиксированную не распознана

Я пытаюсь использовать инструкцию по сборке vcvt.s32.f32 q8, q8, #0xf в ARM Cortex M4-F, используя IDE Arm Keil и версии компилятора v5 и v6.

К сожалению, эта инструкция не распознается компилятором. Когда я пишу код на C, компилятор вместо этой использует другие, более медленные ассемблерные инструкции; Если я напрямую пишу инструкцию по сборке, она не принимается компилятором, что приводит к ошибке компиляции.

Кто-нибудь знает что-нибудь об этом?

Эта инструкция присутствует в ARM M4-F ISA, но в настоящее время я не могу заставить ее работать!


person Et8    schedule 17.05.2021    source источник
comment
Он собирается с помощью ассемблера GNU с использованием arm-none-eabi-as -mfpu=neon -mcpu=cortex-m4 -mthumb foo.s, если это помогает. Вы уверены, что у M4-F NEON SIMD, а не только -mfpu=vfpv4?   -  person Peter Cordes    schedule 17.05.2021
comment
@PeterCordes нет.   -  person Tom V    schedule 17.05.2021
comment
язык ассемблера специфичен для инструмента, а в отношении языков ассемблера с плавающей запятой ассемблер gnu поддерживает как минимум два разных языка для одних и тех же машинных инструкций. Вы работали в обратном направлении и дизассемблировали машинный код (для вашей цепочки инструментов)? Как мы знаем о gnu, нет причин предполагать, что дизассемблированный язык ассемблера может быть собран ассемблером (конечно, с инструкциями arm без плавающей запятой), но это, по крайней мере, отправная точка.   -  person old_timer    schedule 18.05.2021
comment
Вы пробовали инструкцию сопроцессора, так как я считаю, что это просто инструкции сопроцессора ... (mrc, mcr)? И/или подтвердите, что они больше не являются инструкциями сопроцессора (даже если fpu является сопроцессором).   -  person old_timer    schedule 18.05.2021


Ответы (1)


Он собирается с помощью ассемблера GNU с использованием arm-none-eabi-as -mfpu=neon -mcpu=cortex-m4 -mthumb foo.s, если это помогает.

Но не с -mcpu=cortex-m4 -mfpu=vfpv4.

Википедия говорит, что необязательным FPU на M4 является VFPv4-SP (одинарная точность) , что, я думаю, также подразумевает, что это не полный NEON. Tom V также подтверждает в комментариях, что Cortex-M4-F не ​​поддерживает эту инструкцию NEON SIMD.

Кейл прав:
Cortex-M4-F не ​​поддерживает vcvt.s32.f32 для q или d регистров, только для s регистров.

Следующее собирается нормально с
arm-none-eabi-as -mfpu=vfpv4 -mcpu=cortex-m4 -mthumb:

   vcvt.s32.f32 s8, s8, #0xf
   vcvt.s32.f32 s9, s9, #0xf
   vcvt.s32.f32 s10, s10, #0xf
   vcvt.s32.f32 s11, s11, #0xf
person Peter Cordes    schedule 17.05.2021