2013-07-23 3 views
1

Мне нужно загрузить немедленное значение 0.5f (= 0.8 в HEX) в регистре NEON (или в регистре ARM, чем я могу VMOV), используя сборку.Загрузите немедленную плавучую точку в регистре ARM

Я прочитал ARM документ: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204h/Bcfjicfj.html Какие ссылки на: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204h/CIHGGEEB.html

Где они говорят, что вы можете загрузить с плавающей точкой:

Любое число, которое может быть выражено в виде +/- п * 2 -r, где п и г целые числа, 16 < < = п = 31, 0 < = г < = 7.

Поскольку 0,8 находится вне диапазон, я ожидаю, что мне нужно, чтобы загрузить HEX 1.8 и вычитать 1.0, но следующие инструкции не OK для компилятора:

VMOV.F32 d10, #0x1.0 \n\t 
VMOV.F32 d10, #0x1.8 \n\t 

Однако, используя 0,5 десятичное значение делает трюк, даже если она должна быть из диапазон:

VMOV.F32 d10, #0.5 \n\t 

Использование значений HEX, как я могу выполнить ту же операцию?

Еще один вопрос: ожидается, что предыдущая команда VMOV.F32 загрузит значение в обеих 32-битных частях регистра d10 [0] и d10 [1] или нет?

+0

0,5 находится в выражаемом непосредственном значении. Что заставляет вас думать, что это не так? –

+0

В моем проекте я выражаю все сразу в HEX, для согласованности я хотел бы выразить 0.5 в HEX. –

+0

Похоже, ваш компилятор не поддерживает hex fp. Я не удивлен; Я не знаю многих, которые это делают. –

ответ

2

0.5 - это точно +16*(2^-5) (n = 16, r = 5, обратите внимание, что это не 2-r в руководстве, а 2 поднято до -r), поэтому это значение в порядке.

Другими словами, 0x0.8 должен работать тоже (хотя я не могу проверить, что сам ассемблер, синтаксис шестигранной поплавка изменяется)

Руководство также говорит;

imm является константой типа, указанного в типе данных. Это повторяется, чтобы заполнить регистр назначения.

который, как я прочитал, заполнил бы всю (обе части) регистра.

+0

0x0.8 вызывает ошибку компилятора «сборка мусора после инструкции ...». –

+0

@AlessandroGaietta [Эта страница] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204h/Babjhibj.html) утверждает, что единственным шестнадцатеричным форматом с плавающей запятой является необработанный формат , то есть не десятичной, а «битовой». Другими словами, '0x0.8' является недопустимым значением, поскольку поддерживаемые шестнадцатеричные форматы не имеют десятичных точек. –

 Смежные вопросы

  • Нет связанных вопросов^_^