преобразование числа с плавающей точкой в ​​целочисленное с использованием iPhone. - PullRequest
4 голосов
/ 16 июля 2009

В настоящее время я пытаюсь оптимизировать некоторый связанный с DSP код с помощью Shark и обнаружил, что трачу много времени на преобразование с плавающей точкой в ​​целое:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Поскольку iPhone, кажется, имеет сопроцессор ARM11 FP, мне интересно, смогу ли я заменить свой код инструкцией FTOSI. На веб-сайте ARM имеется некоторая документация , но у меня нет опыта по сборке оптимизированной для рук сборки. Кто-то делал это раньше?
Я думаю, что я мог бы встроить код с

__asm__ volatile

Но как мне проверить, доступна ли инструкция?
Как я могу передать свою стоимость в?

EDIT1: Как уже указывал Луи, я забыл упомянуть, что компилирую с выключенным «Compile for Thumb».

EDIT2: Поскольку я хочу преобразовать число с плавающей точкой в ​​Int16, а не в Int без знака, я изменил инструкцию ARM с FTOUI на FTOSI. Это была ошибка в оригинальном сообщении.

1 Ответ

3 голосов
/ 16 июля 2009

Это может быть очевидным вопросом, но вы уверены, что нацеливаетесь на ARM? По умолчанию iPhone SDK компилирует все приложения для THUMB, в которых используется все программное обеспечение с плавающей запятой (включая преобразование с плавающей запятой / int).

В любом случае, если устройство имеет VFP-сопроцессор, оно имеет инструкцию. Вы можете проверить, имеет ли он соответствующий сопроцессор, прочитав регистр FPSID и убедившись, что это поддерживаемая модель.

Я подозреваю, что можно предположить, что все iPhone поддерживают его. Помимо прочего, ассемблер Apple поддерживает этот код операции, а бэкэнд LLVM ARM использует его для преобразования типов, что означает, что когда Apple в конечном итоге поддерживает LLVM на телефоне, их компилятор будет генерировать инструкции FTOUI.

...